RAG 在线 Pipeline 2 + 3 + 4(全景):把 Query 向量送进检索漏斗,拼成结构化 Prompt,喂给 LLM,最后后处理交付前端。
Pipeline 2:向量检索
6 个动作
| 动作 | 说明 |
|---|---|
| 选择检索策略 | 纯向量 / 关键词 / 混合 |
| 向量相似度搜索 | Top-K 召回 |
| 关键词检索同步 | BM25 等做关键词路 |
| 结果融合 | 多路召回合并 |
| 重排序 | 用更复杂模型重新打分 |
| 后处理 | 过滤、去重 |
查询构建:双路并行
Query → ┬→ Text-to-SQL → 关系型数据库 ┐
└→ Text-to-Embedding → 向量数据库 ┘
→ 检索文件夹 → 合并去重
多路查询 & 查询分解
- 多重查询:一个 Query 派生出多个语义近邻的子查询,分别检索后合并(如"气候变化的影响" → "气候变化如何影响日常天气" + "气候变化对经济有哪些影响")
- 查询分解:复杂 Query 拆成多个独立子问题,分别检索后融合(如"在 GitHub 上 A 和 B 哪个 star 更多" → "A 在 GitHub 上有多少 star" + "B 在 GitHub 上有多少 star" + "A 和 B 哪个的 star 更多")
多路召回结果合并去重
用哈希表:
- 键:文档的唯一标识
- 值:该文档的整合信息(得分、内容、召回路径、是否多路命中等)
召回重排序漏斗
ALL Item (百万/千万级) ──快速筛选──→ 召回 (万级候选)
──轻量模型──→ 粗排 (千级候选)
──复杂模型──→ 精排 (八十级候选)
──后处理──→ TOP 5-10
每层用复杂度递增的模型,是工程降本的核心结构。
面试真题:RAG 中怎么有效降低成本?
二级片段法:chunk 切分成三级结构,通过检索二级片段,若 Top-K 二级片段中超过 n 个属于同一一级片段,二级片段用一级片段替换,以获得主题完整的文本语义信息;独立二级片段不输出。
PM 此阶段职责
- 明确检索目标:定义"搜什么"和"怎么算成功"。
- 制定质量标准:设计"召回率 ≥ 90%、准确率 ≥ 85%"等核心验收指标。
- 设计查询优化链:Query 改写、意图识别(分类用户问题类型)、多跳检索(针对复杂问题设计多步骤搜索,如"查张三报销单 → 再查报销规则 → 最后查审批记录")。
协作对象:算法、AI 工程、数据工程、前后端。
Pipeline 3:上下文组装
3 个动作
| 动作 | 说明 |
|---|---|
| 加载 Prompt 模板 | 5 段结构(见下) |
| 整理 chunks | 去重、阈值过滤、截断、多样性控制、重新分配 ID |
| 注入关键指令 | 兜底策略 + 输出格式 |
Prompt 模板 5 段结构
| 段 | 内容 |
|---|---|
| System Prompt | 角色 + 规则 + 风格(如"你是 ABC 公司的 HR 政策助手"、回答规则、200 字以内、用第二人称等) |
| Reference Context | 检索到的资料(多个 [doc-N] 块,每块含来源) |
| Conversation History | 历史对话(最简策略:保留最近 N 轮;进阶策略:N 轮 + 更早摘要) |
| User Query | 当前用户问题(注意用分隔符 + 角色锁定,防止 prompt 注入) |
| Output Format | 自然语言格式 或 结构化 JSON 格式(含 answer/citations/confidence/need_human_followup/followup_reason) |
整理 chunks 的具体动作
| 动作 | 做什么 |
|---|---|
| 去重 | 同一 chunk 出现多次只保一次 |
| 阈值过滤 | 相似度低于 0.78 的丢弃 |
| 截断 | 按预算从高到低保留前 N 个 |
| 多样性控制 | 同一文档相似度最高保留 N 个,避免单一来源 |
| 重新分配 ID | chunk_142 → [doc-1],给每个引用一个简洁的引用标记 |
注入关键指令(兜底 + 格式)
- 兜底策略:如果参考资料中没有足够信息回答用户问题,不要使用预训练知识猜测,直接回复"根据现有 HR 政策资料无法判断,建议联系您的 HRBP 进一步咨询。您也可以补充更具体的问题描述,我再帮您查找。"
- 输出格式:JSON 格式,含 answer / citations / confidence / need_human_followup 等字段。
Pipeline 4:生成
模型选型(route_model 路由)
def route_model(query, retrieved_chunks):
# 规则 1:空召回直接小模型
if len(retrieved_chunks) == 0:
return "gpt-4o-mini"
# 规则 2:需要计算的用大模型 + Tool
if has_calculation_intent(query):
return "gpt-4o-with-tools"
# 规则 3:多轮 follow-up 用中等模型
if is_followup_question(query):
return "claude-haiku"
# 规则 4:检索召回量多 + 问题复杂 → 大模型
if len(retrieved_chunks) >= 4 and query_complexity(query) > 0.7:
return "gpt-4o"
# 默认
return "gpt-4o-mini"
模型参数
temperature=0.1, max_tokens=800, stream=True, top_p=0.9
低温度保证事实性回答的稳定性;流式提升用户感知速度。
流式输出 4 要点
| 要点 | 目标 |
|---|---|
| 首字延迟 | < 1s,是核心指标。优化点:模型选型、Prompt 长度、缓存 |
| 中断处理 | 用户提前关页面要能优雅取消,不要让 token 继续烧钱 |
| 错误处理 | 流到一半模型挂了,前端要显示"答案生成中断,[重试]" |
| 完整性校验 | 流结束后要检查答案是否完整(比如 JSON 是否能 parse) |
后处理 4 步
| 步骤 | 做什么 |
|---|---|
| 引用关联 | 扫描 [doc-N],把它替换成可点击的链接(关联回原文 chunk),前端鼠标 hover 时弹出 chunk 原文预览 |
| Markdown 渲染 | 把"直接答案"这类标题、1./2. 列表用 Markdown 渲染成视觉层级 |
| 敏感词 / PII 过滤 | 扫描答案中有没有意外暴露的手机号、身份证号、薪资数字 |
| 格式校验 | 如果要求 JSON 输出,确认能 parse;不能 parse 走兜底逻辑(重试 / 降级) |
相关页面
→ RAG运转流程 → Query增强与改写 → 提示词设计五要素 → 提示词工程四象限法则 → 模型选型方法论 → 效果评测体系 → AIPM课程 Day8