Lucas S. Vieira
Construindo o primeiro agente
Guilda de IA
/v1/chat/completions"Python é a ferramenta. O LLM é o cérebro. A API é a ponte."
Agente = LLM + harness (estrutura para conversar)
O LLM puro só responde uma pergunta. Um agente:
def criar_agente(instrucoes, max_historico=20):
return {
"instrucoes": instrucoes,
"historico": [],
"max_historico": max_historico
}
def conversar(agente, mensagem):
messages = [{"role": "system",
"content": agente["instrucoes"]}]
for msg in agente["historico"][-agente["max_historico"]:]:
messages.append(msg)
messages.append({"role": "user",
"content": mensagem})
# ... chama o LLM, salva no histórico, retorna resposta
Estado em dicionário = mais simples para iniciantes.
Funções puras são mais fáceis de testar e entender.
agente = criar_agente("Você é educado.")
conversar(agente, "Oi!") # histórico atualiza
conversar(agente, "Lembra de mim?") # tem contexto
Se a conversa crescer demais, o prompt fica gigante.
Solução: esquecer de verdade — rotação.
def rotacionar(agente):
# Esquece o mais antigo quando passa do limite
limite = agente["max_historico"]
if len(agente["historico"]) > limite:
agente["historico"][:] = agente["historico"][-limite:]
Agentes reais pensam e agem em ciclos (Yao et al., 2022)
Input → Thought → Action → Observation → Thought → Answer
Exemplo: "Quanto é 234 × 987 + 100?"
Hoje: memória + instruções. Próxima aula: ferramentas!
Montar mensagens na mão funciona, mas é repetitivo.
Com requests |
Com LangChain |
|---|---|
| Montar dict manual | ChatPromptTemplate |
| Gerenciar histórico manual | InMemoryChatMessageHistory |
| Chamar API e parsear | ChatOpenAI (endpoint OpenAI-compatible) |
| Rotação do histórico | Manual aqui também |
cadeia = prompt | llm # pipe = encadeia
resultado = cadeia.invoke({"pergunta": "Oi!"})
"Agente é LLM com memória e personalidade. ReAct completa o ciclo: pensar e agir."
luksamuk.codes/pages/guilda-ia → Semana 06
- Vamos dar uma ferramenta para o agente
- O ciclo ReAct se completa: Thought → Action → Observation