Criando um Agent ReAct com LangChain
Monte um Agent ReAct completo usando o AgentExecutor do LangChain com uma ferramenta de busca na web, uma ferramenta de cálculo e uma ferramenta de consulta a documentos e, em seguida, acompanhe suas etapas de raciocínio.
Criando um Agent ReAct com LangChain é uma aula grátis de AI Engineering Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Engineering Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Engineering Academy inclui 4 aulas no total.
Ecossistema de agentes do LangChain
O LangChain oferece uma pilha completa para criar agentes: as ferramentas definem o que o agente pode fazer, as instruções fornecem orientações e um formato de raciocínio, o LLM realiza o processamento e o AgentExecutor executa o ciclo que encaminha chamadas de ferramentas e devolve as observações ao agente. Você configura cada parte separadamente, podendo substituir componentes sem reescrever tudo.
Montando um agente ReAct
A maneira mais rápida de criar um agente ReAct no LangChain é usar create_react_agent. Você fornece um LLM, uma lista de ferramentas e um modelo de instrução. Ele retorna um objeto executável que gera automaticamente as etapas de Pensamento/Ação/Observação. Envolva-o em um AgentExecutor para gerenciar o ciclo.
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
# 1. Define tools
@tool
def search(query: str) -> str:
'''Search the web for current information. Input: a search query string.'''
return f'Search results for "{query}": [mock result]'
@tool
def calculator(expression: str) -> str:
'''Evaluate a math expression. Input: a valid Python math expression.'''
try:
return str(eval(expression))
except Exception as e:
return str(e)
tools = [search, calculator]
# 2. Load a ReAct prompt template
prompt = hub.pull('hwchase17/react')
# 3. Create the agent
llm = ChatOpenAI(model='gpt-4o', temperature=0)
agent = create_react_agent(llm, tools, prompt)Executando com AgentExecutor
O AgentExecutor gerencia o ciclo de Pensamento/Ação/Observação. Durante o desenvolvimento, passe verbose=True para imprimir cada etapa no console — esse rastreamento é extremamente útil para depuração. O parâmetro max_iterations funciona como uma proteção contra ciclos infinitos.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # Print each step
max_iterations=10, # Safety limit
handle_parsing_errors=True # Don't crash on format errors
)
# Invoke with a user question
result = agent_executor.invoke({
'input': 'What is the square root of 144 multiplied by the number of days in a leap year?'
})
print('Final answer:', result['output'])Lendo o rastreamento detalhado
O rastreamento detalhado mostra exatamente como o agente raciocina. A cada iteração, são impressos o Pensamento do modelo, a Ação escolhida e a Observação retornada pela ferramenta. Assim, você identifica exatamente onde o agente errou — se escolheu a ferramenta errada, passou o argumento incorreto ou interpretou mal a observação.
# Example verbose output from AgentExecutor:
#
# > Entering new AgentExecutor chain...
# Thought: I need to find the square root of 144 first, then multiply by days in a leap year.
# Action: calculator
# Action Input: 144 ** 0.5
# Observation: 12.0
# Thought: 12.0 times 366 days in a leap year.
# Action: calculator
# Action Input: 12.0 * 366
# Observation: 4392.0
# Thought: I have the final answer.
# Final Answer: 4392.0
# > Finished chain.Usando ferramentas integradas do LangChain
O LangChain inclui muitas ferramentas prontas para tarefas comuns. Você pode adicionar uma ferramenta de pesquisa na web a partir de langchain_community.tools sem escrever código. Essas ferramentas cuidam da autenticação na API e da análise das respostas para você.
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
# Web search tool
search_tool = DuckDuckGoSearchRun()
# Wikipedia lookup tool
wiki_tool = WikipediaQueryRun(
api_wrapper=WikipediaAPIWrapper(top_k_results=2)
)
# Add to your agent
tools_with_search = [search_tool, wiki_tool, calculator]
agent_executor.tools = tools_with_searchConsulta de documentos como ferramenta RAG
Um dos padrões mais poderosos é disponibilizar seu pipeline RAG como uma ferramenta do agente. O agente decide quando recuperar informações da sua base de conhecimento, quando usar outras ferramentas ou quando confiar no próprio treinamento. Isso torna seu sistema RAG dinâmico — o agente só o chama quando é relevante.
from langchain_core.tools import tool
@tool
def lookup_knowledge_base(query: str) -> str:
'''Search the company knowledge base for internal policies, procedures, and documentation.
Use when the user asks about company-specific information not available publicly.
Input: a natural language question or keyword query.
'''
# Your RAG pipeline here
retrieved_chunks = vector_store.similarity_search(query, k=3)
context = '\n'.join([doc.page_content for doc in retrieved_chunks])
return context if context else 'No relevant documents found.'Transmitindo a saída do agente
Para oferecer uma experiência melhor ao usuário, transmita a resposta final do agente token por token, em vez de esperar pela resposta completa. Use agent_executor.astream_events para receber os eventos à medida que ocorrem, incluindo as etapas intermediárias e o fluxo da saída final.
import asyncio
async def stream_agent(user_input: str):
async for event in agent_executor.astream_events(
{'input': user_input},
version='v1'
):
kind = event['event']
if kind == 'on_chat_model_stream':
chunk = event['data']['chunk']
if chunk.content:
print(chunk.content, end='', flush=True)
elif kind == 'on_tool_start':
print(f'\n[Calling tool: {event["name"]}]')
elif kind == 'on_tool_end':
print(f'[Tool result: {str(event["data"]["output"])[:100]}]')
asyncio.run(stream_agent('What is the latest news about AI?'))Passando memória ao agente
Combine o raciocínio do agente com a memória da conversa para que ele se lembre das interações anteriores. Use RunnableWithMessageHistory para envolver o executor do agente e fornecer um armazenamento do histórico do chat. Assim, o agente terá tanto a memória das interações passadas quanto a capacidade de chamar ferramentas.
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
session_store = {}
def get_session_history(session_id: str):
if session_id not in session_store:
session_store[session_id] = ChatMessageHistory()
return session_store[session_id]
agent_with_memory = RunnableWithMessageHistory(
agent_executor,
get_session_history,
input_messages_key='input',
history_messages_key='chat_history'
)Personalizando a instrução ReAct
A instrução padrão do hub funciona bem, mas muitas vezes você precisará de uma instrução de sistema personalizada para seu domínio específico. Uma instrução personalizada permite adicionar orientações sobre a personalidade, regras de formatação da saída e instruções específicas do domínio antes das descrições das ferramentas. Use ChatPromptTemplate com os marcadores de posição ReAct necessários.
from langchain_core.prompts import ChatPromptTemplate
custom_prompt = ChatPromptTemplate.from_messages([
('system', '''You are a helpful customer support agent for TechCorp.
Always be polite and professional. When you do not know something, use your tools.
You have access to these tools:
{tools}
Tool names: {tool_names}
Use this format:
Thought: ...
Action: tool_name
Action Input: input_value
Observation: result
Final Answer: your response to the customer
'''),
('human', '{input}'),
('assistant', '{agent_scratchpad}')
])
agent = create_react_agent(llm, tools, custom_prompt)Observando as etapas de raciocínio do agente
O AgentExecutor retorna as etapas intermediárias junto com a saída final quando você define return_intermediate_steps=True. Cada etapa é uma tupla composta pela ação do agente e pela observação da ferramenta. Isso é útil para criar interfaces que mostram aos usuários o processo de raciocínio do agente.
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
return_intermediate_steps=True
)
result = agent_executor.invoke({'input': 'What is 2 to the power of 10?'})
print('Final answer:', result['output'])
print('Reasoning steps:')
for step in result['intermediate_steps']:
action, observation = step
print(f' Tool: {action.tool}, Input: {action.tool_input}')
print(f' Observation: {observation}')Testando seu agente detalhadamente
Teste seu agente com um conjunto de perguntas representativas que abranja: tarefas com uma única ferramenta, tarefas com várias etapas que exigem diversas chamadas de ferramentas, tarefas nas quais nenhuma ferramenta é necessária (o modelo responde com base nos dados de treinamento) e entradas adversariais, como perguntas criadas para confundir a seleção de ferramentas. Acompanhe as taxas de aprovação e os padrões de falha para melhorar as descrições das ferramentas e a instrução.
Verificação rápida
Teste sua compreensão sobre a criação de um agente ReAct com LangChain.
Recapitulação da lição
Nesta lição, você aprendeu que: create_react_agent reúne um LLM, ferramentas e uma instrução em um agente ReAct, AgentExecutor gerencia o ciclo de Pensamento/Ação/Observação com limites de segurança configuráveis e verbose=True e return_intermediate_steps=True oferecem visibilidade completa do raciocínio do agente. Em seguida, aprenderemos a lidar com falhas do agente e evitar ciclos infinitos.
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Criando um Agent ReAct com LangChain” é grátis?
Sim — o texto completo de “Criando um Agent ReAct com LangChain” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Engineering Academy, atualize para CoddyKit PRO. O curso de AI Engineering Academy inclui 4 aulas no total.
O que vou aprender em “Criando um Agent ReAct com LangChain”?
Monte um Agent ReAct completo usando o AgentExecutor do LangChain com uma ferramenta de busca na web, uma ferramenta de cálculo e uma ferramenta de consulta a documentos e, em seguida, acompanhe suas… Você pratica AI Engineering Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AI Engineering Academy?
Nenhuma experiência prévia é necessária. AI Engineering Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Criando um Agent ReAct com LangChain”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AI Engineering Academy?
Sim. Cada aula de AI Engineering Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A estrutura ReAct: pensar, agir, observar
- Definindo ferramentas para seu Agent
- Criando um Agent ReAct com LangChain
- Como lidar com falhas e loops de agentes