Zum Hauptinhalt springen

Quellen in Bot-Antworten

Kurzfassung: Sie können einer Bot-Äußerung eine Liste von Markdown-Strings als sources anhängen. Im Chat-Client werden diese Quellen hinter einem kleinen Quellenauslöser angezeigt und können in einem Aufklapp-Panel mit einer Quellenkarte pro Eintrag geöffnet werden.

Die Quellen-Funktion ermöglicht es Bot-Entwicklern, strukturierte Referenzen an eine Bot-Antwort anzuhängen. Dies ist nützlich, wenn eine Antwort zeigen soll, woher die Informationen stammen, weiteres Lesen ermöglichen oder eine kurze Zusammenfassung mit externen Links bieten soll.

Jede Quelle wird als Markdown-String bereitgestellt. Der Chat-Client rendert diese Einträge in einer speziellen Quellen-Benutzeroberfläche unterhalb des Antwortflusses, anstatt sie direkt in den Antworttext zu mischen.

Was die Funktion macht

Wenn eine Bot-Äußerung sources enthält, dann:

  • zeigt der Chat-Client einen kleinen Quellenauslöser nach der Bot-Antwort an
  • öffnet sich ein Aufklapp-Quellen-Panel, wenn der Auslöser angeklickt wird
  • wird ein Quelleneintrag pro Karte gerendert
  • kann der Benutzer zwischen mehreren Quellen navigieren
  • wird Markdown-Formatierung wie Überschriften, Listen, Hervorhebungen und Links unterstützt

Dies ermöglicht es, die Hauptantwort prägnant zu halten, während Hintergrundmaterial auf strukturierte Weise offengelegt wird.

Typische Anwendungsfälle

Verwenden Sie Quellen, wenn Sie:

  • Inhalte aus einer Wissensdatenbank oder Website hinter einer Antwort zitieren möchten
  • eine kurze Zusammenfassung plus einen Link zum vollständigen Artikel bereitstellen möchten
  • mehrere Referenzen in separate Karten aufteilen möchten
  • „Weiterlesen“-Material anhängen möchten, ohne die Hauptantwort zu überladen

Screenshots

Aktion Aktion

Wie man Quellen im Code hinzufügt

Der sources-Parameter akzeptiert eine Liste von Markdown-Strings:

sources = [
"# Produktdokumentation\n\nKurze Zusammenfassung der Quelle.\n\n[Dokumentation öffnen](https://example.com/docs)",
"# API-Referenz\n\nNützlich für Implementierungsdetails.\n\n[API-Referenz öffnen](https://example.com/api)",
]

Übergeben Sie diese Liste an eine der Tracker-API-Äußerungsmethoden.

Einfaches Beispiel

class action(Action):
async def run(self, tracker_api: RemoteLLMTrackerApi):
sources = [
"# Hilfezentrum\n\nKurze Zusammenfassung des Artikels.\n\n[Artikel öffnen](https://example.com/help-center)",
"# Preise\n\nÜberblick über die verfügbaren Pläne.\n\n[Preise anzeigen](https://example.com/pricing)",
]

tracker_api.fixed_utter(
"Hier ist eine kurze Antwort mit zwei Referenzen.",
sources=sources,
)

Verwendung von Quellen mit verschiedenen Äußerungsmethoden

fixed_utter()

Verwenden Sie dies, wenn Sie die volle Kontrolle über den Bot-Text und die angehängten Referenzen haben möchten.

tracker_api.fixed_utter(
"Ihr Abonnement kann jederzeit aktualisiert werden.",
sources=[
"# Abonnementpläne\n\nVergleichen Sie alle verfügbaren Pläne.\n\n[Pläne anzeigen](https://example.com/plans)",
"# Abrechnungs-FAQ\n\nAntworten auf häufig gestellte Abrechnungsfragen.\n\n[FAQ öffnen](https://example.com/billing-faq)",
],
)

llm_utter()

Verwenden Sie dies, wenn der Antworttext aus einem LLM-Aufruf stammt, Sie aber dennoch kuratierte Referenzen anhängen möchten.

messages = [
{"role": "system", "content": "Antworten Sie kurz und klar."},
{"role": "user", "content": "Wie funktioniert die Datenaufbewahrung?"},
]

response = await tracker_api.a_call_llm(messages)

await tracker_api.llm_utter(
response,
sources=[
"# Datenaufbewahrungsrichtlinie\n\nZusammenfassung der Aufbewahrungsfristen und Löschregeln.\n\n[Richtlinie öffnen](https://example.com/retention)",
"# Datenschutzübersicht\n\nHochrangige Erklärung zur Speicherung und Löschung.\n\n[Mehr lesen](https://example.com/privacy)",
],
)

stream_utter()

Verwenden Sie dies, wenn die Antwort an den Benutzer gestreamt werden soll, während dennoch anschließend Referenzen offengelegt werden.

messages = [
{"role": "system", "content": "Antworten Sie in einem hilfreichen Ton."},
{"role": "user", "content": "Wie sieht der Onboarding-Prozess aus?"},
]

stream = await tracker_api.stream_call_llm(messages=messages)

await tracker_api.stream_utter(
stream,
sources=[
"# Onboarding-Übersicht\n\nZusammenfassung der ersten Einrichtungsschritte.\n\n[Leitfaden öffnen](https://example.com/onboarding)",
"# Einrichtungs-Checkliste\n\nCheckliste für Administratoren und Redakteure.\n\n[Checkliste öffnen](https://example.com/checklist)",
],
)

stream_response_model()

Verwenden Sie dies, wenn Sie nur ein Feld eines strukturierten Antwortmodells an den Benutzer streamen.

stream = await tracker_api.stream_call_llm(messages=messages)

await tracker_api.stream_response_model(
stream,
"answer",
sources=[
"# Leitfaden für strukturierten Output\n\nErläutert das gestreamte Feld und wie es verwendet wird.\n\n[Leitfaden öffnen](https://example.com/structured-output)",
],
)

a_stream_utter_and_extract_tool_call()

Verwenden Sie dies, wenn Sie eine benutzerfreundliche Antwort streamen und auch einen Tool-Aufruf aus demselben Modell-Output erfassen möchten. Wenn das Modell mehrere parallele Tool-Aufrufe macht, wird nur der erste zurückgegeben — verwenden Sie a_stream_utter_and_extract_tool_calls(), um alle zu erhalten.

stream = await tracker_api.stream_call_llm(messages=messages)

await tracker_api.a_stream_utter_and_extract_tool_call(
stream,
sources=[
"# Tool-Aufruf-Beispiel\n\nHintergrundinformationen zur gestreamten Antwort.\n\n[Mehr lesen](https://example.com/tool-calls)",
],
)

a_stream_utter_and_extract_tool_calls()

Verwenden Sie dies, wenn Sie eine benutzerfreundliche Antwort streamen und auch alle Tool-Aufrufe aus demselben Modell-Output erfassen möchten, einschließlich paralleler Tool-Aufrufe. Gibt eine Liste von Tool-Aufrufen sortiert nach Index zurück oder eine leere Liste, wenn das Modell keinen Tool-Aufruf gemacht hat.

stream = await tracker_api.stream_call_llm(messages=messages)

tool_calls = await tracker_api.a_stream_utter_and_extract_tool_calls(
stream,
sources=[
"# Tool-Aufruf-Beispiel\n\nHintergrundinformationen zur gestreamten Antwort.\n\n[Mehr lesen](https://example.com/tool-calls)",
],
)

Empfohlene Markdown-Struktur

Für beste Ergebnisse halten Sie jeden Quelleneintrag kurz und übersichtlich.

Empfohlene Struktur:

  1. Eine Überschrift mit dem Quellentitel
  2. Eine kurze Zusammenfassung in ein oder zwei Sätzen
  3. Ein oder mehrere Links für tiefergehendes Lesen

Beispiel:

# Wissensdatenbank-Artikel

Kurze Erklärung, was diese Quelle enthält und warum sie relevant ist.

## Highlights
- Wichtiger Punkt eins
- Wichtiger Punkt zwei

[Artikel öffnen](https://example.com/article)