Implementer les tours multiples
La cle pour savoir si Claude veut utiliser un outil est le champ stop_reason : quand il vaut "tool_use", Claude a besoin d’un outil.
La boucle de conversation
def run_conversation(messages):
while True:
response = chat(messages, tools=[get_current_datetime_schema])
add_assistant_message(messages, response)
print(text_from_message(response))
if response.stop_reason != "tool_use":
break
tool_results = run_tools(response)
add_user_message(messages, tool_results)
return messages
Gerer plusieurs appels d’outils
def run_tools(message):
tool_requests = [
block for block in message.content if block.type == "tool_use"
]
tool_result_blocks = []
for tool_request in tool_requests:
try:
tool_output = run_tool(tool_request.name, tool_request.input)
tool_result_blocks.append({
"type": "tool_result",
"tool_use_id": tool_request.id,
"content": json.dumps(tool_output),
"is_error": False
})
except Exception as e:
tool_result_blocks.append({
"type": "tool_result",
"tool_use_id": tool_request.id,
"content": f"Erreur : {e}",
"is_error": True
})
return tool_result_blocks
Routage des outils
def run_tool(tool_name, tool_input):
if tool_name == "get_current_datetime":
return get_current_datetime(**tool_input)
elif tool_name == "other_tool":
return other_tool_function(**tool_input)
Cette approche rend l’ajout de nouveaux outils simple sans modifier la logique principale de conversation.