教程 stage3「基础设施」配套 demo · 补全 RAG 从切分到评估的完整链路 · 复现 cookbooks contextual-embeddings 三级递进优化。
一个生产级、可端到端运行的最小 RAG 服务:文档切分 → contextual embeddings → 入库(zvec)→ 三级递进检索 → 评估出表。补 stage3「只有检索侧代码片段」的留白。
| 级别 | 策略 | 对应 cookbooks | 解决什么 |
|---|---|---|---|
| L1 | 纯向量 | baseline RAG | 语义相似 |
| L2 | +FTS 混合(RRF 融合) | +BM25 | 关键词召回补充(对应官方 context+BM25 的 49% 降幅:5.7%→2.9%) |
| L3 | +CrossEncoder 重排 | +rerank | 精排,叠加后累计降 67% 检索失败率(官方:context+BM25 降 49%、再 +rerank 降 67%,5.7%→1.9%) |
pip install -r requirements.txt
python main.py # 走兜底(无 key 也能看三级流程)
python main.py --no-rerank-model # L3 不下模型,回退 L2
有 DASHSCOPE_API_KEY / ANTHROPIC_API_KEY 时自动启用在线 embedding + contextual embeddings,数值反映真实质量。
Windows cmd 中文乱码时,设
PYTHONIOENCODING=utf-8再跑。
| 后端 | 触发条件 | 用途 |
|---|---|---|
| online | 有 API key | 生产 |
| local | 装了 sentence_transformers + 模型 | 离线生产 |
| sample | workspace/vectors.json 命中 | 教学演示 |
| hash | 以上都不可用 | 流程演示(语义无关) |
chunking.py 切分(纯函数)embed.py 三层降级 embeddingingest.py 切分 + contextual embeddings + 入库retrieve.py 三级递进检索evaluate_rag.py recall@k / MRR / faithfulnessmain.py 一键演示tests/ 单元 + 集成测试workspace/docs/ sample 文档 · workspace/evalset.json 评估集cd demos/rag-service && python -m pytest tests -v
stage3 §2「业务知识 RAG 服务」的端到端实物。stage5「度量」的检索质量评估(recall@k/MRR)也复用本 demo 的 evaluate_rag.py。
三级递进与 contextual embeddings 思路源自 Anthropic cookbooks capabilities/contextual-embeddings(本 demo 为中文重写 + zvec 实现)。zvec 为阿里巴巴开源(Apache-2.0)。