# 1 - Instale os pacotes necessários e importe módulos essenciais (OS, RE, Google, Langgraph, Typing).
%pip install -U google-generativeai
%pip install google-ai-generativelanguage==0.6.15
%pip install -U langchain-google-genai
%pip install -U langchain-community
%pip install -U langgraph
# 2 - Configure as API Keys utilizando arquivo .env (ou Secrets no Colab) e teste o acesso com um exemplo "Hello World".
# arquivo .env
GOOGLE_API_KEY = "meu código"
GEMINI_API_KEY = "meu código"
import os
from dotenv import load_dotenv
import google.generativeai as genai
load_dotenv()
os.environ['GOOGLE_API_KEY'] = os.getenv('GEMINI_API_KEY')
genai.configure(api_key=os.getenv('GOOGLE_API_KEY'))
model = genai.GenerativeModel('gemini-2.5-flash')
response = model.generate_content("Hello world")
# 3 - Desenvolva a classe do agente, definindo atributos de sistema, histórico e as funções call e executar.
client = genai.GenerativeModel('gemini-2.5-flash')
class Agent:
def __init__(self, system=""):
self.system = system
self.messages = []
if self.system:
self.messages.append({"role": "system", "content": system})
def __call__(self, message):
self.messages.append({"role": "user", "content": message})
result = self.execute()
self.messages.append({"role": "assistant", "content": result})
return result
def execute(self):
# Constrói o prompt com todo o histórico de mensagens
prompt = ""
for msg in self.messages:
prompt += f"{msg['role']}: {msg['content']}\n"
# Envia para o Gemini
response = client.generate_content(prompt)
return response.text
if __name__ == "__main__":
agent = Agent(system="Você é um assistente útil e objetivo.")
print(agent("Qual é a capital da Alemanha?"))
# 4 - Elabore um prompt baseado no ciclo: pensamento, ação, pausa e observação.
PROMPT_REACT = """
Você funciona em um ciclo de Pensamento, Ação, Pausa e Observação.
Ao final do ciclo, você fornece uma Resposta.
Use "Pensamento" para descrever seu raciocínio.
Use "Ação" para executar ferramentas - e então retorne "PAUSA".
A "Observação" será o resultado da ação executada.
Ações disponíveis:
- consultar_estoque: retorna a quantidade disponível de um item no inventário (ex: "consultar_estoque: parafuso")
- consultar_preco_produto: retorna o preço unitário de um produto (ex: "consultar_preco_produto: martelo")
Exemplo:
Pergunta: Quantos parafuso temos em estoque?
Pensamento: Devo consultar a ação consultar_estoque para saber a quantidade de parafuso.
Ação: consultar_estoque: parafuso
PAUSA
Observação: Temos 75 parafusos em estoque.
Resposta: Há 75 parafusos em estoque.
""".strip()
# 5 - Implemente as ferramentas para consulta de estoque e preço, com tratamento para itens inexistentes.
def consultar_estoque(item: str) -> str:
"""
Simula a consulta de estoque de um item no inventário.
"""
item = item.lower()
estoque = {
"parafuso": 1000,
"prego": 3000,
"martelo": 80,
"alicate": 40,
"serrote": 60,
"cano": 200
}
if item in estoque:
return f"Temos {estoque[item]} {item}s em estoque."
else:
return f"Item '{item}' não encontrado no inventário."
def consultar_preco_produto(produto: str) -> str:
"""
Simula a consulta do preço unitário de um produto.
"""
produto = produto.lower()
precos = {
"parafuso": 1.00,
"prego": 0.50,
"martelo": 150.00,
"alicate": 120.00,
"serrote": 180.00,
"cano": 25.00
}
if produto in precos:
return f"O preço de um(a) {produto} é R$ {precos[produto]:.2f}."
else:
return f"Produto '{produto}' não encontrado na lista de preços."