Appel de fonctions (Function Calling)
L’appel de fonctions permet aux modèles de sélectionner et d’appeler automatiquement des fonctions prédéfinies selon les besoins de l’utilisateur, offrant des capacités telles que les requêtes de données, les appels d’API et l’exécution de tâches.
Concepts de base
Flux complet de l’appel de fonctions :
- Définir les outils — Décrire les fonctions disponibles et leurs paramètres dans la requête
- Décision du modèle — Le modèle détermine s’il doit appeler un outil
- Retour de l’appel — Le modèle renvoie le nom de la fonction et les paramètres
- Exécuter la fonction — Vous exécutez la fonction et obtenez le résultat
- Continuer la conversation — Renvoyer le résultat au modèle pour générer la réponse finale
Protocole OpenAI
Python
function_calling.py
from openai import OpenAI
import json
client = OpenAI(
base_url="https://api.ofox.ai/v1",
api_key="<votre OFOXAI_API_KEY>"
)
# 1. Définir les outils
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Obtenir les informations météo en temps réel d'une ville",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Nom de la ville, ex. : Paris, Lyon"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Unité de température"
}
},
"required": ["city"]
}
}
}]
# 2. Envoyer la requête
messages = [{"role": "user", "content": "Quel temps fait-il à Paris aujourd'hui ?"}]
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto"
)
message = response.choices[0].message
# 3. Traiter l'appel d'outil
if message.tool_calls:
for tool_call in message.tool_calls:
args = json.loads(tool_call.function.arguments)
# 4. Exécuter votre fonction
result = get_weather(args["city"]) # Votre propre implémentation
# 5. Renvoyer le résultat au modèle
messages.append(message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
})
# Obtenir la réponse finale
final = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages,
tools=tools
)
print(final.choices[0].message.content)Protocole Anthropic
Anthropic utilise le paramètre tools avec un format légèrement différent :
anthropic_tools.py
import anthropic
client = anthropic.Anthropic(
base_url="https://api.ofox.ai/anthropic",
api_key="<votre OFOXAI_API_KEY>"
)
response = client.messages.create(
model="anthropic/claude-sonnet-4.5",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "Obtenir les informations météo en temps réel d'une ville",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Nom de la ville"}
},
"required": ["city"]
}
}],
messages=[{"role": "user", "content": "Quel temps fait-il à Paris aujourd'hui ?"}]
)
# Traiter le bloc de contenu tool_use
for block in response.content:
if block.type == "tool_use":
print(f"Appel d'outil : {block.name}, paramètres : {block.input}")Appels de fonctions en parallèle
Le modèle peut renvoyer plusieurs appels d’outils dans une seule réponse ; vous devriez les exécuter en parallèle :
# Le modèle peut demander plusieurs appels d'outils simultanément
if message.tool_calls:
# Exécuter tous les appels d'outils en parallèle
import asyncio
async def execute_tools(tool_calls):
tasks = []
for tc in tool_calls:
args = json.loads(tc.function.arguments)
tasks.append(execute_function(tc.function.name, args))
return await asyncio.gather(*tasks)Paramètre tool_choice
| Valeur | Description |
|---|---|
"auto" | Le modèle décide automatiquement s’il doit appeler des outils (par défaut) |
"none" | Interdire les appels d’outils |
"required" | Forcer l’appel d’outils |
{"type": "function", "function": {"name": "xxx"}} | Forcer l’appel d’un outil spécifique |
Modèles compatibles
Les modèles suivants supportent le Function Calling :
- OpenAI :
gpt-4o,gpt-4o-mini,o1,o3-mini - Anthropic :
claude-opus-4,claude-sonnet-4,claude-3-5-haiku - Google :
gemini-3.1-pro-preview,gemini-3-flash-preview,gemini-3-pro-preview - Autres :
deepseek-chat,qwen-max,glm-4
Last updated on