7dayrag
7dayrag
Flujo de trabajo RAG + agente de IA orientado a producción expuesto como un servicio FastAPI. Construido como la implementación de referencia para un compromiso de IA SaaS de 7 días: preguntas y respuestas fundamentadas sobre datos empresariales con citas, salvaguardas de rechazo y un agente que usa herramientas y llama a APIs internas.
Consulta ARCHITECTURE.md para conocer la justificación del diseño y el plan de entrega día a día.
Inicio rápido (no se requieren claves API)
La aplicación se ejecuta completamente sin conexión en modo stub (pseudo-embeddings deterministas + LLM con guion). Añade claves reales más tarde para cambiar a OpenAI/Anthropic con conmutación por error automática.
# 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 --reloadPruébalo
# 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}'Documentación interactiva: http://localhost:8000/docs
API
Método | Ruta | Propósito |
GET |
| vitalidad; preparación (BD + proveedores) |
POST |
| insertar o actualizar documento → fragmentar → incrustar → indexar |
POST |
| recuperación híbrida con puntuaciones fusionadas |
POST |
| preguntas y respuestas fundamentadas |
POST |
| agente de llamada a herramientas acotado, auditado en |
POST |
| recargar la base de conocimiento de muestra |
Cada respuesta lleva un x-request-id; los errores están estructurados como {error: {code, message}}.
Configuración
Todo a través de variables de entorno / .env (consulta .env.example). Ajustes clave:
LLM_PROVIDER:openai|anthropic|stub|auto(autorecorrePROVIDER_ORDERcon reintentos por proveedor + retroceso y conmutación por error; termina enstubsi no hay claves configuradas)OPENAI_BASE_URL: apunta a cualquier endpoint compatible con OpenAI (Ollama, vLLM, pasarelas)MIN_VECTOR_SCORE: umbral mínimo de coseno para el mejor resultado, por debajo del cual la API se niega en lugar de adivinarTICKETS_API_BASE_URL/ACCOUNTS_API_BASE_URL: apuntan las herramientas del agente a APIs internas reales; en blanco = datos de sandbox integradosREDIS_URL,CACHE_ENABLED,CACHE_TTL_SECONDS,RATE_LIMIT_PER_MINUTE: caché + limitación de velocidad; la ausencia de Redis solo cuesta rendimiento, nunca disponibilidad
Redis (caché + limitación de velocidad)
Las respuestas fundamentadas se almacenan en caché (clave por pregunta + configuración) y /api/v1/* tiene limitación de velocidad por IP de cliente con una ventana fija de 60 segundos. Las respuestas llevan x-ratelimit-remaining; superar el límite devuelve un 429 estructurado. /readyz informa sobre el estado de Redis; la API falla abierta si Redis está caído. Solo se almacenan en caché las respuestas que no son rechazos (los rechazos pueden cambiar a medida que se actualizan los documentos).
docker compose up -d redis # or just: docker compose up -d (brings up db+redis+api+n8n)Servidor MCP
Expón las mismas capacidades a Claude Desktop o a cualquier cliente MCP:
python mcp_server.py # stdio transportHerramientas: search_knowledge_base, answer_question, run_agent, lookup_ticket, lookup_account.
Fragmento de configuración de Claude Desktop:
{
"mcpServers": {
"7dayrag": {
"command": "python",
"args": ["/absolute/path/to/7dayrag/mcp_server.py"]
}
}
}Automatización de flujos de trabajo con n8n
docker compose up -d n8n → abre http://localhost:5678 → importa desde workflows/:
Flujo de trabajo | Qué hace |
| Webhook |
| Programación nocturna → resincroniza la base de conocimiento a través de |
Los flujos de trabajo llaman a http://api:8000 (red de Compose). Si ejecutas n8n fuera de Compose, cambia la URL base a http://localhost:8000.
Prueba el webhook de triaje después de activarlo:
curl -X POST localhost:5678/webhook/ticket-triage \
-H "Content-Type: application/json" -d '{"ticket_id": "TICKET-1001"}'Cómo funciona la fundamentación
La pregunta se incrusta (mismo modelo que en la ingesta) y se ejecuta mediante recuperación híbrida: pgvector coseno top-K + Postgres texto completo top-K, fusionados con Reciprocal Rank Fusion.
Si la puntuación vectorial del mejor resultado está por debajo de
MIN_VECTOR_SCORE→ rechazo (sin llamada al LLM).De lo contrario, el contexto numerado se envía al modelo con reglas estrictas: citar como
[n], responder solo desde el contexto, responderNOT_ENOUGH_CONTEXTen caso contrario.Las citas en la respuesta se mapean de vuelta a los documentos fuente y se devuelven.
Pruebas
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 pruebas: invariantes de fragmentación, fusión RRF, determinismo de embeddings, comportamiento del proveedor stub, análisis del bucle del agente, además de recorridos de extremo a extremo de la API contra Postgres/pgvector reales.
Despliegue (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/seedPara AWS: mismas imágenes → ECS Fargate + RDS Postgres (habilita la extensión pgvector). Para DigitalOcean: droplet + Postgres gestionado. Secretos solo a través de variables de entorno/gestor de secretos.
Estructura del proyecto
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/Próximos pasos (backlog posterior al compromiso)
Streaming (SSE), captura de comentarios en un conjunto de evaluación, etapa de reordenamiento, RLS multiinquilino, reindexación programada, versionado de prompts/A-B, paneles de costos.
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