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
- ReAct: padrão raciocinar + agir
- Implementando ReAct do zero
- Conjuntos comuns de ferramentas (Web, calculadora, RAG)
- Detectando e recuperando-se de erros de ferramentas