7dayrag
7dayrag
Produktionsorientierter RAG- und KI-Agenten-Workflow, der als FastAPI-Dienst bereitgestellt wird. Entwickelt als Referenzimplementierung für ein 7-tägiges SaaS-KI-Engagement – fundierte Q&A über Geschäftsdaten mit Zitaten, Verweigerungs-Schutzmechanismen und einem Tool-nutzenden Agenten, der interne APIs aufruft.
Siehe ARCHITECTURE.md für die Design-Begründung und den Tagesplan für die Lieferung.
Schnellstart (keine API-Schlüssel erforderlich)
Die App läuft vollständig offline im Stub-Modus (deterministische Pseudo-Embeddings + skriptbasiertes LLM). Fügen Sie später echte Schlüssel hinzu, um mit automatischem Failover auf OpenAI/Anthropic umzuschalten.
# 1. Postgres + pgvector
docker compose up -d db
# 2. Python deps
pip install -r requirements.txt
# 3. Configure (or skip: defaults match compose)
copy .env.example .env
# 4. Create schema + load the sample knowledge base
python -m scripts.seed_sample_data
# 5. Serve
uvicorn app.main:app --port 8000 --reloadRelated MCP server: support-agent-mcp
Ausprobieren
# Grounded Q&A with citations
curl -X POST localhost:8000/api/v1/query \
-H "Content-Type: application/json" \
-d '{"question": "What is the uptime SLA for Business plans?"}'
# Agent that calls tools (ticket lookup)
curl -X POST localhost:8000/api/v1/agent/run \
-H "Content-Type: application/json" \
-d '{"task": "Check ticket TICKET-1001 and summarize its status."}'
# Raw hybrid retrieval (debug/tuning)
curl -X POST localhost:8000/api/v1/documents/search \
-H "Content-Type: application/json" \
-d '{"query": "refund window annual plan", "top_n": 3}'Interaktive Dokumentation: http://localhost:8000/docs
API
Methode | Pfad | Zweck |
GET |
| Lebendigkeit; Bereitschaft (DB + Anbieter) |
POST |
| Dokument upserten → chunken → einbetten → indizieren |
POST |
| hybride Abfrage mit fusionierten Bewertungen |
POST |
| fundierte Q&A |
POST |
| begrenzter Tool-aufrufender Agent, protokolliert in |
POST |
| Beispiel-Wissensdatenbank neu laden |
Jede Antwort enthält eine x-request-id; Fehler sind strukturiert als {error: {code, message}}.
Konfiguration
Alles über Umgebung / .env (siehe .env.example). Wichtige Einstellungen:
LLM_PROVIDER:openai|anthropic|stub|auto(autodurchläuftPROVIDER_ORDERmit Wiederholungsversuchen pro Anbieter + Backoff und Failover; endet beistub, wenn keine Schlüssel gesetzt sind)OPENAI_BASE_URL: auf einen beliebigen OpenAI-kompatiblen Endpunkt zeigen (Ollama, vLLM, Gateways)MIN_VECTOR_SCORE: Untergrenze für den besten Kosinus-Treffer, unterhalb derer die API verweigert statt zu ratenTICKETS_API_BASE_URL/ACCOUNTS_API_BASE_URL: Agent-Tools auf echte interne APIs richten; leer = eingebaute Sandbox-DatenREDIS_URL,CACHE_ENABLED,CACHE_TTL_SECONDS,RATE_LIMIT_PER_MINUTE: Caching + Ratenbegrenzung; ein fehlendes Redis kostet nur Leistung, nie Verfügbarkeit
Redis (Caching + Ratenbegrenzung)
Fundierte Antworten werden zwischengespeichert (nach Frage + Konfiguration) und /api/v1/* ist pro Client-IP mit einem festen 60-Sekunden-Fenster ratenbegrenzt. Antworten enthalten x-ratelimit-remaining; das Überschreiten des Limits gibt strukturiertes 429 zurück. /readyz meldet den Redis-Status; die API fällt offen aus, wenn Redis nicht verfügbar ist. Nur Nicht-Verweigerungs-Antworten werden zwischengespeichert (Verweigerungen können sich ändern, wenn Dokumente aktualisiert werden).
docker compose up -d redis # or just: docker compose up -d (brings up db+redis+api+n8n)MCP-Server
Stellen Sie dieselben Fähigkeiten für Claude Desktop oder jeden MCP-Client bereit:
python mcp_server.py # stdio transportTools: search_knowledge_base, answer_question, run_agent, lookup_ticket, lookup_account.
Claude-Desktop-Konfigurationsausschnitt:
{
"mcpServers": {
"7dayrag": {
"command": "python",
"args": ["/absolute/path/to/7dayrag/mcp_server.py"]
}
}
}n8n-Workflow-Automatisierung
docker compose up -d n8n → öffnen Sie http://localhost:5678 → importieren Sie aus workflows/:
Workflow | Was es tut |
| Webhook |
| Nächtlicher Zeitplan → synchronisiert die Wissensdatenbank über |
Workflows rufen http://api:8000 auf (Compose-Netzwerk). Wenn Sie n8n außerhalb von Compose ausführen, ändern Sie die Basis-URL auf http://localhost:8000.
Testen Sie den Triage-Webhook nach der Aktivierung:
curl -X POST localhost:5678/webhook/ticket-triage \
-H "Content-Type: application/json" -d '{"ticket_id": "TICKET-1001"}'So funktioniert die Fundierung
Die Frage wird eingebettet (gleiches Modell wie bei der Aufnahme) und durch hybride Abfrage geführt: pgvector-Kosinus-Top-K + Postgres-Volltext-Top-K, fusioniert mit Reciprocal Rank Fusion.
Wenn der Vektor-Score des besten Treffers unter
MIN_VECTOR_SCOREliegt → Verweigerung (kein LLM-Aufruf).Andernfalls geht der nummerierte Kontext mit strengen Regeln an das Modell: als
[n]zitieren, nur aus dem Kontext antworten, andernfallsNOT_ENOUGH_CONTEXTantworten.Zitate in der Antwort werden auf Quelldokumente zurückgeführt und zurückgegeben.
Tests
docker compose up -d db # integration tests need Postgres on :5433
pytest tests -q # unit + integration; integration skips cleanly without DB
ruff check app tests scripts21 Tests: Chunking-Invarianten, RRF-Fusion, Embedding-Determinismus, Stub-Provider-Verhalten, Agenten-Schleifen-Parsing, plus End-to-End-API-Roundtrips gegen echte Postgres/pgvector.
Bereitstellung (Staging)
cp .env.example .env # add OPENAI_API_KEY
docker compose up -d --build
curl localhost:8000/readyz
curl -X POST localhost:8000/api/v1/admin/seedFür AWS: gleiche Images → ECS Fargate + RDS Postgres (aktivieren Sie die pgvector-Erweiterung).
Für DigitalOcean: Droplet + verwaltetes Postgres. Geheimnisse nur über Umgebung/Secret-Manager.
Projektstruktur
app/
api/ FastAPI routes (documents, query, agent, health/admin)
agent/ tool registry (KB search, ticket/account lookup) + bounded agent loop
llm/ provider abstraction: openai, anthropic, stub + retry/failover router
rag/ chunking, ingestion, hybrid retrieval (RRF), grounded generation
cache.py Redis: response cache + fixed-window rate limiting (fail-open)
config.py env-driven settings · db.py engine/session · db_init.py schema bootstrap
data/sample_docs/*.md demo knowledge base
scripts/seed_sample_data.py
workflows/*.json importable n8n automations (ticket triage, KB sync)
mcp_server.py MCP tool server (stdio) for Claude Desktop / MCP clients
tests/Nächste Schritte (Backlog nach dem Engagement)
Streaming (SSE), Feedback-Erfassung in ein Evaluierungsset, Reranker-Stufe, Multi-Tenant-RLS, geplante Neuindizierung, Prompt-Versionierung/A-B, Kosten-Dashboards.
This server cannot be deployed
Maintenance
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Salesforce-grounded retrieval, diagnoses, and a vetted-Force marketplace for MCP clients.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides 14 MCP tools for AI agent infrastructure, enabling knowledge base queries, skill search, handoffs, blueprint validation, trust scoring, identity verification, SLA validation, and compliance checks.22MIT
- AlicenseNot gradedqualityBmaintenanceExposes order status lookup and knowledge base search tools from the Support Agent AI over MCP, enabling MCP clients to handle customer support queries with grounded, citation-backed answers.MIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI to perform customer support workflows by looking up customers, retrieving orders, and creating support tickets through MCP tools.3 npmX11 no permit persons clause
- FlicenseAqualityCmaintenanceProvides reusable MCP tools for Amazon Connect AI Agents and Bedrock AgentCore to look up customers, manage support tickets, schedule appointments, update CRM records, retrieve knowledge, and create tasks.7-