Guides
Appels d’outils
Les deux modèles appellent des outils au format OpenAI : vous décrivez des fonctions, le modèle en demande une, vous l’exécutez et renvoyez le résultat.
Vérifié le 26 octobre 2026
La boucle
- Envoyez
tools: chacun est une fonction avec un nom, une description et des paramètres JSON Schema. - Quand le modèle en veut une,
finish_reasonde la réponse vauttool_callsetmessage.tool_callsles liste, avec les arguments sous forme de chaîne JSON. - Exécutez chacune, et ajoutez un message
toolavec sontool_call_idet le résultat. - Renvoyez la conversation. Répétez jusqu’à ce que
finish_reasonvaillestop.
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Today's weather in a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
def get_weather(city):
return {"city": city, "high_c": 21, "sky": "clear"}
messages = [{"role": "user", "content": "Should I bring a jacket in Lisbon today?"}]
while True:
reply = client.chat.completions.create(model="deepseek-v4.1-flash-uncensored", messages=messages, tools=tools)
message = reply.choices[0].message
messages.append(message)
if not message.tool_calls:
print(message.content)
break
for call in message.tool_calls:
result = get_weather(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})tool_choice
| Modèle | Accepte |
|---|---|
deepseek-v4.1-flash-uncensored | auto, none, required, ou une fonction nommée. Aussi parallel_tool_calls. |
glm-5.3-flash-uncensored | auto ou none. Il choisit ses propres outils ; toute autre valeur donne 400 unsupported_tool_choice. |
Bon à savoir
- Chaque message
tooldoit porter letool_call_idauquel il répond, sans quoi l’appel est refusé avec400 invalid_messages. - Les schémas d’outils voyagent avec chaque requête et comptent comme jetons d’entrée.
- Les modèles n’exécutent rien eux-mêmes. Votre code exécute les outils, et décide donc de ce qu’ils peuvent atteindre.