Implementierung von Agentic Workflows mit Function Calling
Lerne, wie man Large Language Models (LLMs) mit externen Werkzeugen (Funktionen) ausstattet, um komplexe, mehrstufige Aufgaben autonom auszuführen. Dies erweitert die Fähigkeiten von LLMs über reines Textgenerieren hinaus und ermöglicht die Interaktion mit der realen Welt.
Originalvideo ansehen: Sara Imari Walker "AI is Life" | Simulations, the Universe ...Definiere die Werkzeuge (Tools), die das LLM verwenden soll.
Jedes Werkzeug ist eine Funktion, die eine spezifische Aufgabe ausführt (z.B. Wetter abfragen, Datenbank durchsuchen, E-Mail senden). Beschreibe die Funktion und ihre Parameter klar in einem Schema (z.B. JSON Schema).
```python
import json
def get_current_weather(location: str, unit: str = "celsius"):
"""Get the current weather in a given location"""
# Hier würde die tatsächliche API-Anfrage stattfinden
if location == "Berlin":
return {"temperature": "20", "unit": unit, "description": "Sonnig"}
return {"temperature": "unknown", "unit": unit, "description": "unbekannt"}
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Ruft das aktuelle Wetter für einen bestimmten Ort ab",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "Der Ort, z.B. Berlin"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
]
```Initialisiere das LLM mit den Werkzeugen.
Verwende ein LLM, das Function Calling unterstützt (z.B. OpenAI GPT-Modelle). Übergebe die definierten Werkzeuge an das Modell zusammen mit der Benutzeranfrage.
```python
from openai import OpenAI
client = OpenAI()
# Sende die Benutzeranfrage und die Werkzeugdefinitionen an das Modell
messages = [{"role": "user", "content": "Wie ist das Wetter in Berlin?"}]
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
tools=tools,
tool_choice="auto", # Lässt das Modell entscheiden, ob es ein Tool nutzen soll
)
```Verarbeite die Modellantwort und führe bei Bedarf die Werkzeuge aus.
Wenn das Modell einen Werkzeugaufruf vorschlägt, extrahiere den Funktionsnamen und die Argumente. Führe die entsprechende Funktion aus und sende das Ergebnis zurück an das Modell, damit es seine Antwort formulieren kann.
```python
response_message = response.choices[0].message
tool_calls = response_message.tool_calls
if tool_calls:
# Hier würde die Logik zur Ausführung der Funktion(en) stehen
# Für unser Beispiel:
function_name = tool_calls[0].function.name
function_args = json.loads(tool_calls[0].function.arguments)
# Führe die Funktion basierend auf dem Namen aus
if function_name == "get_current_weather":
function_response = get_current_weather(
location=function_args.get("location"),
unit=function_args.get("unit")
)
# Sende das Ergebnis des Tools zurück an das Modell
messages.append(response_message)
messages.append(
{
"tool_call_id": tool_calls[0].id,
"role": "tool",
"name": function_name,
"content": json.dumps(function_response),
}
)
second_response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
)
print(second_response.choices[0].message.content)
```