1️ Instalação de Pacotes
pip install langgraph langchain google-generativeai python-dotenv
2️ Importações Essenciais
import os
import re
from typing import TypedDict, List
from dotenv import load_dotenv
import google.generativeai as genai
3️ Configuração da API Key
Arquivo .env:
GOOGLE_API_KEY=sua_chave_aqui
Código:
load_dotenv()
api_key = os.getenv("GOOGLE_API_KEY")
genai.configure(api_key=api_key)
model = genai.GenerativeModel("gemini-pro")
4️ Teste Olá Mundo
response = model.generate_content("Diga Hello World")
print(response.text)
Se funcionar → API conectada
5️ Base de Dados Simulada
estoque = {
"notebook": 10,
"mouse": 50,
"teclado": 30,
"monitor": 15
}
precos = {
"notebook": 3500.00,
"mouse": 80.00,
"teclado": 150.00,
"monitor": 1200.00
}
6️ Ferramentas
Consultar Estoque
def consultar_estoque(produto: str):
produto = produto.lower()
if produto in estoque:
return f"Há {estoque[produto]} unidades de {produto}."
return "Produto não encontrado."
Consultar Preço
def consultar_preco(produto: str):
produto = produto.lower()
if produto in precos:
return f"O preço do {produto} é R$ {precos[produto]:.2f}."
return "Produto não encontrado."
Produto Mais Caro
def produto_mais_caro():
produto = max(precos, key=precos.get)
return f"O produto mais caro é {produto} com valor R$ {precos[produto]:.2f}."
Calcular Total de Lista
def calcular_total(lista: List[str]):
total = 0
for item in lista:
item = item.lower()
if item in precos:
total += precos[item]
return f"O valor total é R$ {total:.2f}."
7️ Reação Imediata
PROMPT_TEMPLATE = """
Você é um assistente de inventário.
Responda sempre no formato:
Pensamento: descreva seu raciocínio
Ação: nome_da_ferramenta[parametro]
Pausa
Observação: resultado da ferramenta
Resposta Final: resposta ao usuário
Ferramentas disponíveis:
- consultar_estoque[produto]
- consultar_preco[produto]
- produto_mais_caro[]
- calcular_total[produto1, produto2]
Pergunta: {pergunta}
Histórico: {historico}
"""
8️ Classe do Agente
class Agent:
def init(self):
self.historico = []
def call_llm(self, prompt):
response = model.generate_content(prompt)
return response.text
def executar_ferramenta(self, acao):
match = re.search(r"(\w+)\[(.*?)\]", acao)
if not match:
return "Ação inválida."
nome = match.group(1)
parametros = match.group(2)
if nome == "consultar_estoque":
return consultar_estoque(parametros)
elif nome == "consultar_preco":
return consultar_preco(parametros)
elif nome == "produto_mais_caro":
return produto_mais_caro()
elif nome == "calcular_total":
lista = [x.strip() for x in parametros.split(",")]
return calcular_total(lista)
return "Ferramenta desconhecida."
9️ ExecutarAgenteReact
def RunReactAgent(pergunta):
agent = Agent()
for _ in range(5): # limite de iteração
prompt = PROMPT_TEMPLATE.format(
pergunta=pergunta,
historico="\n".join(agent.historico)
)
resposta = agent.call_llm(prompt)
print(resposta)
agent.historico.append(resposta)
if "Resposta Final:" in resposta:
return resposta
match = re.search(r"Ação:\s*(.*)", resposta)
if match:
acao = match.group(1)
resultado = agent.executar_ferramenta(acao)
observacao = f"Observação: {resultado}"
agent.historico.append(observacao)
else:
break
10 Loop Interativo
while True:
pergunta = input("Pergunta: ")
if pergunta.lower() == "sair":
break
resposta = RunReactAgent(pergunta)
print("\n--- Resultado Final ---")
print(resposta)