Zum Hauptinhalt springen

Architektur & Datenfluss

Wie eine Anirag-Query intern verarbeitet wird — vom User-Browser über Vercel-Edge bis zum LLM-Provider.

Eine RAG-Query bei Anirag durchläuft 8 dokumentierte Schritte. Alle Schritte werden im Audit-Log protokolliert (siehe Sicherheit).

Vereinfachter Request-Flow

[1] User Browser / API-Caller
     │  TLS 1.3 + HSTS + Cert-Pinning
     ▼
[2] Vercel Edge (eu-fra-1)
     │  CSRF-Token, Rate-Limit, Auth-Check
     ▼
[3] API-Gateway (Vercel Function)
     │  Workspace-Resolution, Audit-Log-Eintrag
     ▼
[4] Embedding-Service
     │  Question → 1024-d Vector (Voyage-3)
     ▼
[5] Qdrant (Railway eu-west1)
     │  Hybrid-Search: BM25 + Vector
     │  Re-Ranker (Cohere Rerank-3) → Top-K Chunks
     ▼
[6] Multi-LLM-Router
     │  Provider-Auswahl (Claude / GPT / Mistral / Aleph Alpha)
     │  Zero-Retention-Header gesetzt
     ▼
[7] LLM-Provider (EU-Region)
     │  Generation mit Citations
     ▼
[8] Response-Assembly + Trace-Log
     │  Answer + Citations + Cost + Trace-ID
     ▼
   User

Komponenten im Detail

Frontend & Edge

  • Vercel Edge in eu-fra-1 (Frankfurt) und eu-cdg-1 (Paris) als Failover.
  • TLS 1.3 + HSTS + Cert-Pinning auf der API-Domain.
  • Rate-Limiting via Upstash-Redis (sliding window, per-API-Key + per-IP).

Storage-Layer

  • Postgres (Neon, eu-central-1) für Workspaces, Memberships, API-Keys, Audit-Logs.
  • Qdrant (Railway, eu-west1) als Vector-DB. Open-Source (Apache-2.0), self-hostable für Sovereign-Kunden.
  • Redis (Upstash, eu-de) als Cache + BullMQ-Queue für asynchrone Embedding-Jobs.

LLM-Provider

Alle Provider in EU-Region mit Zero-Retention-Vereinbarung:

  • Anthropic Ireland (Claude Haiku 4.5, Sonnet 4.6, Opus 4.7)
  • OpenAI Ireland (GPT-4-aktuell, GPT-4o-mini)
  • Mistral (Frankreich) (Mistral Large, Mistral Medium)
  • Aleph Alpha (Heidelberg, DE) (Pharia-1, Luminous Base)
  • Llama-EU (für On-Prem-Deployments)

Was im Trace gespeichert wird

Jede Query erzeugt einen Trace, abrufbar via GET /v1/traces/{id}:

  • Original-Frage
  • Kandidaten-Chunks mit Scores (BM25 + Vector + Hybrid)
  • Verworfene Chunks (mit Begründung)
  • Re-Ranker-Output
  • Final-Prompt ans LLM
  • LLM-Response (raw + parsed)
  • Citations + Confidence-Scores
  • Latency-Breakdown (retrieval, rerank, generation, total)
  • Cost-Breakdown (Embedding-Tokens, LLM-Input-Tokens, LLM-Output-Tokens, EUR)

Performance-Charakteristiken

Stand Q2/2026, gemessen über 30 Tage in eu-fra-1:

  • Embedding-only: p50 = 60 ms, p95 = 140 ms, p99 = 180 ms
  • RAG-Query (4 Chunks + Claude Haiku): p50 = 380 ms, p95 = 720 ms, p99 = 1.2 s
  • RAG-Query (4 Chunks + Claude Sonnet): p50 = 580 ms, p95 = 980 ms, p99 = 1.8 s
  • Streaming-First-Token: p50 = 220 ms

Public-Latency-Dashboard: status.anirag.io.

Workspace-Isolation

Jeder Workspace hat einen physisch getrennten Qdrant-Collection-Index. Cross-Workspace-Suche ist technisch ausgeschlossen — auch für Admin-Tokens. Die Isolation gilt:

  • Auf Vector-Index-Ebene (eigene Collection pro Workspace)
  • Auf Postgres-Row-Level (RLS-Policies pro Workspace)
  • Auf Cache-Ebene (Redis-Key-Prefix pro Workspace)
  • Auf LLM-Prompt-Ebene (System-Prompts referenzieren nur Workspace-internes Wissen)

Für Branchen mit § 203-StGB-Pflicht (Klinik, Kanzlei) ist die Isolation auf Mandanten-Ebene weiter granulierbar via mandant_id-Filter.