检索要按难度迭代

**知识库检索不是「搜一次、读一篇」,而是 Agent 主导的迭代 loop:先判任务难度定预算,读不通就换查询再来一轮;停止条件看覆盖度,不看命中数量。**

一、三层要分开看

检索引擎:怎样找得准
工具协议:怎样把结果交给 Agent
Agent Loop:Agent 怎样判断继续找还是停止
  1. 检索引擎(你的判断,22:22):纯文本检索不够 → 关键词召回(FTS/BM25)+ 语义召回(Embedding)→ 融合(RRF)→ 重排序 → 去重与多样化。召回单位应是 chunk(片段),不是整篇笔记。
  2. 工具协议:返回多篇候选 + 命中片段,而不是只给标题列表。
    • limit 是本轮取多少,不是整个任务的上限
    • cursor 是分页书签(不透明 token),支持继续翻页
  3. Agent Loop:Agent 自己决定搜索深度。

二、读取不应永远从开头

现在只读「正文第 0 → 12,000 字符」,这在检索场景里是错的:搜索已经定位到 chunk-18,就该读它前后几段,确认相关后再扩大范围。

搜索命中片段 → 读命中片段上下文 → 相关则扩大 / 不相关则换查询

「查一个事实」和「总结整篇笔记」不该走同一条昂贵路径。

三、难度怎么判(你的假设 + 修正)

你的假设(22:45):提问越精简越简单,越模糊越困难;很难的还要 ask_user_question。

修正:问题长度不代表难度,它最多是很弱的信号。「我该怎么办?」很短,但目标、背景、评价标准全不清楚。

真正要判三个维度:

  1. 意图清晰度 —— 目标、范围、对象、期望结果是否明确
  2. 证据与推理范围 —— 定位一个事实,还是要多来源比较归纳
  3. 行动风险 —— 错了是否有明显影响

所以至少分三档,「复杂」和「模糊」不是一回事:

简单:清晰、范围窄、低风险
复杂:问题清晰,但需要多来源或多步推理
模糊:缺少目标、范围或关键条件

ask_user_question 也不是因为问题难,而是因为缺少只有用户才能决定的信息。存在阻断性歧义才打断;能作低风险合理假设就说明假设后继续。

四、证据充分的停止条件

数量是搜索预算,覆盖度才是完成标准:

  • 所有关键子问题都有直接证据
  • 关键结论不是仅由重复材料支撑
  • 没有尚未处理的重要冲突
  • 继续搜索已经很少产生新信息

「直到返回所有相关内容」是理想但不可证明的目标 —— 无法可靠判断「已经找全」。所以分工是:普通检索 loop 打底,deep-research 扩大证据覆盖,deep-insight 找联系、矛盾与盲点。

相关