Wird geladen

Mehrstufige Konversationen mit Tools

Lektion 2610 Min.

Beim Erstellen von Anwendungen mit mehreren Tools musst du Szenarien handhaben, in denen Claude möglicherweise mehrere Tools in Folge aufrufen muss, um eine einzelne Nutzerfrage zu beantworten. Wenn ein Nutzer beispielsweise fragt „Welcher Tag ist 103 Tage von heute an?", muss Claude zunächst das aktuelle Datum abrufen und dann 103 Tage dazu addieren.

Dies erzeugt ein mehrstufiges Konversationsmuster, bei dem Claude mehrere Tool-Anfragen stellt, bevor es eine endgültige Antwort liefert. Deine Anwendung muss dies automatisch handhaben.

Das mehrstufige Tool-Muster

Hier ist, was hinter den Kulissen passiert, wenn Claude mehrere Tools benötigt:

  1. Der Nutzer fragt: „Welcher Tag ist 103 Tage von heute an?"
  2. Claude antwortet mit einem Tool-Use-Block, der get_current_datetime anfordert
  3. Dein Server ruft die Funktion auf und gibt das Ergebnis zurück
  4. Claude erkennt, dass es weitere Informationen benötigt, und fordert add_duration_to_datetime an
  5. Dein Server ruft diese Funktion auf und gibt das Ergebnis zurück
  6. Claude hat nun genug Informationen, um die endgültige Antwort zu liefern

Eine Konversationsschleife erstellen

Um dieses Muster zu handhaben, benötigst du eine Konversationsschleife, die fortgesetzt wird, bis Claude keine Tools mehr anfordert:

python
def run_conversation(messages):
    while True:
        response = chat(messages)

        add_assistant_message(messages, response)

        # Pseudocode
        if response isn't asking for a tool:
            break

        tool_result_blocks = run_tools(response)
        add_user_message(messages, tool_result_blocks)
        
    return messages

Hilfsfunktionen refaktorieren

Bevor du die Konversationsschleife implementierst, musst du deine Hilfsfunktionen aktualisieren, um mehrere Nachrichtenblöcke korrekt zu handhaben.

Nachrichten-Handler aktualisieren

Deine Funktionen add_user_message und add_assistant_message gehen derzeit davon aus, dass du immer mit reinem Text arbeitest. Aktualisiere sie, um vollständige Nachrichtenobjekte zu handhaben:

python
from anthropic.types import Message

def add_user_message(messages, message):
    user_message = {
        "role": "user",
        "content": message.content if isinstance(message, Message) else message
    }
    messages.append(user_message)

Dies ermöglicht es dir, entweder einen String, eine Liste von Blöcken oder ein vollständiges Nachrichtenobjekt zu übergeben.

Die Chat-Funktion aktualisieren

Ändere deine Chat-Funktion so, dass sie eine Liste von Tools akzeptiert und die vollständige Nachricht statt nur Text zurückgibt:

python
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
    params = {
        "model": model,
        "max_tokens": 1000,
        "messages": messages,
        "temperature": temperature,
        "stop_sequences": stop_sequences,
    }
    
    if tools:
        params["tools"] = tools
        
    if system:
        params["system"] = system
        
    message = client.messages.create(**params)
    return message

Text aus Nachrichten extrahieren

Da du jetzt vollständige Nachrichtenobjekte zurückgibst, erstelle einen Helfer, um Text bei Bedarf zu extrahieren:

python
def text_from_message(message):
    return "\n".join(
        [block.text for block in message.content if block.type == "text"]
    )

Diese Funktion findet alle Textblöcke in einer Nachricht und fügt sie zusammen, was nützlich ist, wenn du die endgültige Antwort den Nutzern anzeigen musst.

Wichtige Verbesserungen

Diese Refaktorierungsschritte bereiten deinen Code auf eine robuste Tool-Handhabung vor:

  • Flexible Nachrichtenhandhabung - Deine Hilfsfunktionen können jetzt mit verschiedenen Nachrichtenformaten arbeiten
  • Tool-Unterstützung im Chat - Die Chat-Funktion kann Tool-Schemas empfangen und weiterleiten
  • Vollständige Nachrichtenrückgaben - Du erhältst vollständige Nachrichtenobjekte statt nur Text, wobei alle Blöcke erhalten bleiben
  • Text-Extraktionsdienstprogramm - Einfache Möglichkeit, lesbaren Text aus komplexen Nachrichten zu erhalten

Mit diesen Grundlagen bist du bereit, die Konversationsschleife zu implementieren, die mehrere Tool-Aufrufe automatisch handhabt und so ein nahtloses Erlebnis schafft, bei dem Claude so viele Tools wie nötig verwenden kann, um Nutzerfragen zu beantworten.