Multi-Tool Pipeline
Auf dieser Seite
Sequentielle Orchestrierung von Werkzeugen
Der Wetter-Agent aus der vorherigen Lektion verwendete unabhängige Werkzeuge. In einer Multi-Tool-Pipeline ernähren die Ergebnisse eines Werkzeugs den nächsten Aufruf. Das Modell orchestriert die Abfolge automatisch – Ihre Aufgabe besteht darin, die Werkzeuge bereitzustellen und die Aufrufe auszuführen.
Pipeline-Architektur
Eine typische Pipeline folgt diesem Schema:
Search → Analysis → Action → Notification
Jeder Schritt erzeugt Daten, die vom nächsten Schritt verbraucht werden. Das Modell übernimmt diese Orchestrierung natürlich dank des Gesprächskontexts.
Beispiel: Wettbewerbs-Intelligence-Pipeline
Stellen Sie sich eine Pipeline vor, die Wettbewerbspreise überwacht und einen Bericht erstellt:
tools = [
{
"type": "function",
"function": {
"name": "scrape_competitor_prices",
"description": "Retrieve current prices from a competitor "
"for a list of products. Returns an array "
"of {product, price, availability}.",
"parameters": {
"type": "object",
"properties": {
"competitor": {
"type": "string",
"description": "Competitor name"
},
"products": {
"type": "array",
"items": {"type": "string"},
"description": "List of products to check"
}
},
"required": ["competitor", "products"]
}
}
},
{
"type": "function",
"function": {
"name": "compare_with_our_prices",
"description": "Compare competitor prices with our prices. "
"Returns percentage gaps and adjustment "
"recommendations.",
"parameters": {
"type": "object",
"properties": {
"competitor_prices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product": {"type": "string"},
"price": {"type": "number"}
}
}
}
},
"required": ["competitor_prices"]
}
}
},
{
"type": "function",
"function": {
"name": "generate_report",
"description": "Generate a PDF report with the benchmark "
"analysis results. Returns the report URL.",
"parameters": {
"type": "object",
"properties": {
"title": {"type": "string"},
"data": {"type": "object"},
"format": {
"type": "string",
"enum": ["pdf", "csv", "json"]
}
},
"required": ["title", "data"]
}
}
},
{
"type": "function",
"function": {
"name": "send_notification",
"description": "Send an email or Slack notification "
"with a summary and a link to the report.",
"parameters": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"enum": ["email", "slack"]
},
"recipient": {"type": "string"},
"message": {"type": "string"},
"attachment_url": {"type": "string"}
},
"required": ["channel", "recipient", "message"]
}
}
}
]
Pipeline-Ausführung
Wenn der Benutzer fragt: „Analysieren Sie die Preise von CompetitorX für unsere Top-5-Produkte und senden Sie den Bericht an das Vertriebsteam”, orchestriert das Modell:
Turn 1 : scrape_competitor_prices(competitor="CompetitorX", products=[...])
Turn 2 : compare_with_our_prices(competitor_prices=[results from turn 1])
Turn 3 : generate_report(title="CompetitorX Price Monitoring", data={...})
Turn 4 : send_notification(channel="slack", recipient="#sales", ...)
Jeder Turn nutzt die Ergebnisse des vorherigen. Das Modell überträgt Daten natürlich von einem Werkzeug zum nächsten.
Kombination von Server- und Client-Werkzeugen in einer Pipeline
Die leistungsfähigsten Pipelines kombinieren Server- und Client-Werkzeuge:
tools = [
{"type": "web_search"}, # Server: web search
{
"type": "function",
"function": {
"name": "extract_data",
"description": "Extract structured data from raw text",
"parameters": { ... }
}
},
{
"type": "function",
"function": {
"name": "save_to_crm",
"description": "Save extracted data to the CRM",
"parameters": { ... }
}
}
]
Ablauf: Das Modell führt eine Websuche durch (automatisch auf Serverseite), ruft dann Ihre Extraktionsfunktion auf (Clientseite) und speichert schließlich die Daten im CRM (Clientseite).
Muster: Fan-out / Fan-in
Manche Pipelines erfordern ein Fan-out-Muster (mehrere parallele Aufrufe), gefolgt von einem Fan-in (Aggregation der Ergebnisse):
┌→ scrape_site_A ─┐
Request ─┤→ scrape_site_B ─┤→ aggregate_results → generate_report
└→ scrape_site_C ─┘
Das Modell bewältigt dies natürlich mit parallelen Aufrufen:
Turn 1 : [scrape_site_A, scrape_site_B, scrape_site_C] (parallel)
Turn 2 : aggregate_results(data=[result_A, result_B, result_C])
Turn 3 : generate_report(aggregated_data={...})
Fehlerbehandlung in einer Pipeline
Eine robuste Pipeline behandelt Fehler in jedem Schritt:
def execute_with_retry(name, args, max_retries=2):
for attempt in range(max_retries + 1):
try:
result = execute_function(name, args)
if "error" not in result:
return result
except Exception:
pass
if attempt < max_retries:
time.sleep(1) # Wait before retry
return {
"error": f"Failed after {max_retries + 1} attempts",
"function": name,
"partial_data": None
}
Wenn ein Schritt fehlschlägt, kann das Modell:
- Mit angepassten Parametern erneut versuchen
- Den Schritt überspringen und mit unvollständigen Daten fortfahren
- Den Benutzer informieren und Anweisungen anfordern
Kernaussagen
- Eine Multi-Tool-Pipeline verknüpft die Ergebnisse eines Werkzeugs mit dem nächsten.
- Das Modell orchestriert die Abfolge automatisch dank des Kontexts.
- Das Fan-out/Fan-in-Muster kombiniert parallele Aufrufe und Aggregation.
- Kombinieren Sie Server-Werkzeuge (web_search) und Client-Werkzeuge (Ihre Funktionen) für hybride Pipelines.
- Behandeln Sie Fehler in jedem Schritt mit Retry und Fallback-Mechanismen.
- Jedes Werkzeug in der Pipeline muss eine klare, einzelne Verantwortung haben.