RAG 管线
分块、检索、重排、引用;what-are-rags。
40 分钟
RAG 管线
RAG(Retrieval-Augmented Generation) 在生成前 检索证据,让回答可引用、可核对。AI 工程师要会设计 分块 → 索引 → 检索 → 重排 → 生成 全链路——对应 ai-engineer 的 what-are-rags 节点。Agent 层封装见 ai-agents-essentials。
学习目标
- 掌握离线与在线两阶段 pipeline
- 会配置 chunk、overlap、top_k、rerank 与 citation
- 识别 stale 索引、grounding 失败等生产问题
两阶段架构
离线:raw docs → 清洗 → 分块 → embed → 向量库(+ 可选 ES)
在线:query →(改写)→ 检索 →(重排)→ 拼 prompt → LLM → 带引用回答
def rag_answer(query: str, retriever, llm, top_k=8, rerank_k=4):
hits = retriever.search(query, top_k=top_k)
ranked = rerank(query, hits)[:rerank_k] if rerank else hits[:rerank_k]
context = format_chunks(ranked) # 含 title_path、url
prompt = build_grounded_prompt(context, query)
return llm.generate(prompt, schema=CitationAnswer)
分块策略
| 策略 | 适用 | 注意 |
|---|---|---|
| 固定 token 数 | 通用文档 | 512–1024 常见;10–20% overlap |
| 按 Markdown 标题 | 本站讲义 | 保 ## 语义完整 |
| 按段落 / 句子 | FAQ、API | 短块提高精度、增索引量 |
metadata 建议:track, slug, heading_path, updated_at, published。
检索与重排
- top_k:先宽后窄;k 太小易漏,太大噪声多
- Hybrid:BM25 + 向量,RRF 融合
- Rerank:cross-encoder 或 Cohere rerank,对 top 20→取 4
- Query 改写:多轮对话时把「它」补全为具体实体
system prompt 强制:仅依据下列片段;无相关内容则拒答。与 ai-engineering-essentials「不编造站内链接」一致。
引用与评估
输出示例:
RAG 分块常按标题切分 [aen-rag](/tracks/ai-engineer-advanced-essentials/lessons/aen-rag)。
团队审核流程见 [ai-engineering-essentials](/tracks/ai-engineering-essentials)。
离线指标:Recall@k、MRR;在线: grounded 比例、用户 thumbs、幻觉举报率。索引随 git merge ,避免 stale。