AI Engineering Academy · Aula

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.

Aula 3 de 413 etapas

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_search

Consulta 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.

Grátis para começar

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

  1. A estrutura ReAct: pensar, agir, observar
  2. Definindo ferramentas para seu Agent
  3. Criando um Agent ReAct com LangChain
  4. Como lidar com falhas e loops de agentes
← Voltar para AI Engineering Academy