0Pricing
AI Agents · Aula

Implementando ReAct do zero

Escreva uma implementação em Python com 100 linhas, sem LangChain: analise linhas de Ação, execute ferramentas e repita até chegar à Resposta final.

Implementando ReAct do zero é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 2 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 Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

Crie o ciclo por conta própria

Você pode escrever um ReAct em aproximadamente 100 linhas de Python — sem precisar de uma estrutura. Fazê-lo uma vez ajuda a entender o que as estruturas abstraem.

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)

Etapa 6: adicionar registros

Registre cada etapa para depuração:

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

Etapa 7: contador de etapas como ferramenta

Alguns agentes incluem a contagem de etapas na instrução do sistema para que o modelo saiba quando convergir:

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

Etapa 8: formato da resposta final

Se você quiser uma saída estruturada, force uma chamada final de ferramenta:

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.

Etapa 9: erros de ferramentas

Sempre retorne os erros como resultados de ferramentas para que o agente possa se recuperar:

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.

Etapa 10: chamadas de ferramentas em paralelo

Se msg.tool_calls tiver várias entradas, execute-as em 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])

Etapa 11: limitando a conversa

Mesmo dentro do número máximo de etapas, as listas de mensagens podem crescer muito. Reduza-as pela contagem de tokens entre as interações:

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

Etapa 12: preparação para produção

Para produção, adicione: tempos limite às chamadas de ferramentas, cotas por ferramenta, novas tentativas com espera progressiva em falhas de API e registro completo dos rastreamentos. Mas o ciclo acima é o seu esqueleto.

Tratamento de erros de ferramentas

O que você deve fazer quando uma ferramenta gera uma exceção?

Recapitulação

ReAct em aproximadamente 80 linhas: lista de mensagens + ciclo while + tabela de despacho. As estruturas acrescentam refinamentos, mas o núcleo é este.

Perguntas Frequentes

A aula “Implementando ReAct do zero” é grátis?

Sim — o texto completo de “Implementando ReAct do zero” é 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 Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.

O que vou aprender em “Implementando ReAct do zero”?

Escreva uma implementação em Python com 100 linhas, sem LangChain: analise linhas de Ação, execute ferramentas e repita até chegar à Resposta final. Você pratica AI Agents 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 Agents?

Nenhuma experiência prévia é necessária. AI Agents 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 2 de 4.

Quanto tempo leva a aula “Implementando ReAct do zero”?

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

Sim. Cada aula de AI Agents 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. ReAct: padrão raciocinar + agir
  2. Implementando ReAct do zero
  3. Conjuntos comuns de ferramentas (Web, calculadora, RAG)
  4. Detectando e recuperando-se de erros de ferramentas
← Voltar para AI Agents