Renvoyer les résultats au modèle
Mettez les sorties des outils en forme comme des messages ayant le rôle outil afin que le modèle puisse les lire et poursuivre la conversation.
Renvoyer les résultats au modèle est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 4 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.
Le message de résultat d'un outil
Après avoir exécuté un outil, informez le modèle du résultat au moyen d'un message d'outil :
messages.append({
'role': 'tool',
'tool_call_id': tool_call.id, # MUST match the assistant's tool_call.id
'content': json.dumps(result)
})Le contenu doit être une chaîne
OpenAI attend une chaîne dans content. Sérialisez les objets avec json.dumps :
# Bad — will error
messages.append({'role': 'tool', 'tool_call_id': id, 'content': {'temp': 18}})
# Good
messages.append({'role': 'tool', 'tool_call_id': id, 'content': '{"temp": 18}'})Format Anthropic
Anthropic utilise un bloc de contenu à l'intérieur d'un message utilisateur :
messages.append({
'role': 'user',
'content': [{
'type': 'tool_result',
'tool_use_id': 'toolu_abc',
'content': json.dumps(result)
}]
})Retourner les erreurs
Si l'outil a échoué, renvoyez l'erreur : ne faites pas semblant qu'il a réussi. Le modèle peut se rétablir :
try:
result = run_tool(...)
content = json.dumps({'ok': True, 'data': result})
except Exception as e:
content = json.dumps({'ok': False, 'error': str(e)})
messages.append({'role': 'tool', 'tool_call_id': id, 'content': content})Schéma à résultats multiples
Pour les appels d'outils en parallèle, ajoutez chaque résultat avec l'ID correspondant :
for tc in message.tool_calls:
result = dispatch(tc)
messages.append({
'role': 'tool',
'tool_call_id': tc.id,
'content': json.dumps(result)
})Résumer les sorties volumineuses
Si un outil renvoie 100 Ko de HTML, tout envoyer au modèle gaspille des jetons et disperse son attention. Résumez ou tronquez d'abord :
def truncate(text, max_chars=4000):
if len(text) <= max_chars:
return text
return text[:max_chars] + f'\n...[truncated, {len(text)-max_chars} more chars]'
sample = "x" * 4500
result = truncate(sample, max_chars=50)
print(result)
Un schéma toujours identique
Même lorsque les résultats varient (réussite / erreur / introuvable), conservez un schéma de sortie stable. Le modèle est plus fiable lorsque les structures restent cohérentes :
from typing import TypedDict, Literal, Optional, Any
class ToolResult(TypedDict):
status: Literal['ok', 'not_found', 'error']
data: Optional[Any]
error: Optional[str]
def make_result(status, data=None, error=None) -> ToolResult:
return {'status': status, 'data': data, 'error': error}
print(make_result('ok', data={'temp': 72}))
print(make_result('not_found', error='city not found'))Inclure des indications de métadonnées
Aidez le modèle à interpréter les résultats en incluant des indications dans le contenu :
content = json.dumps({
'data': rows,
'note': 'Returned 50 rows (most recent first). There may be more matches.'
})Données binaires
Ne placez pas de gros blocs encodés en base64 dans les messages d'outils. Enregistrez-les plutôt dans un stockage et renvoyez une URL ou un ID :
result = {
'image_path': '/tmp/chart-abc.png',
'thumbnail_url': 'https://...',
'caption': 'Sales by quarter, 2024'
}
for k, v in result.items():
print(f"{k}: {v}")
Relancer le modèle
Après avoir ajouté tous les résultats des outils, rappelez le modèle : il produira soit une réponse finale, soit de nouveaux appels d'outils :
class Msg:
def __init__(self, tool_calls=None, content=None):
self.tool_calls = tool_calls or []
self.content = content
class ToolCall:
def __init__(self, name, args):
self.name = name
self.args = args
def call_model(messages, tools):
if len(messages) < 4:
return Msg(tool_calls=[ToolCall('get_weather', {'city': 'Paris'})])
return Msg(content='It is sunny in Paris.')
messages = [{'role': 'user', 'content': 'Weather in Paris?'}]
tools = ['get_weather']
message = call_model(messages, tools)
while message.tool_calls:
for tc in message.tool_calls:
result = f'Result of {tc.name}({tc.args})'
messages.append({'role': 'tool', 'name': tc.name, 'content': result})
print('Tool call:', tc.name, '->', result)
message = call_model(messages, tools)
print('Final answer:', message.content)
Auditer les sorties des outils
Consignez chaque (tool_call_id, args, result) pour le débogage. Lorsqu'un agent se comporte de manière étrange, le journal des résultats d'outils est le premier endroit à consulter.
Format du résultat d'un outil
À quoi le tool_call_id d'un message d'outil fait-il référence ?
Récapitulatif
Vous maîtrisez désormais l'intégralité de l'aller-retour des appels d'outils. Prochain cours : la mémoire, le troisième pilier des agents.
Apprends AI Agents avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 60
- Leçons
- 239
Questions Fréquemment Posées
La leçon « Renvoyer les résultats au modèle » est-elle gratuite ?
Oui — le texte complet de « Renvoyer les résultats au modèle » 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 « Renvoyer les résultats au modèle » ?
Mettez les sorties des outils en forme comme des messages ayant le rôle outil afin que le modèle puisse les lire et poursuivre la conversation. 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 4 sur 4.
Combien de temps prend la leçon « Renvoyer les résultats au modèle » ?
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
- Fonctionnement des appels de fonctions
- Définir des schémas d’outils (JSON Schema)
- Choisir les outils à l’exécution
- Renvoyer les résultats au modèle