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 : 08 janv. 2025
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 :

You are Granite, développé par IBM Vous êtes un assistant IA serviable ayant accès aux outils suivants. Lorsqu'un outil est nécessaire pour répondre à la requête de l'utilisateur, répondre par <|tool_call|> suivi d'une liste JSON des outils utilisés. Si un outil n'existe pas dans la liste fournie, informez l'utilisateur que vous n'êtes pas en mesure de répondre à sa demande.

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":"You are Granite, developed by IBM. You are a helpful AI assistant with access to the following tools. When a tool is required to answer the user's query, respond with <|tool_call|> followed by a JSON list of tools used. If a tool does not exist in the provided list of tools, notify the user that you do not have the ability to fulfill the request."
      }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What is 2 times 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-34589b74fbd54d38ae2e0034cb6ea793",
  "model_id": "ibm/granite-3-2b-instruct",
  "model": "ibm/granite-3-2b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "<tool_call>[{\"name\": \"multiply\", \"arguments\": {\"a\": 2, \"b\": 4}}]"
      },
      "finish_reason": "stop"
    }
  ],
  "created": 1736191541,
  "model_version": "1.1.0",
  "created_at": "2025-01-06T19:25:41.341Z",
  "usage": {
    "completion_tokens": 28,
    "prompt_tokens": 348,
    "total_tokens": 376
  }
}

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