Zurück zu den Anwendungsfällen
Wissensdatenbank

RAG-Chatbot-API — Claude-basierter Wissensdatenbank-Assistent in Produktion

Die meisten internen Wissensdatenbanken sind tote Dokumentation — niemand findet etwas. Ein Claude-basierter RAG-Chatbot macht daraus einen echten Assistenten, der Quellen zitiert und sich weigert, wenn er etwas nicht weiß. Hier ist das Produktionsmuster.

Zuletzt überprüft am .

Die moderne Standardarchitektur für Wissensdatenbanken

Eine herkömmliche Wissensdatenbanksuche liefert Links; der Nutzer liest sie. RAG macht daraus eine einmalige dialogbasierte Antwort mit Zitaten. Gute Umsetzung liefert Antworten in 2 Sekunden statt nach dem Durchsuchen von 5 Dokumenten. Bei schlechter Umsetzung halluziniert der Chatbot und Ihr CTO verbietet das Projekt für ein Jahr. Diese Seite erklärt den Unterschied.

Der minimal erforderliche Produktions-Stack

  1. Vektorspeicher: pgvector, wenn Sie bereits Postgres verwenden; Pinecone oder Qdrant als verwaltete Lösung
  2. Embeddings: text-embedding-3-large, direkt über OpenAI aufgerufen — Kunavo stellt keine Embeddings bereit, und der Embedding-Aufruf ist in jedem Fall eine separate Anfrage vom Generierungsaufruf
  3. Retrieval: hybrid (Vektor + BM25 mit Reciprocal-Rank-Fusion)
  4. Generierung: Claude Sonnet 5 mit cache_control im System-Prompt
  5. UI: Streaming-Antworten, Zitatanzeige, Fallback „Ich weiß es nicht“
rag_chat.py
from openai import OpenAI
client = OpenAI(api_key="sk-kn-...", base_url="https://api.kunavo.com/v1")

def chat(question: str, history: list[dict]) -> dict:
    chunks = hybrid_retrieve(question, k=5)  # vector + BM25
    context = "\n\n---\n\n".join(
        f"[doc:{c['id']}] {c['text']}" for c in chunks
    )
    resp = client.chat.completions.create(
        model="claude-sonnet-5",
        messages=[
            {"role": "system", "content": [{
                "type": "text",
                "text": (
                    "Answer only from Context. Cite [doc:N] for each claim. "
                    "If Context doesn't answer, say 'I don't have that.' "
                    "Be concise, no throat-clearing."
                ),
                "cache_control": {"type": "ephemeral"},
            }]},
            *history,
            {"role": "user", "content": f"# Context\n{context}\n\n# Q\n{question}"},
        ],
        max_tokens=600,
    )
    answer = resp.choices[0].message.content
    cited_ids = parse_citations(answer)  # extract [doc:N] references
    return {"answer": answer, "sources": [c for c in chunks if c["id"] in cited_ids]}

Kosten im Produktionsmaßstab

  • Erstindizierung: etwa $0,25 für 5.000 Dokumente mit jeweils 500 Tokens
  • 1.000 Anfragen/Tag: etwa $210/Monat mit Caching
  • 10.000 Anfragen/Tag: etwa $2.100/Monat
  • Bei Verwendung von Haiku 4.5 statt Sonnet: etwa 4-mal günstiger, etwa 85 % Antwortqualität

Die vollständige Architekturaufschlüsselung finden Sie im RAG-Implementierungsleitfaden. Sprachspezifische Hinweise finden Sie im Deep Dive zu japanischem RAG und im Leitfaden zu spanischem RAG.

Die drei Muster, die Halluzinationen tatsächlich verhindern

  • Jede Behauptung zitieren: [doc:42]-Tags in der Modellausgabe. Wenn die zitierte ID nicht in der abgerufenen Menge enthalten ist, handelt es sich um eine Halluzination — blockieren und protokollieren
  • Explizite Verweigerung im System-Prompt: „Wenn der Kontext keine Antwort liefert, sagen Sie: ‚Das weiß ich nicht.‘“ Ohne diese Vorgabe ergänzt das Modell Inhalte aus seinem Weltwissen
  • Ausgabelimit von 600 Tokens: Kurze Antworten sind meist präzise Antworten. In längeren Ausgaben schleichen sich zusätzliche Erfindungen ein

Was in Woche 1 und was in Woche 4 ausgeliefert wird

WocheMeilenstein
1100 Dokumente, eine Chunking-Strategie, einfache Vektorsuche, Evaluationssatz mit 10 Fragen, etwa 70 % Recall@5
2Vollständiger Korpus, hybride Suche, Evaluationssatz mit 100 Fragen, erzwungene Zitate, interne Beta
3Chunking anhand fehlgeschlagener Fragen optimieren, für interne Nutzer bereitstellen, CSAT messen
4Monitoring und Kosten-Dashboard, tägliches Ausgabenlimit, öffentliche Beta oder Produktionsstart

Start unter /app/signup

Eine Aufladung von $10 deckt die Erstindizierung von etwa 100.000 Dokumenten und 1.500 Testanfragen ab — mehr als genug für einen funktionalen Prototypen; das Guthaben verfällt nie. Lesen Sie anschließend den vollständigen RAG-Leitfaden für Produktionsmuster.

FAQ

How much does one RAG chatbot query cost?

About $0.007 per query on Claude Sonnet 4.6 with prompt caching active, or about $0.001 on Claude Haiku 4.5 — which returns roughly 85% of the quality at one-seventh of the cost.

How do I stop a RAG chatbot from hallucinating?

Three patterns do most of the work: require the model to cite a [doc:N] id for every claim, put an explicit refusal instruction in the system prompt, and cap the answer with max_tokens=600. Then verify every cited id appears in the retrieved set before rendering the answer.

What chunk size should a RAG index use?

1,000–1,500 characters per chunk with 100–200 characters of overlap, split with RecursiveCharacterTextSplitter and embedded with text-embedding-3-large.

Is vector search alone enough for RAG retrieval?

No. Hybrid retrieval combines vector similarity with BM25 keyword search and merges the two with reciprocal rank fusion, taking the top 5 chunks.