第 10 章 实操三 · 政策法规 RAG 问答系统(场景 B)¶
本章定位: 实操单元 · 角色 = Delta · Prototype 阶段 · 模式 = AI 施工(opencode + gstack)· 场景 B——Delta 侧第二个施工实操(坡度第二级:检索 + 生成)。
前置: 场景 B 方案框架;RAG 链路与选型;施工工作流;实操二成果。
延伸阅读: 见文末 FDE-101 章节方法深读链接。
实验手册: Q&A 验证集、启动提示词参考答案、gstack 安装速查、灵魂追问与讲师要点见《实验手册》
labs/lab3-policy-rag.md;政策文档素材见labs/lab3-policy-docs/——本实操正文只保留"方法与验收"。
本章学习目标:
- 复用实操二练熟的"启动提示词 → gstack 八环节 → checkpoint 把关"工作流;
- 施工 RAG:读懂政策文档(含 docx/pdf 解析)→ 分块 → 向量化 → 检索 → 生成 + 来源引用;
- 把"答案可追溯"作为政务命门落地为双指标验收(答案准确率 + 来源可追溯率);
- 掌握 RAG 特有的几个决策点:切块策略、top-K、检索不到兜底、建索引后抽查。
学习目标追踪(目标 → 活动 → 证据 → 验收):
| 学习目标 | 对应活动 | 主要证据 | 对应 DoD |
|---|---|---|---|
| 复用实操二施工工作流 | 演练流程全程 | 启动提示词含 7 项信息 | 含政策文档 + Q&A 验证集 |
| 施工 RAG(解析→分块→向量化→检索→生成+引用) | 环节 2 注入并跟进八环节 | 索引与检索代码、qa_pairs.csv | 5 份文档读全、建索引抽查 |
| 双指标验收落地 | 环节 3 验收与收尾 | qa-report.md 双指标结果 | 双指标达标、拒答实测 |
| RAG 特有决策点(切块/top-K/兜底) | 环节 2 注入并跟进八环节 | SPEC-决策记录.md | 决策点都拍板 |
| 演示级验收声明 + 交接 | 环节 3 验收与收尾 + 环节 4 复盘沉淀 | 验收声明、retro.md | 声明与交接完成 |
10.1 知识背景¶
这一轮的方法定位: - 开卷考试:本实操落在四层级金字塔第 2 层 RAG——先检索政策片段,再基于片段作答并标注来源;不用微调(政策常更新、需溯源、易幻觉)、不用纯关键词搜索(语义鸿沟)。 - 核心链路:离线建库(解析→分块→向量化→存库)做一次,在线问答(检索→生成 + 引用)做多次;政策更新只需重建索引,不用改模型。 - 双指标:答案准确率 + 来源可追溯率,是政务 AI 的准入门槛——答必须带出处、检索不到不能编。 - 从最简单开始:本实操用基础向量检索(Chroma + top-K),不堆叠混合检索 / 重排;当评估发现某类查询持续差,才逐段升级。 - 数据不出域:本实操 embedding 走 API(如硅基流动 bge-m3)的前提,是课堂模拟数据(完全虚构、脱敏、无真实个人信息)可在课堂批准环境使用公网服务;若换成真实客户数据(未经确认不得进入公网服务),应切到本地向量库与本地 embedding。 - 最小工具契约(供后续复用):本实操的检索能力将被封装为
search_policy工具——输入:用户问题;输出:带来源的证据片段列表。每个证据带来源元数据:source_file(原始文件)/normalized_file(归一化文本)/article(条款)/excerpt(摘要),供"来源可追溯"与实操四B 复用,并守住"无证据不回答"的底线。元数据字段现在建好,后面建索引、答引用、做本体都不用返工。
10.2 任务书¶
打开解决方案框架的场景 B:"政务政策知识问答——让市民问政策,系统直接给答案,还得告诉他是哪份文件、哪条规定的,免得坐席背锅。"
技术方案(已在实操一定): RAG(不是微调、不是纯关键词搜索)——政策文件会更新、答案必须可溯源、不能凭模型记忆瞎答。技术栈:opencode + gstack + DeepSeek + 向量库 + Streamlit。
10.3 课前准备¶
- opencode、gstack 已装(实操二装过,可复用)
- DeepSeek API key 已配置
- 向量库 + embedding 依赖已装(见下方环境准备)
- 已通读解决方案框架的场景 B 部分
- 已查看实操二的《AGENTS.md》和《retro.md》(交接经验)
- 政策文档素材在手(
labs/lab3-policy-docs/,5 份混合格式) - 创建本实操目录
实操三-政策问答/
环境准备(向量库 + embedding): RAG 比分类器多了两样东西——向量库和 embedding 模型。让 Agent 帮你装(含:清华镜像 pip、GitHub ghfast 代理、独立 venv、装 chromadb、配置 embedding API(如硅基流动 bge-m3)写进 .env)。验证标准:装完必须实际跑一行 import + 调用,确认返回向量维度——pip list 显示"已安装"可能是假象(环境变量泄漏加载到残缺包),务必实测。
embedding 两条路: 本实操用 API 优先(如硅基流动 bge-m3)——免运维、验证快;本地跑要下载 2GB+ 模型和 torch、机器差会卡死。若 API 不可用再降级本地。
政策文档(labs/lab3-policy-docs/):
| 文件 | 格式 | 内容 |
|---|---|---|
| 社保参保政策.md | Markdown | 6章27条 |
| 医保报销政策.md | Markdown | 7章28条 |
| 保障性住房政策.md | Markdown | 7章27条 |
| 户籍迁移政策.docx | Word | 7章23条 |
| 就业创业补贴政策.pdf | 6章33条 |
.docx和
10.4 演练流程¶
10.4.1 环节 1 · 写启动提示词¶
这不是让 AI 干的活,是你(Delta)的活。 流程和实操二一样,但你这次有了经验,且场景 B 的 7 项信息内容不同。对照方案框架场景 B 填:
| # | 信息块 | 本场景内容 |
|---|---|---|
| 1 | 背景与角色 | "我是 FDE 团队的 Delta,施工场景 B:政务政策问答" |
| 2 | 要做什么 | "政务政策知识问答系统,基于政策文件回答市民咨询" |
| 3 | 输入输出 | "输入一个政策问题,输出:回答 + 来源引用(哪份文件、哪一条)" |
| 4 | 技术选型(含理由) | "已选型 RAG,不用微调(政策常更新、需溯源)、不用纯关键词搜索(语义鸿沟)" |
| 5 | 数据现状 | "政策库在 Lab3-policy-docs/(5 份混合格式)+ Q&A 验证集;政策会更新,需重建索引" |
| 6 | 验收口径 | "答案准确率 ≥80% + 来源可追溯率 ≥90%(双指标)" |
| 7 | 约束与边界 | "答案必须带来源引用,不能凭模型记忆瞎答;API key 走环境变量" |
Step 1 写出 7 项信息 + 政策文档路径 + Q&A 验证集;Step 2 用自查问题审查(同实操二 7 个自查);Step 3 附上 Q&A 验证集(6 条,让 Agent 落盘 tests/qa_pairs.csv)。(Q&A 验证集全文与启动提示词参考答案见《实验手册》labs/lab3-policy-rag.md 附录 D。)
本阶段最容易漏的两处: - 数据现状写"政策会更新,需重建索引"——漏了 Agent 可能不做索引更新机制; - 验收口径写"来源可追溯率"这个指标——漏了 Agent 只优化答案对错、不重视引用(可溯源是政务命门)。
验证集设计:验证集问题不要设计得太宽。 一个宽问题往往覆盖多个条款(如"外地户口能交社保吗"同时涉及稳定就业/灵活就业两条),单条款锚定必然歧义。拆细(稳定就业→第15条、灵活就业→第16条)能同时提升验收稳定性和教学清晰度。
10.4.2 环节 2 · 注入并跟进八环节¶
注入:把启动提示词灌进 /office-hours + 附驱动指令(同实操二:环节产出落盘、禁止全自动、拍板点列选项——完整写法见《实验手册》labs/lab3-policy-rag.md)。
跟进八环节,你的把关点(相比实操二,新增 RAG 特有的检查):
| 环节 | Agent 会做什么 | 你的 checkpoint |
|---|---|---|
| office-hours | 追问数据、口径、溯源 | 回答文档/口径问题;确认"值得做" |
| spec | 死磕 No-Go、数据模型、验收口径 | "答案必须带来源"写进 SPEC了吗 |
| autoplan | 暴露 RAG 决策等你拍板 | 真的拍板:切块策略、top-K、检索不到怎么办 |
| build | 文档→分块→向量化→检索→生成 | 文档来自 Lab3-policy-docs、非 Agent 编;5 份都读全(含 docx/pdf);建索引后抽查检索(见下) |
| review | 两遍检查,P0–P3 | 修 P0/P1;API key 没硬编码;embedding 无硬编码模型名 |
| qa | 真实跑 + 边界 | 用 Q&A 验证集测;双指标达标 |
| ship | 版本+CHANGELOG+README+commit | .env 未入库 |
| retro | 复盘四点 | 摩擦写具体;有行动项 |
施工阶段必做的一个验证动作——建索引后抽查检索:
flowchart TB
P1["政策文档 5 份<br/>(含 docx / pdf)"]
P2["解析 .docx / .pdf → 可检索文本"]
P3["按条切块<br/>过滤程序性条款"]
P4["向量化 + 存入向量库"]
CHK["建索引后抽查 top-k<br/>目标条款是否在前几"]
Q["用户提问"]
R["检索 top-5 片段"]
A["生成答案 + 来源引用"]
P1 --> P2 --> P3 --> P4 --> CHK
Q --> R
P4 -.检索底库.-> R
R --> A
style P4 fill:#dbe4f0,stroke:#3949ab
style CHK fill:#f5ece0,stroke:#a8895f
style A fill:#3949ab,color:#fff,stroke:#1a237e
图 10-1:本实操施工主链路——离线建索引 + 在线问答,建索引后先抽查 top-k 再验收
这条"建索引后抽查"是 RAG 施工最容易被跳过的动作,详见下方决策点 5。
关键决策点(Agent 停下时你要拍板):
- 切块策略:政策文档天然按"条"组织,推荐按条切块(正则匹配行首"第X条",每条一块,条款号随块保留)——引用粒度天然对齐"第X条",与验证集零转换。固定长度切块会一次塞好几条政策、切断条款号,不推荐。注意程序性条款("本政策由XX负责解释/自XX起施行/有效期")对所有问题都呈中等相似度、相互高度相似,会污染检索——建索引时建议过滤。
- 检索数量(top-K):太少答案不全、太多噪声大——实测 top-5 配合程序性条款过滤效果稳定。
- 检索不到怎么办:绝不能编——应明确说"政策库中未找到,建议咨询人工"。相似度阈值只是"进生成的门槛",检索到相似度不高的片段进了生成后,拒答靠提示词约束模型判断兜底——两层防线,验收各测一条(准备 1–2 条库外问题实测拒答)。
- 来源引用格式:要显示"文件名 + 条款号"——这是政务可溯源的底线。
- 建索引后必须抽查检索:建完索引,对每条验证集问题输出 top-k 排名,人工扫一眼目标条款在不在前几。不抽查直接验收,目标条款可能被程序性条款挤掉,首轮必 FAIL、白花几十分钟——这是 RAG 施工最实用的经验。
自查追问: Agent 在 autoplan 问"检索不到时模型怎么回答"——你不能说"你看着办"。为什么?因为 政务场景,编造政策答案是事故(坐席/平台要负责)。你必须拍板"检索不到必须明说,不能编"。这个决策 AI 不知道严重性,只有你知道。
10.4.3 环节 3 · 验收与收尾¶
Step 1 核对交付物:
实操三-政策问答/
├── 01-office-hours.md
├── SPEC.md # 含失败模式 + No-Go + 数据模型 + 验收口径
├── SPEC-决策记录.md # autoplan 拍板记录
├── docs/ # 政策库(从 Lab3-policy-docs/ 读取)
├── src/ # 分块/向量化/检索/生成模块
├── streamlit_app.py # 对话界面
├── tests/qa_pairs.csv # Q&A 验证集
├── review.md / qa-report.md
├── VERSION / CHANGELOG.md / README.md
└── retro.md
Step 2 验收口径(双指标):
| 指标 | 要求 | 判定机制 |
|---|---|---|
| 答案准确率 | ≥80% | 让 LLM 语义评判:对照 expected_answer 判"一致/不一致" |
| 来源可追溯率 | ≥90% | 严格比对:引用的"文件名+条款号"与 expected_source 一致才算对(条款号归一化:'第16条'/'第十六条'都算 16;漏引/错引/不符都算未达标) |
为什么"答案对但来源错"也要扣分? 政务命门是可溯源——答案对了、来源引错了,等于让市民去核对一个不存在的文件,比不答更糟。
统计提示(小样本口径): 6 条验证集上,"可追溯率 ≥90%" 实际需要 6/6 全对——5/6≈83.3% 不达标;小样本下 90% 门槛退化为"全对制"。该结果只说明本次样本,不代表稳定的生产水平;对"全对才过线"要有心理预期。
Step 3 模拟向小王演示:
- 用她听得懂的话讲(别说"RAG""向量检索");
- 演示一个"带来源引用"的回答——"系统答完还告诉市民哪份文件哪一条,你可以去核对";
- 呼应她"答错政策担责任"的顾虑——"政策答错责任能追溯到文件,不用你背锅"。
自查追问: 向小王演示时,为什么"来源引用"是最好的切入点?——因为她最怕"答错政策被追责"。来源引用把"AI 答错了谁负责"从"坐席背锅"变成"按文件来、有据可查"。 这正是场景 B 的核心价值。
Step 4 写"演示级验收声明"(DoD):
"本项目使用 5 份政策文档 + 6 条 Q&A 验证集,属演示级验收——结论仅证明方案在给定政策库和样本上可行,不宣称覆盖全部政策或达到生产可用。"
自查追问: 为什么必须写这句?政务场景夸大更危险——说"覆盖全部政策"而实际没有,市民按错误信息办事,责任是平台扛。
10.4.4 环节 4 · 复盘沉淀¶
- 看 Agent 的 retro;追加:更新 AGENTS.md(RAG 特有坑:程序性条款过滤、拒答两层防线)+ 改进交接(下一轮场景 C Agent 开工前先看这条经验)。
10.5 产出物清单与验收标准(DoD)¶
交付物: 见环节 3 Step 1 文件树。
验收标准(DoD):
- 启动提示词含 7 项信息块 + 政策文档 + Q&A 验证集 + 双指标验收口径
- Agent 按 gstack 八环节跑完,每环节有产出文件
- RAG 决策点都拍了板(切块策略 / top-K / 检索不到兜底 / 来源格式)
- "答案必须带来源"写进 SPEC;建索引后抽查检索(目标条款在前几)
- 5 份政策文档都读全(含 docx/pdf 解析),来自 Lab3-policy-docs、非编造
- 双指标达标(准确率 ≥80% + 可追溯率 ≥90%),拒答(库外问题)实测过
- .env 未入库,P0/P1 已修复
- 向小王演示"来源引用 = 责任可追溯"
- 写了"演示级验收声明"
- retro 更新了 AGENTS.md 与交接行动项
(gstack 安装速查见
labs/lab3-policy-rag.md附录 A;Q&A 验证集与启动提示词参考答案见附录 D;灵魂追问与讲师要点见附录 B/C。)
10.6 Echo Prototype 检查单¶
本章不是 Delta 单线活动:Prototype 结束时,Echo 至少完成一次检查(对照实操一的方案框架),产出可归因、可评分的个人记录。Delta 仍是施工主责。
Echo 至少完成:
- 哪些问题允许回答、哪些必须拒答(回答边界确认);
- 引用是否真正支撑结论(抽查"答对但引错/引对但过度推断"两类失败);
- 政策适用对象、时间和地域边界确认;
- 坐席是否能理解和复核答案(对小王演示后的反馈);
- 是否满足原始业务需求的判断。
通用检查单(每条填一行):
| 原需求 | 当前功能 | 证据 | 用户反馈 | 未满足项 | 阈值是否调整 | 下一步判断 |
|---|---|---|---|---|---|---|
| 场景 B 双指标口径 | RAG + 引用 + 拒答 | qa-report.md | 演示反馈 | 待填 | 是否调整及原因 | Go / 继续 / 回炉 |
反模式与红线¶
- 不指定政策文档来源、让 Agent 自己编政策。 内容必须来自 Lab3-policy-docs,不得编造。
- retro 不抽查检索直接验收。 目标条款可能被程序性条款挤掉 → 首轮必 FAIL。
- 只优化答案准确率、忽视来源可追溯。 政务场景来源错误比答案错误更糟。
- 检索不到让模型编造。 必须说"未找到,建议咨询人工"——编造政策是事故。
- 验证集设计得太宽(单条款锚定歧义)。 拆细能提升验收稳定性与教学清晰度。
Important
红线本处落地:答案可追溯。 本章你亲手把"答案必须带来源 + 检索不到不能编 + 双指标验收"写进 SPEC 与 DoD——这是政务问答类项目常见的验收准入门槛,也是导读页四条红线的本处闭环。
本章小结¶
- RAG 施工链路:读取(含 docx/pdf 解析)→ 分块 → 向量化 → 检索 → 生成 + 来源引用。
- Gstack 流程复用实操二,新增 RAG 特有决策点:切块策略、top-K、检索不到兜底、建索引抽查。
- 政务命门 = 答案可追溯:双指标验收(答案 ≥80% + 来源可追溯 ≥90%),"检索不到不能编"是底线。
- 演示级验收声明 + 向小王讲"来源引用=责任可追溯"。
- 本体贡献:建立"诉求—政策条款—政策文件"的依据关系(业务本体的输入)。
动手自检:
- 我能独立写含 RAG 特有信息(政策文档 + QA 验证集 + 双指标)的启动提示词吗?
- 我能说清"为什么按条切块、为什么要过滤程序性条款"吗?
- 我能说清"检索不到为什么不能编、两层防线是什么"吗?
- 我能说清"为什么答案对但来源错也要扣分"吗?
练习与思考¶
- 基础: 默写 RAG 施工链路;说出实操二/三的核心区别(一次调用 vs 检索+生成)。
- 进阶: 用"拆细验证集"原则,把"外地户口能在西岭交社保吗"拆成两条,说明各锚定哪个条款、为什么更稳。
- 挑战(迁移练习/升级路径): 想对齐完整版 RAG 工程可按需升级——1)混合检索 + 重排序(bge-m3 hybrid + bge-reranker-v2-m3,召回 top-100→top-10);2)RAGAS 三维评估(忠实度/上下文精度/回答相关性替代/补充双指标);3)生产化(ACL 元数据、增量更新而非全量重建)。说明每项该在"什么时候发现问题再上",而非一开始堆砌。
延伸阅读¶
- 见 FDE-101 https://www.cloudzun.com/fde-course/(第 16 章 AI FDE 落地:Delta 技术与场景)——向量库(Chroma/Milvus)、embedding(bge-m3)、本土 RAG 技术栈的落地方案。
- 实验手册: 政策文档(
labs/lab3-policy-docs/)、Q&A 验证集、启动提示词参考答案见《实验手册》labs/lab3-policy-rag.md。 - 下一章: Agent 方法 · 自动化边界(坡度第三级:决策循环 + 自动化边界)。