Verwenden Sie die watsonx.ai mit Foundation-Modellen, die Tool-Calling unterstützen, um agentengesteuerte Anwendungen zu erstellen.
Agentische Anwendungen ermöglichen es einem foundation model, 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 foundation model verwenden kann, aber Sie überlassen es dem foundation model, 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 foundation model 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 foundation model 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 foundation model, das die folgenden Anforderungen erfüllt:
- Erledigt Chat-Aufgaben
- Unterstützt Werkzeugaufrufe
- Kann die nächste Aktion wählen
Foundation-Modelle mit den folgenden Modell-IDs können verwendet werden, um verschiedene Tools im Rahmen eines Konversations-Workflows mit der Chat-API aufzurufen:
- 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
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'
Sie können diese Basismodelle von watsonx.ai oder von Tools von Drittanbietern, wie CrewAI, ableiten. CrewAI ist ein Python für die Entwicklung agentenbasierter Anwendungen. Weitere Informationen finden Sie in der CrewAI.
Beispielnotebooks
Die folgenden Beispiel-Notizbücher sind verfügbar:
Verwenden Sie die REST-API, um einen Chat zu erstellen, der Tools von Drittanbietern aufruft: Verwenden Sie watsonx und mistral-large, um einfache Chat-Konversationen und Tool-Aufrufe durchzuführen
Verwenden Sie das Python SDK, um eine Konversation zwischen verschiedenen Benutzertypen zu führen, wie z. B. System-Eingabeaufforderung, Assistent und Benutzer, und rufen Sie dann verschiedene Tools auf, um mathematische Gleichungen auf der Grundlage von Benutzereingaben durchzuführen. Siehe Verwenden Sie watsonx und mistral-large, um einfache Chat-Konversationen und Tool-Aufrufe zu tätigen
Verwenden Sie das Python, um Tools aufzurufen, die Informationen für eine Konversation abrufen, u. a. durch die Verwendung von LangChain zum Schreiben und Implementieren von Rechnerfunktionen, und veranschaulichen Sie den Arbeitsablauf, der mit LangGraph verfolgt wird. Siehe Verwenden Sie watsonx, und mistral-large mit Unterstützung für Werkzeuge zur Durchführung einfacher Berechnungen.
API-Details
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 foundation model 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": "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"
}
]
}
}
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 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 ein hilfsbereiter Assistent mit Zugang zu den folgenden Funktionsaufrufen. Ihre Aufgabe ist es, eine Folge von Funktionsaufrufen zu erstellen, die notwendig sind, um eine Antwort auf die Benutzeräußerung zu erzeugen. Verwenden Sie bei Bedarf die folgenden Funktionsaufrufe. Die Ausgabe des Werkzeugaufrufs MUSS das folgende JSON-Format einhalten: <|tool_call|>[{"name":func_name1", "arguments": {"argument1": "value1", "argument2": "value2"},... (weitere Werkzeugaufrufe nach Bedarf)]. Wenn kein Funktionsaufruf erforderlich ist, antworten Sie bitte direkt auf die Benutzernachricht.
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":"<|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
}
Das foundation model ist in der Lage, das richtige Werkzeug zur Beantwortung der Anfrage auszuwählen.
Die Antwort sieht wie folgt aus:
{
"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
}
}
Weitere Informationen
- Berechtigungsnachweise für den programmatischen Zugang
- Hinzufügen einer generativen Chatfunktion zu Ihren Anwendungen mit der Chat-API
- Unterstützte Stiftungsmodelle
Übergeordnetes Thema: Kodierung generativer KI-Lösungen