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 --reloadAusprobieren
# 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HamdanProfessional/7dayrag'
If you have feedback or need assistance with the MCP directory API, please join our Discord server