0Pricing
AI Engineering Academy · Lección

Creación de un agente ReAct con LangChain

Montará un agente ReAct completo mediante AgentExecutor de LangChain, con una herramienta de búsqueda web, una calculadora y una herramienta de consulta de documentos, y después seguirá sus pasos de razonamiento.

Creación de un agente ReAct con LangChain es una lección gratuita de AI Engineering Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Engineering Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Engineering Academy incluye 4 lecciones en total.

El ecosistema de agentes de LangChain

LangChain proporciona una pila completa para crear agentes: las herramientas definen lo que el agente puede hacer, los prompts le proporcionan instrucciones y un formato de razonamiento, el LLM se encarga de pensar y AgentExecutor ejecuta el ciclo que envía las llamadas a herramientas y devuelve las observaciones. Puede configurar cada pieza por separado para intercambiar componentes sin tener que reescribirlo todo.

Ensamblaje de un agente ReAct

La forma más rápida de crear un agente ReAct en LangChain es usar create_react_agent. Debe pasarle un LLM, una lista de herramientas y una plantilla de prompt. Devuelve un objeto ejecutable que genera automáticamente los pasos Thought/Action/Observation. Envuélvalo en un AgentExecutor para gestionar el 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)

Ejecución con AgentExecutor

AgentExecutor gestiona el ciclo Thought/Action/Observation. Durante el desarrollo, pase verbose=True para imprimir cada paso en la consola; este registro es muy valioso para depurar. El parámetro max_iterations actúa como mecanismo de seguridad contra los 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'])

Lectura del registro detallado

El registro detallado muestra exactamente cómo razona el agente. En cada iteración se imprimen el Thought del modelo, la Action que eligió y la Observation de la herramienta. Esto le permite detectar exactamente dónde se equivoca el agente: si eligió la herramienta incorrecta, pasó un argumento incorrecto o interpretó mal la observación.

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

Uso de herramientas integradas de LangChain

LangChain incluye muchas herramientas listas para usar en tareas habituales. Puede añadir una herramienta de búsqueda web desde langchain_community.tools sin escribir código. Estas herramientas gestionan por usted la autenticación de la API y el análisis de las respuestas.

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 herramienta RAG

Uno de los patrones más potentes consiste en exponer su canalización RAG como una herramienta del agente. El agente decide cuándo recuperar información de su base de conocimientos, cuándo usar otras herramientas o cuándo basarse en su entrenamiento. Esto hace que su sistema RAG sea dinámico: el agente solo lo invoca cuando resulta 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.'

Transmisión de la salida del agente

Para ofrecer una mejor experiencia de usuario, transmita la respuesta final del agente token a token en lugar de esperar a que termine la respuesta completa. Use agent_executor.astream_events para recibir los eventos a medida que se producen, incluidos los pasos intermedios y el flujo de salida 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?'))

փոխանցar memoria al agente

Combine el razonamiento del agente con la memoria de la conversación para que el agente recuerde las interacciones anteriores. Use RunnableWithMessageHistory para envolver el ejecutor del agente y proporcionar un almacén del historial del chat. Así, el agente dispone tanto de memoria de los turnos anteriores como de la capacidad de invocar herramientas.

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'
)

Personalización del prompt ReAct

El prompt predeterminado del hub funciona bien, pero a menudo necesitará un prompt de sistema personalizado para su dominio específico. Un prompt personalizado le permite añadir instrucciones de personalidad, reglas de formato de salida y directrices específicas del dominio antes de las descripciones de las herramientas. Use ChatPromptTemplate con los marcadores de posición ReAct necesarios.

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)

Observación de los pasos de razonamiento del agente

AgentExecutor devuelve los pasos intermedios junto con la salida final cuando establece return_intermediate_steps=True. Cada paso es una tupla formada por la acción del agente y la observación de la herramienta. Esto resulta útil para crear interfaces que muestren a los usuarios el proceso de razonamiento del 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}')

Pruebas exhaustivas del agente

Pruebe el agente con un conjunto de preguntas representativas que incluya: tareas con una sola herramienta, tareas de varios saltos que requieran varias llamadas a herramientas, tareas en las que no se necesite ninguna herramienta (el modelo responde a partir de los datos de entrenamiento) y entradas adversarias, como preguntas diseñadas para confundir la selección de herramientas. Registre las tasas de éxito y los patrones de error para mejorar las descripciones de las herramientas y el prompt.

Comprobación rápida

Compruebe su comprensión de la creación de un agente ReAct con LangChain.

Recapitulación de la lección

En esta lección aprendió que: create_react_agent ensambla un LLM, herramientas y un prompt en un agente ReAct, AgentExecutor gestiona el ciclo Thought/Action/Observation con límites de seguridad configurables y verbose=True y return_intermediate_steps=True proporcionan visibilidad completa del razonamiento del agente. A continuación aprenderemos a gestionar los fallos del agente y a evitar los ciclos infinitos.

Preguntas frecuentes

¿La lección «Creación de un agente ReAct con LangChain» es gratis?

Sí — el texto completo de «Creación de un agente ReAct con LangChain» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Engineering Academy, actualiza a CoddyKit PRO. El curso de AI Engineering Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Creación de un agente ReAct con LangChain»?

Montará un agente ReAct completo mediante AgentExecutor de LangChain, con una herramienta de búsqueda web, una calculadora y una herramienta de consulta de documentos, y después seguirá sus pasos de… Practicas AI Engineering Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Engineering Academy?

No se requiere experiencia previa. AI Engineering Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Creación de un agente ReAct con LangChain»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Engineering Academy?

Sí. Cada lección de AI Engineering Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El framework ReAct: pensar, actuar y observar
  2. Definición de herramientas para su agente
  3. Creación de un agente ReAct con LangChain
  4. Gestión de fallos y bucles de los agentes
← Volver a AI Engineering Academy