
- 综合实践
- 完整闭环
START WITH A QUESTION
把整条学习路线收束为一个可验证的小助手
现在把任务定义、资料治理、检索、引用、权限和评估连起来。目标不是造一个什么都回答的机器人,而是用几条虚构制度做一个知道自己何时该停止的知识问答助手。
本课沙盒完全在本地运行:资料固定,检索规则可见,回答使用原文摘录,不调用大语言模型。这样你能逐环节看见依据与失败点。真实生成模型可以在之后接入,但不能替代权限和验证。
BUILD YOUR VOCABULARY
先把三个概念讲清楚
最小可验证系统
只包含完成目标和验证关键假设所需的环节。功能少,但输入、输出、边界和验收是完整的。
只回答材料与审批,未知金额明确不回答。
证据契约
每个答案都带来源、版本与适用范围;资料不足或越权时保持拒答。引用是可以回到原文核对的连接。
发票要求对应资料 E1,审批要求对应资料 E2。
验收闭环
预先给出普通、未知、过期和权限问题,对同一系统重复运行并记录结果。失败回到对应环节修复。
更改访问身份后,受限资料必须在检索前消失。
FOLLOW THE PROCESS
把原理放进完整流程
- 01
定义范围
目标是回答有效制度中的报销与会议问题,超出范围说明无法确认。
- 02
治理与检索
先过滤权限和过期资料,再按查询找到证据,不泄露被过滤内容。
- 03
返回可核对答案
只摘录证据并给出编号;无证据时不补充猜测。
- 04
验收并记录
运行四类测试,记录失败位置与修复建议,保存当前配置。
| 测试 | 期望行为 | 失败定位 |
|---|---|---|
| 报销材料 | 返回有效资料及引用 | 检索或引用 |
| 未知金额 | 明确资料不足 | 无答案处理 |
| 受限信息 | 不返回受限内容 | 权限过滤 |
| 过期规则 | 不使用失效版本 | 资料治理 |
CHANGE ONE THING & OBSERVE
验收你的带引用知识助手
选择查询、访问身份与是否执行有效期过滤,运行检索并检查引用。再运行固定验收集,观察错误配置如何被测试发现。
身份选择只是教学模拟,真实系统必须从认证服务获取身份,不能让用户任意切换权限。资料与输出不发送到外部服务。
KNOW THE LIMITS
哪些结论不能直接推出?
把摘录原型包装成大模型
本例主动展示规则与摘录,不声称理解任意自然语言。增加生成能力后,需要重新评估忠实度。
为了演示成功而跳过失败样例
无答案、过期和越权测试正是产品边界的一部分,应与正常样例一同交付。
READ, RUN & EXPLAIN
一个可运行的本地知识检索闭环
以下示例仅使用 Python 3 标准库,可复制到本地 Python 环境运行。先看每一行的作用,再修改一个输入观察结果;无需网络或密钥。
docs = [
{'id': 'E1', 'topic': '报销材料', 'text': '报销需提交发票与报销单。', 'group': '员工', 'active': True},
{'id': 'E2', 'topic': '报销审批', 'text': '报销提交后由主管审批。', 'group': '员工', 'active': True},
{'id': 'M1', 'topic': '会议预订', 'text': '会议室预订需登记使用时间。', 'group': '员工', 'active': True},
{'id': 'H1', 'topic': '人事记录', 'text': '受限教学记录,仅人事可查。', 'group': '人事', 'active': True},
{'id': 'E0', 'topic': '报销材料', 'text': '旧版规定不需要发票。', 'group': '员工', 'active': False},
]
query, group = '报销', '员工'
allowed = [d for d in docs if d['group'] == group and d['active']]
hits = [d for d in allowed if query in d['topic']]
answer = '\n'.join(d['text'] + ' [' + d['id'] + ']' for d in hits)
print(answer or '当前可访问的有效资料不足')
assert all(d['active'] and d['group'] == group for d in hits)复制或下载只获取本课示例,不会自动执行。
逐行解释(13 行)
- 第 1 行
docs = [开始定义小型知识库。字段分别保存编号、主题、正文、访问组和是否有效。
- 第 2 行
{'id': 'E1', 'topic': '报销材料', 'text': '报销需提交发票与报销单。', 'group': '员工', 'active': True},第一条是员工可查看的有效报销资料。
- 第 3 行
{'id': 'E2', 'topic': '报销审批', 'text': '报销提交后由主管审批。', 'group': '员工', 'active': True},与开场相同的有效审批条款。
- 第 4 行
{'id': 'M1', 'topic': '会议预订', 'text': '会议室预订需登记使用时间。', 'group': '员工', 'active': True},与开场相同的会议资料,不匹配报销主题。
- 第 5 行
{'id': 'H1', 'topic': '人事记录', 'text': '受限教学记录,仅人事可查。', 'group': '人事', 'active': True},H1是受限资料,不应交给普通员工。
- 第 6 行
{'id': 'E0', 'topic': '报销材料', 'text': '旧版规定不需要发票。', 'group': '员工', 'active': False},E0已失效,不能作为当前回答依据。
- 第 7 行
]结束知识库列表。
- 第 8 行
query, group = '报销', '员工'指定当前查询和经认证的访问组,示例身份是预设的。
- 第 9 行
allowed = [d for d in docs if d['group'] == group and d['active']]先做权限与有效性过滤,再进入检索。
- 第 10 行
hits = [d for d in allowed if query in d['topic']]按主题关键词检索,只能处理明确范围内的查询。
- 第 11 行
answer = '\n'.join(d['text'] + ' [' + d['id'] + ']' for d in hits)摘录命中原文并附上来源编号。
- 第 12 行
print(answer or '当前可访问的有效资料不足')没有命中时明确停止,不生成猜测。
- 第 13 行
assert all(d['active'] and d['group'] == group for d in hits)assert 是断言:检查命中资料都满足有效性与权限,失败会报错。
报销需提交发票与报销单。 [E1] 报销提交后由主管审批。 [E2]
CHECK YOUR UNDERSTANDING
换一个角度,检查自己是否理解
已回答 0 / 3 题 · 当前答对 0 题
TAKE IT WITH YOU
带走三个判断,再做一次迁移练习
- 从可验收的小任务开始,保留全流程。
- 权限、有效期、证据和拒答是功能的一部分。
- 先跑通可解释基线,再用相同测试比较复杂方案。
参考与延伸阅读
本课例子、代码和模拟数据为教学设计。以下一手文档用于延伸核对,不代表对本示例的认证。
- Python 官方教程:数据结构列表、集合与队列等示例语法参考。
- scikit-learn:模型评估评估指标与预测、决策的区别。
- IBM:检索增强生成检索与生成组合的进一步说明。
- NIST:AI 风险管理框架可靠性与风险管理的延伸阅读;不是特定项目的合规结论。