ChatGPT 生成的文件下载失败:修复过期链接

ChatGPT 给了文件链接,但 404、卡住、或下载下来是空的(常见报错 The code interpreter tool session has expired)。快速诊断并修好。

最快的修法:文件存在一个临时的 Code Interpreter 沙盒里,沙盒已经被回收,所以链接是死的。不要试图修这个链接。回到原对话(或开个新对话),让 ChatGPT 重新生成文件,几秒内点下载,并确认能正常打开。这能解决绝大多数情况。

ChatGPT “生成的文件”运行在临时的 Code Interpreter / Advanced Data Analysis Python 沙盒里。这个沙盒按对话创建,闲置一小段时间后就被回收——截至 2026 年 6 月,社区反馈和 OpenAI 的会话机制都指向大约 30 分钟无操作就回收,有时短到 15 分钟,很少超过一小时;任务越大、跑得越久,回收得越早。沙盒被回收后,文件就没了,尽管链接看上去仍像一个永久 URL。这时点它,你会得到 404、0 字节文件、一直转圈,或下面这些报错之一:

  • The code interpreter tool session has expired.
  • file not found
  • This file is no longer available.

一旦理解链接指向的是一个临时沙盒,多数下载失败就好诊断了。

你属于哪一类?

现象最可能的原因跳到
几秒前还能下,几分钟后就不行沙盒 TTL 过期步骤 1、步骤 2
刷新页面后立刻失败刷新触发沙盒重建步骤 2
有链接但回复里没有 python / “Analyzed” 块文件根本没生成(伪造链接)步骤 4
之前回复说过”我现在无法运行 analysis”计划配额耗尽步骤 3、FAQ
一个浏览器失败,换一个就行浏览器 / 扩展拦截步骤 5
进度到 100% 后文件不见 / 0 字节浏览器拦了该 MIME 类型步骤 5
iOS/macOS app 里失败、Safari/Chrome 里能下客户端路由差异步骤 7

常见原因(按命中率从高到低)

1. 沙盒 session 过期,链接失效

最常见。文件生成后你等了一会儿才点下载——沙盒已被回收。链接 404,或显示 file not found / The code interpreter tool session has expired.

如何判断:文件链接刚出现约 5 秒内点击 = 成功;过 15-30 分钟再点 = 失败。这个时间差就是 TTL 过期。

2. 生成后刷新了页面,沙盒被清

刷新(或长时间闲置后被迫重连)会触发沙盒重建。旧沙盒里生成的文件不会带到新沙盒,旧链接全废。

如何判断:生成后点过一次下载有效,你刷新了页面,再点同一链接就失败——沙盒在你不知情时被重建了。

3. 文件实际从未生成(伪造链接)

模型可以在完全没调用 Python 工具的情况下,给出一个看着正常的下载链接。因为根本没往磁盘写东西,第一次点就 404。

如何判断:回复里没有灰底 python 代码块、也没有 “Analyzed” / “Working” 提示,说明 Code Interpreter 没真跑。让它”真正运行 analysis tool 并生成文件”再对比。

4. 计划级生成 / 下载配额耗尽

Free 用户的 Code Interpreter 用量限制很紧,而且是滚动窗口重置、不是固定时间点重置。配额用完时,模型仍可能口头说”我已经创建好文件了”,但实际运行悄悄失败,于是下载是空的。

如何判断:之前同会话能下、现在不行,而且模型最近回复过类似”我现在无法运行 analysis”。各档位的具体情况见 FAQ。

5. 浏览器安全策略 / 扩展拦截

Brave 的激进 Shields、广告拦截器、企业代理都可能拦下载(尤其是 CDN 域名 files.oaiusercontent.com,它不是 openai.com)。某些大二进制文件或罕见 MIME 类型会被静默丢弃,并弹出 “file may be dangerous”。

如何判断:在无痕窗口里或关掉广告拦截后能下 = 浏览器问题;换任何浏览器都失败 = 沙盒问题。

6. 文件过大或类型被浏览器阻止

大压缩包和不常见的类型有时”下载”完成了却始终没落地。

如何判断:进度条到 100% 但下载文件夹里没有 / 是 0 字节。打开 chrome://downloads(或浏览器的下载历史),找 Failed - Blocked / Blocked: dangerous

7. App vs Web 路由不一致

iOS 和 macOS app 有时直接把文件存到 Files / Downloads,而不走浏览器,当底层沙盒已过期时,它会报一个笼统的”无法下载”。同一链接粘到 Safari 或 Chrome 里表现可能不同。

如何判断:app 下载失败,把链接复制到 Safari 或 Chrome 后结果变了——这是客户端路由差异,不是文件本身的问题。

动手前先确认

  • 区分这是普通对话、Project,还是 Custom GPT。Code Interpreter 在三者里的行为和限额不同。
  • 复现前把含下载链接的那条消息截图或复制下来——一旦重新生成,旧链接就没了。
  • 确认你的账号档位(Free / Go / Plus / Business / Enterprise)。截至 2026 年 6 月,Go 为 $8/月、Plus 为 $20/月;更高档位会提高 Code Interpreter 的上限。

需要收集的信息

  • 生成的文件类型和大概大小(KB / MB)。
  • 生成到点击下载失败之间过了多久。
  • 浏览器和操作系统,以及是否启用了广告拦截 / 隐私扩展。
  • 完整的失败现象:404、0 字节文件、一直转圈,或上面那几个报错字符串之一。
  • 当前 picker 里的模型(GPT-5.5 Instant / Thinking / Pro)和订阅级别。

最短修复路径

按收益从高到低。前 2 步能解决绝大多数情况。

步骤 1:文件一出现立刻下载

最重要的习惯。看到链接或 “Download” 按钮时:

  1. 立刻点——不要先去看内容。
  2. 留在同一对话内,不要刷新、不要切对话。
  3. 保存到本地,确认文件能打开,再继续提问。

如果确实需要先预览内容,让模型同时 inline 输出,这样你不用赌:

Generate the file and also paste the first 30 lines inline so I can
sanity-check before downloading.

步骤 2:失败了就让它重新生成

不要试图修一个死链接——拿一个新的。沙盒链接本身不可寻址,重新加载它不可能成功,只有重跑才行。

That download link returned a 404 / "code interpreter session has expired".
Please re-run the analysis tool and regenerate the file as a new download
in this conversation.

如果你需要两次结果逐字节一致,就在 prompt 里把随机性和顺序写死(比如 random_state=0、明确的列顺序、固定排序),这样重生成的文件才会完全相同。

步骤 3:大文件或文本类内容改成 inline 输出

对 CSV / JSON / Markdown / 代码,干脆不下载,让它直接打印到对话里,彻底绕开沙盒 TTL:

Don't write to a file. Output the full content as a single fenced
code block. I'll copy it manually.

对几万行以内的数据够用;再大就还是用文件,配合步骤 1 的”立刻下载”习惯。

步骤 4:验证 Code Interpreter 真的跑了

这一步专门干掉”伪造链接”那种失败:

Use the analysis tool. Generate the file. After generating, print:
1. The full path of the generated file
2. The output of os.path.getsize(path)
3. The first 10 lines of the file

三项都打印出来 = 真跑了。只有链接、没有这些信息 = 模型可能在编——重发一次,要求”真正执行工具”。

步骤 5:换浏览器 / 关扩展

如果 Chrome 失败:

  1. 换 Brave、Firefox 或 Safari 试。
  2. 关掉广告拦截和隐私扩展(或给 chatgpt.com 降低 Brave Shields)。
  3. 用无痕 / 隐私窗口(多数扩展默认关闭)。
  4. chrome://downloads 里查 Failed - Blocked

如果换了所有浏览器都还失败,就当作沙盒过期处理,回到步骤 2。

步骤 6:用 curl 兜底拉文件

如果文件还在沙盒里、只是浏览器一直拦,就复制真正的 CDN URL(它以 https://files.oaiusercontent.com/ 开头,而不是对话里那个 sandbox:/mnt/data/... 引用——后者不是公开 URL),自己拉下来:

# 在 chatgpt.com 的 DevTools -> Application -> Cookies 里拿到 session cookie
curl -L "https://files.oaiusercontent.com/..." \
  -H "Cookie: __Secure-next-auth.session-token=YOUR_COOKIE" \
  -o output.csv

这能绕开扩展和路由问题。但绕不开沙盒过期——如果沙盒已经没了,先回步骤 2 重新生成。

怎么确认已经修好

  • 开一个新对话,重新生成同一任务的文件,下载并打开——内容正确说明是真修好了,不是侥幸重试成功。
  • 让 ChatGPT 把生成代码贴出来,你本地跑一遍,能复现相同输出,就确认这不是沙盒的临时抽风。
  • 让同事在他们账号里跑同一 prompt 并下载——他们那边也成功,说明问题不只是你这个会话特有的。

如果还是没修好

  • 把任务缩到一个 10 行的 hello-world 文件,看它能不能下。如果连这个都失败,问题在沙盒或账号,而不在你的数据。
  • 换几种文件类型试(CSV、TXT、PDF),排除是不是某种类型的渲染或下载路径有问题。
  • 换模型 + 换设备:GPT-5.5 Thinking vs Instant、Web vs App、Chrome vs Safari。
  • 准备好 prompt、生成截图、确切报错字符串和你的订阅级别,去 help.openai.com 提工单。

常见问题

为什么 ChatGPT 下载链接这么快就过期?

文件只存在于按对话创建的 Python 沙盒里,沙盒闲置一小段时间就被回收——截至 2026 年 6 月,约 30 分钟是典型值,有时短到 15 分钟,很少超过一小时,任务越重越早。链接看着永久,其实指向已经不存在的存储。

链接 404 之后还能找回文件吗?

不能。沙盒一旦回收就无可修复,只能重新生成(步骤 2)。如果原来那次运行是非确定性的,就把 random_state 和排序写死,让新文件和旧文件一致。

升级到 Plus 或 Pro 能解决吗?

更高档位会提高 Code Interpreter 的用量上限、减少配额相关的失败,但所有档位用的是同一个临时沙盒,TTL 照样存在。真正的解法是”文件一出现就立刻下载”,不是换计划。(截至 2026 年 6 月:Free、Go $8、Plus $20、Pro $100 或 $200。)

Free 计划能用 Code Interpreter 吗?

能,但有很紧的滚动限额。Free 账号跑的是一个更小的默认模型,而不是 GPT-5.5,而且分析配额用完时,模型可能仍声称生成了文件、实际运行却悄悄失败(原因 #4)。如果文件是在会话中途突然下不了了,多半是撞到配额了。

链接是 sandbox:/mnt/data/file.csv,为什么下不了?

sandbox:/mnt/data/... 这种形式是内部引用、不是公开 URL,只能在 ChatGPT 界面内部解析。改点真正的下载按钮,或让模型”给我可下载的文件”,它会生成一个真正的 files.oaiusercontent.com 链接。

怎么避免再次发生?

文件一出现就立刻下载,别”等再发几条消息”。文本类内容优先 inline(步骤 3)。生成文件时让它同时给出生成代码,万一链接失效你也能本地重跑。关闭对话前一定先打开下载的文件确认能用,别事后几小时才发现是 0 字节。

相关阅读

标签: #ChatGPT #ChatGPT 文件 #排查 #排查 #下载