Protokoll #29723

ID29723
Zeitstempel2025-12-29 09:52:45.932823
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens1,311 (Input: 22, Output: 1,289)
Dauer82 ms
Request-Zeit2025-12-29 09:52:45.932823
Response-Zeit2025-12-29 09:52:46.014781

Request

{
    "event": "PreToolUse",
    "tool_name": "mcp__mcp-docs__docs_get",
    "tool_input": {
        "id": 77
    }
}

Response

{
    "tool_response": [
        {
            "type": "text",
            "text": "{\n  \"success\": true,\n  \"doc\": {\n    \"id\": 77,\n    \"parent_id\": 34,\n    \"slug\": \"rag\",\n    \"path\": \"\/content-studio\/rag\",\n    \"title\": \"RAG\",\n    \"description\": \"RAG-Integration mit Qdrant für kontextuelle Content-Generierung\",\n    \"content\": \"<nav class=\\\"breadcrumb\\\">\\n    <a href=\\\"\/docs\\\">Dokumentation<\/a> &raquo; <a href=\\\"\/docs\/content-studio\\\">Content Studio<\/a> &raquo; RAG\\n<\/nav>\\n\\n<h1>RAG<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-20<\/p>\\n\\n<p>Retrieval-Augmented Generation für kontextbasierte Content-Erstellung.<\/p>\\n\\n<table>\\n    <tr><th>Modul<\/th><td>generate.py, embed.py<\/td><\/tr>\\n    <tr><th>Vektor-DB<\/th><td>Qdrant<\/td><\/tr>\\n    <tr><th>Quellen-Tabelle<\/th><td>content_sources<\/td><\/tr>\\n<\/table>\\n\\n<h2>Architektur<\/h2>\\n<pre><code>Briefing\\n    ↓\\n┌─────────────┐\\n│  Embedding  │  → Vektor aus Briefing\\n└─────────────┘\\n    ↓\\n┌─────────────┐\\n│   Qdrant    │  → Ähnlichkeitssuche\\n└─────────────┘\\n    ↓\\n┌─────────────┐\\n│  Kontext    │  → Top-N relevante Chunks\\n└─────────────┘\\n    ↓\\n┌─────────────┐\\n│    LLM      │  → Content mit Kontext\\n└─────────────┘<\/code><\/pre>\\n\\n<h2>Collections<\/h2>\\n<table>\\n    <tr><th>Collection<\/th><th>Inhalt<\/th><th>Verwendung<\/th><\/tr>\\n    <tr><td>documents<\/td><td>Dokumente, PDFs<\/td><td>Allgemeine Wissensbasis<\/td><\/tr>\\n    <tr><td>entities<\/td><td>Entitäten, Konzepte<\/td><td>Fachbegriffe, Personen<\/td><\/tr>\\n    <tr><td>mail<\/td><td>E-Mail-Korrespondenz<\/td><td>Kommunikationshistorie<\/td><\/tr>\\n<\/table>\\n\\n<h2>get_rag_context() - Zeile 18-35<\/h2>\\n<pre><code>def get_rag_context(briefing, collection=\\\"documents\\\", limit=5):\\n    \\\"\\\"\\\"\\n    Relevanten Kontext aus Qdrant laden.\\n    \\n    Args:\\n        briefing: Suchtext für Ähnlichkeitssuche\\n        collection: Qdrant-Collection\\n        limit: Anzahl Ergebnisse\\n    \\n    Returns:\\n        List[{content, source, score}]\\n    \\\"\\\"\\\"\\n    results = search_similar(briefing, collection, limit)\\n    \\n    return [{\\n        \\\"content\\\": r[\\\"payload\\\"][\\\"content\\\"],\\n        \\\"source\\\": r[\\\"payload\\\"][\\\"document_title\\\"],\\n        \\\"score\\\": round(r[\\\"score\\\"], 4)\\n    } for r in results]<\/code><\/pre>\\n\\n<h2>Kontext-Limit<\/h2>\\n<table>\\n    <tr><th>Limit<\/th><th>Tokens (~)<\/th><th>Empfehlung<\/th><\/tr>\\n    <tr><td>3<\/td><td>~1500<\/td><td>Schnelle Generierung, wenig Kontext<\/td><\/tr>\\n    <tr><td>5<\/td><td>~2500<\/td><td>Standard, ausgewogen<\/td><\/tr>\\n    <tr><td>10<\/td><td>~5000<\/td><td>Umfangreicher Kontext, langsamer<\/td><\/tr>\\n<\/table>\\n\\n<h2>Prompt-Integration<\/h2>\\n<p>Der RAG-Kontext wird in den Generierungs-Prompt eingebettet:<\/p>\\n<pre><code>## Kontext aus der Wissensbasis:\\n\\n[Quelle 1: Dokument A]\\nLorem ipsum dolor sit amet...\\n\\n[Quelle 2: Dokument B]\\nConsectetur adipiscing elit...\\n\\n## Briefing:\\nSchreibe einen Artikel über...<\/code><\/pre>\\n\\n<h2>Quellen-Speicherung<\/h2>\\n<p>Nach der Generierung werden Quellen in <code>content_sources<\/code> gespeichert:<\/p>\\n<pre><code>def save_sources(order_id, context):\\n    for ctx in context:\\n        # Chunk-ID via Content-Match finden\\n        chunk = db.execute(\\n            \\\"SELECT id FROM chunks WHERE content LIKE %s\\\",\\n            (ctx[\\\"content\\\"][:100] + \\\"%\\\",)\\n        )\\n        \\n        # Quelle mit Relevanz-Score speichern\\n        db.execute(\\n            \\\"INSERT INTO content_sources \\n             (order_id, chunk_id, relevance_score) \\n             VALUES (%s, %s, %s)\\\",\\n            (order_id, chunk.id, ctx[\\\"score\\\"])\\n        )<\/code><\/pre>\\n\\n<h2>Relevanz-Score<\/h2>\\n<p>Der Score zeigt die semantische Ähnlichkeit (0.0 - 1.0):<\/p>\\n<table>\\n    <tr><th>Score<\/th><th>Interpretation<\/th><\/tr>\\n    <tr><td>&gt; 0.85<\/td><td>Sehr relevant<\/td><\/tr>\\n    <tr><td>0.70 - 0.85<\/td><td>Relevant<\/td><\/tr>\\n    <tr><td>0.50 - 0.70<\/td><td>Möglicherweise relevant<\/td><\/tr>\\n    <tr><td>&lt; 0.50<\/td><td>Geringe Relevanz<\/td><\/tr>\\n<\/table>\\n\\n<h2>UI-Anzeige<\/h2>\\n<p>Quellen werden in der Version-Ansicht angezeigt:<\/p>\\n<pre><code>&lt;div class=\\\"sources\\\"&gt;\\n  &lt;strong&gt;Quellen:&lt;\/strong&gt;\\n  &lt;ul&gt;\\n    &lt;li&gt;Dokument A (85%)&lt;\/li&gt;\\n    &lt;li&gt;Dokument B (72%)&lt;\/li&gt;\\n  &lt;\/ul&gt;\\n&lt;\/div&gt;<\/code><\/pre>\\n\\n<h2>Qdrant-Verbindung<\/h2>\\n<p>Die Verbindung wird in <code>embed.py<\/code> konfiguriert:<\/p>\\n<pre><code>from qdrant_client import QdrantClient\\n\\nclient = QdrantClient(host=\\\"localhost\\\", port=6333)<\/code><\/pre>\\n\\n<h2>Verwandte Dokumentation<\/h2>\\n<ul>\\n    <li><a href=\\\"\/docs\/ki-system\/qdrant\\\">Qdrant Vektor-Datenbank<\/a><\/li>\\n    <li><a href=\\\"\/docs\/ki-system\/pipeline\\\">Pipeline-Übersicht<\/a><\/li>\\n<\/ul>\",\n    \"status\": \"published\",\n    \"sort_order\": 4,\n    \"depth\": 1,\n    \"created_at\": \"2025-12-20T13:37:24\",\n    \"updated_at\": \"2025-12-27T15:58:19\"\n  }\n}"
        }
    ]
}
← Vorheriger Zur Liste Nächster →