Wird geladen

Strukturierte Daten mit Tools

Lektion 308 Min.

Früher in diesem Kurs haben wir behandelt, wie man mit Claude strukturierte Ausgaben mithilfe von Message-Pre-Fills und Stop-Sequenzen erhält. Während dieser Ansatz gut funktioniert und einfach einzurichten ist, können wir mit Tools zuverlässigere Ausgaben erzielen. Diese Methode ist komplexer zu implementieren, bietet aber eine bessere Konsistenz beim Extrahieren strukturierter Daten wie JSON.

Warum beide Ansätze lernen?

Du fragst dich vielleicht, warum wir nicht einfach mit Tools begonnen haben, wenn sie zuverlässiger sind. Die Antwort ist einfach: Tools erfordern deutlich mehr Einrichtung und Komplexität. Wenn du beide Techniken zur Verfügung hast, gibt dir das Flexibilität – manchmal möchtest du den schnellen, prompt-basierten Ansatz, ein anderes Mal brauchst du die Zuverlässigkeit, die Tools bieten.

Wie toolbasierte strukturierte Ausgabe funktioniert

Das Grundkonzept ist einfach: Anstatt Claude zu bitten, seine Antwort als JSON zu formatieren, erstellst du ein Tool, dessen Eingabeparameter genau der Struktur der Daten entsprechen, die du extrahieren möchtest. Claude „ruft" dann dieses Tool mit den extrahierten Daten als Argumente auf.

So sieht der Prozess aus:

  1. Schreibe ein JSON-Schema, das die Struktur der gewünschten Daten beschreibt
  2. Erstelle ein Tool mit diesem Schema als Eingabespezifikation
  3. Sende deine Daten und das Tool-Schema an Claude
  4. Zwinge Claude dazu, das Tool mit dem Parameter toolChoice zu verwenden
  5. Extrahiere die strukturierten Daten aus den Argumenten des Tool-Aufrufs

Der Ablauf sieht folgendermaßen aus: Dein Server sendet einen Prompt, der Claude bittet, Daten zu analysieren und ein bestimmtes Tool aufzurufen. Claude antwortet mit einer Tool-Nutzungs-Nachricht, die die extrahierten JSON-Daten enthält. An diesem Punkt nimmst du einfach die Daten und beendest das Gespräch – keine Nachfrage nötig.

Steuerung der Tool-Nutzung

Wenn du Tools für strukturierte Ausgaben verwendest, möchtest du garantieren, dass Claude dein Extraktions-Tool verwendet. Der Parameter toolChoice bietet dir drei Optionen:

  • {"toolChoice": {"auto": {}}} - Das Modell entscheidet, ob es ein Tool verwenden muss (Standard)
  • {"toolChoice": {"any": {}}} - Das Modell muss ein Tool verwenden, kann aber wählen, welches
  • {"toolChoice": {"tool": {"name": "tool-name"}}} - Das Modell muss das angegebene Tool verwenden

Für strukturierte Ausgaben möchtest du fast immer die dritte Option, um sicherzustellen, dass Claude dein Extraktions-Tool verwendet.

Praktisches Beispiel

Angenommen, du möchtest den Titel, den Autor und die wichtigsten Themen aus einem Artikel extrahieren. Zuerst würdest du ein Tool-Schema erstellen:

python
article_details_schema = {
    "toolSpec": {
        "name": "article_details",
        "description": "Extracts key information from an article",
        "inputSchema": {
            "json": {
                "type": "object",
                "properties": {
                    "title": {
                        "type": "string",
                        "description": "The title of the article"
                    },
                    "author": {
                        "type": "string", 
                        "description": "The author's name"
                    },
                    "topics": {
                        "type": "array",
                        "items": {"type": "string"},
                        "description": "List of key topics mentioned"
                    }
                },
                "required": ["title", "author", "topics"]
            }
        }
    }
}

Dann würdest du Claude mit deinen Daten aufrufen und es zwingen, das Tool zu verwenden. Unser chat-Helper nimmt den Tool-Namen direkt als tool_choice-Argument entgegen, sodass du das verschachtelte toolChoice-Objekt nicht selbst erstellen musst:

python
messages = []
add_user_message(messages, f"""
Analyze the article below and extract key data. Then call the article_details tool.

<article_text>
{article_text}
</article_text>
""")

result = chat(messages, tools=[article_details_schema], tool_choice="article_details")

Claude antwortet mit einer Tool-Nutzungs-Nachricht, die die extrahierten Daten im genauen von dir angegebenen Format enthält. Die Argumente des Tool-Aufrufs enthalten deine strukturierten JSON-Daten, die bereit sind, in deiner Anwendung verwendet zu werden.

Wichtige Vorteile

  • Zuverlässiger als prompt-basierte Extraktion
  • Garantierte Struktur, die deinem Schema entspricht
  • Keine Notwendigkeit für Message-Pre-Fills oder Stop-Sequenzen
  • Integrierte Validierung durch das Tool-Schema

Der Hauptkompromiss ist die Komplexität – du musst detaillierte Schemas schreiben und Tool-Antworten verarbeiten. Aber wenn du konsistente, zuverlässige strukturierte Ausgaben benötigst, sind Tools der richtige Weg.