首页使用帮助OpenAI Files API
HELP / OPENAI FILES API

OpenAI Files API 怎么用?

先用服务端 POST /v1/files 上传文件,按真实用途选择 purpose,保存返回的 file_id、大小、创建时间和到期时间;随后再把 file_id 交给 Responses 文件输入、Batch、Fine-tuning、Evals 或 Vector Store。上传成功只代表 File 对象已创建,不代表它自动满足下游端点的格式、大小和解析限制。

主关键词:OpenAI Files API 怎么用purposefile_id 生命周期更新:2026-10-31
先给结论

把上传、模型输入和检索当成三层能力。Files API 负责创建和管理 File;Responses 的 input_file 负责把单次文件送进模型;File Search 则把文件加入 Vector Store 后做可扩展检索。三层的大小、格式、到期和计费规则不同,不能因为拿到了 file_id 就默认后续一定可用。

官方资料(2026-10-31 核对):Upload file reference · File inputs guide · Files lifecycle reference · File Search guide · Uploads API

Files API、文件输入和 File Search 有什么区别?

能力对象适合关键边界
Files APIFile / file_id上传、列出、读取、下载、删除、到期只管理文件,不会自动调用模型或建立检索库
Responses file inputinput_file让一次模型请求直接阅读文件文件和请求合计限制独立于上传限制
File SearchVector Store + File在较大知识库中做语义和关键词检索需要入库和处理状态,存储及检索规则独立
BatchJSONL File离线批量 API 请求purpose=batch,当前 JSONL 上限 200 MB
Uploads APIUpload + Parts大文件分片上传最多 8 GB,但下游用途仍可能更小

第一步:按用途上传文件

生产站点应由自己的服务端持有 API Key 并读取本地或对象存储文件。普通模型文件输入使用 user_data;不要把 API Key 或文件上传能力直接暴露给匿名浏览器。

import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

const file = await openai.files.create({
  file: fs.createReadStream("./document.pdf"),
  purpose: "user_data",
  expires_after: {
    anchor: "created_at",
    seconds: 604800
  }
});

console.log({
  id: file.id,
  filename: file.filename,
  bytes: file.bytes,
  expiresAt: file.expires_at
});

expires_after.seconds 当前允许 3,600 到 2,592,000 秒,即从 1 小时到 30 天。purpose=batch 默认 30 天后到期;其他用途默认持续保存到手动删除。若业务不需要长期复用,主动设置到期并在数据库记录所有者、用途和到期时间。

purpose 应该怎么选?

purpose适合不要混用
user_dataResponses 等模型文件输入不是 Batch 或微调训练集标签
batchBatch API 输入 JSONL必须满足 Batch 的 JSONL 格式与大小
fine-tune微调数据当前只支持符合要求的 JSONL
vision视觉微调图片不是普通图片问答的通用 purpose
evals评测数据集不等于普通模型输入
assistantsAssistants API 文件新 Responses 文件输入优先使用 user_data

第二步:用 file_id 调用 Responses

得到 File 对象后,可以在 Responses 请求中加入 input_file。PDF 会同时提取文本和页面图片;Word、PowerPoint、文本和代码等非 PDF 文件通常只提取文本,内部图片和图表不会被抽取。需要保留图表视觉信息时,先转换为 PDF。

const response = await openai.responses.create({
  model: "gpt-6-astra",
  input: [{
    role: "user",
    content: [
      {
        type: "input_file",
        file_id: file.id
      },
      {
        type: "input_text",
        text: "请总结这份文件,并列出需要核实的数字。"
      }
    ]
  }]
});

console.log(response.output_text);

Responses 还支持 Base64 file_data 和外部 file_url;Chat Completions 的文件内容部分当前只支持 PDF,并且不支持外部文件 URL。非 PDF 文档优先使用 Responses,或由应用先提取文本再发送。

四组大小限制不要混淆

位置当前限制说明
POST /v1/files单文件 512 MB项目总文件存储 2.5 TB;上传接口当前每个认证用户 1,000 RPM
Responses input_file 请求每个文件小于 50 MB;请求内合计 50 MB即使已上传 512 MB 文件,也不代表可以直接作为单次模型输入
Batch inputJSONL 最高 200 MB同时必须符合 Batch 行结构和目标端点规则
Uploads API总计最多 8 GB;每 Part 最多 64 MB解决分片上传,不放宽下游端点限制

项目文件存储和 Vector Store 存储不是同一个概念。File Search 需要把 File 附加到 Vector Store 并等待处理完成;大知识库应使用 File Search,而不是把所有文档塞进一次 50 MB 的模型请求。

PDF、文档和表格会怎样解析?

  • PDF:视觉模型会同时接收提取文本和页面图片,因此图表更完整,但 Token 用量也可能更高;Responses 可用 detail 控制页面图像细节。
  • Word、PPT、文本和代码:提取文本,非 PDF 文件里的图片或图表不会进入模型上下文。
  • Excel、CSV、TSV:Responses 使用表格增强流程,当前最多解析每个 Sheet 的前 1,000 行,并添加模型生成的摘要和表头元数据。
  • 大规模表格分析:复杂聚合、连接和图表更适合 Hosted Shell 或应用自己的数据处理层。

文件输入会消耗模型上下文和输入 Token。PDF 同时包含文本与页面图像时更明显;上线前应结合 API Usage 指南记录文件类型、大小、页数、模型和实际 usage。

如何列出、读取、下载和删除文件?

const page = await openai.files.list({
  purpose: "user_data",
  order: "desc",
  limit: 100
});

const metadata = await openai.files.retrieve(file.id);
const content = await openai.files.content(file.id);

// 删除是有影响的写操作
const deleted = await openai.files.delete(file.id);

List 支持 after 游标、limit、order 和 purpose 过滤。File 对象里的 status 与 status_details 已标记为弃用,不要用它们判断 Vector Store 是否完成摄取;File Search 应查看 Vector Store File 或 File Batch 的处理状态。

删除前先做引用检查

官方说明删除 File 会把它从所有 Vector Store 中移除。删除前应确认它没有被正在运行的 Batch、微调、评测、Responses 流程或知识库引用;删除接口必须验证租户所有权、权限和业务状态,并记录审计事件。

大文件什么时候使用 Uploads API?

直接 Files 上传超过 512 MB 时,可以评估 Uploads API:先声明总字节、文件名、MIME 和 purpose,得到一个 1 小时后失效的 Upload;再把文件切成最多 64 MB 的 Parts,可并行上传;最后按正确顺序提交 part_ids 完成。完成时实际字节必须与创建时声明一致,成功后返回可复用的 File 对象。

  1. POST /v1/uploads 创建 Upload,并保存 upload_id。
  2. POST /v1/uploads/{upload_id}/parts 上传每个 Part。
  3. 保存所有 part_id 和原始顺序,可选计算 MD5 做完整性校验。
  4. POST /v1/uploads/{upload_id}/complete 提交有序 part_ids。
  5. 使用返回的 upload.file.id,再次检查目标用途的大小和格式限制。

Upload 过期或不再需要时应取消;不要因为 Uploads 支持 8 GB 就假设 Responses、Batch 或 File Search 会接受同样大小。

上线前检查清单

  • 上传路由只在服务端调用 OpenAI,API Key 未进入浏览器、日志或 Git。
  • 验证登录、租户、文件所有者、扩展名、MIME、真实大小和业务配额。
  • purpose 与目标用途一致,普通模型输入使用 user_data。
  • 区分 512 MB 上传限制、50 MB 模型输入限制、200 MB Batch 限制和 8 GB Uploads 上限。
  • 数据库保存 file_id、原文件名、bytes、purpose、created_at、expires_at、租户和业务引用。
  • 非 PDF 文件的图表需求已评估,必要时转换 PDF。
  • 大知识库使用 Vector Store/File Search,并等待摄取完成。
  • List 使用游标分页;不再依赖已弃用的 File status。
  • 删除前检查 Batch、微调、评测、Responses 和 Vector Store 引用。
  • 文件到期、删除、失败重试、恶意文件、跨租户访问和孤儿文件清理都有测试。
上传成功后还不能直接当作知识库

需要把 file_id 加入 Vector Store、等待摄取完成并配置 Responses 工具;完整流程见 OpenAI File Search 指南。

常见问题

OpenAI Files API 是做什么的?

它把文件上传为可复用的 File 对象,并提供列出、读取元数据、下载内容和删除等生命周期接口。得到的 file_id 可以按 purpose 用于 Responses 文件输入、Batch、Fine-tuning、Evals、Vision fine-tuning 或 File Search 等后续流程。

普通文档上传应该使用什么 purpose?

如果文件要作为模型输入,官方建议使用 user_data。Batch 输入用 batch,微调用 fine-tune,视觉微调用 vision,评测数据用 evals。purpose 会影响文件用途、格式校验和默认到期行为,不能随便填写。

Files API 的 512 MB 和文件输入的 50 MB 有什么区别?

512 MB 是 POST /v1/files 单个文件的上传上限;模型请求中的 input_file 另有每个文件小于 50 MB、同一请求全部文件合计 50 MB 的限制。某些用途还有更小限制,例如 Batch JSONL 当前最高 200 MB,因此上传成功不等于一定能用于目标端点。

Responses 和 Chat Completions 都能读取 Word、Excel 和 PDF 吗?

不完全相同。Responses 支持官方列表中的 PDF、文本、代码、文档、演示文稿和表格,并可使用 file_id、Base64 或外部 URL;Chat Completions 的文件内容部分当前只支持 PDF,不支持文件 URL。非 PDF 文件通常应优先使用 Responses。

上传的文件会自动删除吗?

purpose=batch 的文件默认 30 天后到期;其他 purpose 默认持续保存到手动删除。上传时可以设置 expires_after,当前支持从创建时间起 1 小时到 30 天。应用仍应保存 file_id、expires_at 和业务所有者,并按最小保留原则清理。

删除 File 会影响 File Search 吗?

会。官方删除接口说明,删除 File 会把它从所有 Vector Store 中移除。生产环境应先确认该 file_id 是否仍被 Responses、Batch、Fine-tuning、Evals 或 File Search 引用,并把删除设计为需要授权和审计的动作。

大于 512 MB 的文件应该怎么上传?

Files 的直接上传接口单文件上限是 512 MB;Uploads API 支持把大文件分成最多 64 MB 的 Part,总计最多 8 GB。Upload 创建后 1 小时过期,完成时要按顺序提交 part_ids,且总字节必须与创建时声明一致;最终返回可供平台使用的 File 对象,但下游用途仍有自己的格式和大小限制。

File 对象不会自动变成自建向量

要自行生成和存储文本向量,请先设计切分与索引版本,再阅读 OpenAI Embeddings API 教程。

本文核对日期为 2026-10-31。文件格式、大小、存储、上传速率、模型输入和下游用途限制可能调整,上线前请再次读取官方 Files、File inputs、File Search、Batch 与 Uploads 文档。

Transcriptions 不是通用 Files 限制

音频转录单文件当前最高 25 MB,不能套用 Files API 的 512 MB;格式、分片和流式结果见 OpenAI Audio API 指南。

图片文件不等于生成接口

用 File ID 作为 Responses 图像输入、直接上传参考图到 Images Edit,以及普通 Files API 生命周期是三套边界;生成、编辑与 Mask 详见 OpenAI Images API 教程。