Protokoll #12670
| ID | 12670 |
|---|---|
| Zeitstempel | 2025-12-24 10:08:13.053884 |
| Client | root |
| IP | Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 |
| Modell | claude-sonnet-4-20250514 |
| Status | completed |
| Tokens | 1,966 (Input: 0, Output: 0) |
| Dauer | 7528 ms |
| Request-Zeit | Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18 |
| Response-Zeit | - |
Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22
Request
{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "REQUEST_URI=\"\/docs\/prozesse\/rag-prozess\" REQUEST_METHOD=\"GET\" php \/var\/www\/dev.campus.systemische-tools.de\/public\/index.php 2>&1 | head -200",
"description": "Test docs page rendering"
}
}
Response
{
"tool_response": {
"stdout": "<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>RAG-Prozess<\/title>\n <link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/campus-am-see.de\/wp-content\/uploads\/menu-logo.png\">\n <link rel=\"apple-touch-icon\" href=\"https:\/\/campus-am-see.de\/wp-content\/uploads\/menu-logo.png\">\n <link rel=\"stylesheet\" href=\"\/css\/designtokens.css\">\n <link rel=\"stylesheet\" href=\"\/css\/nav.css\">\n <link rel=\"stylesheet\" href=\"\/css\/style.css\">\n <link rel=\"stylesheet\" href=\"\/css\/admin.css\">\n <link rel=\"stylesheet\" href=\"\/css\/home.css\">\n <script src=\"\/js\/htmx.min.js\"><\/script>\n<\/head>\n<body>\n <header>\n <nav class=\"main-nav\">\n <a href=\"\/\" class=\"nav-brand\">\n <img src=\"https:\/\/campus-am-see.de\/wp-content\/uploads\/menu-logo.png\" alt=\"Campus am See\" class=\"nav-logo\">\n <\/a>\n\n <button class=\"nav-toggle\" aria-label=\"Navigation\" aria-expanded=\"false\">\n <span class=\"nav-toggle-icon\"><\/span>\n <\/button>\n\n <div class=\"nav-items\">\n <div class=\"nav-dropdown\">\n <button class=\"nav-dropdown-btn\">Anwendungen<\/button>\n <div class=\"nav-dropdown-content\">\n <a href=\"\/chat\">KI-Chat<\/a>\n <a href=\"\/content\">Content Studio<\/a>\n <a href=\"\/content-pipeline\">Content Pipeline<\/a>\n <a href=\"\/semantic-explorer\">Semantic Explorer<\/a>\n <a href=\"https:\/\/files.campus.systemische-tools.de\/index.php\/apps\/files\/files\/3?dir=\/Documents\" target=\"_blank\">Nextcloud<\/a>\n <\/div>\n <\/div>\n\n <div class=\"nav-dropdown\">\n <button class=\"nav-dropdown-btn\">Entwicklung<\/button>\n <div class=\"nav-dropdown-content\">\n <a href=\"\/tasks\">Tasks<\/a>\n <a href=\"\/protokoll\">Protokoll<\/a>\n <a href=\"\/contracts\">Contracts<\/a>\n <a href=\"\/config\">Content-Config<\/a>\n <a href=\"\/critics\">Critics<\/a>\n <a href=\"\/prompts\">Prompts<\/a>\n <a href=\"\/system-explorer\">System Explorer<\/a>\n <\/div>\n <\/div>\n\n <div class=\"nav-dropdown\">\n <button class=\"nav-dropdown-btn\">Ressourcen<\/button>\n <div class=\"nav-dropdown-content\">\n <a href=\"\/docs\">Dokumentation<\/a>\n <a href=\"\/docs\/code\">Code-Analyse<\/a>\n <a href=\"\/backup-restore\">File Backup<\/a>\n <\/div>\n <\/div>\n <\/div>\n <\/nav>\n <\/header>\n\n <main>\n \n<nav class=\"breadcrumb\">\n <a href=\"\/docs\">Dokumentation<\/a> » <a href=\"\/docs\/prozesse\">Prozesse<\/a> » RAG-Prozess\n<\/nav>\n\n<h1>RAG-Prozess<\/h1>\n\n<section>\n <h2>Übersicht<\/h2>\n <p>Der RAG-Prozess (Retrieval Augmented Generation) bildet das Herzstück der KI-gestützten Wissensgenerierung.<\/p>\n <table>\n <tr><th>Embedding-Modell<\/th><td>mxbai-embed-large (Ollama)<\/td><\/tr>\n <tr><th>Vektordatenbank<\/th><td>Qdrant (1536 Dimensionen)<\/td><\/tr>\n <tr><th>LLM<\/th><td>Claude API \/ Ollama<\/td><\/tr>\n <tr><th>Pipeline<\/th><td>\/var\/www\/scripts\/pipeline\/<\/td><\/tr>\n <\/table>\n<\/section>\n\n<section>\n <h2>Phasen<\/h2>\n <h3>1. Indexierungsphase (Offline)<\/h3>\n <p>Dokumente werden importiert, in Chunks zerlegt, vektorisiert und in Qdrant gespeichert.<\/p>\n \n <h3>2. Abfragephase (Online)<\/h3>\n <p>Nutzeranfragen werden eingebettet, ähnliche Chunks gesucht, Kontext aufgebaut und an LLM übergeben.<\/p>\n<\/section>\n\n<section>\n <h2>Datenfluss<\/h2>\n <pre>\nDokument → Chunking → Embedding → Qdrant\n ↓\nAnfrage → Query-Embedding → Suche → Kontext → LLM → Antwort\n <\/pre>\n<\/section>\n<section class=\"doc-child-section\">\n <h2>Dokument-Import<\/h2>\n\n<h3>Funktion<\/h3>\n<ul>\n<li>PDF- und Text-Dokumente in das System einlesen<\/li>\n<li>Metadaten extrahieren (Titel, Autor, Erstellungsdatum)<\/li>\n<li>Dokumentstruktur erkennen (Überschriften, Absätze)<\/li>\n<li>Speicherung in MariaDB für Verwaltung und Tracking<\/li>\n<\/ul>\n\n<h3>Eingabe<\/h3>\n<ul>\n<li>PDF-Dateien (via Content Pipeline Import)<\/li>\n<li>Text-Dateien<\/li>\n<li>Manuelle Eingabe über Web-UI<\/li>\n<\/ul>\n\n<h3>Ausgabe<\/h3>\n<ul>\n<li>Datensatz in <code>ki_content.documents<\/code><\/li>\n<li>Seitenweise Extraktion in <code>ki_content.document_pages<\/code><\/li>\n<li>Status: <code>pending<\/code> (bereit für Chunking)<\/li>\n<\/ul>\n\n<h3>Beteiligte Komponenten<\/h3>\n<table>\n<thead><tr><th>Komponente<\/th><th>Pfad<\/th><th>Funktion<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>Content Pipeline<\/td><td><code>\/content-pipeline<\/code><\/td><td>Web-UI für Imports<\/td><\/tr>\n<tr><td>import_pdf()<\/td><td><code>pipeline\/import_pipeline.py<\/code><\/td><td>PDF-Extraktion mit pdfplumber<\/td><\/tr>\n<tr><td>documents-Tabelle<\/td><td><code>ki_content.documents<\/code><\/td><td>Dokument-Metadaten<\/td><\/tr>\n<\/tbody>\n<\/table>\n\n<h3>Ablauf<\/h3>\n<ol>\n<li>Datei hochladen oder Pfad angeben<\/li>\n<li>PDF-Text extrahieren (pdfplumber)<\/li>\n<li>Metadaten erfassen (filename, source_path, file_size)<\/li>\n<li>Dokument in DB speichern mit Status <code>pending<\/code><\/li>\n<li>Seiten einzeln in <code>document_pages<\/code> speichern<\/li>\n<\/ol>\n\n<h3>Datenbank-Schema<\/h3>\n<pre>\ndocuments:\n id, filename, source_path, file_size, \n page_count, status, created_at\n \ndocument_pages:\n id, document_id, page_number, content, \n metadata, created_at\n<\/pre><\/section>\n<section class=\"doc-child-section\">\n <h2>Chunking<\/h2>\n\n<h3>Funktion<\/h3>\n<ul>\n<li>Lange Texte in kleinere, semantisch sinnvolle Einheiten zerlegen<\/li>\n<li>Überlappung (Overlap) für Kontexterhalt<\/li>\n<li>Heading-Path für Hierarchie-Kontext<\/li>\n<li>Token-Count für Embedding-Limit-Prüfung<\/li>\n<\/ul>\n\n<h3>Eingabe<\/h3>\n<ul>\n<li>Dokument aus <code>documents<\/code>-Tabelle<\/li>\n<li>Extrahierter Text aus <code>document_pages<\/code><\/li>\n<\/ul>\n\n<h3>Ausgabe<\/h3>\n<ul>\n<li>Chunks in <code>ki_content.chunks<\/code><\/li>\n<li>Jeder Chunk: content, chunk_index, token_count, heading_path<\/li>\n<\/ul>\n\n<h3>Parameter<\/h3>\n<table>\n<thead><tr><th>Parameter<\/th><th>Wert<\/th><th>Beschreibung<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>chunk_size<\/td><td>500-800 Token<\/td><td>Zielgröße pro Chunk<\/td><\/tr>\n<tr><td>overlap<\/td><td>50-100 Token<\/td><td>Überlappung zwischen Chunks<\/td><\/tr>\n<tr><td>max_embed_chars<\/td><td>800 Zeichen<\/td><td>Limit für mxbai-embed-large<\/td><\/tr>\n<\/tbody>\n<\/table>\n\n<h3>Beteiligte Komponenten<\/h3>\n<table>\n<thead><tr><th>Komponente<\/th><th>Pfad<\/th><th>Funktion<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>chunk_document()<\/td><td><code>pipeline\/chunk.py<\/code><\/td><td>Chunking-Logik<\/td><\/tr>\n<tr><td>chunks-Tabelle<\/td><td><code>ki_content.chunks<\/code><\/td><td>Chunk-Speicherung<\/td><\/tr>\n<\/tbody>\n<\/table>\n\n<h3>Ablauf<\/h3>\n<ol>\n<li>Text aus Dokument laden<\/li>\n<li>Überschriften-Hierarchie erkennen<\/li>\n<li>Text an semantischen Grenzen splitten (Absätze, Sätze)<\/li>",
"stderr": "",
"interrupted": false,
"isImage": false
}
}