Lucas S. Vieira


Estrutura de um Agente


Construindo o primeiro agente


Guilda de IA

đź“° Fofocas da Semana

  • llama.app (29/05) — site oficial do llama.cpp! [llama.app](https://llama.app)
  • GPT-5.5 Instant update (28/05) — respostas mais naturais e concisas, canvas removido (writing/code blocks no chat agora)
  • Step 3.7 Flash (29/05) — 198B MoE, ~11B ativos, multimodal, #1 ClawEval, Apache 2.0 ⬆️
  • Claude Opus 4.8 (28/05) — 4Ă— menos falhas de cĂłdigo, Effort Control, Dynamic Workflows, mesmo preço do 4.7
  • LFM 2.5 8B-A1B (28/05) — MoE 1.5B ativos de 8.3B, 131K ctx, raciocĂ­nio explĂ­cito, tool use, roda em smartphone
  • Bonsai Image 4B (26/05) — Imagem 1-bit e ternária! 0.93GB, roda em iPhone, Apache 2.0 ↑
  • Qwen 3.7 Max (20/05) — 1M tokens, Intelligence Index 56.6, reasoning mode, API-only (open weights em breve!)
  • MiniCPM5-1B (19/05) — 1B SOTA local, 131K ctx, raciocĂ­nio thinking, agentic tool use

🎨 Bonsai Image 4B — Imagem em 1-bit

Primeiro modelo de imagem que roda em iPhone. Pesos binários (1-bit) e ternários (1.6-bit). Compressão de 8.3× — de 15.97GB pra 3.42GB. Qualidade ternária retém 95% do FLUX.2 Klein 4B. Apache 2.0, open weights.

Imagens geradas com Bonsai Image 4B ternário (0.93GB)!

O que Ă© um agente?

Agente = LLM + harness (estrutura para conversar)

O LLM puro sĂł responde uma pergunta. Um agente:

  • Lembra da conversa (memĂłria)
  • Tem personalidade (instruções)
  • Pode usar ferramentas (extensões — S06!)

4 Componentes do Agente

  1. System Prompt — quem o agente é
  2. Memória (Histórico) — o que já foi dito
  3. Input — a pergunta atual
  4. Output — a resposta do modelo

Agente na Mão: Dicts e Funções

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 LLM, salva no histĂłrico, retorna resposta

Por que estado separado?

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

O problema do histĂłrico infinito

Se a conversa crescer demais, o prompt fica gigante.

Solução: limitar histórico.

# Pegar sĂł as Ăşltimas N mensagens
for msg in agente["historico"][-agente["max_historico"]:]:
    ...

E compactação?

  • Truncar funciona, mas joga fora informação
  • Na prática: compactação — LLM resume o histĂłrico antes de enviar
  • Ajuda com lost in the middle: LLMs nĂŁo recuperam bem info no meio do contexto (Liu et al., 2023)
  • Compactação precisa de ferramentas — fica pra outro dia

ReAct: Pensar e Agir

Agentes reais pensam e agem em ciclos (Yao et al., 2022)

Input → Thought → Action → Observation → Thought → Answer

Exemplo: "Quanto Ă© 234 Ă— 987 + 100?"

  • Thought: Preciso multiplicar
  • Action: calculadora[234 Ă— 987]
  • Observation: 230958
  • Thought: Agora somo 100
  • Answer: 231058

Hoje: memória + instruções. Na S06: ferramentas!

Diagrama do Ciclo

  1. Usuário envia mensagem
  2. Agente monta prompt com histĂłrico
  3. LLM processa
  4. Resposta salva no histĂłrico
  5. Retorna ao usuário

De Requests para LangChain

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)
[-N:] manual Configurável
cadeia = prompt | llm  # pipe = encadeia
resultado = cadeia.invoke({"pergunta": "Oi!"})

Para lembrar

"Agente Ă© LLM com memĂłria e personalidade. ReAct completa o ciclo: pensar e agir."

đź”´ Demo: Agente no Colab

  1. Abrir luksamuk.codes/pages/guilda-ia → Semana 05
  2. Clicar em "Colab" → fazer uma cópia no Drive
  3. Testar: criar agente, conversar, verificar memĂłria
  • Vamos dar uma ferramenta para o agente
  • O ciclo ReAct se completa: Thought → Action → Observation