Ga naar inhoud

Buurts Ecosysteem — Architectuur

Bijgewerkt: Sprint C (14 maart 2026)


Huidige staat (Sprint C)

[Claude Desktop / Cowork]
        ↓  CLAUDE.md (auto-load), .mcp.json
[Buurts MCP Server]                   ← Sprint 10 + C
  buurts_knowledge_search
  buurts_knowledge_ask
        ↓  intern HTTP (BackendClient)
[FastAPI backend — main.py]            ← Sprint 9 hardening
        ↓
[HubAgent — agents/hub.py]             ← orchestrator, Guardian Layer (Art. 5)
  ├─ ScoutAgent     (zoeken)
  ├─ CuratorAgent   (filteren + curate)
  └─ OllamaSynthesizer / MockSynthesizer
        ↓
[Safety Policy — safety/policy.py]     ← GREEN / YELLOW / RED
        ↓
[ZonedVectorStore — rag/vector_store.py]  ← Sprint A
  ├─ ChromaDB RED    (data/chromadb_red)
  ├─ ChromaDB YELLOW (data/chromadb_yellow)
  └─ ChromaDB GREEN  (data/chromadb_green)
        ↓
[DocumentRegistry — rag/document_registry.py]  ← SQLite
[SmartChunker — rag/chunker.py]                ← Sprint A, semantische chunks

Query data flow (request → response)

Gebruiker stelt vraag
  → MCP: buurts_knowledge_ask(query, domain?)
    → BackendClient.ask_question() → POST /ask
      → HubAgent.process()
        → ScoutAgent.search()
          → ZonedVectorStore.search(zone=GREEN/YELLOW)
            ← top_k chunks + metadata (UDS V2: zone, ldf_level, bron_type)
        → CuratorAgent.curate(chunks)
            ← gefilterde, gerangschikte chunks
        → OllamaSynthesizer.synthesize(query, chunks)
            ← antwoord tekst + bronverwijzingen
        → SafetyPolicy.evaluate(query + antwoord)
            ← safety_status: GREEN_ZONE / YELLOW_ZONE / BLOCKED
      ← FastAPI response: answer + sources + safety + confidence
    ← MCP tools.py: format_ask_response() → safety blok normalisatie
  ← Claude: antwoord + zone indicator aan gebruiker

Doelarchitectuur (Sprint B+)

[Zorgmedewerker interface — Sprint D+]
        ↓
[MCP Host: Claude Desktop / eigen agent]  ← Sprint C: config gereed
        ↓  MCP protocol (stdio)
[Buurts MCP Server]
  buurts_knowledge_search
  buurts_knowledge_ask
  buurts_ingest_document   ← Sprint B backlog
  buurts_list_library      ← Sprint B backlog
        ↓  intern HTTP
[FastAPI backend]
        ↓
[ZonedVectorStore (RED/YELLOW/GREEN)]
        ↓
[SharePoint connector]     ← Sprint B
[ChromaDB × 3 zones]
[Ollama / Cloud LLM]       ← beslissing #3 open

Vastgestelde keuzes

Beslissing Keuze Sprint Reden
MCP implementatie Python MCP SDK 10 Zelfde stack, officieel Anthropic
FastAPI Blijft intact MCP is laag erbovenop, geen vervanging
MCP tools MVP knowledge_search + ask_question 10 Minimaal werkend eerst
Vector store ChromaDB (3 geïsoleerde collecties) A Zone-isolatie: RED nooit bevraagd zonder expliciet
Chunker SmartChunker als default A Semantische grenzen, 10% overlap
UDS metadata V2 (zone, ldf_level, bron_type, domein) A Toekomstbestendig filtering
Claude config CLAUDE.md + .mcp.json + .claude/settings.json C Auto-load context, zero-friction
Git Trunk-based, feature branch per sprint CI vereist groen op main

Openstaande beslissingen

# Vraag Blokkeert
1 SharePoint connector: productie-klaar of mock? Sprint B
2 MCP host productie: eigen agent of UI framework? Sprint B/D
3 Ollama: lokaal of cloud LLM voor productie? Sprint D
4 LDF-level als filter in retrieval-stap? Sprint B
5 Ethical Mirror: in code of via prompt? Sprint D

Technische schuld

Item Prioriteit Sprint ontdekt
Policy-laag niet LDF-bewust (geen level-filtering bij retrieval) Hoog 10
RED-zone abstain niet per endpoint geïmplementeerd in safety/gates.py Hoog 10
Ethical Mirror (Art. 12) conceptueel maar niet in code Medium 10
Hub is single point of failure voor ethiek-handhaving Medium 10
Eval golden sets alleen Autisme domein Laag 9
Geen structured logging (alleen JSON naar stdout) Laag C

Module-referentie (meest aangeraakte bestanden)

Module Verantwoordelijkheid
main.py FastAPI app, routers, DI-setup
config.py Settings via pydantic-settings + .env
agents/hub.py Orchestrator, Guardian Layer
agents/curator.py Curatielogica, relevantie-filter
agents/synthesizer.py Mock synthesizer (voor tests)
agents/ollama_synthesizer.py Productie LLM synthesizer
rag/vector_store.py ZonedVectorStore (3 ChromaDB collections)
rag/chunker.py SmartChunker + DocumentChunker (legacy)
rag/document_registry.py SQLite registry voor ingest tracking
rag/sharepoint_connector.py SharePoint connector (Sprint B)
safety/policy.py Zone-evaluatie (GREEN/YELLOW/RED)
safety/gates.py Blocklist + allowlist checks
mcp_server/server.py MCP server entry point
mcp_server/tools.py Response formatters + safety-blok
mcp_server/backend_client.py HTTP client naar FastAPI