Passer au contenu principal

Cas d’utilisation

La fonctionnalité Function Calling permet au modèle d’interagir avec des outils externes afin d’obtenir des informations en temps réel ou d’exécuter des opérations spécifiques. Cette fonctionnalité améliore la précision des données tout en étendant les capacités du modèle : celui-ci ne se limite plus à générer du texte, mais peut prendre en charge des scénarios d’application plus dynamiques et plus pratiques. Voici des exemples de cas d’utilisation de Function Calling :
  • Requêtes d’informations dynamiques : appeler une API pour récupérer en temps réel des données dynamiques depuis des systèmes externes, comme la météo, les actualités ou les cours de bourse. Par exemple, en appelant une API météo pour obtenir les informations météo en temps réel, lorsque l’utilisateur demande la météo actuelle, le modèle peut lui indiquer les conditions météorologiques à cet instant précis, au lieu de fournir des prévisions obsolètes.
  • Automatisation des opérations : exécuter des opérations spécifiques via des appels de fonctions, afin que l’utilisateur puisse déclencher des actions automatisées en arrière-plan au moyen d’une conversation. Par exemple, en appelant l’API d’un site de billetterie pour réserver des billets, lorsque l’utilisateur demande comment acheter un billet pour un site touristique, le modèle ne se contente plus d’expliquer la procédure de réservation : il peut aider l’utilisateur à finaliser directement la réservation.

Modèles pris en charge

Les modèles suivants prennent en charge Function Calling :

Méthode d’utilisation

  1. Définissez les fonctions d’outils que le modèle doit appeler.
  2. Ajoutez le paramètre tools dans la requête pour définir les fonctions que le modèle doit utiliser.

Exemple d’utilisation

La section suivante fournit un exemple complet de code Python qui montre comment utiliser Function Calling pour consulter la météo actuelle d’un lieu donné. Pour connaître le format d’API précis de Function Calling, consultez l’API de création d’une requête de conversation chat.

1. Initialiser le client

Vous devez initialiser le client avec votre clé API JieKou AI.
from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

2. Définir la fonction à appeler

Définissez la fonction que le modèle doit appeler. L’exemple Python suivant illustre une fonction permettant d’obtenir des informations météo.
# Exemple de fonction permettant de simuler l’obtention de données météo.
def get_weather(location):
    """Obtenir la météo actuelle du lieu spécifié"""
    print("Appel de la fonction get_weather, lieu : ", location)
    # Dans une application réelle, vous devez appeler ici une API météo externe.
    # Il s’agit d’un exemple simplifié qui renvoie des données codées en dur.
    return json.dumps({"位置": location, "温度": "20 degrés Celsius"})

3. Construire une requête API contenant les outils et le message utilisateur

Créez la requête d’appel API. Cette requête inclut le paramètre tools, qui définit la fonction que le modèle doit utiliser, ainsi que le message de l’utilisateur.
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Obtenir la météo d’un lieu ; l’utilisateur doit d’abord fournir le lieu",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Informations sur la ville, par exemple : Shanghai",
                    }
                },
                "required": ["location"]
            },
        }
    },
]
messages = [
    {
        "role": "user",
        "content": "Quel temps fait-il à Shanghai ?"
    }
]
# Envoyer la requête et afficher la réponse
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)
# En production, vérifiez que la réponse contient bien un appel d’outil
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
Sortie :
{'id': '0', 'function': {'arguments': '{"location": "Shanghai"}', 'name': 'get_weather'}, 'type': 'function'}

4. Répondre en fonction du résultat de l’appel de fonction et obtenir la réponse finale

Traitez ensuite l’appel de fonction, exécutez la fonction get_weather, puis renvoyez le résultat au modèle afin qu’il génère la réponse finale destinée à l’utilisateur.
# S’assurer que l’appel d’outil a été défini à l’étape précédente
if tool_call:
    # Étendre l’historique de conversation en ajoutant le message d’appel d’outil de l’assistant
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # Exécuter la fonction et obtenir la réponse
        function_response = get_weather(
            location=function_args.get("location"))
        # Ajouter la réponse de la fonction aux messages
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # Obtenir la réponse finale du modèle, incluant le résultat de la fonction
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # Remarque : n’incluez pas ici le paramètre tools
    )
    print(answer_response.choices[0].message)
Sortie :
ChatCompletionMessage(content="La température actuelle à Shanghai est de 20 degrés Celsius. Veuillez noter que les conditions météorologiques peuvent changer à tout moment ; il est recommandé de consulter les dernières prévisions météo pour obtenir des informations plus précises.", refusal=None, role='assistant', function_call=None, tool_calls=None)

Code complet

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.highwayapi.ai/openai",
    api_key="<Your API Key>",
)

model = "deepseek/deepseek-v3"

# Exemple de fonction permettant de simuler l’obtention de données météo.
def get_weather(location):
    """Obtenir la météo actuelle du lieu spécifié"""
    print("Appel de la fonction get_weather, lieu : ", location)
    # Dans une application réelle, vous devez appeler ici une API météo externe.
    # Il s’agit d’un exemple simplifié qui renvoie des données codées en dur.
    return json.dumps({"位置": location, "温度": "20 degrés Celsius"})

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Obtenir la météo d’un lieu ; l’utilisateur doit d’abord fournir le lieu",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Informations sur la ville, par exemple : Shanghai",
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "Quel temps fait-il à Shanghai ?"
    }
]

# Envoyer la requête et afficher la réponse
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# En production, vérifiez que la réponse contient bien un appel d’outil
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())

# S’assurer que l’appel d’outil a été défini à l’étape précédente
if tool_call:
    # Étendre l’historique de conversation en ajoutant le message d’appel d’outil de l’assistant
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # Exécuter la fonction et obtenir la réponse
        function_response = get_weather(
            location=function_args.get("location"))
        # Ajouter la réponse de la fonction aux messages
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # Obtenir la réponse finale du modèle, incluant le résultat de la fonction
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # Remarque : n’incluez pas ici le paramètre tools
    )
    print(answer_response.choices[0].message)