Tool Calling¶
Lernen Sie, LLMs zu evaluieren, die über vordefinierte Funktionen und Tools mit externen Systemen interagieren
Tool Calling ermöglicht es LLMs, mit externen Systemen zu interagieren, indem es während der Antwortgenerierung Zugang zu vordefinierten Funktionen bereitstellt. Dieses Guide behandelt die Evaluierung der Tool-Auswahl eines LLMs, wenn elluminate die Antwort generiert: Sie hängen Tool-Definitionen an ein Prompt-Template, elluminate generiert eine Antwort, in der das Modell Tool-Aufrufe auswählt (aber nicht ausführt), und Ihre Kriterien bewerten diese Auswahl.
Tool Calling oder Agentic Evaluations — welches Guide?
Nutzen Sie Tool Calling (dieses Guide), wenn elluminate die Antwort generieren soll und Sie eine einstufige Tool-Auswahl (ohne Ausführung) evaluieren wollen. Für mehrstufige Agenten, die Tools tatsächlich ausführen, nutzen Sie stattdessen Agentic Evaluations: Sie führen den Agenten selbst aus und laden seine Trajectory hoch.
Basic Usage¶
Ein Beispiel, das die Integration von Wetter-Tools für Echtzeitdatenzugriff zeigt:
-
Tools definieren: Setzen Sie
toolsauf Funktions-Tool-Definitionen unter Verwendung von OpenAIsFunctionTool-Typ. Diese Definitionen beschreiben jede Funktion und spezifizieren genau, welche Eingabedaten die Funktion erwartet und welche Ausgabedaten sie zurückgibt. -
Template erstellen: Optional können Sie
tool_choicesetzen, um zu kontrollieren, wann das Modell Tools verwenden soll. Standardmäßig ist es "auto", wenn es weggelassen wird.
Sobald das Prompt-Template mit den Tool-Definitionen erstellt wurde, verläuft der Rest des Evaluierungsprozesses wie gewohnt. Experimente werden normal ausgeführt - das Modell erzeugt automatisch Tool-Aufrufe (führt sie jedoch nicht aus) - und die Kriterien evaluieren die gewählten Tools.
Tool-Aufrufe können in 'tool_calls' der Assistenten-Nachricht als Liste der aufgerufenen Tools gefunden werden:
Tool-Ausführung
elluminate unterstützt derzeit nicht die Ausführung Ihrer Tools. Beim Durchführen von Experimenten sehen Sie den Tool-Aufruf, der ausgewählt wurde, aber nicht die tatsächliche Ausgabe oder Ergebnisse dieses Tools. Um die Ausführung von Tools zu evaluieren, lesen Sie den Abschnitt Fortgeschrittenes Beispiel unten, da besondere Sorgfalt erforderlich ist.
Vollständiges Grundbeispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | |
Tool-Definitionsmethoden¶
OpenAI Function Tool Format¶
Tools werden mit OpenAIs Standard-FunctionTool-Format definiert:
from openai.types.beta import FunctionTool
weather_tool = FunctionTool(
type="function",
function={
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state/country, e.g. Berlin, DE"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The temperature unit to use"
}
},
"required": ["location", "unit"],
"additionalProperties": False
},
"strict": True
}
)
Tool Choice Konfiguration¶
Der tool_choice-Parameter kontrolliert, wann und wie das Modell verfügbare Tools verwendet:
-
Automatische Auswahl (
tool_choice="auto") - Lassen Sie das Modell entscheiden, wann und welche Tools verwendet werden sollen. -
Erforderliche Verwendung (
tool_choice="required") - Zwingen Sie das Modell, mindestens ein Tool zu verwenden. -
Deaktivierte Tools (
tool_choice="none") - Deaktivieren Sie alle Tools für diese Antwort. -
Spezifische Funktion: Zwingt das Modell, ein bestimmtes Tool aufzurufen.
Mehrstufige Tool-Nutzung evaluieren¶
Echter mehrstufiger Agent? Nutzen Sie Agentic Evaluations
Für einen Agenten, der in der Produktion Tools über viele Turns ausführt, ist Agentic Evaluations der unterstützte Weg: Führen Sie den Agenten in Ihrer eigenen Runtime aus und laden Sie seine Trajectory hoch, um Agent Trace, Ratings pro Criterion und agentische Metriken zu erhalten. Der manuelle Ansatz unten ist älter als dieses Feature — nutzen Sie ihn, wenn Sie einfach eine einzelne Tool-Konversation als eine elluminate-Antwort evaluieren möchten.
Die Evaluierung einer mehrstufigen Tool-Konversation folgt einem ähnlichen Prozess wie die Evaluierung eines einzelnen Prompts. Der einzige Unterschied besteht darin, dass Ihr Code anstatt den Prompt direkt zu inferenzieren eine beliebige Anzahl von Tool-Aufrufen durchführen kann, bevor er eine endgültige Antwort produziert. Die Evaluierung wird dann sowohl an der gesamten Tool-Kette als auch an der endgültigen Antwort durchgeführt. Dieser Abschnitt umreißt den prinzipiellen Ansatz; der folgende Abschnitt führt Sie durch ein vollständiges Beispiel.
Der erste Schritt ist nahezu identisch mit der Evaluierung eines einzelnen Prompts. Sie müssen elluminate mit Ihrem Prompt-Template laden, Kriterien hinzufügen oder generieren, sowie eine Collection mit repräsentativen Eingaben für Ihr System erstellen.
Feine Unterschiede
- Tool-Definitionen als Bewertungskontext: Damit das Bewertungsmodell Zugang zu allen Tools und ihren Parameterbeschreibungen hat, müssen Sie die Tool-Definitionen zum Prompt-Template hinzufügen. Vom SDK aus kann dies über die Parameter
toolsundtool_choicebei allencreateMethoden erfolgen. Das Frontend hat auch ein spezielles Feld zum Hinzufügen von Tool-Definitionen. Dies bietet dem Bewertungsmodell während der Bewertung wertvollen Kontext darüber, was jedes Tool und seine Parameter tun. - Maßgeschneiderte Kriterien für Tool-Aufrufe: Es kann vorteilhaft sein, Tools und ihre Parameter explizit namentlich in den Kriterien zu erwähnen. Dies hilft dem Bewertungsmodell zu wissen, auf welchen Teil des Tool-Aufrufs es sich während der Bewertung konzentrieren soll. Zum Beispiel ist "Wurde
get_current_weathermit den Temperatur-unitsaufgerufen, die am häufigsten inlocationverwendet werden?" präziser als "Sind die Einheiten für die Stadt korrekt?".
Mit diesem Setup muss Ihr bestehender agentischer Code, da elluminate Tool-Aufrufe nicht ausführen kann, die Tool-Kette inferenzieren und die endgültige Antwort selbst produzieren. Dann müssen Sie die gesamte Kette von Tool-Aufrufen, Antworten sowie die endgültige Ausgabe manuell als eine einzige Antwort in elluminate hinzufügen. Wichtig ist, dass die Einbeziehung der gesamten Aufrufkette erforderlich ist, wenn Sie sowohl den Tool-Calling-Prozess als auch die endgültige Ausgabe Ihres Agenten evaluieren möchten.
Tool-Aufrufe manuell als Antwort hinzufügen
Das SDK bietet die Methode client.responses.add, um manuell eine Antwort hinzuzufügen. Diese Methode akzeptiert entweder einen String oder eine Liste von OpenAI-Completion-Nachrichten als Antwort. Wenn Sie eine Liste von Completion-Nachrichten bereitstellen, bilden sie alle zusammen die einzige Antwort. Dies ermöglicht es dem Bewertungsmodell, nicht nur die endgültige Ausgabe zu bewerten, sondern auch alle zwischenzeitlichen Tool-Aufrufe und Tool-Ergebnisse.
Die Methode client.responses.add_many funktioniert genau gleich, wird aber für das Bulk-Hinzufügen von Antworten verwendet.
Fortgeschrittenes Beispiel¶
Dieses fortgeschrittene Beispiel demonstriert, wie man eine mehrstufige Tool-Konversation evaluiert, indem man sie als eine einzige elluminate-Antwort aufzeichnet. Der Code hat Zugang zu grundlegenden Dateisystem-Tools, die es ermöglichen, Verzeichnisse zu navigieren, Dateien zu lesen und ihre Metadaten zu analysieren. Er wird mit grundlegenden Fragen wie "Was ist die größte Datei im System?" beauftragt und darauf evaluiert, ob er korrekt geantwortet hat und welche Methoden er während des Prozesses verwendet hat. (Für einen produktiven mehrstufigen Agenten ist Agentic Evaluations vorzuziehen.)
Manuelle Tool-Ausführung erforderlich
elluminate unterstützt keine Tool-Ausführung. Daher muss die Tool-Ausführung immer noch manuell in Ihrem Code behandelt werden. Sie müssen dann die gesamte Kette von Tool-Aufrufen, Tool-Ausgaben und endgültiger Antwort als manuell hinzugefügte Antwort an elluminate zurückgeben.
Tool-Funktionsimplementierung¶
Dieses Beispiel implementiert zunächst mehrere Dateisystem-Operationen als Python-Funktionen. Es gibt Funktionen, um das aktuelle Arbeitsverzeichnis zurückzugeben, Verzeichnisse zu wechseln, Dateien aufzulisten und andere Operationen.
Tool-Funktionsimplementierung
- Aktuelles Verzeichnis: Gibt den aktuellen Arbeitsverzeichnispfad zurück
- Verzeichnisnavigation: Ändert das aktuelle Arbeitsverzeichnis
- Verzeichnis Auflistung: Listet alle Dateien und Verzeichnisse mit ihren Typen auf
- Dateistatistiken: Ruft detaillierte Dateimetadaten einschließlich Größe und Zeitstempel ab
- Datei Lesen: Liest und gibt den Inhalt von Textdateien zurück
Tool-Definitions-Setup¶
Tools werden mit OpenAIs FunctionTool-Format definiert, wobei jede Python-Funktion auf eine strukturierte Tool-Definition abgebildet wird. So erhält jede der oben definierten Python-Methoden ihre eigene FunctionTool-Definition, die ihren Namen, ihre Beschreibung und die akzeptierten Argumente festlegt.
Tool-Definitions-Setup
Inferenzierung mit Tools¶
Wie bereits erwähnt, muss die Tool-Ausführung außerhalb von elluminate behandelt werden. In einer for-Schleife im Skript inferenziert es die Prompt-Nachrichten und überprüft, ob ein Tool aufgerufen wurde. Wenn ja, führt es das Tool aus und sendet das Ergebnis zurück an das LLM. Wenn nein, verlässt es die Schleife mit der vollständigen Nachrichtenkonversation.
Multi-Turn-Konversationsbehandlung
- OpenAI-Integration: Verwendet OpenAIs Chat-Completion-API mit den Tool-Definitionen. Tool-Choice ist auf den
"auto"-Modus gesetzt. - Tool-Ausführungsschleife: Wenn Tools aufgerufen werden, führt sie diese automatisch aus und gibt die Ergebnisse als Fortsetzung der Nachrichtenkonversation zurück an das Modell.
Experiment-Setup und Evaluierung¶
Alles zusammengefügt integriert dieser Workflow den Tool-Ausführungscode mit elluminates Experiment-System. Ein Prompt-Template mit den FunctionTool-Definitionen und eine Sammlung repräsentativer Benutzeranfragen werden erstellt. Dann werden Kriterien manuell dem Prompt-Template zugewiesen. Einmal eingerichtet, wird der Tool-Ausführungscode für jede Eingabe in der Sammlung ausgeführt. Die vollständigen Nachrichtenkonversationen werden zurück in elluminate gespeichert und als Teil eines Experiments bewertet.
Vollständiger Experiment-Workflow
- Prompt-Template: Definiert einen grundlegenden System-Prompt und einen Benutzer-Prompt, der mit einer
user_queryaus einer Sammlung gefüllt werden soll. - Nachrichten-Rendering: Um manuell zu inferenzieren, muss der
user_query-Platzhalter im Prompt-Template ausgefüllt werden. Dies gibt die vollständig gerenderten Nachrichten zurück, die direkt an OpenAIs Completion-Client weitergegeben werden können. - Manuelle Tool-Ausführung: Behandelt die vollständige Tool-Calling-Konversation manuell außerhalb von elluminate
- Antwortaufzeichnung: Fügt manuell die endgültige Tool-Calling-Konversation als Antwort zu elluminate hinzu
- Experiment-Erstellung: Erstellt ein Experiment und bewertet die Antworten gegen die Kriterien des Prompt-Templates
Vollständiges fortgeschrittenes Beispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | |