乐于分享
好东西不私藏

AI 解题机器人到底在"开卷"还是"闭卷"?一次 RAG 架构的 Debug 纪实

AI 解题机器人到底在"开卷"还是"闭卷"?一次 RAG 架构的 Debug 纪实


核心观点

:你给 AI 建了知识库,不代表它真的会去翻。
9 个 Skill、4.7G 教材、完整的 RAG 架构——但 AI 解题时一次都没有调用知识库。

一、问题:你喂了 4.7G 教材,AI 真的会看吗?

上一篇我搭建了一个 K12 知识库——把小学到高中的教材、教辅、课标、题库全部结构化存入 Obsidian,总量 4.7G。

目标很明确:让 AI 辅导机器人不再是”凭自己的训练数据答题”,而是先从知识库检索对应的考点、定理、解题方法,再基于检索结果给出解析。换句话说,让 AI 开卷考试

搭建完成后,飞书机器人已经能正常接收题目截图、识别、解题、输出到 Obsidian。一切看起来运转良好。我连续用了好几道中考真题去做测试,几乎全对。

但我们不禁冒出一个问题:

它到底有没有去翻我的知识库?还是说,它只是在用自己的训练数据”裸跑”?


二、调取日志:一场”闭卷裸跑”的实锤

我们给 AI 升级了一套完整的”狙击式 RAG”工作流:

收到题目
  → Step 1: 提炼 2-3 个核心考点关键词
  → Step 2: 调用 search_files 搜索 10-converted/ 和 20-knowledge/(强制)
  → Step 3: 基于检索到的本地知识进行锚定推理
  → Step 4: 生成完整解析并写入 Obsidian

理论上,agent 的 tool call 日志里应该能看到 search_files 的身影。

我让 Claude调出了完整的 session 日志,逐行分析所有 tool call。

统计结果

Tool
调用次数
write_file
4
patch
3
vision_analyze
1
execute_code
1
search_files 0
read_file 0
skill_view 0

诊断结果:闭卷裸跑。 全程没有任何知识库检索。AI 直接从自己的训练数据里调用了这道几何题的解法,然后写文件、交差。

4.7G 教材、9 个 Skill、完整的 RAG 架构——全部白搭。


三、第一枪:Skill 升级 + 强制重启

第一步,我升级了核心解题 Skill(k12-study)到 RAG v2.0:

  • 强制前置检索
    :解题前必须先 search_files,禁止闭卷裸跑
  • 降级路径
    :知识库无命中时,输出末尾自动标注降级提示
  • 验证 SOP 增强
    :双轨核对 + sympy 代码验证 + 反向验证
  • 输出规范
    :强制 8 个 Section(原题/答案/解析/验证/变式题/考点)

同时,我重启了 Hermes Gateway。原因很简单:Hermes 在会话启动时才加载 SKILL.md 到系统提示,修改后必须重启才能生效。

重启后的变化:

  • 新会话 → 新的 system prompt → 加载了 v2.0 的 k12-study SKILL.md
  • 强制前置检索 SOP 生效
  • 降级路径已配置
  • 验证 SOP 增强

现在可以发一道新的图片题来测试了。如果 RAG 流程正常,agent 日志中应该能看到 search_files 调用。


四、第二枪:RAG 不生效,根因诊断

重启后再次检查日志——仍然 0 次 search_files

升级生效了,但 RAG 不生效。系统提示里有 RAG 规则,agent 就是没去执行。

我深入分析了 session 的 system prompt 内容,发现关键线索:

System prompt 只包含 SOUL.md(人格设定),不包含 SKILL.md(工作流规则)。

也就是说,agent 看到的 system prompt 是这样的结构:

# 智育派·教研专家
(人格设定 + 工作规范 + 铁律)
(核心技能列表:k12-study、k12-search……)

## Skills (mandatory)
Before replying, scan the skills below.
If one clearly matches your task,
load it with skill_view(name) and follow its instructions.

问题出在这里:Hermes 的 Skill 系统是”懒加载”的。

  • SKILL.md 不会自动注入 system prompt
  • System prompt 里只列了技能名字,让 agent “需要时调用 skill_view(name) 加载”
  • 但 agent 从不主动调用 skill_view
  • 所以 k12-study SKILL.md 里的 RAG 四步 SOP,对 agent 来说完全不存在

13 次 tool call,0 次 skill_view。agent 根本没有加载过任何 Skill 的详细内容。

根因总结

RAG 规则写在 SKILL.md 里
  → Hermes 不自动注入 system prompt
  → 指令:scan skills → load with skill_view(name)
  → agent 从未调用 skill_view
  → RAG SOP 对 agent 完全不可见
  → agent 直接用 LLM 训练数据解题

不是 AI 不听话,是 AI 根本没看到规则


五、修复:把 RAG 从”可选技能”变成”系统铁律”

修 Skill 没用,因为 Agent 不读 Skill。

唯一的修复路径:把 RAG 四步 SOP 直接写入 SOUL.md——这是 system prompt 的核心部分,每次会话启动都会加载。

我把原来分散在 SKILL.md 里的检索规则,浓缩成一段系统级铁律,直接注入 SOUL.md:

## 🔴 解题 SOP(收到题目时强制执行)

收到题目(文字或图片)后,严格按以下顺序执行,不得跳步:

Step 1 → 提炼考点关键词(2-3 个核心考点)
Step 2 → 狙击搜索(调用 search_files 搜索 10-converted/ 和 20-knowledge/)
Step 3 → 锚定推理(基于检索到的本地知识进行推理,套用本地定理/公式)
Step 4 → 规范输出(调用 write_file 保存完整解析)

铁律:禁止闭卷裸跑。收到题目后必须先调用 search_files 检索知识库。

这次不靠 agent “主动加载 Skill” 了——规则直接在 system prompt 里,agent 每次启动都看得到。


六、生效了!

SOUL.md 注入完成后,我重启 Gateway,重置 session,用一道文字题测试:

解方程 2x² - 5x + 3 = 0

我盯着日志。

结果:search_files 调用了 3 次。 RAG 四步 SOP 完整跑通。

具体搜索了什么:

第 1 次搜索10-converted/ 目录

  • 关键词:一元二次方程|求根公式|因式分解
  • 命中 5 个文件(课标 + 教材)

第 2 次搜索20-knowledge/ 目录

  • 关键词:一元二次方程|求根公式|因式分解
  • 命中 0 个文件(知识图谱还未覆盖初中数学)

第 3 次搜索10-converted/教材/数学 目录

  • 关键词:一元二次方程
  • 命中 204 条匹配,包含课标原文”能解简单的三元一次方程组”等

然后进入 Step 3:用 sympy 验证——解为 [1, 3/2],因式分解 (x-1)(2x-3),判别式=1。

最后 Step 4:写入完整解析到 Obsidian。

从”闭卷裸跑”到”开卷检索”,中间只差了一行 system prompt。


七、踩坑记录:这 3 个坑,帮你跳过

坑 1:Skill ≠ System Prompt

把规则写在 Skill 文件里 ≠ agent 会看到。Hermes 的懒加载机制意味着,除非 agent 主动调用 skill_view,否则 Skill 内容在运行时完全不可见。

教训:关键规则必须注入 system prompt 的核心部分(SOUL.md),不能依赖懒加载。

坑 2:依赖地狱

修复过程中发现飞书 WebSocket 连不上,日志报错 python-socks is required to use a SOCKS proxy。查了一圈发现 websockets v15 需要 python-socks 包,但系统只装了 PySocks(两个完全不同的包,名字相似到误导人)。

教训:升级依赖时注意版本兼容,特别是间接依赖。

坑 3:Session 不自动刷新

修改 SOUL.md 后,旧 session 仍然用旧的 system prompt。必须用 /reset 创建新 session,或者重启 Gateway。

教训:system prompt 的改动在 session 级别固化,不是实时生效的。


八、总结:RAG 不是配置出来的,是”逼”出来的

这次 Debug 让我重新理解了一件事:

RAG 不是一个架构,而是一个行为。

你配了知识库、写了 Skill、设了检索规则——这些只是”配置”。真正的 RAG 是 agent 在解题时真的去调了 search_files

从配置到行为,中间隔着三个鸿沟:

  1. 可见性鸿沟
    :规则写在 agent 看不到的地方 = 没有规则
  2. 动机鸿沟
    :即使看到了,agent 也没有”必须执行”的强约束
  3. 路径鸿沟
    :即使想执行,依赖和工具链的 bug 可能随时阻断流程

填平这三个鸿沟,RAG 才不是纸上谈兵。

下一次,我会把教案/备课场景也接入 RAG——让 AI 做教学 PPT 时同样先翻教材再下笔。


智育派 K12 知识库搭建日记 | 2026.04