ChatGPT 看不到 ZIP 压缩包里的内容:沙箱不会自动解压

丢一个 ZIP 进对话,ChatGPT 只看见文件名却不解压——文件类型过滤 + 沙箱权限。最快修法是本地解压后单独上传。

你把一个 30 文件的 project.zip 拖进对话,问”汇总一下里面的内容”——ChatGPT 要么说它打不开压缩包、要么把 ZIP 当成二进制 blob、要么压根不尝试。原因分层:普通对话模式根本不会执行解压;Code Interpreter(Advanced Data Analysis)能解压但要你明说;某些账户层级有文件类型过滤直接拒收 ZIP。最快修法是本地解压后单独上传文件,或者在 Code Interpreter 会话里明确要求”解压并列出文件”。

常见原因

1. 普通对话模式不会跑代码

没开 Code Interpreter,ChatGPT 不能执行 unzip。它能直接读 TXT / PDF / DOCX,但 ZIP 是二进制、需要沙箱解压。在非 CI 对话里问”这个 zip 里有什么”,要么礼貌拒绝、要么编一个答案。

如何判断:没有”Analyzing…”指示器、没有 Python 工具图标——纯聊天模式。回复是泛泛的”我不能打开压缩包”而不是 Python traceback。

2. Code Interpreter 在但你没触发

即使是 Plus 账号也可能需要明说。问”汇总这个 zip”有时会走文件汇总路径而不解压。问”用 Python 解压这个文件并列出内容”基本一定触发 Code Interpreter。

如何判断:其他对话能分析 CSV,但这个 ZIP 始终不开 Python 工具。

3. 文件类型过滤拒收了上传

某些账户类型、学校 / 公司部署、被 DLP 标记的账户会在上传层就拦 .zip.exe.gz。文件看似挂上去了,但 Code Interpreter 看到的是 stub 或什么都没有。

如何判断:让它 os.listdir("/mnt/data"),找不到你的 ZIP 名,或者显示 0 字节占位。

4. 用了不支持的压缩格式或加密 ZIP

ZIP 没问题。.rar.7z、加密 ZIP、分卷压缩(.zip.001.zip.002)在沙箱里都会失败——unzip 不带 RAR / 7z 支持,也不会弹密码框。

如何判断:Python 输出 BadZipFileRarCannotExecRuntimeError: ... encrypted

5. 压缩包超出沙箱磁盘容量

Code Interpreter 沙箱 tmp 存储有限。一个 2GB 的 ZIP 解压成 8GB 会把磁盘占满,解压中途失败。

最短修复路径

Step 1:确认 Code Interpreter 是活的

用支持 Code Interpreter 的模型(GPT-5、GPT-5.5、o3 code 模式),开头明确说要解压:

用 Python 把这个文件解压到 /tmp/extracted,列出所有文件 + 大小,
再打印顶层每个 .md 或 .txt 文件的前 30 行。

应该能看到 Python 工具图标转起来。如果没有,说明模型不在 code 模式——换模型或重写 prompt。

Step 2:用已知可行的解压片段

自动尝试失败,直接贴:

import zipfile, os

src = "/mnt/data/project.zip"
dst = "/tmp/extracted"
os.makedirs(dst, exist_ok=True)

with zipfile.ZipFile(src) as z:
    z.extractall(dst)
    for info in z.infolist():
        print(info.filename, info.file_size)

对任何标准非加密 ZIP 都管用,并打印出文件树。

Step 3:加密 ZIP 要带密码

import zipfile
with zipfile.ZipFile("/mnt/data/secure.zip") as z:
    z.extractall("/tmp/extracted", pwd=b"yourPassword")

密码会写在 prompt 里——注意 ChatGPT 可能会留日志。敏感密码建议先在本地去掉。

Step 4:RAR / 7z 先在本地转 ZIP

Code Interpreter 没有 unrar7z。在你自己电脑上:

# macOS
brew install p7zip
7z x archive.7z

# 想保留单文件就再打包成 ZIP
zip -r project.zip extracted/

上传新的 .zip,或者直接上传解压后的文件。

Step 5:超大压缩包就本地解压、选择性上传

压缩包 > 100MB 或解压后好几个 GB,干脆别传 ZIP。本地解压,挑出问题相关的 5-20 个文件,只上传这些。沙箱磁盘省了、token 省了、ChatGPT 立刻分析对的文件。

验证修复

解压命令跑完后,用这段确认:

import os
for root, dirs, files in os.walk("/tmp/extracted"):
    for f in files:
        path = os.path.join(root, f)
        size = os.path.getsize(path)
        print(f"{size:>10} {path}")

应该能看到压缩包里每个文件都列出来、且 size 非零。然后让 ChatGPT 按路径读一个具体文件——确认沙箱真的能打开解压后的内容。

预防

  • 默认上传单个文件而不是压缩包。每个文件有明确名字、立即可读,ChatGPT 分析质量更高。
  • 必须上传 ZIP 时,按这个模板写:「用 Python 把 <名字>.zip 解压到 /tmp/extracted,列出内容,然后回答:<问题>」——保证触发 Code Interpreter。
  • 跟 LLM 共享时不要用 RAR / 7z——先转 ZIP。
  • 代码 review 优先贴文件树文本 + 最相关的 3-5 个文件,别上传 200 文件的 ZIP。
  • 超大数据集先采样:本地解压成 1000 行或 50 文件再上传那个子集。

标签: #ChatGPT #ChatGPT 文件 #排查 #排查 #zip