05-02-01 — ReAct: raciocinar e agir em loop

⏱ 12 minFontes validadas em: 2026-04-29

TL;DR

ReAct (Reasoning + Acting) é o padrão fundamental de agente: o LLM alterna entre pensar (Thought), agir (Action) e observar o resultado (Observation) até resolver a tarefa. É a base de praticamente todos os frameworks de agentes modernos.

Origem: o paper de Yao et al. (2022)

ReAct foi proposto no paper "ReAct: Synergizing Reasoning and Acting in Language Models" (Yao et al., NeurIPS 2022 Workshop). A ideia central: combinar chain-of-thought (raciocínio interno) com ações externas num loop interativo.

Antes do ReAct, os LLMs raciocinavam (chain-of-thought) OU agiam (tool use), mas não os dois de forma integrada e iterativa.

O breakthrough: ReAct mostrou que dar ao LLM espaço para "pensar em voz alta" antes de cada ação melhora drasticamente a qualidade das decisões e reduz erros em tarefas complexas.

O loop Thought → Action → Observation

sequenceDiagram participant U as Usuário participant L as LLM participant T as Tool/Ambiente U->>L: "Qual o CEO da Vale e sua formação?" Note over L: Thought: Preciso buscar quem é o CEO da Vale L->>T: Action: search("CEO Vale 2024") T->>L: Observation: "Gustavo Pimenta, CEO desde jan/2025..." Note over L: Thought: Tenho o nome. Agora preciso da formação acadêmica L->>T: Action: search("Gustavo Pimenta formação acadêmica") T->>L: Observation: "Engenharia pela USP, MBA pela Wharton..." Note over L: Thought: Tenho tudo. Posso responder. L->>U: Final Answer: "Gustavo Pimenta é o CEO da Vale desde jan/2025. Formado em Engenharia pela USP com MBA pela Wharton."

Como o prompt ReAct é estruturado

O prompt instrui o LLM a sempre seguir o formato:

Thought: [raciocínio sobre o que fazer a seguir]
Action: [nome_da_ferramenta]
Action Input: [argumentos para a ferramenta]
Observation: [resultado retornado pela ferramenta]
... (repete até ter resposta final)
Final Answer: [resposta para o usuário]

Exemplo em Python (com LangChain)

from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain.tools import DuckDuckGoSearchRun
from langchain import hub

# Carrega o prompt ReAct padrão do LangChain Hub
prompt = hub.pull("hwchase17/react")

# Define as ferramentas disponíveis
tools = [DuckDuckGoSearchRun()]

# Cria o agente ReAct
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools, prompt)

# Executor com limite de iterações
executor = AgentExecutor(
    agent=agent,
    tools=tools,
    max_iterations=5,  # Guardrail: máximo de steps
    verbose=True       # Mostra Thought/Action/Observation
)

result = executor.invoke({
    "input": "Qual o CEO da Vale e sua formação acadêmica?"
})
print(result["output"])

Vantagens e limitações

VantagemLimitação
Raciocínio transparente e auditávelMais tokens por step (custo maior)
Adapta-se ao resultado das açõesPode entrar em loops infinitos
Reduz alucinações vs. resposta diretaLatência maior (múltiplos round-trips)
Fácil de debugar (logs de Thought)Qualidade depende muito do modelo base
Loop infinito: Sempre defina max_iterations ou equivalente. Sem limite, um agente ReAct com uma ferramenta que retorna resultados ambíguos pode loopear indefinidamente — e cada iteração consome tokens.
No Semantic Kernel: O padrão ReAct é implementado pelo FunctionChoiceBehavior e o planner do SK. O Azure AI Foundry usa ReAct internamente nos agentes do Azure AI Agent Service. O ChatCompletionAgent do SK implementa o loop de forma nativa.

Como isso se conecta

  • 05-02-02 — Plan-and-Execute e Reflection: evoluções do ReAct para tarefas mais complexas.
  • 05-02-03 — Tool calling: como o "Action" do ReAct é implementado tecnicamente.
  • 05-04-02 — Como controlar loops ReAct em produção sem estourar o budget.

Fontes

  1. Yao et al. — "ReAct: Synergizing Reasoning and Acting in Language Models" (2022) — paper original do ReAct.
  2. LangChain — ReAct Agent docs — implementação de referência em Python.
  3. Microsoft — Semantic Kernel Agent Chat — implementação do loop de agente no SK.
  4. LangChain Blog — ReAct Agent (2023) — tutorial prático com exemplos.