KBs in Chats nutzen
Such-Tools definieren, tunen und in Assistenten einbinden.
Das Modell redet nie direkt mit der KB. Es ruft ein Such-Tool auf, das du definierst — und bekommt die Treffer zurück.
Shared Tool getKnowledge
Die Plattform liefert ein Standard-Such-Tool. Nutze es als Basis:
// tools/kb/searchFaq.php
return [
'tools' => [
'searchFaq' => [
'extends' => 'getKnowledge',
'description' => 'Kunden-FAQ durchsuchen (Versand, Rückgabe, Zahlung).',
'args_fixture' => ['query' => 'Rückgabe'],
],
],
];
extends: getKnowledge zieht die Basis-Implementation. Du überschreibst nur, was du anders haben willst.
Wichtigstes Feld: description
Die Beschreibung entscheidet, wann das Modell das Tool aufruft. Beispiele:
Zu generisch (schlecht):
'description' => 'Wissen durchsuchen.'
Das Modell weiß nicht, wann es passt — oder ruft es inflationär auf.
Spezifisch (gut):
'description' => 'Kunden-FAQ durchsuchen. Nutze dies für Fragen zu Versand, Rückgabe, Zahlung, Kontakt.'
Jetzt hat das Modell klare Kriterien.
Mehrere KBs, mehrere Such-Tools
Wenn dein Workspace unterschiedliche Wissensdomänen hat, leg ein eigenes Such-Tool pro Domäne an:
'searchFaq' => [
'extends' => 'getKnowledge',
'description' => 'Kunden-FAQ. Nutze für Fragen zu Versand, Rückgabe, Zahlung.',
],
'searchProducts' => [
'extends' => 'getKnowledge',
'description' => 'Produkt-Katalog-Wissen: Features, Materialien, Pflegehinweise.',
],
'searchHandbook' => [
'extends' => 'getKnowledge',
'description' => 'Internes Mitarbeiter-Handbuch: Urlaub, IT-Zugang, Prozesse.',
],
Das Modell lernt aus den Beschreibungen, welches Tool zu welcher Frage passt.
Options fürs Tuning
'searchFaq' => [
'extends' => 'getKnowledge',
'description' => '...',
'options' => [
'knowledge_base' => 'faq', // welche KB (per Slug/ID)
'limit' => 3, // max. 3 Treffer zurückgeben
'min_score' => 5.0, // Relevanz-Schwelle
],
],
| Option | Bedeutung |
|---|---|
knowledge_base |
Auf welche KB beschränken — sonst wird in allen des Workspace gesucht |
limit |
Wie viele Treffer zurückgeben (default 5) |
min_score |
Minimaler Relevanz-Score; Treffer darunter werden verworfen |
Im Task einbinden
// assistants/support.php
'assistants.support' => [
'name' => 'Kunden-Support',
'tools' => [
'searchFaq',
'searchProducts',
'createTicket',
'setSuggestions',
],
],
'assistants.support.prompt' => <<<PROMPT
Du bist der Support-Assistent.
Ablauf:
1. Bei allgemeinen Fragen: searchFaq nutzen.
2. Bei produktspezifischen Fragen: searchProducts.
3. Wenn keine Antwort in der KB zu finden: createTicket aufrufen.
Zitiere bei Bedarf die Quelle (Entry-Titel).
PROMPT,
Das Modell dazu bringen, die KB zu zitieren
Wenn du willst, dass der Benutzer weiß, woher eine Aussage kommt:
Nutze das Ergebnis der Suche direkt. Nenne am Ende den Titel
des Entries als Quelle, z. B. "Quelle: Retouren-Richtlinie".
So wird aus „weiche Aussage" eine nachvollziehbare Antwort.
Wenn Antworten schlecht sind
Drei typische Probleme:
1. Modell findet nichts, obwohl Inhalt da ist.
- Query zu spezifisch — das Modell suchte nach „AGB Paragraf 7", die KB hat nur „Vertragsbedingungen". → Keywords in den Entries ergänzen.
min_scorezu hoch gesetzt — senke ihn.
2. Modell findet zu viel Irrelevantes.
- Die KB enthält viel Rauschen (Navigations-Text, Cookies). → Sources prüfen, ggf. schlecht zerschnittene Entries manuell bereinigen.
limitreduzieren.
3. Modell ignoriert das Suchergebnis.
- Prompt explizit machen: „Antworte ausschließlich basierend auf dem Suchergebnis. Wenn nichts gefunden: sage das, erfinde keine Antworten."
Debug-Zyklus
# Suche direkt testen
tm test-tool searchFaq query="Rückgabe"
# Chat-Verhalten testen
tm test-chat "wie kann ich zurückgeben?" --task support
# Verlauf angucken
tm history --task support
Wenn Suche grün ist, Chat aber daneben — liegt's am Prompt, nicht an der KB.