检索要按难度迭代
一、三层要分开看
检索引擎:怎样找得准
工具协议:怎样把结果交给 Agent
Agent Loop:Agent 怎样判断继续找还是停止
- 检索引擎(你的判断,22:22):纯文本检索不够 → 关键词召回(FTS/BM25)+ 语义召回(Embedding)→ 融合(RRF)→ 重排序 → 去重与多样化。召回单位应是 chunk(片段),不是整篇笔记。
- 工具协议:返回多篇候选 + 命中片段,而不是只给标题列表。
limit是本轮取多少,不是整个任务的上限cursor是分页书签(不透明 token),支持继续翻页
- Agent Loop:Agent 自己决定搜索深度。
二、读取不应永远从开头
现在只读「正文第 0 → 12,000 字符」,这在检索场景里是错的:搜索已经定位到 chunk-18,就该读它前后几段,确认相关后再扩大范围。
搜索命中片段 → 读命中片段上下文 → 相关则扩大 / 不相关则换查询
「查一个事实」和「总结整篇笔记」不该走同一条昂贵路径。
三、难度怎么判(你的假设 + 修正)
你的假设(22:45):提问越精简越简单,越模糊越困难;很难的还要 ask_user_question。
修正:问题长度不代表难度,它最多是很弱的信号。「我该怎么办?」很短,但目标、背景、评价标准全不清楚。
真正要判三个维度:
- 意图清晰度 —— 目标、范围、对象、期望结果是否明确
- 证据与推理范围 —— 定位一个事实,还是要多来源比较归纳
- 行动风险 —— 错了是否有明显影响
所以至少分三档,「复杂」和「模糊」不是一回事:
简单:清晰、范围窄、低风险
复杂:问题清晰,但需要多来源或多步推理
模糊:缺少目标、范围或关键条件
ask_user_question 也不是因为问题难,而是因为缺少只有用户才能决定的信息。存在阻断性歧义才打断;能作低风险合理假设就说明假设后继续。
四、证据充分的停止条件
数量是搜索预算,覆盖度才是完成标准:
- 所有关键子问题都有直接证据
- 关键结论不是仅由重复材料支撑
- 没有尚未处理的重要冲突
- 继续搜索已经很少产生新信息
「直到返回所有相关内容」是理想但不可证明的目标 —— 无法可靠判断「已经找全」。所以分工是:普通检索 loop 打底,
deep-research扩大证据覆盖,deep-insight找联系、矛盾与盲点。
相关
- 长尾查询(搜索源的选择)
- 上下文按信任等级分层(同一次讨论的另一半)
- 一词多义先确认所指(歧义要先确认)
- 关键词检索的三个打分缺陷 —— 引擎层为什么找不准