OpenAI- und Azure OpenAI-Assistenten können Modelle aufrufen und Tools nutzen, um Aufgaben zu erledigen. Dieser Artikel konzentriert sich in erster Linie auf die Erstellung von Pipelines, um die Tool-Aufruf-Funktionen eines vorhandenen Assistenten zu nutzen.
Angesichts der erheblichen Ähnlichkeit zwischen den Assistenztools der OpenAI- und Azure-Versionen gelten die in diesem Artikel aufgeführten Beispiele für beide Plattformen.
In Teil 1 geben wir eine einfache Einführung in die Erstellung eines Assistenten im OpenAI Dashboard und das Hinzufügen benutzerdefinierter Tools für die spätere Verwendung in der Pipeline. Wir stellen alle erforderlichen Daten und Dateien zur Verfügung.
In Teil 2 zeigen wir zwei Fragen und die entsprechenden Antworten des Assistenten, um zu veranschaulichen, welche Arten von Tools der Assistent aufrufen kann oder vom Benutzer aufgerufen werden müssen, um Fragen zu beantworten.
In Teil 3 stellen wir zwei neue Snaps vor: Tool Call Router und Submit Tool Outputs. Außerdem werden die beiden bestehenden Snaps aktualisiert: Run Thread und Create and Run Thread.
In Teil 4 werden wir uns mit dem Pipeline-Workflow und den spezifischen Konfigurationen befassen, die für die Einrichtung von Snaps erforderlich sind.
Teil 1: Voraussetzung – Einrichten eines Assistenten im OpenAI-Dashboard
OpenAI und Azure OpenAI-Assistenten verwalten die Systemaufforderung, das zur Generierung von Antworten verwendete Modell, Tools (einschließlich Dateisuche, Code-Interpreter und andere benutzerdefinierte Tools) sowie die Modellkonfiguration wie Temperatur und Antwortformat.
Hier stellen wir nur die grundlegendsten Einstellungen vor, die Sie nach Ihren Bedürfnissen anpassen können.
Weitere Informationen finden Sie in den Dokumentationen zu OpenAI und Azure OpenAI.
Navigieren Sie zum OpenAI-Dashboard.: Gehen Sie zu OpenAI-Dashboard – Assistenten und klicken Sie auf „
CreateKlicken Sie auf die Schaltfläche „“ in der oberen rechten Ecke, um den Vorgang zum Erstellen eines neuen Assistenten zu starten.Benennen Sie Ihren AssistentenGeben Sie Ihrem neuen Assistenten einen Namen. Sie können einen beliebigen Namen wählen, zum Beispiel „
Test Assistant„.Systemanweisung (optional): Sie können optional eine Systemanweisung bereitstellen, um das Verhalten des Assistenten zu steuern. Lassen Sie uns diesen Schritt vorerst überspringen.
Wählen Sie ein Modell ausWählen Sie das Modell aus, das Sie für Ihren Assistenten verwenden möchten. In diesem Fall wählen wir „
gpt-4o-mini„.Tools aktivieren:
Aktivieren Sie die Option „
file search"Die Dateisuche ist ein von OpenAI bereitgestellter verwalteter RAG-Dienst. Mit diesem Tool kann das Modell relevante Informationen zur Suchanfrage aus dem Vektorspeicher abrufen und zur Beantwortung verwenden.
In diesem Fall erstellen Sie bitte einen neuen Vektorspeicher erstellenund laden Sie die Datei wildfire_stats.pdf in den Vektorspeicher hoch und fügen Sie den Vektorspeicher zum Assistenten hinzu.
Aktivieren Sie die Option „
code interpreter„Werkzeuge“Der Code-Interpreter ist ebenfalls ein integriertes Tool des OpenAI-Assistenten. Er kann den vom Modell erzeugten Code direkt ausführen und die Ausgabe bereitstellen.
Erstellen Sie drei benutzerdefinierte Funktionen mit dem folgenden Schema:
Durch die Bereitstellung dieser Definitionen ermöglichen wir dem Modell zu erkennen, welche benutzerdefinierten Funktionen es aufrufen kann. Das Modell kann zwar die erforderliche Funktion vorschlagen, die Verantwortung für die Ausführung der Funktion liegt jedoch beim Benutzer.
Funktionsdefinition: get_weather
{
"name": "get_weather",
"description": "Determine weather in my location",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state e.g. San Francisco, CA"
}
},
"additionalProperties": false,
"required": [
"city"
]
}
}
Funktionsdefinition: get_wiki_url
{
"name": "get_wiki_url",
"description": "Get the wiki url of a given location",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state e.g. San Francisco, CA"
}
},
"additionalProperties": false,
"required": [
"city"
]
}
}
Funktionsdefinition: get_webpage
{
"name": "get_webpage",
"description": "A simple web scraper that is capable of extracting information out of a url.",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The url of the webpage to get"
}
},
"additionalProperties": false,
"required": [
"url"
]
}
}
Auf diese Weise haben wir erfolgreich den Assistenten erstellt, den wir verwenden werden. Er sollte ähnlich wie in der Abbildung unten aussehen. Jetzt können Sie direkt zum Spielplatz gehen und einige Fragen stellen, um zu sehen, wie der Assistent reagiert.

Bis zu diesem Punkt sollten Sie einen Assistenten mit drei benutzerdefinierten Funktionen erstellt haben. Das Dateisuchtool sollte Zugriff auf einen Vektorspeicher haben, der eine Datei enthält.
Teil 2: Zwei Beispiele für den Aufruf von Hilfswerkzeugen
Um Ihnen zu verdeutlichen, wie der Assistent funktioniert, werden wir in diesem Abschnitt die folgenden beiden Fragen an die neu erstellten Assistenten richten und ihre Antworten untersuchen.
Die Konstruktionsdetails für diese Pipeline finden Sie in Teil 4. Konzentrieren wir uns zunächst auf die Ausführungsergebnisse der Pipeline.
Pipeline-Übersicht
Die Fahrer-Pipeline

Die Arbeitnehmer-Pipeline

Aufforderung Eins
Unsere erste Frage an den Assistenten lautet:
„Wie ist das Wetter in San Francisco und wie lautet die Wiki-URL? Und was ist der Inhalt der Wiki-Seite?“
Mit dieser Abfrage bewerten wir die Fähigkeit des Assistenten,
1) Identifizieren Sie die für eine Aufgabe erforderlichen Tools – in diesem Fall sollten alle drei aufgerufen werden: get_weather, get_wiki_url und get_webpage.
2) die sequenziellen Abhängigkeiten zwischen den Tools verstehen. Der Assistent sollte beispielsweise erkennen, dass get_wiki_url vor get_webpage aufgerufen werden muss, um die erforderliche URL zu erhalten.
Wie unten gezeigt, ist die Reaktion des Modells sowohl angemessen als auch korrekt.

Aufforderung Zwei
Unsere zweite Frage an den Assistenten lautet:
Wie viele Brände gab es zwischen 2018 und 2022 in den Vereinigten Staaten? Können Sie einen Python-Code schreiben, der die Jahre nach der Anzahl der Brände in aufsteigender Reihenfolge sortiert und mir das Wetter in San Francisco mitteilt?
Die Frage mag für sich genommen etwas seltsam erscheinen, aber unser Ziel ist es, zu bewerten, wie der Assistent mit integrierten Tools wie der Dateisuche und dem Code-Interpreter umgeht. Insbesondere möchten wir feststellen, ob er diese integrierten Tools bei der Bereitstellung einer Antwort effektiv mit benutzerdefinierten Funktionen kombinieren kann.
Um diese Frage zu beantworten, muss das Modell zunächst das Dateisuchtool aufrufen, um die erste Datenzeile aus der ersten Tabelle auf der ersten Seite der Wildfire-PDF-Datei abzurufen. Anschließend generiert es einen Python-Codeausschnitt zum Sortieren und ruft das zweite Tool, den Code-Interpreter, auf, um diesen Code auszuführen. Schließlich ruft es das dritte benutzerdefinierte Tool, get_weather, auf, um die Wetterdaten für San Francisco abzurufen.
Erwartete Daten in Wildfire PDF:

Wie unten gezeigt, reagiert das Modell wie erwartet.

Bis zu diesem Punkt sollten Sie verstanden haben, dass der Assistent drei verschiedene Kategorien von Tools nutzen kann, um Fragen von Benutzern zu beantworten.
Teil 3: Einführung neuer Snaps
Wir beginnen mit den neuen Elementen der Pipeline: zwei neu eingeführten Snaps und den zusätzlichen Attributen zu den bestehenden, bevor wir uns mit den Details der gesamten Pipeline befassen.
1. Tool Call Router (neu)

- Der Tool-Aufruf-Router „snap“ vereinfacht die Antwort des Assistenten (das Run-Objekt) für eine einfachere Weiterverarbeitung.
- Es vereint die Funktionen von
copy,mapperundJSON splitter. - Die erste Ausgabeansicht enthält:
- die Antwort des ursprünglichen Assistenten
- eine leere Liste mit dem Namen
tool_outputsdie Ergebnisse aller Funktionsausführungen im nachfolgenden Message Appender Snap zu sammeln.
- Die zweite Ausgabeansicht enthält eine Liste der aufzurufenden Tools, die aus der
required actionsAbschnitt der Antwort des Assistenten
2. Tool-Ergebnisse einreichen (neu)

Dieser Snap übermittelt eine Liste mit den Ergebnissen der Funktionsausführung an den Assistenten. Der Assistent generiert daraufhin die endgültige Antwort oder fordert weitere Tool-Aufrufe an.
3. Thread erstellen und ausführen (aktualisiert)

- Wir haben einen neuen Abschnitt zum
Create And Run ThreadKonfiguration zur Angabe detaillierter Parameter für Werkzeugaufrufe. - Die
Tool choiceMit dieser Option können Sie den Assistenten anweisen:- Werkzeuge automatisch auswählen (
AUTO) - keine Werkzeuge verwenden (
NONE) - mindestens ein Werkzeug erfordern (
REQUIRED) - ein bestimmtes benutzerdefiniertes Tool verwenden (
SPECIFY A FUNCTION, die Bereitstellung derfunction name).
- Werkzeuge automatisch auswählen (
- Die
Parallel tool callDie Option bestimmt, ob der Assistent mehrere Tools gleichzeitig aufrufen kann.
4. Thread ausführen (aktualisiert)

Die gleiche Konfiguration wird hinzugefügt zu Run Thread auch schnappen.
Teil 4: Praktischer Pipeline-Bau
Übersicht über den Pipeline-Workflow
Es gibt insgesamt 5 Pipelines.
Fahrer-Pipeline:
Sendet die erste Eingabeaufforderung an den Assistenten.
Empfängt eine Antwort, die Toolaufrufanforderungen enthält.
Leitet die Antwort an den „pipeloop”-Snap weiter, um die Worker-Pipelines zur Ausführung der Tools zu aktivieren.
Arbeitnehmer-Pipeline:
Führt die in den Toolaufruf-Anforderungen angegebenen Funktionsaufrufe aus.
Sammelt die Ergebnisse der Funktionsaufrufe.
Sendet die Ergebnisse zurück an den Assistenten.
Diese Pipeline wird so oft ausgeführt, bis keine Tools mehr aufgerufen werden können.
get_weather-Pipeline:
Nimmt einen Städtenamen als Eingabe entgegen.
Fragt eine Wetter-API ab, um das aktuelle Wetter für die angegebene Stadt zu erhalten.
Gibt die abgerufenen Wetterinformationen aus.
get_wiki_url-Pipeline:
Nimmt einen Städtenamen als Eingabe entgegen.
Sucht nach der URL der Wikipedia-Seite für die angegebene Stadt.
Gibt die gefundene URL aus.
get_webpage-Pipeline:
Nimmt eine URL als Eingabe
Rufen Sie die Webseite auf, indem Sie die URL besuchen.
Verwenden Sie ein Modell, um den Inhalt der Webseite zusammenzufassen.
Gibt dieZusammenfassung aus
Die Fahrer-Pipeline
Die Treiber-Pipeline kann auf zwei Arten erstellt werden: entweder mithilfe einer kombinierten„Erstellen und Ausführen“-Operationoder durch sequenzielles Ausführen der Schritte zum Erstellen und Ausführen. Beide Methoden führen in diesem Szenario zum gleichen Ergebnis.

Die Arbeitnehmer-Pipeline

Die get_weather-Pipeline

Sie können einen kostenlosen API-Schlüssel erhalten, indem Sie sich auf Free Weather API – WeatherAPI.com.
Die Pipeline „get_wiki_url“

Die get_webpage-Pipeline

Client abrufen: Rufen Sie die Webseite auf, auf die die URL verweist, und rufen Sie den HTML-Inhalt ab.
HTML-Parser: Parsen Sie den HTML-Inhalt in das Textformat.
Zusammenfassen: Erstellen Sie eine Benutzeraufforderung und verknüpfen Sie diese mit dem Text der Webseite.
OpenAI Summarize: Verwenden Sie das Modell, um eine Zusammenfassung des Inhalts der Webseite zu erstellen.
Eingabe und Ausgabe von Tastenkombinationen
Wir veranschaulichen die wesentlichen Ein- und Ausgänge des Zwischenprozesses anhand einer einzelnen Tool-Aufruf-Interaktion.

1. Thread erstellen und ausführen
Dieser Snap leitet die ursprüngliche Eingabeaufforderung des Benutzers an den Assistenten weiter und gibt ein Run-Objekt zurück. Das Besondere an diesem Run-Objekt ist das required action, in dem die erforderlichen Tool-Aufrufe beschrieben werden.
Ausgabe von „Thread erstellen und ausführen“ – ein Ausführungsobjekt
[
{
"run": {
"id": "run_0JYmmzkQlIGRe4E0cNK8daKm",
"object": "thread.run",
"created_at": 1730842197,
"assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
"thread_id": "thread_L1mEVGH40bHfwTf2gsDXliMi",
"status": "requires_action",
"started_at": 1730842197,
"expires_at": 1730842797,
"cancelled_at": null,
"failed_at": null,
"completed_at": null,
"required_action": {
"type": "submit_tool_outputs",
"submit_tool_outputs": {
"tool_calls": [
{
"id": "call_uOIx8piJAUty3WpFpVCcxFMc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{"city": "San Francisco, CA"}"
}
},
{
"id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
"type": "function",
"function": {
"name": "get_wiki_url",
"arguments": "{"city": "San Francisco, CA"}"
}
}
]
}
},
"last_error": null,
"model": "gpt-4o",
"instructions": "",
"tools": [
{
"type": "code_interpreter"
},
{
"type": "file_search",
"file_search": {
"ranking_options": {
"ranker": "default_2024_08_21",
"score_threshold": 0
}
}
},
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Determine weather in my location",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state e.g. San Francisco, CA"
}
},
"additionalProperties": false,
"required": [
"city"
]
},
"strict": true
}
},
{
"type": "function",
"function": {
"name": "get_wiki_url",
"description": "Get the wiki url of a given location",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state e.g. San Francisco, CA"
}
},
"additionalProperties": false,
"required": [
"city"
]
},
"strict": true
}
},
{
"type": "function",
"function": {
"name": "get_webpage",
"description": "A simple web scraper that is capable of extracting information out of a url.",
"parameters": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The url of the webpage to get"
}
},
"additionalProperties": false,
"required": [
"url"
]
},
"strict": true
}
}
],
"tool_resources": {},
"metadata": {},
"temperature": 1,
"top_p": 1,
"max_completion_tokens": null,
"max_prompt_tokens": null,
"truncation_strategy": {
"type": "auto",
"last_messages": null
},
"incomplete_details": null,
"usage": null,
"response_format": {
"type": "text"
},
"tool_choice": "auto",
"parallel_tool_calls": true
}
}
]
2. Tool-Aufruf-Router
Es ist wichtig zu beachten, dass die erste Ausgabeansicht nicht nur die Antwort des Assistenten enthält, sondern auch eine leere Liste„tool_outputs“. Diese Liste dient als Container zum Speichern von Funktionsergebnissen, die in nachfolgenden Nachrichten-Appendern gesammelt werden.
Tool Call Router – 1. Ausgabeansicht
[
{
"run":{...},
"tool_outputs":[]
}
]
Die zweite Ausgabeansicht extrahiert die Werkzeugaufrufe aus den erforderlichen Aktionen und konvertiert die Argumentwerte in das JSON-Format, wobei sie in json_argumentsDadurch entfällt die Notwendigkeit einer nachträglichen Argumentkonvertierung durch jedes einzelne Tool.
Tool Call Router – 2. Ausgabeansicht
[
{
"id": "call_uOIx8piJAUty3WpFpVCcxFMc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
},
{
"id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
"type": "function",
"function": {
"name": "get_wiki_url",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
}
]
3. Pipeline „Snap ausführen“ – Wetterfunktion abrufen
[
{
"id": "call_uOIx8piJAUty3WpFpVCcxFMc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
}
]
Wiki-URL-Funktion abrufen – Ausgabe
[
{
"statusLine": {
"httpVersion": "HTTP/1.1",
"statusCode": 200,
"statusText": "OK"
},
"headers": {...},
"entity": {
"location": {
"name": "San Francisco",
"region": "California",
"country": "United States of America",
"lat": 37.775,
"lon": -122.4183,
"tz_id": "America/Los_Angeles",
"localtime_epoch": 1730842188,
"localtime": "2024-11-05 13:29"
},
"current": {
"last_updated_epoch": 1730841300,
"last_updated": "2024-11-05 13:15",
"temp_c": 16.2,
"temp_f": 61.2,
"is_day": 1,
"condition": {
"text": "Mist",
"icon": "//cdn.weatherapi.com/weather/64x64/day/143.png",
"code": 1030
},
"wind_mph": 4.9,
"wind_kph": 7.9,
"wind_degree": 330,
"wind_dir": "NNW",
"pressure_mb": 1018,
"pressure_in": 30.07,
"precip_mm": 0,
"precip_in": 0,
"humidity": 77,
"cloud": 0,
"feelslike_c": 16.2,
"feelslike_f": 61.2,
"windchill_c": 16.2,
"windchill_f": 61.1,
"heatindex_c": 16,
"heatindex_f": 60.9,
"dewpoint_c": 11.9,
"dewpoint_f": 53.4,
"vis_km": 8,
"vis_miles": 4,
"uv": 2.7,
"gust_mph": 7.2,
"gust_kph": 11.6
}
},
"_debug": {...},
"original": {
"id": "call_uOIx8piJAUty3WpFpVCcxFMc",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
}
}
]
Die Ausgabe des Tools liefert eine vollständige HTTP-Antwort, wir sind jedoch ausschließlich an den „Entity“-Inhalten interessiert, die als Ausgabe des Tools dienen. Diese Extraktion erfolgt im nachfolgenden Snap „Function Result Generator“.
4. Pipeline-Ausführung „Snap“ – Wiki-URL-Funktion abrufen
Wiki-URL-Funktion abrufen – Eingabe
[
{
"id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
"type": "function",
"function": {
"name": "get_wiki_url",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
}
]
Wiki-URL-Funktion abrufen – Ausgabe
[
{
"statusLine": {
"httpVersion": "HTTP/1.1",
"statusCode": 200,
"statusText": "OK"
},
"headers": {...},
"entity": [
"San Francisco, CA",
[
"San Francisco, CA"
],
[
""
],
[
"https://en.wikipedia.org/wiki/San_Francisco,_CA"
]
],
"_debug": {...},
"original": {
"id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
"type": "function",
"function": {
"name": "get_wiki_url",
"arguments": "{"city": "San Francisco, CA"}",
"json_arguments": {
"city": "San Francisco, CA"
}
}
}
}
]
Die Ausgabe des Tools liefert eine vollständige HTTP-Antwort, wir sind jedoch ausschließlich an den „Entity“-Inhalten interessiert, die als Ausgabe des Tools dienen. Diese Extraktion erfolgt im nachfolgenden Snap „Function Result Generator“.
5. Nachrichten-Appender
Die Ausgabe des Message Appender enthält ein Run-Objekt aus dem Upstream, wir sind jedoch ausschließlich an der tool_outputs Feld, das eine Liste von Funktionsergebnissen enthält. Daher verwenden wir im folgenden Snap „Tool-Ausgaben übermitteln“ nur das tool_outputs Feld.
Nachrichten-Appender – Ausgabe
[
{
"run": {...},
"tool_outputs": [
{
"sl_role": "TOOL",
"function_id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
"content": [
"San Francisco, CA",
[
"San Francisco, CA"
],
[
""
],
[
"https://en.wikipedia.org/wiki/San_Francisco,_CA"
]
]
},
{
"sl_role": "TOOL",
"function_id": "call_uOIx8piJAUty3WpFpVCcxFMc",
"content": {
"last_updated_epoch": 1730841300,
"last_updated": "2024-11-05 13:15",
"temp_c": 16.2,
"temp_f": 61.2,
"is_day": 1,
"condition": {
"text": "Mist",
"icon": "//cdn.weatherapi.com/weather/64x64/day/143.png",
"code": 1030
},
"wind_mph": 4.9,
"wind_kph": 7.9,
"wind_degree": 330,
"wind_dir": "NNW",
"pressure_mb": 1018,
"pressure_in": 30.07,
"precip_mm": 0,
"precip_in": 0,
"humidity": 77,
"cloud": 0,
"feelslike_c": 16.2,
"feelslike_f": 61.2,
"windchill_c": 16.2,
"windchill_f": 61.1,
"heatindex_c": 16,
"heatindex_f": 60.9,
"dewpoint_c": 11.9,
"dewpoint_f": 53.4,
"vis_km": 8,
"vis_miles": 4,
"uv": 2.7,
"gust_mph": 7.2,
"gust_kph": 11.6
}
}
]
}
]
6. Tool-Ergebnisse übermitteln
Diese Weiterleitungsfunktion führt zum Assistenten und erhält als Antwort ein Run-Objekt. Dieses Objekt kann entweder die endgültige Antwort liefern oder nachfolgende Tool-Aufrufe vorgeben.
In diesem Beispiel gibt die Ausgabe des Assistenten das nächste aufzurufende Tool an, wie durch die „erforderliche Aktion” angegeben.
Tool-Ausgaben übermitteln – Ausgabe – Beispiel für nachfolgende Tool-Aufrufe
[
{
"run": {
"id": "run_0JYmmzkQlIGRe4E0cNK8daKm",
"object": "thread.run",
"created_at": 1730842197,
"assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
"thread_id": "thread_L1mEVGH40bHfwTf2gsDXliMi",
"status": "requires_action",
"started_at": 1730842201,
"expires_at": 1730842797,
"cancelled_at": null,
"failed_at": null,
"completed_at": null,
"required_action": {
"type": "submit_tool_outputs",
"submit_tool_outputs": {
"tool_calls": [
{
"id": "call_lsZpmQ4SPZ6QJ6Dsuk8tvzvy",
"type": "function",
"function": {
"name": "get_webpage",
"arguments": "{"url":"https://en.wikipedia.org/wiki/San_Francisco,_CA"}"
}
}
]
}
},
"last_error": null,
"model": "gpt-4o",
"instructions": "",
"tools": [...],
"tool_resources": {},
"metadata": {},
"temperature": 1,
"top_p": 1,
"max_completion_tokens": null,
"max_prompt_tokens": null,
"truncation_strategy": {
"type": "auto",
"last_messages": null
},
"incomplete_details": null,
"usage": null,
"response_format": {
"type": "text"
},
"tool_choice": "auto",
"parallel_tool_calls": true
},
"original": {
"run": {...},
"tool_outputs": [...]
}
}
]
Im folgenden Beispiel gibt der Assistent das Endergebnis aus. Die Ausgabe enthält eine zusätzliche Nachrichtenliste, die sowohl das Ergebnis selbst als auch die ursprüngliche Benutzeraufforderung enthält.
Tool-Ergebnisse einreichen – Ausgabe – Beispiel für die endgültige Antwort
[
{
"messages": [
{
"id": "msg_ETlH4jGXltDdopImtZFBhI7a",
"object": "thread.message",
"created_at": 1730845440,
"assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
"thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
"run_id": "run_lunPUVK7tmVV7NTiL72NKRju",
"role": "assistant",
"content": [
{
"type": "text",
"text": {
"value": "The current weather in San Francisco, CA is sunny with a temperature of 17.3°C (63.1°F). There's a light breeze coming from the northwest at about 10.8 kph (6.7 mph), and the humidity level is at 63%. There is no precipitation at the moment, and the visibility is 11 kilometers (6 miles) .nnYou can find more detailed information about San Francisco on its [Wikipedia page](https://en.wikipedia.org/wiki/San_Francisco,_CA) . Here's a summary of the content from the page:nn- **Location**: San Francisco is at the north end of the San Francisco Peninsula, embracing parts of the Pacific Ocean and San Francisco Bay.n- **Population**: As of 2023, it has an estimated population of 808,988, making it the fourth-most populous city in California.n- **Area**: It covers 46.9 square miles (121 square kilometers).n- **Diversity**: The city is majority-minority with diverse demographics.n- **History**: The indigenous Yelamu of the Ramaytush Ohlone inhabited the area before European settlement in 1776.n- **Economic Importance**: Known globally for technology, finance, and tourism.n- **Cultural Landmarks**: Home to iconic sites like the Golden Gate Bridge and Alcatraz Island.n- **Climate**: It has a warm-summer Mediterranean climate with frequent fog in summer.n- **Education**: Hosts the University of California, San Francisco, and San Francisco State University.n- **Neighborhoods & Demographics**: Known for diverse neighborhoods with unique character.n- **Economy & Culture**: A robust economy with significant tech and finance sectors, along with a vibrant arts scene.n- **Government**: Operates under a Mayor-Council system.nnThis encapsulates San Francisco's historical, cultural, and economic significance .",
"annotations": []
}
}
],
"attachments": [],
"metadata": {}
},
{
"id": "msg_1VUwhJdB9k2zOl9g0NH2rGQU",
"object": "thread.message",
"created_at": 1730845275,
"assistant_id": null,
"thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
"run_id": null,
"role": "user",
"content": [
{
"type": "text",
"text": {
"value": "What is the weather and the wiki url of San Francisco? And what is the content of the wiki page?",
"annotations": []
}
}
],
"attachments": [],
"metadata": {}
}
],
"run": {
"id": "run_lunPUVK7tmVV7NTiL72NKRju",
"object": "thread.run",
"created_at": 1730845275,
"assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
"thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
"status": "completed",
"started_at": 1730845440,
"expires_at": null,
"cancelled_at": null,
"failed_at": null,
"completed_at": 1730845445,
"required_action": null,
...
},
"original": {}
}
]
Schnapp-Einstellungen
Dieser Artikel befasst sich insbesondere mit den Einstellungen für die Schleifenbedingungen in der pipeloop.

Wir haben die Schleife so konfiguriert, dass sie beendet wird, wenn die Antwort des Assistenten darauf hindeutet, dass keine weiteren Tool-Aufrufe erforderlich sind (d. h. „required_action” ist null). Der Grund dafür ist, dass es keinen Grund gibt, den Worker mit Pipeloop weiter auszuführen, wenn keine zusätzlichen Tool-Aufrufe erforderlich sind.
Randfall – Wenn kein Tool-Aufruf erforderlich ist
Die bisherige Treiber-Pipeline hatte eine Einschränkung: Sie konnte keine Fälle verarbeiten, in denen das Modell die Anfrage des Benutzers direkt beantworten konnte, ohne benutzerdefinierte Funktionen aufzurufen.
Dies lag daran, dass die Ausgabe von Create and Run Thread würde nicht enthalten required_action Feld. Da der Pipeloop-Snap einer Do-While-Logik folgt, würde er immer mindestens einmal ausgeführt werden, bevor die Stoppbedingung überprüft wird. Wenn der Assistent keinen Tool-Aufruf benötigte, führte die Übermittlung der Tool-Aufruf-Ausgabe an den Assistenten in der Worker-Pipeline daher zu einem Fehler.
Die folgende Treiber-Pipeline bietet eine einfache Lösung für dieses Problem, indem sie einen Router verwendet, um die Pipeloop für Anfragen zu umgehen, die direkt beantwortet werden können.



