Skip to main content
Glama

7dayrag

面向生产的 RAG + AI 智能体工作流,以 FastAPI 服务形式对外提供。作为 7 天 SaaS AI 项目的参考实现构建——基于业务数据、带引用的有依据问答,拒绝护栏,以及一个调用内部 API 的使用工具的智能体。

设计原理和逐日交付计划请参阅 ARCHITECTURE.md

快速开始(无需任何 API 密钥)

应用在 stub 模式下可完全离线运行(确定性伪嵌入 + 脚本化 LLM)。之后添加真实密钥即可切换到 OpenAI/Anthropic,并支持自动故障转移。

# 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 --reload

试用

# 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}'

交互式文档:http://localhost:8000/docs

API

Method

Path

Purpose

GET

/healthz, /readyz

存活检查;就绪检查(数据库 + 提供商)

POST

/api/v1/documents

upsert 文档 → 分块 → 嵌入 → 索引

POST

/api/v1/documents/search

带融合分数的混合检索

POST

/api/v1/query

有依据的问答 {question} → 答案 + 引用

POST

/api/v1/agent/run

有界工具调用智能体,审计到 agent_runs

POST

/api/v1/admin/seed

重新加载示例知识库

每个响应都带有 x-request-id;错误以结构化形式返回 {error: {code, message}}

配置

全部通过环境变量 / .env 配置(参见 .env.example)。关键设置:

  • LLM_PROVIDERopenai | anthropic | stub | autoauto 会遍历 PROVIDER_ORDER,带每提供商重试 + 退避和故障转移;如果未设置任何密钥则最终回退到 stub

  • OPENAI_BASE_URL:指向任何兼容 OpenAI 的端点(Ollama、vLLM、网关)

  • MIN_VECTOR_SCORE:最佳命中余弦分数下限,低于该值时 API 拒绝回答而不是猜测

  • TICKETS_API_BASE_URL / ACCOUNTS_API_BASE_URL:将智能体工具指向真实的内部 API;留空 = 内置沙箱数据

  • REDIS_URLCACHE_ENABLEDCACHE_TTL_SECONDSRATE_LIMIT_PER_MINUTE:缓存 + 限流;缺少 Redis 只会影响性能,绝不会影响可用性

Redis(缓存 + 限流)

有依据的答案会被缓存(以问题 + 配置为键),/api/v1/* 按客户端 IP 限流,固定 60 秒窗口。响应带有 x-ratelimit-remaining;超过限制返回结构化 429/readyz 报告 Redis 健康状况;如果 Redis 宕机,API 会以 fail open 方式继续运行。只有非拒绝的答案会被缓存(拒绝可能会随文档更新而变化)。

docker compose up -d redis   # or just: docker compose up -d  (brings up db+redis+api+n8n)

MCP 服务器

将相同的能力暴露给 Claude Desktop 或任何 MCP 客户端:

python mcp_server.py        # stdio transport

工具:search_knowledge_baseanswer_questionrun_agentlookup_ticketlookup_account。 Claude Desktop 配置片段:

{
  "mcpServers": {
    "7dayrag": {
      "command": "python",
      "args": ["/absolute/path/to/7dayrag/mcp_server.py"]
    }
  }
}

n8n 工作流自动化

docker compose up -d n8n → 打开 http://localhost:5678 → 从 workflows/ 导入:

工作流

功能

ticket_triage.json

Webhook POST /webhook/ticket-triage {ticket_id} → 校验输入 → 运行 7dayrag 智能体 → 返回分类摘要(带错误分支)。可在摘要响应处替换为 Slack/邮件节点。

kb_sync.json

夜间定时任务 → 通过 /api/v1/admin/seed 重新同步知识库;可替换为你的 CMS/Git/S3 源,通过 /api/v1/documents 喂入。

工作流调用 http://api:8000(compose 网络)。如果你在 Compose 之外运行 n8n,请将基础 URL 改为 http://localhost:8000

激活后测试分类 webhook:

curl -X POST localhost:5678/webhook/ticket-triage \
  -H "Content-Type: application/json" -d '{"ticket_id": "TICKET-1001"}'

有依据回答的工作原理

  1. 问题被嵌入(与摄取使用相同模型)并通过 混合检索 运行:pgvector 余弦 top-K + Postgres 全文 top-K,使用 Reciprocal Rank Fusion 融合。

  2. 如果最佳命中的向量分数低于 MIN_VECTOR_SCORE → 拒绝(不调用 LLM)。

  3. 否则,编号的上下文会连同严格规则一起交给模型:以 [n] 形式引用,仅根据上下文回答,否则回复 NOT_ENOUGH_CONTEXT

  4. 答案中的引用会映射回源文档并返回。

测试

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 scripts

21 个测试:分块不变量、RRF 融合、嵌入确定性、stub 提供商行为、智能体循环解析,以及针对真实 Postgres/pgvector 的端到端 API 往返测试。

部署(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/seed

对于 AWS:相同镜像 → ECS Fargate + RDS Postgres(启用 pgvector 扩展)。对于 DigitalOcean:droplet + 托管 Postgres。密钥仅通过环境变量/密钥管理器提供。

项目结构

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/

后续步骤(交付后的待办清单)

流式输出(SSE)、将反馈捕获到评估集、重排序阶段、多租户 RLS、定时重新索引、提示词版本管理/A-B 测试、成本仪表板。

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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