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 此阶段职责

  1. 明确检索目标:定义"搜什么"和"怎么算成功"。
  2. 制定质量标准:设计"召回率 ≥ 90%、准确率 ≥ 85%"等核心验收指标。
  3. 设计查询优化链: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