0Pricing
AI Agents · Lección

Implementar ReAct desde cero

Escriba una implementación de Python de 100 líneas sin LangChain: analice las líneas Action, ejecute las herramientas y repita hasta Final Answer.

Implementar ReAct desde cero es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 2 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 Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Construya el ciclo usted mismo

Puede escribir ReAct en unas 100 líneas de Python, sin necesidad de ningún framework. Hacerlo una vez le permite comprender mejor qué partes abstraen los frameworks.

Step 1: Define Tools

import json, math

def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {'__builtins__': {}}, vars(math)))
    except Exception as e:
        return f'Error: {e}'

def search_wikipedia(query: str) -> str:
    # placeholder — call a real search API
    return f'Wikipedia summary for: {query}'

TOOLS = {
    'calculator': calculator,
    'search_wikipedia': search_wikipedia,
}

print(calculator('2 + 2 * sqrt(16)'))
print(search_wikipedia('agents'))

Step 2: Tool Schemas

schemas = [
    {'type': 'function', 'function': {
        'name': 'calculator',
        'description': 'Evaluate a math expression like 2 + 2 * sqrt(16)',
        'parameters': {'type': 'object', 'properties': {'expression': {'type': 'string'}}, 'required': ['expression']}
    }},
    {'type': 'function', 'function': {
        'name': 'search_wikipedia',
        'description': 'Search Wikipedia and return a summary',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }}
]
import json
print(json.dumps(schemas, indent=2))

Step 3: System Prompt

system = '''
You are a research assistant. Use the available tools when needed.
Think step by step. If you have enough information, give a final answer.
'''
print(system.strip())

Step 4: The Loop

from openai import OpenAI
client = OpenAI()

def react(question, max_steps=10):
    messages = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': question}
    ]
    for step in range(max_steps):
        r = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            tools=schemas,
        )
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            try:
                result = TOOLS[tc.function.name](**args)
            except Exception as e:
                result = f'Tool error: {e}'
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': str(result)})
    return 'Step limit reached.'

Step 5: Run It

answer = react('What is the population of Tokyo times the square root of pi?')
print(answer)

Paso 6: Añadir registros

Registre cada paso para facilitar la depuración:

def react_verbose(question, max_steps=10):
    messages = [...]
    for step in range(max_steps):
        r = client.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=schemas)
        msg = r.choices[0].message
        print(f'[step {step}] thought: {msg.content}')
        if msg.tool_calls:
            for tc in msg.tool_calls:
                print(f'[step {step}] action: {tc.function.name}({tc.function.arguments})')
        ...

Paso 7: Usar el contador de pasos como herramienta

Algunos agentes incluyen el número de paso en el prompt del sistema para que el modelo sepa cuándo converger:

system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'

Paso 8: Formato de la respuesta final

Si quiere una salida estructurada, fuerce una llamada final a una herramienta:

tools.append({'type': 'function', 'function': {
    'name': 'final_answer',
    'description': 'Submit the final answer to the user.',
    'parameters': {'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer']}
}})
# Loop terminates when final_answer is called.

Paso 9: Errores de las herramientas

Devuelva siempre los errores como resultados de herramientas para que el agente pueda recuperarse:

try:
    result = TOOLS[name](**args)
except Exception as e:
    result = f'TOOL ERROR: {type(e).__name__}: {e}'
# Model sees the error and can try a different approach.

Paso 10: Llamadas paralelas a herramientas

Si msg.tool_calls tiene varias entradas, ejecútelas en paralelo:

import asyncio

async def run_tools(tool_calls):
    async def run_one(tc):
        args = json.loads(tc.function.arguments)
        return tc.id, TOOLS[tc.function.name](**args)
    return await asyncio.gather(*[run_one(tc) for tc in tool_calls])

Paso 11: Limitar la conversación

Incluso dentro de MAX_STEPS, las listas de mensajes pueden crecer demasiado. Recórtelas según el número de tokens entre turnos:

if total_tokens(messages) > 6000:
    messages = trim_messages(messages)

Paso 12: Preparación para producción

Para producción, añada tiempos de espera a las llamadas a herramientas, cuotas por herramienta, reintentos con espera incremental cuando fallen las API y registros completos de las trazas. Sin embargo, el ciclo anterior es el esqueleto.

Gestión de errores de herramientas

¿Qué debe hacer cuando una herramienta genera una excepción?

Repaso

ReAct en unas 80 líneas: lista de mensajes + bucle while + tabla de distribución. Los frameworks aportan mejoras, pero este es el núcleo.

Preguntas frecuentes

¿La lección «Implementar ReAct desde cero» es gratis?

Sí — el texto completo de «Implementar ReAct desde cero» 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 Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Implementar ReAct desde cero»?

Escriba una implementación de Python de 100 líneas sin LangChain: analice las líneas Action, ejecute las herramientas y repita hasta Final Answer. Practicas AI Agents 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 Agents?

No se requiere experiencia previa. AI Agents 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 2 de 4.

¿Cuánto tiempo toma la lección «Implementar ReAct desde cero»?

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 Agents?

Sí. Cada lección de AI Agents 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. ReAct: patrón de razonamiento y acción
  2. Implementar ReAct desde cero
  3. Conjuntos de herramientas habituales (web, calculadora y RAG)
  4. Detectar y recuperarse de errores de herramientas
← Volver a AI Agents