0 / 0
Retourner à la version anglaise de la documentation
Construire des flux de travail pilotés par des agents avec l'API de chat
Dernière mise à jour : 09 déc. 2024
Construire des flux de travail pilotés par des agents avec l'API de chat

Utilisez l'API de chat watsonx.ai avec des modèles de base qui prennent en charge l'appel d'outils pour créer des applications pilotées par des agents.

Les applications agentiques permettent à un foundation model fonctionner comme un agent qui contrôle le flux d'interaction avec l'utilisateur. Vous définissez les paramètres de l'interaction, y compris les outils que le foundation model peut utiliser, mais vous permettez au foundation model décider de la meilleure étape suivante en fonction de l'état actuel de l'interaction. L'appel d'outil est parfois appelé appel de fonction.

Dans un flux de travail réel, vous pouvez vouloir appeler un outil au début de chaque interaction. Plus tard dans l'échange, vous pourriez vouloir utiliser différentes invites en fonction de la façon dont l'utilisateur répond aux questions de suivi concernant une tâche. Il se peut aussi que vous souhaitiez appeler divers outils tiers nécessaires à l'achèvement du flux de travail. Vous pouvez définir ces options, puis laisser le foundation model choisir l'invite à renvoyer ou l'outil à utiliser le moment venu.

Par exemple, une application de réservation de restaurant peut avoir besoin de collecter les informations suivantes, puis de créer une réservation :

  • Emplacement
  • Nombre d'invités
  • Date et heure

L'ordre dans lequel les informations sont collectées peut n'avoir d'importance que dans certains endroits, où le nombre de convives par table est limité, ou lorsqu'il y a plus de places assises à l'extérieur par beau temps. Vous pouvez tenir compte de ces conditions dans le code et laisser le foundation model déterminer quand appeler des outils supplémentaires, tels qu'une application météo tierce, avant que l'agent n'effectue une demande de réservation.

Modèles de fondations soutenus

Lorsque vous construisez un flux de travail agentique, choisissez un foundation model qui répond aux exigences suivantes :

  • Gestion des tâches liées au chat
  • Prise en charge de l'appel d'outils
  • Peut choisir l'action suivante

Les modèles de fondation avec les ID de modèle suivants peuvent être utilisés pour appeler divers outils dans le contexte d'un flux de travail conversationnel avec l'API de chat :

  • ibm/granite-3-2b-instruct
  • ibm/granite-3-8b-instruct
  • meta-llama/llama-3-1-70b-instruct
  • meta-llama/llama-3-1-8b-instruct
  • meta-llama/llama-3-2-11b-vision-instruct
  • meta-llama/llama-3-2-1b-instruct
  • meta-llama/llama-3-2-90b-vision-instruct
  • meta-llama/llama-3-3-70b-instruct
  • meta-llama/llama-3-405b-instruct
  • mistral-large

Pour obtenir par programmation une liste des modèles de fondation qui prennent en charge l'appel d'outils à partir de l'API de chat, spécifiez le paramètre filters=task_function_calling lorsque vous soumettez une demande de méthode Lister les modèles de fondation disponibles .

Voir la référence de l'API.

Par exemple :

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'

Vous pouvez déduire ces modèles de base à partir de watsonx.ai ou d'outils tiers, tels que CrewAI. CrewAI est un framework Python pour la construction d'applications agentiques. Pour plus d'informations, voir la documentationCrewAI.

Exemples de blocs-notes

Les exemples de carnets suivants sont disponibles :

Détails relatifs aux API

Pour plus de détails sur la méthode API, consultez la documentation de référence de l'API .

Exemple de demande d'appel à outils

L'exemple suivant définit deux outils, une fonction pour l'addition et une fonction pour la multiplication. L'exemple soumet les données de l'utilisateur au foundation model et laisse le modèle choisir l'outil à utiliser pour répondre à la question.

Dans l'exemple suivant, remplacez la variable " {url} par la valeur correspondant à votre instance, par exemple " us-south.ml.cloud.ibm.com. Ajoutez votre propre jeton porteur et votre identifiant de projet.

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'
  --data '{
      "model_id": "mistralai/mistral-large",
      "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": "What is 2 plus 4?"
            }
          ]
        }
      ],
      "tools": [
        {
          "type": "function",
          "function": {
            "name": "add",
            "description": "Adds the values a and b to get a sum.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        },
        {
          "type": "function",
          "function": {
          "name": "multiply",
            "description": "Multiplies the values a and b.",
            "parameters": {
              "type": "object",
              "properties": {
                "a": {
                  "description": "A number value",
                  "type": "float"
                },
                "b": {
                  "description": "A number value",
                  "type": "float"
                }
              },
              "required": [
                "a",
                "b"
              ]
            }
          }
        }
      ],
      "tool_choice_option": "auto",
      "max_tokens": 300,
      "time_limit": 1000
      }'

L'exemple de sortie montre que le modèle, mistral-large dans ce cas, est capable de choisir le bon outil à utiliser pour la tâche, la fonction " add.

{
  "id": "chat-a00942a130e84f83bc0090c38c2f419f",
  "model_id": "mistralai/mistral-large",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "chatcmpl-tool-77cbe4e94d88489383a0c6ed1b644674",
            "type": "function",
            "function": {
              "name": "add",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1728413314,
  "model_version": "2.0.0",
  "created_at": "2024-10-08T18:48:34.818Z",
  "usage": {
    "completion_tokens": 25,
    "prompt_tokens": 189,
    "total_tokens": 214
  },
  "system": {
    "warnings": [
      {
        "message": "This model is a Non-IBM Product governed by a third-party license that may impose use restrictions and other obligations. By using this model you agree to its terms as identified in the following URL.",
        "id": "disclaimer_warning",
        "more_info": "https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/fm-models.html?context=wx"
      }
    ]
  }
}

Exemple de demande d'appel d'outil avec granite-3-2b-instruct

La requête suivante définit deux outils, une fonction pour l'addition et une fonction pour la multiplication, et demande au foundation model granite-3-2b-instruct quel outil utiliser.

Les modèles Granite peuvent mieux appeler les outils lorsque vous fournissez une invite système avec la demande. L'invite système suivante est utilisée :

Vous êtes un assistant utile et vous avez accès aux appels de fonction suivants. Votre tâche consiste à produire une séquence d'appels de fonctions nécessaires pour générer une réponse à l'énoncé de l'utilisateur. Utilisez les appels de fonction suivants selon les besoins. La sortie de l'appel d'outil DOIT respecter le format JSON suivant : <|tool_call|>[{"name" :func_name1", "arguments" : {"argument1": "value1", "argument2": "value2"},... (plus d'appels d'outils si nécessaire)]. Si aucun appel de fonction n'est nécessaire, veuillez répondre directement au message de l'utilisateur.

Dans l'exemple suivant, remplacez la variable " {url} par la valeur correspondant à votre instance, par exemple " us-south.ml.cloud.ibm.com. Ajoutez votre propre jeton porteur et votre identifiant de projet.

curl -X POST \
  'https://{url}/ml/v1/text/chat?version=2024-10-08' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer eyJraWQiOi...'

Le corps de la demande contient l'extrait JSON suivant :

{
  "model_id": "ibm/granite-3-2b-instruct",
  "project_id": "4947c695-a374-428c-acca-332c1a1dc9e9",
  "messages": [
    {
      "role":"system",
      "content":[
        {
          "type":"text",
          "text":"<|start_of_role|>system<|end_of_role|>You are a helpful assistant with access to the following function calls. Your task is to produce a sequence of function calls necessary to generate response to the user utterance. Use the following function calls as required. The tool calling output MUST adhere to the following JSON format: <|tool_call|>[{\"name\": \"func_name1\", \"arguments\": {\"argument1\": \"value1\", \"argument2\": \"value2\"}},... (more tool calls as required)]. If no function call is needed, please directly reply to the user message.<|end_of_text|>"
      }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is 2 plus 4?"
        }
      ]
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "add",
        "description": "Adds the values a and b to get a sum.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "multiply",
        "description": "Multiplies the values a and b.",
        "parameters": {
          "type": "object",
          "properties": {
            "a": {
              "description": "A number value",
              "type": "float"
            },
            "b": {
              "description": "A number value",
               "type": "float"
            }
          },
          "required": [
            "a",
            "b"
          ]
        }
      }
    }
  ],
  "tool_choice_option": "auto",
  "max_tokens": 300,
  "time_limit": 10000
}

Le foundation model granite-3-2b-instruct est capable de choisir l'outil adéquat pour répondre à la requête.

La réponse se présente comme suit :

{
  "id": "chat-9eb3284f12c94256a3271180bdf6b6d2",
  "model_id": "ibm/granite-3-2b-instruct",
  "model": "ibm/granite-3-2b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "chatcmpl-tool-6cd1758c5caf4f058c63188a7c7b78fb",
            "type": "function",
            "function": {
              "name": "add",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1733504510,
  "model_version": "1.0.0",
  "created_at": "2024-12-06T17:01:50.321Z",
  "usage": {
    "completion_tokens": 23,
    "prompt_tokens": 383,
    "total_tokens": 406
  }
}

En savoir plus

Sujet parent : Coder des solutions d'IA générative

Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus