文件和已发布的产物
文件存储在智能体的环境中。产物是从 OpenAI 托管环境中发布的文件副本。环境过期后,您仍可下载该副本。
| 环境 | 如何获取文件 |
|---|---|
self_hosted | 使用您的提供商的文件 API 或挂载的文件系统。 |
openai_hosted | 对于 /workspace/outputs 下的文件,请使用会话的 Artifacts API。 |
none | 没有环境文件系统。请从会话条目中读取输出。 |
上传文件
对于 OpenAI 托管环境,请在创建会话时通过 environment.files 提供输入文件。为每个文件选择 /workspace 下的目标路径。
使用 type: "file_id" 并提供来自 Files API 的 file_id,或者使用 type: "inline" 并提供经过 base64 编码的 data。这两种形式都需要 path。
如需在环境连接后添加文件,请使用环境的 Files API。
获取您的文件
从您自己的环境中获取
让智能体将输出写入一个已知路径。轮次完成后,通过您的提供商或基础设施获取文件。在环境过期或您删除环境之前,将文件保存到应用的存储中。
自托管环境中的文件不会通过 Artifacts API 发布,包括 /workspace/outputs 下的文件。有关各提供商的文件访问方式,请参阅沙盒提供商。
从 OpenAI 托管环境中获取
让智能体将文件保存到 /workspace/outputs 下,例如 /workspace/outputs/report.pdf。轮次完成时,OpenAI 会将输出发布为不可变的产物。
将您的 API 客户端、会话 ID、已完成的轮次 ID、产物路径和本地目标路径传递给此函数。它会列出产物,并下载同时匹配轮次和路径的文件:
# Pass the saved session ID, completed turn ID, artifact path, and local destination.
def download_artifact(client, session_id, turn_id, path, destination):
for artifact in client.beta.agents.sessions.artifacts.list(session_id):
if artifact.turn_id != turn_id or artifact.path != path:
continue
with client.beta.agents.sessions.artifacts.with_streaming_response.content(
artifact.id, session_id=session_id
) as response:
response.stream_to_file(destination)
return
raise FileNotFoundError(f"No artifact for {path!r} in turn {turn_id}")有关请求和响应字段,请参阅列出产物、获取元数据和下载内容的参考资料。
下载多个文件
该 API 每次请求下载一个产物,不提供批量下载端点。
如需下载多个文件,请列出产物,并请求每个文件的 content。
如需一次下载全部文件,请让智能体将结果打包为 ZIP 文件,
保存到 /workspace/outputs 下,然后将该压缩包作为一个产物下载。
文件生命周期
环境过期后,已发布的产物仍会保留。请在删除会话之前下载您需要保留的所有内容。
无法通过此 API 上传或编辑产物。如需发布新版本,请让智能体更新文件并完成另一个轮次。使用轮次 ID 和路径来区分版本。
当您不再需要已发布的副本时,请删除产物。删除产物不会影响环境中的文件。
文件限制
| 文件操作 | 限制 |
|---|---|
| 创建会话时包含的文件 | 每次请求 50 个文件。 |
| 内联上传 | 每个文件 5 MiB,按 base64 编码前的大小计算。 |
| 一次创建请求中的内联上传 | 总计 10 MiB,按 base64 编码前的大小计算。 |
| 从 Files API 复制的文件 | 每个文件 50 MiB。 |
| 已发布的产物 | 每个文件 200 MiB。 |
| 一起发布的输出 | 总计 500 MiB。 |