技术 · 熟练

文档里找答案,别把整本塞进上下文

先把目录建出来,再决定读哪一节
「把整份文档贴给它」在短材料上很好用,一旦做成几百页就必然崩 —— 不是它读不完,是真正相关的那几段被稀释在一大堆无关文字里,它抓不住。这一页给的是「先定位、再阅读」的两段式:第一段只做一件事 —— 让模型看目录与每节的摘要,回答「答案大概在哪一节」;第二段只把那几节读进去回答,并要求它给出章节号与原文句。关键动作只有一个:再建一份「每节一句话摘要 + 关键词」的结构索引 —— 不是向量库,是一份贴着原文结构的目录。
方法 · 一图看懂
1
先切结构 — 按标题与小节切块,每块写一句话摘要加三五个关键词
2
第一段只定位 — 只问「这问题该去哪一节」,⛔ 不要让它在这一步就作答
3
第二段只读那几节 — 把命中的小节整段放进去,要求带章节号与原句
4
命不中就说没找到 — 给它一条明确的出口,⛔ 不许从相关段落里编
原理 · 为什么有效
为什么「整本塞进去」会失效:检索质量与上下文长度不同向。文档越长,答案段落在总字数里的占比越小,模型要在噪声里守住重点的负担就越重 —— 而它的注意力不是均匀分配的。第二段式之所以更准,是因为定位与作答是两种不同的任务:定位只要比较「哪一节在讲这个」,容错高;作答要精确引用,容错低。混在一起做,模型会为了凑出答案而把近似段落当依据。所以把这两件事拆开,各自用最合适的信息量。第三,索引要贴结构而不是贴语义向量:结构是原文里本来就有的,可核、可指认(「第 3 章第 2 节」),出了问题你能翻回原文对质;而向量检索给的是一个分数,错了你不知道从哪查。
适用场景
适用于任何「文档很长、但里面只有一小部分与问题有关」的场景:几百页的手册 / 合同 / 规范 / 论文 / 代码库说明 / 一大堆自己攒的笔记。也适用于「同一份材料要反复问不同问题」的情况 —— 结构索引建一次,之后每个问题都省一次全量读取。不适用于:材料本身就短(几页以内,直接放进去更快);也适用于需要跨很多段落做综合判断的问题(那种要读的范围本来就很宽,定位省不下多少)。
自测 · 5 问
我的文档有没有可用的层级结构(标题 · 编号 · 目录)—— 没有的话我打算怎么切块
每块的一句话摘要是不是照着原文写的(⛔ 不是我自己概括的印象)
定位那一步我有没有明确禁止它作答(否则它会把「大概在哪」直接写成「答案是什么」)
作答那一步我有没有要求章节号 + 原文句(没有出处 = 事后没法核)
我有没有给它一条「没找到」的合法出口(不给出口,它就一定会编一个)
怎么上手 · 验证步骤
建索引大约 20 分钟,之后每个问题只要几十秒。第一步把文档按标题切块(一份 200 页的手册通常能切成 40~80 块),每块贴一句话摘要 + 三五个关键词,存成一个普通文本文件就行 —— 这就是你的目录。第二步提问时走两段:先把「目录」发过去,只问「这个问题最可能在哪一节?给我前三名」;再把你选中的那一两节整段发过去,让它作答。第三步要求出处:每个结论后面跟章节号与原句。命不中时,明确告诉它「就回答没找到,这不算失败」—— 这条出口是整套方法能不能保住可信度的关键。
回灌两个问题验证。一个是「文档里明确有答案」的问题 —— 看它定位到哪一节,与你自己的判断是否一致;差得多说明索引摘要写偏了。另一个是「文档里根本没有」的问题 —— 看它会不会老实说没找到。第二个问题才是真正的判据:一个不肯说「没找到」的检索流程,答案看着再漂亮也不可用。另外核一处:拿它给的一条出处,回原文翻一眼,句子是否逐字对得上(对不上说明它在复述而不是引用)。
[C级]VectifyAI/PageIndex(GitHub 开源项目:无向量的文档索引 —— 先把长文档切成层级树,检索时沿树推理定位到该读哪一节,今日 +1097) [C级]colbymchenry/codegraph(GitHub 开源项目:预索引代码知识图谱,代码一改自动同步,卖点是更少 token 与更少工具调用) [C级]Tencent/WeKnora(GitHub 开源项目:把原始文档变成可查询 RAG + 自维护 Wiki,⭐31,493) [C级]Startup Corners GitHub Trending Digest(2026-10-01 · 上述项目同在榜 · 聚合来源,仅作同期证据) 同类:文档清不清楚?让一个「没背景」的 AI 照着走一遍 · AI帮你速读长文档:10分钟提取50页技术手册全部关键信息
继续往下读
同级:文档清不清楚?让一个「没背景」的 AI 照着走一遍 下一级:上下文一长就变笨,到底该砍到多少? 随机一篇