0
respostas

09 Faça como eu fiz: Agente React

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)