Aufbau von agentengesteuerten Arbeitsabläufen mit der Chat-API

Letzte Aktualisierung: 20. März 2025
Aufbau von agentengesteuerten Arbeitsabläufen mit der Chat-API

Verwenden Sie die watsonx.ai mit Foundation-Modellen, die Tool-Calling unterstützen, um agentengesteuerte Anwendungen zu erstellen.

Entwicklungsmöglichkeiten

Sie können mithilfe dieser Programmiermethoden agentenbasierte Arbeitsabläufe erstellen:

Alternativ können Sie grafische Tools aus der Benutzeroberfläche von watsonx.ai verwenden, um Agenten zu erstellen. Siehe Agentenlabor.

Übersicht

Agentische Anwendungen ermöglichen es einem Basismodell, als Agent zu fungieren, der den Fluss der Interaktion mit dem Benutzer steuert. Sie legen die Parameter der Interaktion fest, einschließlich der Werkzeuge, die das Basismodell verwenden kann, aber Sie überlassen es dem Basismodell, den nächsten besten Schritt auf der Grundlage des aktuellen Stands der Interaktion zu entscheiden. Der Werkzeugaufruf wird manchmal auch als Funktionsaufruf bezeichnet.

In einem realen Arbeitsablauf möchten Sie vielleicht immer ein Werkzeug zu Beginn jeder Interaktion aufrufen. Im weiteren Verlauf des Austauschs möchten Sie vielleicht verschiedene Aufforderungen verwenden, je nachdem, wie der Benutzer Folgefragen zu einer Aufgabe beantwortet. Oder Sie möchten verschiedene Tools von Drittanbietern aufrufen, die zur Vervollständigung des Arbeitsablaufs erforderlich sind. Sie können diese Optionen festlegen und dann das Stiftungsmodell entscheiden lassen, welche Eingabeaufforderung zurückgegeben oder welches Werkzeug verwendet werden soll, wenn der richtige Zeitpunkt gekommen ist.

Eine App für die Reservierung eines Restaurants muss beispielsweise die folgenden Informationen erfassen und dann eine Reservierung erstellen:

  • Standort
  • Anzahl der Gäste
  • Datum und Uhrzeit

Die Reihenfolge, in der die Informationen gesammelt werden, spielt nur in einigen Lokalen eine Rolle, in denen die Anzahl der Gäste pro Tisch begrenzt ist oder in denen bei schönem Wetter mehr Sitzplätze im Freien zur Verfügung stehen. Sie können diese Bedingungen im Code berücksichtigen und das Basismodell bestimmen lassen, wann zusätzliche Tools, wie z. B. eine Wetter-App eines Drittanbieters, aufgerufen werden sollen, bevor der Agent eine Reservierungsanfrage abschließt.

Unterstützte Stiftungsmodelle

Wenn Sie einen agentenbasierten Workflow aufbauen, wählen Sie ein Basismodell, das die folgenden Anforderungen erfüllt:

  • Erledigt Chat-Aufgaben
  • Unterstützt Werkzeugaufrufe
  • Kann die nächste Aktion wählen

Um programmgesteuert eine Liste der Foundation-Modelle zu erhalten, die Tool-Aufrufe aus der Chat-API unterstützen, geben Sie den Parameter filters=task_function_calling an, wenn Sie eine Anforderung zur Methode „Liste der verfügbaren Foundation-Modelle“ senden.

Siehe die API-Referenz.

Beispiel:

curl -X GET \
  'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-10-10&filters=task_function_calling'
Hinweis: Sie können die Chat-API nicht für die Entwicklung von Toolaufrufen aus einem Deployment-on-Demand- oder benutzerdefinierten Basismodell verwenden.

Bauen mit Python

Siehe die Klasse "Model Inference " der Bibliothek " watsonx.ai Python ".

Beispiel für Python -Notizbücher

Die folgenden Beispiel-Notizbücher sind verfügbar:

REST-API

Verschiedene Gründungsmodelle handhaben den Aufruf von Werkzeugen auf unterschiedliche Weise. Anhand der folgenden Beispiele können Sie einige der Unterschiede erkennen:

API-Referenz

Einzelheiten zu API-Methoden finden Sie in der API-Referenzdokumentation .

Beispiel für eine Anfrage zum Aufrufen von Werkzeugen

Das folgende Beispiel definiert zwei Werkzeuge, eine Funktion für Addition und eine Funktion für Multiplikation. Das Beispiel übermittelt Benutzereingaben an das Stiftungsmodell und lässt das Modell auswählen, welches Werkzeug zur Beantwortung der Frage verwendet werden soll.

Im folgenden Beispiel ersetzen Sie die Variable " {url} durch den richtigen Wert für Ihren Fall, z. B. " us-south.ml.cloud.ibm.com. Fügen Sie Ihr eigenes Inhaber-Token und Ihre Projekt-ID hinzu.

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
      }'

Die Beispielausgabe zeigt, dass das Modell, in diesem Fall mistral-large, in der Lage ist, das richtige Werkzeug für die Aufgabe zu wählen, nämlich die Funktion ' add.

{
  "id": "chatcmpl-2f47da4026950db321698cb733b25e89",
  "model_id": "mistralai/mistral-large",
  "model": "mistralai/mistral-large",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "H6KoCbaZV",
            "type": "function",
            "function": {
              "name": "add",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1739311926,
  "model_version": "2.0.0",
  "created_at": "2025-02-11T22:12:07.243Z",
  "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"
      }
    ]
  }
}

Beispiel für einen Werkzeugaufruf mit granite-3-2b-instruct

Die folgende Anfrage definiert zwei Werkzeuge, eine Funktion für Addition und eine Funktion für Multiplikation, und fragt das granite-3-2b-instruct foundation model, welches Werkzeug verwendet werden soll.

Die Granite können Werkzeuge besser aufrufen, wenn Sie eine Systemaufforderung mit der Anfrage bereitstellen. Es wird die folgende Systemaufforderung verwendet:

Sie sind Granite, entwickelt von IBM. Sie sind ein hilfreicher KI-Assistent mit Zugriff auf die folgenden Tools. Wenn ein Tool benötigt wird, um die Anfrage des Benutzers zu beantworten, antworten Sie mit "<|tool_call>", gefolgt von einer JSON-Liste der verwendeten Tools. Wenn ein Tool nicht in der bereitgestellten Liste der Tools enthalten ist, teilen Sie dem Benutzer mit, dass Sie die Anfrage nicht erfüllen können.

Im folgenden Beispiel ersetzen Sie die Variable " {url} durch den richtigen Wert für Ihren Fall, z. B. " us-south.ml.cloud.ibm.com. Fügen Sie Ihr eigenes Inhaber-Token und Ihre Projekt-ID hinzu.

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...'

Der Körper der Anfrage enthält den folgenden JSON-Ausschnitt:

{
  "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
}

Das Gründungsmodell granite-3-2b-instruct ist in der Lage, das richtige Werkzeug zur Beantwortung der Anfrage auszuwählen.

Die Antwort sieht wie folgt aus:

{
  "id": "chatcmpl-ac80d63a85209b48592435687086e1c2",
  "model_id": "ibm/granite-3-2b-instruct",
  "model": "ibm/granite-3-2b-instruct",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "tool_calls": [
          {
            "id": "chatcmpl-tool-3297286588a24459b0042943cae55629",
            "type": "function",
            "function": {
              "name": "multiply",
              "arguments": "{\"a\": 2, \"b\": 4}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "created": 1739311794,
  "model_version": "1.1.0",
  "created_at": "2025-02-11T22:09:55.048Z",
  "usage": {
    "completion_tokens": 28,
    "prompt_tokens": 348,
    "total_tokens": 376
  }
}

Weitere Informationen

Übergeordnetes Thema: Kodierung generativer KI-Lösungen