Einführung von Tool Calling Snaps und LLM Agent Pipelines

Tim Fan Kopfbild
11 min gelesen
Fassen Sie dies mit AI zusammen

In diesem Artikel stellen wir Ihnen Folgendes vor.

  • Teil 1: Vier neue Klassen von Snaps für LLM -Funktionsaufrufe: Funktionsgenerator, Toolaufruf, Funktionsergebnisgenerator und Message Appender, die speziell für Toolaufrufe entwickelt wurden.

  • Teil 2: Die Funktionsaufruf-Pipeline, um zu demonstrieren, wie die neuen Funktionsaufruf-Snaps zusammenarbeiten, um LLM -Funktionsaufrufe auszuführen.

  • Teil 3: Verwendung von PipeLoop Snap zur Orchestrierung von Agent-Pipelines: Rufen Sie die Function Calling-Pipeline iterativ auf, bis das Modell ein Endergebnis generiert oder andere Beendigungsbedingungen erfüllt, um agentenbasierte Workflows auszuführen.

Teil 1: Vorstellung von 4 neuen Snap-Klassen für den Aufruf von Tools

  • Funktionsgenerator-Snap: Erstellen Sie eine Funktionsdefinition.

  • Tool Calling Snap: Sendet eine Tool-Aufrufanforderung an das Modell, um die Antwort des LLM -Modells abzurufen.

  • Funktion „Ergebnis-Snap“: Formatiert das Ergebnis der Tool-Ausführung, das an das LLM zurückgesendet werden soll.

  • Message Appender Snap: Fügt die Tool-Ergebnisse an das Payload-Array der Nachrichten an.

Funktionsgenerator-Snap

Der Funktionsgenerator-Snap erleichtert die Erstellung einer Werkzeugdefinition, sodass das Modell die verfügbaren Werkzeuge verstehen und nutzen kann.

tfan_3-1731089872428.png

Beispielausgabe: 

[
    {
        "tools": [
            {
                "sl_type": "function",
                "name": "get_current_weather",
                "description": "Get the curent weather in a given location",
                "parameters": [
                    {
                        "name": "location",
                        "type": "STRING",
                        "description": "The city and state, e.g. San Francisco, CA",
                        "required": true
                    },
                    {
                        "name": "unit",
                        "type": "STRING",
                        "enum": [
                            "celcius",
                            "fahrenheit"
                        ],
                        "required": false
                    }
                ]
            }
        ]
    }
]

Werkzeugaufruf-Snap

Das Tool Calling Snap leitet Benutzereingaben und Werkzeugspezifikationen an das Modell weiter. APIund erhält im Gegenzug die vom Modell generierte Ausgabe.

tfan_4-1731090030663.png

Dieser Snap hat zwei Ausgabeansichten:

  • Die erste Ansicht gibt aus

    • die vollständige Antwort des Modells

    • die vollständige Nutzlast der Nachricht, einschließlich der aktuellen Antwort des Modells

  • Die zweite Ansicht gibt aus

    • die Liste der aufzurufenden Tools

      • Im OpenAI und Azure OpenAI Tool Calling Snap, einem JSON Argumentfeld hinzugefügt, dessen Wert ein JSON- Objekt ist, das aus der Konvertierung des stringformatierten Arguments des Antwort-Toolaufrufs des Modells abgeleitet wird.

Beispiel-Eingabe:

[
    {
        "tools": [
            {
                "sl_type": "function",
                "name": "get_current_weather",
                "description": "Get the curent weather in a given location",
                "parameters": [
                    {
                        "name": "location",
                        "type": "STRING",
                        "description": "The city and state, e.g. San Francisco, CA",
                        "required": true
                    },
                    {
                        "name": "unit",
                        "type": "STRING",
                        "enum": [
                            "celcius",
                            "fahrenheit"
                        ],
                        "required": false
                    }
                ]
            }
        ],
        "original": {
            "messages": [
                {
                    "content": "You are a helpful assistant.",
                    "sl_role": "USER"
                }
            ],
            "original": {
                "prompt": "You are a helpful assistant.",
                "original": {
                    "prompt": "What's the weather in San Francisco?"
                }
            }
        }
    }
]

Beispielausgabe – LLM-Antwortansicht:

[
    {
        "output": {
            "message": {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        },
        "stopReason": "tool_use",
        "usage": {
            "inputTokens": 272,
            "outputTokens": 90,
            "totalTokens": 362
        },
        "metrics": {
            "latencyMs": 1905
        },
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "text": "What's the weather in San Francisco?"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        ],
        "original": {
            "tools": [
                {
                    "sl_type": "function",
                    "name": "get_current_weather",
                    "description": "Get the curent weather in a given location",
                    "parameters": [
                        {
                            "name": "location",
                            "type": "STRING",
                            "description": "The city and state, e.g. San Francisco, CA",
                            "required": true
                        },
                        {
                            "name": "unit",
                            "type": "STRING",
                            "enum": [
                                "celcius",
                                "fahrenheit"
                            ],
                            "required": false
                        }
                    ]
                }
            ],
            "original": {
                "messages": [
                    {
                        "content": "What's the weather in San Francisco?",
                        "sl_role": "USER"
                    }
                ],
                "original": {
                    "prompt": "You are a helpful assistant.",
                    "original": {
                        "prompt": "What's the weather in San Francisco?"
                    }
                }
            }
        }
    }
]

Beispielausgabe – Ansicht „Toolaufrufe“:

[
    {
        "toolUse": {
            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
            "name": "get_current_weather",
            "input": {
                "location": "San Francisco, CA",
                "unit": "fahrenheit"
            }
        }
    }
]

Funktion Ergebnisgenerator Snap

Der Function Result Generator Snap formatiert die von benutzeraufgerufenen Funktionen generierten Ergebnisse in eine benutzerdefinierte Datenausgabestruktur, die innerhalb von SnapLogic definiert ist.

Verschiedene Modelle haben unterschiedliche Anforderungen an den Datentyp der Inhalt Feld. Zum Beispiel: Fundament Converse erfordert, dass Inhalt ein stringoder ein json, OpenAI erfordert, dass Inhalte stringnur. Der Snap wandelt den Inhalt des Benutzers in eine Zeichenkette um, wenn das Format im Feld nicht unterstützt wird.

tfan_6-1731090890474.png

Beispiel-Eingabe:

[
    {
        "content": [
            {
                "location": {
                    "name": "San Francisco",
                    "region": "California",
                    "country": "United States of America",
                    "lat": 37.775,
                    "lon": -122.4183,
                    "tz_id": "America/Los_Angeles",
                    "localtime_epoch": 1728429316,
                    "localtime": "2024-10-08 16:15"
                },
                "current": {
                    "last_updated_epoch": 1728429300,
                    "last_updated": "2024-10-08 16:15",
                    "temp_c": 17.3,
                    "temp_f": 63.1,
                    "is_day": 1,
                    "condition": {
                        "text": "Sunny",
                        "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
                        "code": 1000
                    },
                    "wind_mph": 9.8,
                    "wind_kph": 15.8,
                    "wind_degree": 261,
                    "wind_dir": "W",
                    "pressure_mb": 1012,
                    "pressure_in": 29.89,
                    "precip_mm": 0,
                    "precip_in": 0,
                    "humidity": 88,
                    "cloud": 0,
                    "feelslike_c": 17.3,
                    "feelslike_f": 63.1,
                    "windchill_c": 17,
                    "windchill_f": 62.6,
                    "heatindex_c": 17,
                    "heatindex_f": 62.6,
                    "dewpoint_c": 13.7,
                    "dewpoint_f": 56.7,
                    "vis_km": 13,
                    "vis_miles": 8,
                    "uv": 2.3,
                    "gust_mph": 17.9,
                    "gust_kph": 28.8
                }
            }
        ],
        "original": {
            "toolUse": {
                "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                "name": "get_current_weather",
                "input": {
                    "location": "San Francisco, CA",
                    "unit": "fahrenheit"
                }
            }
        }
    }
]

Beispielausgabe:

[
    {
        "sl_role": "TOOL",
        "function_id": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
        "is_error": false,
        "content": {
            "location": {
                "name": "San Francisco",
                "region": "California",
                "country": "United States of America",
                "lat": 37.775,
                "lon": -122.4183,
                "tz_id": "America/Los_Angeles",
                "localtime_epoch": 1728429316,
                "localtime": "2024-10-08 16:15"
            },
            "current": {
                "last_updated_epoch": 1728429300,
                "last_updated": "2024-10-08 16:15",
                "temp_c": 17.3,
                "temp_f": 63.1,
                "is_day": 1,
                "condition": {
                    "text": "Sunny",
                    "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
                    "code": 1000
                },
                "wind_mph": 9.8,
                "wind_kph": 15.8,
                "wind_degree": 261,
                "wind_dir": "W",
                "pressure_mb": 1012,
                "pressure_in": 29.89,
                "precip_mm": 0,
                "precip_in": 0,
                "humidity": 88,
                "cloud": 0,
                "feelslike_c": 17.3,
                "feelslike_f": 63.1,
                "windchill_c": 17,
                "windchill_f": 62.6,
                "heatindex_c": 17,
                "heatindex_f": 62.6,
                "dewpoint_c": 13.7,
                "dewpoint_f": 56.7,
                "vis_km": 13,
                "vis_miles": 8,
                "uv": 2.3,
                "gust_mph": 17.9,
                "gust_kph": 28.8
            }
        }
    }
]

Nachrichten-Appender-Snap

Der Message Appender Snap fügt die Ergebnisse der Tool-Ausführungen zur Nachrichtenliste hinzu und dient als Eingabe für nachfolgende Tool-Aufrufe.

tfan_7-1731090975883.png

Beispiel-Eingabe – Erste Eingabe Ansicht – Meldungen

[
    {
        "output": {
            "message": {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        },
        "stopReason": "tool_use",
        "usage": {
            "inputTokens": 272,
            "outputTokens": 90,
            "totalTokens": 362
        },
        "metrics": {
            "latencyMs": 1905
        },
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "text": "What's the weather in San Francisco?"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        ],
        "original": {
            "tools": [
                {
                    "sl_type": "function",
                    "name": "get_current_weather",
                    "description": "Get the curent weather in a given location",
                    "parameters": [
                        {
                            "name": "location",
                            "type": "STRING",
                            "description": "The city and state, e.g. San Francisco, CA",
                            "required": true
                        },
                        {
                            "name": "unit",
                            "type": "STRING",
                            "enum": [
                                "celcius",
                                "fahrenheit"
                            ],
                            "required": false
                        }
                    ]
                }
            ],
            "original": {
                "messages": [
                    {
                        "content": "What's the weather in San Francisco?",
                        "sl_role": "USER"
                    }
                ],
                "original": {
                    "prompt": "You are a helpful assistant.",
                    "original": {
                        "prompt": "What's the weather in San Francisco?"
                    }
                }
            }
        }
    }
]

Beispiel-Eingabe – Zweite Eingabe Ansicht – Werkzeug Ergebnis

[
    {
        "sl_role": "TOOL",
        "function_id": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
        "is_error": false,
        "content": {
            "location": {
                "name": "San Francisco",
                "region": "California",
                "country": "United States of America",
                "lat": 37.775,
                "lon": -122.4183,
                "tz_id": "America/Los_Angeles",
                "localtime_epoch": 1728429316,
                "localtime": "2024-10-08 16:15"
            },
            "current": {
                "last_updated_epoch": 1728429300,
                "last_updated": "2024-10-08 16:15",
                "temp_c": 17.3,
                "temp_f": 63.1,
                "is_day": 1,
                "condition": {
                    "text": "Sunny",
                    "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
                    "code": 1000
                },
                "wind_mph": 9.8,
                "wind_kph": 15.8,
                "wind_degree": 261,
                "wind_dir": "W",
                "pressure_mb": 1012,
                "pressure_in": 29.89,
                "precip_mm": 0,
                "precip_in": 0,
                "humidity": 88,
                "cloud": 0,
                "feelslike_c": 17.3,
                "feelslike_f": 63.1,
                "windchill_c": 17,
                "windchill_f": 62.6,
                "heatindex_c": 17,
                "heatindex_f": 62.6,
                "dewpoint_c": 13.7,
                "dewpoint_f": 56.7,
                "vis_km": 13,
                "vis_miles": 8,
                "uv": 2.3,
                "gust_mph": 17.9,
                "gust_kph": 28.8
            }
        }
    }
]

Beispielausgabe

[
    {
        "output": {
            "message": {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        },
        "stopReason": "tool_use",
        "usage": {
            "inputTokens": 272,
            "outputTokens": 90,
            "totalTokens": 362
        },
        "metrics": {
            "latencyMs": 1905
        },
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "text": "What's the weather in San Francisco?"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            },
            {
                "sl_role": "TOOL",
                "function_id": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                "is_error": false,
                "content": {
                    "location": {
                        "name": "San Francisco",
                        "region": "California",
                        "country": "United States of America",
                        "lat": 37.775,
                        "lon": -122.4183,
                        "tz_id": "America/Los_Angeles",
                        "localtime_epoch": 1728429316,
                        "localtime": "2024-10-08 16:15"
                    },
                    "current": {
                        "last_updated_epoch": 1728429300,
                        "last_updated": "2024-10-08 16:15",
                        "temp_c": 17.3,
                        "temp_f": 63.1,
                        "is_day": 1,
                        "condition": {
                            "text": "Sunny",
                            "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
                            "code": 1000
                        },
                        "wind_mph": 9.8,
                        "wind_kph": 15.8,
                        "wind_degree": 261,
                        "wind_dir": "W",
                        "pressure_mb": 1012,
                        "pressure_in": 29.89,
                        "precip_mm": 0,
                        "precip_in": 0,
                        "humidity": 88,
                        "cloud": 0,
                        "feelslike_c": 17.3,
                        "feelslike_f": 63.1,
                        "windchill_c": 17,
                        "windchill_f": 62.6,
                        "heatindex_c": 17,
                        "heatindex_f": 62.6,
                        "dewpoint_c": 13.7,
                        "dewpoint_f": 56.7,
                        "vis_km": 13,
                        "vis_miles": 8,
                        "uv": 2.3,
                        "gust_mph": 17.9,
                        "gust_kph": 28.8
                    }
                }
            }
        ],
        "original": {
            "tools": [
                {
                    "sl_type": "function",
                    "name": "get_current_weather",
                    "description": "Get the curent weather in a given location",
                    "parameters": [
                        {
                            "name": "location",
                            "type": "STRING",
                            "description": "The city and state, e.g. San Francisco, CA",
                            "required": true
                        },
                        {
                            "name": "unit",
                            "type": "STRING",
                            "enum": [
                                "celcius",
                                "fahrenheit"
                            ],
                            "required": false
                        }
                    ]
                }
            ],
            "original": {
                "messages": [
                    {
                        "content": "What's the weather in San Francisco?",
                        "sl_role": "USER"
                    }
                ],
                "original": {
                    "prompt": "You are a helpful assistant.",
                    "original": {
                        "prompt": "What's the weather in San Francisco?"
                    }
                }
            }
        }
    }
]

Durch die Nutzung der vier neuen Snaps können wir Pipelines erstellen, die LLM- Funktionsaufrufe unterstützen. Diese werden wir als „Function Calling Pipelines” bezeichnen.

Teil 2: Beispiel für eine Funktionsaufruf-Pipeline

Diese Pipeline zeigt, wie die neuen Snaps zum Aufrufen von LLM- Funktionen verwendet werden können.

tfan_8-1731091233954.png

Einrichtung 

Wir werden die folgenden vier Snaps für den Aufruf der LLM- Funktion verwenden:

  1. Funktionsgenerator-Snap

  2. Werkzeugaufruf-Snap

  3. Funktion Ergebnisgenerator Snap

  4. Nachrichten-Appender-Snap

Die Funktionsaufruf-Pipeline umfasst zwei Tools als Pipelines:

  • get_current_weather ( mit PipeExec)

    • Diese Pipeline ruft Wetterinformationen für einen bestimmten Standort ab.

    • Pipeline-Einrichtung

    • tfan_10-1731091300575.png
    • Ein HTTP Client, der eine Verbindung zum weatherapi-Endpunkt herstellt

    • Ein Mapper, der die JSON -Ausgabe an das Inhaltsfeld übergibt

  • foo_tool

    • Ein Spielzeug-Tool, das „foo“ als Ergebnis ausgibt und zur Demonstration der Multi-Tool-Aufrufmöglichkeiten dient.

    • Pipeline-Einrichtung

      • tfan_12-1731091430626.png
      • Ein Mapper, der „foo“ in der Inhaltsausgabe ausgibt.

Ausführungsablauf

tfan_13-1731091486816.png

Der Ausführungsablauf dieser Pipeline umfasst die folgenden Schritte:

  1. Der Benutzer gibt die Eingabeaufforderung (in einer Nachrichten-Nutzlast verpackt) in einem JSON-Generator-Snap ein, erstellt mit dem Funktionsgenerator-Snap Werkzeugdefinitionen, die dann über den Werkzeugaufruf-Snap an das LLM gesendet werden.

  2. Die Ansicht „Chat-Abschlüsse“ des Tool Calling Snap gibt die Antwort des LLM aus und fügt die aktuelle Antwort des LLM in die Nachrichten-Nutzlast ein. Sie ist zur Verarbeitung mit dem ersten Eingang des Message Appender Snap verbunden. Die Ansicht „Tool-Aufrufe“ ist mit einem Router verbunden, um Tool-Aufrufe an die einzelnen Tools weiterzuleiten.

  3. Die Tools werden aufgerufen, dann werden die Ergebnisse vom Function Result Generator Snap formatiert.

  4. Der Message Appender Snap sammelt alle Toolaufrufergebnisse und hängt sie an das Nachrichtenarray aus der Ansicht „Chat-Abschlüsse “ des Tool Calling Snap an. Anschließend gibt er das geänderte Nachrichtenarray aus.

Die Ausgabe des Message Appender enthält den Nachrichtenverlauf aus der Benutzeraufforderung, die Antworten des LLM-Modells und die Ausgabe des Toolaufrufs, die das Ende dieser Runde des Toolaufrufs markiert.

Teil 3: Agent-Pipelines

Um LLM -Funktionsaufruf-Pipelines oder LLM -Agent-Pipelines zu orchestrieren, führen wir zwei Muster als Pipelines ein, um diese Funktionalität zu ermöglichen.

Agent-Treiber-Pipeline

Die Agent Driver Pipeline nutzt PipeLoop Snap, um iterative Ausführungen in einer einzigen Pipeline zu ermöglichen. Die Eingabeaufforderung wird definiert und dann an die Agent Worker Pipeline (eine Function Calling Pipeline) gesendet. Die Ausgabe der Function Calling Pipeline wird dann gesammelt und erneut als zweite Iterationseingabe der Function Calling Pipeline gesendet. Die Iteration wird fortgesetzt, bis die in PipeLoop festgelegte Stoppbedingung erreicht ist oder das Iterationslimit erreicht ist.

tfan_14-1731091544166.png

Agent-Arbeiter-Pipeline

Die Agent Worker Pipeline ähnelt einer Function Calling Pipeline, mit dem einzigen Unterschied, dass die Nachrichten-Nutzlast von der Agent Driver Pipeline über PipeLoop Snap statt über einen JSON Generator Snap gesendet wird.

tfan_15-1731091592630.png

Beispiel für eine Agent-Pipeline – get_weather 

Dieses Beispiel zeigt einen Assistenten zur Wetterüberprüfung. Dieser Agent ist mit einem einzigen Tool ausgestattet – get_weather, das die Wetterdaten eines bestimmten Ortes abruft.

Agent-Treiber-Pipeline

In diesem Beispiel gibt der Benutzer eine Nutzlast wie unten angegeben ein, um nach dem Wetter an einem bestimmten Ort zu fragen. (Dies wird mithilfe eines JSON -Generators namens Snap simuliert.)

{ "prompt": "What's the weather in San Francisco?" }

Die Systemaufforderung für diesen Wetterassistenten wird dann im ersten Aufforderungsgenerator definiert.

„Sie sind ein hilfsbereiter Wetterassistent, der Fragen zum Wetter eines bestimmten Ortes beantwortet. Sie erhalten ein Tool, mit dem Sie das Wetter des Ortes überprüfen können.“

Die Benutzeraufforderung für diesen Fall ist einfach die Aufforderungsnutzlast vom Benutzer, die wir über den PipeLoop Snap an die Agent Worker Pipeline weiterleiten. Wir stoppen die PipeLoop-Ausführung, wenn der Grund für die Beendigung des LLM stop oder end_turn (abhängig vom LLM-Modell)

Agent-Arbeiter-Pipeline

In der Agent Worker Pipeline umfasst der Ablauf die folgenden Schritte

Erste Iteration:

  1. Erstellen Sie Funktionsdefinitionen für die aufzurufenden Tools. In diesem Fall die Funktion get_weather.

  2. Übergeben Sie die Nachrichten-Nutzlast (System- und Benutzeraufforderungen) und die Tool-Nutzlast (Funktionsdefinitionen) an den Tool Calling Snap. Der Tool Calling Snap entscheidet dann, ob ein Tool aufgerufen oder ein Ergebnis generiert wird. Im ersten Fall gibt er eine Tool-Aufrufentscheidung zurück, die von der Pipeline verarbeitet wird.

    [
    {
    "toolUse": {
    "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
    "name": "get_current_weather",
    "input": {
    "location": "San Francisco, CA",
    "unit": "fahrenheit"
    }
    }
    }
    ]
  3.  Die Worker-Pipeline teilt sich dann in zwei Zweige auf. Der erste Zweig leitet die Nachrichten-Nutzlast dieser Runde an den Message Appender Snap weiter, und der zweite Zweig leitet die Tool-Aufforderungsanfrage an das Tool weiter, um einen Aufruf auszulösen und die Wetterdaten für San Francisco abzurufen.
  4. Das Ergebnis des Toolaufrufs wird vom Function Result Generator Snap erfasst und formatiert und anschließend an den Message Appender Snap weitergeleitet, damit das Ergebnis des Toolaufrufs in die Message Payload aufgenommen werden kann. In dieser Runde ist der Grund für den Abschluss des LLM ist tool_use, was bedeutet, dass die Ausführung fortgesetzt werden soll und die Ausgabe des Message Appender direkt an den Eingang der Agent Worker Pipeline gesendet wird.

Ausgabe des Message Appenders

[
    {
        "output": {
            "message": {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            }
        },
        "stopReason": "tool_use",
        "usage": {
            "inputTokens": 272,
            "outputTokens": 90,
            "totalTokens": 362
        },
        "metrics": {
            "latencyMs": 1905
        },
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "text": "What's the weather in San Francisco?"
                    }
                ]
            },
            {
                "role": "assistant",
                "content": [
                    {
                        "text": "Okay, let's get the current weather for San Francisco."
                    },
                    {
                        "toolUse": {
                            "toolUseId": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                            "name": "get_current_weather",
                            "input": {
                                "location": "San Francisco, CA",
                                "unit": "fahrenheit"
                            }
                        }
                    }
                ]
            },
            {
                "sl_role": "TOOL",
                "function_id": "tooluse_YOLmGccxRGWPmCKqxAKvgw",
                "is_error": false,
                "content": {
                    "location": {
                        "name": "San Francisco",
                        "region": "California",
                        "country": "United States of America",
                        "lat": 37.775,
                        "lon": -122.4183,
                        "tz_id": "America/Los_Angeles",
                        "localtime_epoch": 1728429316,
                        "localtime": "2024-10-08 16:15"
                    },
                    "current": {
                        "last_updated_epoch": 1728429300,
                        "last_updated": "2024-10-08 16:15",
                        "temp_c": 17.3,
                        "temp_f": 63.1,
                        "is_day": 1,
                        "condition": {
                            "text": "Sunny",
                            "icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
                            "code": 1000
                        },
                        "wind_mph": 9.8,
                        "wind_kph": 15.8,
                        "wind_degree": 261,
                        "wind_dir": "W",
                        "pressure_mb": 1012,
                        "pressure_in": 29.89,
                        "precip_mm": 0,
                        "precip_in": 0,
                        "humidity": 88,
                        "cloud": 0,
                        "feelslike_c": 17.3,
                        "feelslike_f": 63.1,
                        "windchill_c": 17,
                        "windchill_f": 62.6,
                        "heatindex_c": 17,
                        "heatindex_f": 62.6,
                        "dewpoint_c": 13.7,
                        "dewpoint_f": 56.7,
                        "vis_km": 13,
                        "vis_miles": 8,
                        "uv": 2.3,
                        "gust_mph": 17.9,
                        "gust_kph": 28.8
                    }
                }
            }
        ],
        "original": {
            "tools": [
                {
                    "sl_type": "function",
                    "name": "get_current_weather",
                    "description": "Get the curent weather in a given location",
                    "parameters": [
                        {
                            "name": "location",
                            "type": "STRING",
                            "description": "The city and state, e.g. San Francisco, CA",
                            "required": true
                        },
                        {
                            "name": "unit",
                            "type": "STRING",
                            "enum": [
                                "celcius",
                                "fahrenheit"
                            ],
                            "required": false
                        }
                    ]
                }
            ],
            "original": {
                "messages": [
                    {
                        "content": "What's the weather in San Francisco?",
                        "sl_role": "USER"
                    }
                ],
                "original": {
                    "prompt": "You are a helpful assistant.",
                    "original": {
                        "prompt": "What's the weather in San Francisco?"
                    }
                }
            }
        }
    }
]

Zweite Iteration:

  1. Die aktualisierte Nachrichtennutzlast wird dann zusammen mit den Funktionsdefinitionen erneut an den Tool Calling Snap gesendet. Der Tool Calling Snap für diese Runde generiert dann ein Ergebnis, da er die Wetterdaten für San Francisco abgerufen hat. Die Tool Call-Ausgabe des Tool Calling Snap ist für diese Runde leer, da für diese Iteration keine Tool-Aufrufe erforderlich sind.

  2. Die Nachrichten-Nutzlast wird direkt an den Message Appender Snap gesendet, und der Grund für den Abschluss des LLM ist end_turn, was bedeutet, dass die LLM hat die Anfrage erfolgreich ausgeführt. Die Ausführung von PipeLoop wird beendet und das Ergebnis wird an die Ausgabe des PipeLoop Snap in der Agent Driver Pipeline gesendet.

Und die Ausführung ist abgeschlossen.

Zusammenfassung

In diesem Artikel haben wir die neuen Snaps für den Tool-Aufruf vorgestellt – Funktionsgenerator, Tool-Aufruf, Funktionsergebnisgenerator und Message Appender. Wir haben auch darüber gesprochen, wie man Tool-Aufruf-Pipelines und Agent-Pipeline-Muster erstellt. Viel Spaß beim Erstellen!

Tim Fan Kopfbild
Software-Entwickler bei SnapLogic
Kategorie: Technik