你 ChatGPT Project 里有 12 个文件,需要的那个就摆在侧栏上,你问”我们的定价政策是怎么写的”,模型回:“我没看到这个 Project 里有定价文档。“文件明明在。原因是向量检索排序:短的、泛的 query 嵌入向量跟任何具体 chunk 的相似度都不高,分数低于阈值就被丢掉。修法是显式:点名文件、用文档里的原词重写、或者直接强行触发再检索。
常见原因
1. Query 太短,embedding 区分度不够
“定价?“或”政策?“生成的 embedding 很小,跟所有内容都弱匹配。检索按相似度排,低于阈值(通常 0.7-0.75)就没文件进 context。
如何判断:长而具体的 query 能命中,短 query 不行。
2. Query 用的词不在文件里
文件叫 pricing-tiers-2026.pdf,里面写”Standard tier”、“Enterprise tier”、“list price”。你问”多少钱”——“钱”和”price”在 embedding 空间里离泛 query 太远,永远命不中。Custom GPT 那套词汇错位问题在这也一样。
如何判断:用文件里的原词问能命中,换个说法就失败。
3. Project 文件多,你目标排在低位
Project 里 15-20 个文件时,检索只拉 top 3-5 个 chunk。你那个文件的 chunk 排第 6,永远进不来。
如何判断:删掉不相关文件后同样 query 突然能行。
4. 文件入库了但被切到你没想到的 chunk 里
大 PDF 按边界切 chunk 时可能把逻辑段拆到两块里。query 命中的是另一页,答案来源不完整。
5. Project 记忆 / 对话历史压过了检索
如果同一对话前面 ChatGPT 说过”我没看到这个文件”,后面的 turn 可能因为指令一致性继续坚持这个结论——不是检索又失败,而是被前面的否认锚定了。
最短修复路径
Step 1:显式点名文件名
差:我们的定价政策对折扣怎么说?
好:打开这个 Project 里的 "pricing-tiers-2026.pdf",告诉我它对折扣怎么说。
点名走的是文件名关键字路径,绕开纯向量相似度。70% 的 case 这一步就解决。
Step 2:用文档里的原词重写
记得文件里写过什么就直接复用:
差:定价政策怎么说?
好:根据 "pricing-tiers-2026.pdf",Enterprise tier 的 list price 是多少?
具体词(“list price”、“Enterprise tier”)能拉高与那个文件 chunk 的相似度。
Step 3:在同一 Project 里开新对话
对话内的锚定效应会持续。在 Project 侧栏顶部点 新对话,再问。Project context 复位,检索重新跑。
Step 4:删掉再重传以强制重新入库
文件确实入库失败的话,把它从 Project 删掉,再传一次,等 30-60 秒索引。再问。如果回答正确了,说明原来的索引坏了。
验证入库是否成功:
列出你能在这个 Project 里访问的所有文件。
从 "pricing-tiers-2026.pdf" 的第 1 页逐字引用一句。
能列出文件但引用不出来,说明检索找到了文件名元数据但没找到正文——重传几乎一定能修。
Step 5:检索老漏召的话,砍 Project 文件数
15+ 文件的 Project 检索质量明显下降。把陈旧 / 低优先级文件挪到单独的 Archive Project。活跃 Project 控制在 8-12 个文件,检索质量会明显回升。
验证修复
不要相信单次成功召回。每个文件做这套三问审计:
1. 逐字引用 "<filename>" 的第一句。
2. "<filename>" 第 2 页的章节标题是什么?
3. "<filename>" 的最后一句是什么?
三问都正确 = 这个文件的检索确实可用。任一错误就重传再做正经依赖。
预防
- 文件名要有语义。
pricing-tiers-2026.pdf比doc1.pdf更利于文件名关键字检索。 - 上传后立刻做”触发测试”:问 2-3 个只该文件里才有的事实。测试不过就立刻 troubleshoot,别凉拌等用了出错。
- Project 文件控制在 8-12 个。检索排序上少即是多。
- 多段文档加清晰的
# Section标题。chunk 尊重标题边界,召回时上下文更干净。 - 长期 Project 定期做检索审计:每个文件挑一个已知事实问一遍。不过的就重传。
- 把”按文件原名引用”写进团队 prompt 风格指南——大家都能省同样的 debug 时间。
快速判断:命中文件名 vs 命中正文
两种失败模式修法不同:
- 能列出文件名但引不出内容:正文入库失败。重传。
- 列不出文件名:文件不在当前 scope。确认是上传到正确 Project,而不是个人账号。
- 能列出文件、能引第 1 页但引不到第 5 页:chunk 排序问题。下一条 query 显式带页码。
检索就是修不好怎么办
罕见情况下,文件无论你怎么搞都召不回——通常是 parser 对某个 PDF / DOCX 解析失败。绕开方案:
- 本地用
marker-pdf把 PDF 转 Markdown,上传.md。同样内容下 Markdown 的向量召回明显比 PDF 强。 - 长文档按章节拆成小文件。小文件 chunk 邻域更紧凑,召回排序更稳。
- 表格抽出来存 CSV 单独上传。问表格内容时一定命中 CSV。