胡慧华
菜单
首页人工智能机器学习深度学习项目实践关于我
跳至课程正文
← 人工智能课程

ARTIFICIAL INTELLIGENCE · COURSE 12

RAG:让回答有资料可查

理解检索增强生成,即先查找资料再生成回答,以及这套流程的边界。

第 12 / 18 课20–30 分钟(含实验)无需密钥 · 本地实验
透明资料卡片经过检索环连接到回答面板,呈现有资料依据的问答流程
从单次回答走向可信产品
  • 知识问答
  • 引用依据
01

START WITH A QUESTION

让助手回答公司的制度,而不是凭印象回答

员工问“报销要带什么材料?”通用模型未必见过公司的最新制度。把制度相关段落先找出来,再要求助手依据这些资料组织回答,就形成检索增强生成,通常简称 RAG。

RAG 不会因为读了资料就自动保证正确。资料可能被切断、相关条款没被找回,或者回答添加了原文没有的条件。因此要分开检查资料准备、检索和回答三个环节。

02

BUILD YOUR VOCABULARY

先把三个概念讲清楚

CONCEPT 01

切分与元数据

将长文档分成便于检索的片段,并保存标题、来源、版本和权限。元数据就是描述资料的附加信息。

放进场景看

“报销需发票”和“还需主管审批”分在不同片段时,可能只召回一半。

CONCEPT 02

召回与上下文

召回指找出候选资料;上下文是本次交给模型的信息。只取排名第一的片段可能遗漏条件,取太多也可能增加干扰。

放进场景看

材料要求和审批要求需要一起交给回答环节。

CONCEPT 03

带引用回答与拒答

回答应能追溯到证据。资料不足时说清缺口,权限不足时不能泄露被限制资料的内容。

放进场景看

资料只写材料,没有金额,就不应补出报销上限。

03

FOLLOW THE PROCESS

把原理放进完整流程

  1. 01

    整理资料

    去除重复和失效版本,按自然条款切分,并记录权限。

  2. 02

    检索候选

    用查询找相关片段,检查是否覆盖完整问题。

  3. 03

    组织回答

    把问题和可用证据交给生成环节,要求标出引用和未知项。

  4. 04

    核验与评估

    分别检查检索是否找对、回答是否忠于证据,以及权限是否被执行。

同一问题需要两条证据
片段内容缺失后的影响
条款 A提交发票与报销单无法说明材料
条款 B提交后由主管审批容易误以为交材料即可完成
无对应条款金额上限未知不能自行编造上限
04

CHANGE ONE THING & OBSERVE

切分方式会怎样影响证据完整性?

切换按条款切分或合并相邻条款,再调整取回片段数。观察答案是否包含材料和审批两部分。回答由固定模板展示,不调用真实大模型。

INTERACTIVE LAB / 12

问题:报销需要什么材料,提交后还要什么流程?

片段 A

报销须提交发票与报销单。

已取回
片段 B

报销提交后由主管审批。

未取回
片段 C

会议室需提前预订。

未取回
必要证据覆盖:1 / 2

材料:发票与报销单。审批流程信息不足,需要继续检索。

来源:[A]。本例以固定次序模拟已排序候选,包含会议资料时属于无关上下文。
05

KNOW THE LIMITS

哪些结论不能直接推出?

有资料不等于已更新模型

通常的 RAG 在回答时传入资料,并不因此修改模型权重。资料更新需要同步索引与版本。

取回越多不一定越好

无关片段、过期条款和相互矛盾的信息可能降低效果;应在评估集上比较。

06

READ, RUN & EXPLAIN

演示检索后附上来源

以下示例仅使用 Python 3 标准库,可复制到本地 Python 环境运行。先看每一行的作用,再修改一个输入观察结果;无需网络或密钥。

Python 3 · 完整示例下载 .py
docs = [('条款A', '报销须提交发票与报销单'), ('条款B', '报销提交后由主管审批')]
query = '报销'
hits = [(source, text) for source, text in docs if query in text]
if not hits:
    print('当前资料不足,请补充有效制度')
else:
    for source, text in hits:
        print(text + ' [' + source + ']')

复制或下载只获取本课示例,不会自动执行。

逐行解释(8 行)
  1. 第 1 行docs = [('条款A', '报销须提交发票与报销单'), ('条款B', '报销提交后由主管审批')]

    每条资料保存来源标识与正文,内容为虚构教学制度。

  2. 第 2 行query = '报销'

    用关键词作为最简单的检索条件。

  3. 第 3 行hits = [(source, text) for source, text in docs if query in text]

    筛选正文中包含关键词的片段,不是语义检索。

  4. 第 4 行if not hits:

    如果没有资料,走信息不足分支。

  5. 第 5 行 print('当前资料不足,请补充有效制度')

    明确表达缺少依据,不产生无来源答案。

  6. 第 6 行else:

    有资料时进入回答组织分支。

  7. 第 7 行 for source, text in hits:

    依次使用每个命中片段。

  8. 第 8 行 print(text + ' [' + source + ']')

    原文摘录后加来源。本例是检索与引用示意,不是生成模型。

预期输出
报销须提交发票与报销单 [条款A]
报销提交后由主管审批 [条款B]
07

CHECK YOUR UNDERSTANDING

换一个角度,检查自己是否理解

已回答 0 / 3 题 · 当前答对 0 题

1. RAG 的通常流程是什么?
2. 答案漏了审批要求,首先检查什么?
3. 资料没有金额条款,应怎样回答金额上限?
08

TAKE IT WITH YOU

带走三个判断,再做一次迁移练习

  • RAG 连接资料检索与回答,不自动保证真实。
  • 自然切分、版本与权限是资料治理的一部分。
  • 分开评价证据覆盖、答案忠实度与无答案处理。
参考与延伸阅读

本课例子、代码和模拟数据为教学设计。以下一手文档用于延伸核对,不代表对本示例的认证。