Implémenter ReAct à partir de zéro
Écrivez une implémentation Python de 100 lignes sans LangChain : analysez les lignes Action, exécutez les outils et bouclez jusqu’à Final Answer.
Implémenter ReAct à partir de zéro est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Créer vous-même la boucle
Vous pouvez écrire ReAct en environ 100 lignes de Python, sans aucun cadre. Le faire une fois vous donnera une intuition de ce que les cadres prennent en charge à votre place.
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)Étape 6 : ajouter la journalisation
Enregistrez chaque étape pour faciliter le débogage :
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})')
...Étape 7 : utiliser un compteur d’étapes comme outil
Certains agents incluent le nombre d’étapes dans l’invite système afin que le modèle sache quand converger :
system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'Étape 8 : format de la réponse finale
Si vous voulez une sortie structurée, forcez un appel d’outil final :
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.Étape 9 : erreurs des outils
Retournez toujours les erreurs comme résultats d’outils afin que l’agent puisse se rétablir :
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.Étape 10 : appels d’outils en parallèle
Si msg.tool_calls contient plusieurs entrées, exécutez-les en parallèle :
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])Étape 11 : limiter la conversation
Même avec MAX_STEPS, les listes de messages peuvent devenir très volumineuses. Réduisez-les selon le nombre de jetons entre les tours :
if total_tokens(messages) > 6000:
messages = trim_messages(messages)Étape 12 : renforcer la solution pour la production
Pour la production, ajoutez des délais d’expiration aux appels d’outils, des quotas par outil, des nouvelles tentatives avec temporisation progressive en cas d’échec d’API et une journalisation complète des traces. Mais la boucle ci-dessus constitue votre squelette.
Gestion des erreurs des outils
Que devez-vous faire lorsqu’un outil lève une exception ?
Récapitulatif
ReAct en environ 80 lignes : une liste de messages, une boucle while et une table de répartition. Les cadres ajoutent des fonctionnalités, mais le cœur est là.
Questions Fréquemment Posées
La leçon « Implémenter ReAct à partir de zéro » est-elle gratuite ?
Oui — le texte complet de « Implémenter ReAct à partir de zéro » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Implémenter ReAct à partir de zéro » ?
Écrivez une implémentation Python de 100 lignes sans LangChain : analysez les lignes Action, exécutez les outils et bouclez jusqu’à Final Answer. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Implémenter ReAct à partir de zéro » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- ReAct : schéma raisonner puis agir
- Implémenter ReAct à partir de zéro
- Ensembles d’outils courants (Web, calculatrice, RAG)
- Détecter et gérer les erreurs des outils