2.2 KiB
2.2 KiB
Story 5.2: PDF-Upload & ChromaDB-Ingestion
Status: done
Story
Als Nutzer, möchte ich ein PDF hochladen, das als Wissensquelle für Agents dient, so dass Agents auf Inhalte aus langen Dokumenten zugreifen können.
Acceptance Criteria
POST /api/councils/upload-pdfmit PDF →chunks_ingestedin Response- Nicht-PDF-Datei →
400 Bad Request - PDF wird in Chunks aufgeteilt (PyPDF + LangChain TextSplitter) und in ChromaDB gespeichert
pdf_search(query)gibt Top-K semantisch ähnliche Chunks zurück- Agent mit
tools.pdf_reader = truebekommtpdf_search-Tool gebunden
Tasks / Subtasks
- Task 1:
tools/pdf_reader.py(AC: 3, 4)- Subtask 1.1:
ingest_pdf(file_path)→ Chunks → ChromaDB - Subtask 1.2:
pdf_search(query, top_k)→ semantische Suche - Subtask 1.3:
_get_chroma_collection()mit In-Memory-Cache
- Subtask 1.1:
- Task 2:
POST /api/councils/upload-pdfEndpunkt inroutes.py(AC: 1, 2)- Subtask 2.1:
UploadFile+ MIME-Type-Validierung - Subtask 2.2: Temp-Datei erstellen,
ingest_pdf()aufrufen, bereinigen
- Subtask 2.1:
- Task 3: Tool-Binding im dynamischen Graph-Builder (AC: 5)
- Task 4: Unit-Tests (gemockt) (AC: 1–4)
Dev Notes
- ChromaDB
PersistentClientmitCHROMA_PERSIST_DIR-Umgebungsvariable - Cosine-Similarity als Distance-Metrik:
{"hnsw:space": "cosine"} _collection_cachedict verhindert mehrfache ChromaDB-Initialisierungen- Tests mocken
chromadb.PersistentClientkomplett
Project Structure Notes
backend/tools/pdf_reader.pybackend/tests/test_tools.py
References
- [Source: _bmad-output/planning-artifacts/architecture.md#ADR-006]
- [Source: _bmad-output/planning-artifacts/prd.md#FR-05.3]
Dev Agent Record
Agent Model Used
Amelia (💻 BMAD Dev Agent)
Completion Notes List
UploadFile.content_typefür MIME-Validierung;.filename.endswith(".pdf")als Fallback.tempfile.NamedTemporaryFilemitdelete=Falsefür sicheres Temp-File-Handling.- ChromaDB-Kollektion wird pro
collection_namegecacht.
File List
backend/tools/pdf_reader.pybackend/tests/test_tools.py