你的 ChatGPT Project 里有 12 个文件,需要的那个就摆在侧栏 Files 下面,你问”我们的定价政策是怎么写的”,模型回:“我没看到这个 Project 里有定价文档。“文件明明在。
最快的修法: 在 prompt 里写出确切文件名——Open "pricing-tiers-2026.pdf" and tell me what it says about discounts. ChatGPT 对 Project 文件跑的是混合检索(关键字 + 语义),确切文件名会触发关键字这条路径,绕开刚才把你的短 query 丢掉的相似度阈值。光这一步就能解决大多数 case。
底层原因是检索排序。ChatGPT 把每个文件抽出文本、切成 chunk、做 embedding,给 Project 建一个小向量索引。短的或泛的 query 生成的 embedding 跟所有内容都弱相关、跟任何具体内容都不强相关,所以过不了相似度阈值,没有 chunk 进得了 context。下面讲清楚文件在却被漏掉的五种原因、按顺序排好的修法,以及怎么确认检索是真的恢复了。
先排除头号假警报:文件在 Library 里,不在 Project 里
2026 年上线 Library 之后,你在任何对话里上传的文件都会自动存进账号 Library(侧栏 -> Library)。文件出现在 Library 里 不等于 已加进 Project。如果你是把文件拖进普通对话、然后才打开 Project,Project 是检索不到它的。
动手前先确认作用域:
- 打开这个 Project。
- 点开 Project 面板里的 Files(在右侧,或在项目名下方)。
- 确认文件名是列在 那里,而不只是在全局 Library 里。
如果它只在 Library,就加进 Project:打开 Project,点 Add files,选中它。下面所有步骤都默认文件已经真在 Project 的 Files 列表里。
常见原因
1. Query 太短,embedding 区分度不够
“定价?“或”政策?“生成的 embedding 很小,跟所有内容都弱匹配。检索按相似度给 chunk 排序,低于阈值(常被引用的值大概是 0.7-0.75 余弦相似度)就没有 chunk 进 context。
如何判断:长而具体的 query 能命中,短 query 不行。
2. Query 用的词不在文件里
文件叫 pricing-tiers-2026.pdf,里面写”Standard tier”、“Enterprise tier”、“list price”。你问”多少钱”可能命不中,因为在 query 其余部分很泛的情况下,“钱”离”list price”在 embedding 空间里太远。Custom GPT 那套词汇错位问题在这也一样。
如何判断:用文件里的原词问能命中,换个说法就失败。
3. Project 文件多,你的目标排在低位
ChatGPT 每个回合只拉 top 几个 chunk。文件越多,每个 chunk 面对的竞争越大。截至 2026 年 6 月,每个 Project 的文件上限如下:
| 套餐 | 每个 Project 文件数 |
|---|---|
| Free | 5 |
| Plus | 约 20 |
| Pro | 40 |
允许加到上限,但远没到上限检索质量就开始下降。如果你那个文件的最佳 chunk 排第 6、而只用 top 3-5,它就永远进不了 context。
如何判断:删掉不相关文件后,同样的 query 突然能行。
4. 文件入库了,但被切到你没想到的 chunk 里
大 PDF 按边界切 chunk 时,可能把一个逻辑段拆到两块里。你的 query 命中的是另一页,答案来源不完整。
如何判断:问第 1 页的答案对,问靠后的章节就错或者瞎编。
5. 对话历史把 ChatGPT 锚定在它先前的否认上
如果同一对话里前面 ChatGPT 说过”我没看到这个文件”,后面的回合可能因为指令一致性继续坚持这个结论——不是检索又失败,而是被前面的否认锚定了。Project Memory(按项目的记忆开关,在 Settings -> Personalization -> Memory 里开了 Personal Memory 时生效)还可能把这个锚定带进下一个对话。
你属于哪一类?
| 症状 | 最可能原因 | 去看 |
|---|---|---|
| 文件只在全局 Library,不在 Project Files | 作用域错了 | 上面那节 |
| 长 query 行,短 query 失败 | 原因 1 | Step 1 + 2 |
| 原词能命中,换说法就失败 | 原因 2 | Step 2 |
| 删掉别的文件后就行了 | 原因 3 | Step 6 |
| 第 1 页对,靠后页错 | 原因 4 | Step 4,带页码 |
| 否认过一次,同对话一直否认 | 原因 5 | Step 3 |
最短修复路径
Step 1:显式点名文件名
差:What does our pricing policy say about discounts?
好:Open "pricing-tiers-2026.pdf" in this Project and tell me what it says about discounts.
用确切文件名点名,会触发混合检索的关键字那一侧,绕开纯向量相似度。这一步能解决大部分”我没看到”的 case。
Step 2:用文档里的原词重写
记得文件里写过什么就直接复用:
差:定价政策怎么说?
好:根据 "pricing-tiers-2026.pdf",Enterprise tier 的 list price 是多少?
具体词(“list price”、“Enterprise tier”)能拉高与那个文件 chunk 的相似度。
Step 3:在同一 Project 里开新对话
对话内的锚定效应会持续。在 Project 视图里点 New chat,再问。对话 context 复位,检索对着同一批 Project 文件重新跑。
Step 4:靠后页漏召时,带上页码或章节
如果第 1 页能召回、靠后的章节不行,说明那一段的 chunk 排在阈值之下。直接钉住它:
In "pricing-tiers-2026.pdf", go to the section titled
"Enterprise tier" (around page 5) and quote the list price.
点出章节标题和大致页码,把检索引到正确的 chunk。
Step 5:删掉再重传以强制重新入库
文件确实入库失败的话,把它从 Project 移除,再加一次,等 30-60 秒索引完再问。验证入库是否成功:
List every file you can access in this Project.
For "pricing-tiers-2026.pdf", quote one sentence from page 1 verbatim.
能列出文件但引用不出来,说明检索找到了文件名元数据但没找到正文——重传几乎一定能修。
Step 6:检索老漏召的话,砍 Project 文件数
Project 越接近上限,检索质量越差。把陈旧 / 低优先级文件挪到单独的 Archive Project。活跃 Project 大致控制在 8-12 个文件(远低于 20-40 的上限),排序会明显改善,因为每个 chunk 面对的竞争者更少。
验证修复
不要相信单次成功召回。每个文件做这套三问审计:
1. Quote the first sentence of "<filename>" verbatim.
2. What is the section heading on page 2 of "<filename>"?
3. What is the last sentence in "<filename>"?
三问都正确 = 这个文件的检索确实可用。任一错误,就重传后再做正经依赖。
快速判断:命中文件名 vs 命中正文
两种失败模式修法不同:
- 能列出文件名但引不出内容:正文入库失败。重传。
- 列不出文件名:文件不在 Project 作用域内。确认它在 Project 的 Files 里,而不只是全局 Library。
- 能列出文件、能引第 1 页但引不到第 5 页:chunk 排序问题。显式带上页码(Step 4)。
检索就是修不好怎么办
罕见情况下,文件无论你怎么搞都召不回——通常是 parser 对某个 PDF / DOCX 解析失败。绕开方案:
- 本地把 PDF 转成 Markdown(比如用
marker-pdf),上传.md。纯 Markdown 去掉了 PDF 的排版冗余,同样内容下比 PDF 召回更稳。 - 长文档按章节拆成小文件。小文件 chunk 邻域更紧凑,召回排序更稳。
- 表格抽出来存 CSV,跟原文件一起传。表格很少能从 PDF 文本抽取里完整保留,但对着 CSV 问一定命中。
预防
- 文件名要有语义。
pricing-tiers-2026.pdf比doc1.pdf更利于文件名关键字检索。 - 上传后立刻做”触发测试”:问 2-3 个只该文件里才有的事实。测试不过就先修好,别凑合用了再出错。
- 活跃 Project 控制在 8-12 个文件,远低于套餐上限。排序上少即是多。
- 多段文档加清晰的
# Section标题。chunk 尊重标题边界,召回时上下文更干净。 - 长期 Project 定期重跑上面那套检索审计。不过的就重传。
常见问题
为什么 ChatGPT 这个对话能找到文件、下个对话又找不到? 每个对话都重新建检索,而且会锚定到前面的回合。在同一 Project 里开新对话通常能修好(Step 3)。如果跨对话还在犯,可能是按项目的记忆把先前的否认带过来了;重传后再测一次。
是文件数上限导致的吗? 间接是。截至 2026 年 6 月,每个 Project 能放 5 个(Free)、约 20 个(Plus)、40 个(Pro)文件,但因为每回合只用 top 几个 chunk,远没到上限检索排序就开始变差。文件越少,排序越好。
Library 里的文件会自动进 Project 吗? 不会。2026 年的 Library 会把每次上传自动存进账号,但 Project 只检索加进该 Project Files 列表的文件。要显式加进 Project。
为什么点确切文件名管用、普通问法不管用? ChatGPT 用的是混合检索(关键字 + 语义)。确切文件名走关键字路径能命中,哪怕你的短 query 太泛、过不了语义相似度阈值。
重传后 PDF 还是召不回,怎么办?
多半是那个文件的 parser 问题。把它转成 Markdown(marker-pdf 之类)或按章节拆开,再传更小、更干净的文件。