问文档两个问题,它只搜一次,然后给你半个答案——这是大多数"和文档聊天"工具的日常。footnote 换了个思路:把固定的检索流水线拆掉,塞进一个像研究员那样干活的 Agent,只守一条规矩——答案不能核对,就不算答案。
![]()
它自己决定搜什么。遇到两部分组成的问题,它会拆成两次搜索,而且用文档本身的措辞去搜,不是用你随口打的词。每一步都实时显示在侧边面板里,你能看着它想、看着它搜。
结果不理想怎么办?它会再搜一遍。如果反复重试还是找不到相关内容,它直接说文档里没有覆盖这个问题,而不是硬编一个答案糊弄你。
最核心的一点:每一条结论都链到它出处的那句话。点一下引用标签,源段落自动滚进视野,精确到那一句高亮。引用不是模型自己敲出来的,而是由 API 校验过的——这是它和"模型顺手编个出处"的根本区别。
它是怎么搭起来的
Claude 拿到两个工具,search_handbook 和 read_page,然后循环调用,直到能回答为止。搜索结果以句子级块的形式返回,所以每条引用都能被 API 验证,而不是靠模型手打。
检索部分是手写的 BM25,加上本地 bge-small 向量,用加权倒数排名融合(reciprocal rank fusion)合并,并在一套 59 题的评测集上调过参。演示语料用的是公有领域的 18F 员工手册,共 232 页。
搜索方式可以换:混合检索、纯关键词、纯向量三种模式都能跑,每个段落在两种检索里的排名都会显示出来。
技术栈是 Python 配 FastAPI,加一个单文件 HTML 界面;Claude 走 Anthropic SDK,没有套框架;另有一个 CLI,把每次工具调用都打印出来。截图来自一个不需要密钥的演示模式——模型的回合是脚本化的,但搜索和引用是真跑的。
作者把话说得很直:检索只是简单的那一半,难的那一半,是让答案里的每一句话都能被核对。
代码在 github.com/IbrarYunus/footnote。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.