[译][AI OpenAI-doc] 批处理 API

简介: 了解如何使用 OpenAI 的批处理 API 发送异步请求组,其成本降低 50%,具有一个独立的更高速率限制池,并提供明确的 24 小时完成时间。该服务非常适合处理不需要即时响应的作业。您也可以直接在这里查看 API 参考。

了解如何使用 OpenAI 的批处理 API 发送异步请求组,其成本降低 50%,具有一个独立的更高速率限制池,并提供明确的 24 小时完成时间。该服务非常适合处理不需要即时响应的作业。您也可以直接在这里查看 API 参考。

概述

虽然 OpenAI 平台的某些用途需要您发送同步请求,但有许多情况下请求不需要即时响应,或者速率限制会阻止您快速执行大量查询。批处理作业通常在以下用例中非常有用:

  1. 运行评估
  2. 对大型数据集进行分类
  3. 嵌入内容存储库

批处理 API 提供了一组直接的端点,允许您将一组请求收集到单个文件中,启动一个批处理作业来执行这些请求,查询批处理的状态,同时底层请求正在执行,以及在批处理完成时检索收集的结果。

与直接使用标准端点相比,批处理 API 具有以下优点:

  1. 更好的成本效益:与同步 API 相比,成本折扣 50%
  2. 更高的速率限制:与同步 API 相比,拥有更大的余地
  3. 快速完成时间:每个批次在 24 小时内完成(通常更快)

入门指南

1. 准备批处理文件

批次以 .jsonl 文件开头,其中每一行包含对 API 的一个单独请求的详细信息。目前,可用的端点是 /v1/chat/completions(聊天完成 API)和 /v1/embeddings(嵌入 API)。对于给定的输入文件,每行的 body 字段中的参数与底层端点的参数相同。每个请求必须包含一个唯一的 custom_id 值,您可以在完成后使用它来引用结果。以下是一个包含 2 个请求的输入文件示例。请注意,每个输入文件只能包含对单个模型的请求。

{
   "custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {
   "model": "gpt-3.5-turbo-0125", "messages": [{
   "role": "system", "content": "You are a helpful assistant."},{
   "role": "user", "content": "Hello world!"}],"max_tokens": 1000}}
{
   "custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {
   "model": "gpt-3.5-turbo-0125", "messages": [{
   "role": "system", "content": "You are an unhelpful assistant."},{
   "role": "user", "content": "Hello world!"}],"max_tokens": 1000}}

2. 上传您的批处理输入文件

与我们的微调 API 类似,您必须首先上传您的输入文件,以便在启动批处理时正确引用它。使用 Files API 上传您的 .jsonl 文件。

from openai import OpenAI
client = OpenAI()

batch_input_file = client.files.create(
  file=open("batchinput.jsonl", "rb"),
  purpose="batch"
)

3. 创建批处理

成功上传输入文件后,您可以使用输入文件对象的 ID 创建一个批处理。在这种情况下,让我们假设文件 ID 为 file-abc123。目前,完成窗口只能设置为 24 小时。您还可以通过可选的 metadata 参数提供自定义元数据。

batch_input_file_id = batch_input_file.id

client.batches.create(
    input_file_id=batch_input_file_id,
    endpoint="/v1/chat/completions",
    completion_window="24h",
    metadata={
   
      "description": "nightly eval job"
    }
)

此请求将返回一个包含有关批处理的元数据的 Batch 对象:

{
   
  "id": "batch_abc123",
  "object": "batch",
  "endpoint": "/v1/chat/completions",
  "errors": null,
  "input_file_id": "file-abc123",
  "completion_window": "24h",
  "status": "validating",
  "output_file_id": null,
  "error_file_id": null,
  "created_at": 1714508499,
  "in_progress_at": null,
  "expires_at": 1714536634,
  "completed_at": null,
  "failed_at": null,
  "expired_at": null,
  "request_counts": {
   
    "total": 0,
    "completed": 0,
    "failed": 0
  },
  "metadata": null
}

4. 检查批处理的状态

您可以随时检查批处理的状态,这也将返回一个 Batch 对象。

from openai import OpenAI
client = OpenAI()

client.batches.retrieve("batch_abc123")

给定 Batch 对象的状态可以是以下任何一个:

状态 描述
validating 批处理开始前正在验证输入文件
failed 输入文件未通过验证过程
in_progress 输入文件已成功验证,并且批处理当前正在运行
finalizing 批处理已完成,正在准备结果
completed 批处理已完成,结果已准备就绪
expired 批处理无法在 24 小时时间窗口内完成
cancelling 批处理取消已启动
cancelled 批处理已取消

5. 检索结果

批处理完成后,您可以通过使用 Batch 对象的 output_file_id 字段对 Files API 发出请求,将结果下载到您的计算机上的文件中,本例中是 batch_output.jsonl。

from openai import OpenAI
client = OpenAI()

content = client.files.content("file-xyz123")

输出 .jsonl 文件将为输入文件中每个成功请求行提供一个响应行。批处理中的任何失败请求将其错误信息写入错误文件,可以通过批处理的 error_file_id 找到。

请注意,输出行顺序可能不匹配输入行顺序。不要依赖顺序来处理结果,而是使用 custom_id 字段,该字段将出现在输出文件的每一行中,并允许您将输入中的请求映射到输出中的结果。

{
   "id": "batch_req_123", "custom_id": "request-2", "response": {
   "status_code": 200, "request_id": "req_123", "body": {
   "id": "chatcmpl-123", "object": "chat.completion", "created": 1711652795, "model": "gpt-3.5-turbo-0125", "choices": [{
   "index": 0, "message": {
   "role": "assistant", "content": "Hello."}, "logprobs": null, "finish_reason": "stop"}], "usage": {
   "prompt_tokens": 22, "completion_tokens": 2, "total_tokens": 24}, "system_fingerprint": "fp_123"}}, "error": null}
{
   "id": "batch_req_456", "custom_id": "request-1", "response": {
   "status_code": 200, "request_id": "req_789", "body": {
   "id": "chatcmpl-abc", "object": "chat.completion", "created": 1711652789, "model": "gpt-3.5-turbo-0125", "choices": [{
   "index": 0, "message": {
   "role": "assistant", "content": "Hello! How can I assist you today?"}, "logprobs": null, "finish_reason": "stop"}], "usage": {
   "prompt_tokens": 20, "completion_tokens": 9, "total_tokens": 29}, "system_fingerprint": "fp_3ba"}}, "error": null}

6. 取消批处理

如有必要,您可以取消正在进行的批处理。批处理的状态将更改为取消,直到正在运行的请求完成,之后状态将更改为已取消。

from openai import OpenAI
client = OpenAI()

client.batches.cancel("batch_abc123")

7. 获取所有批次的列表

您随时可以查看所有批次。对于有许多批次的用户,您可以使用 limit 和 after 参数对结果进行分页。

from openai import OpenAI
client = OpenAI()

client.batches.list(limit=10)

模型可用性

批处理 API 目前可用于执行以下模型的查询。批处理 API 支持与这些模型的端点相同格式的文本和视觉输入:

  • gpt-4o
  • gpt-4-turbo
  • gpt-4
  • gpt-4-32k
  • gpt-3.5-turbo
  • gpt-3.5-turbo-16k
  • gpt-4-turbo-preview
  • gpt-4-vision-preview
  • gpt-4-turbo-2024-04-09
  • gpt-4-0314
  • gpt-4-32k-0314
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0301
  • gpt-3.5-turbo-16k-0613
  • gpt-3.5-turbo-1106
  • gpt-3.5-turbo-0613
  • text-embedding-3-large
  • text-embedding-3-small
  • text-embedding-ada-002

批处理 API 还支持微调模型。

速率限制

批处理 API 的速率限制与现有的每个模型的速率限制分开。批处理 API 具有两种新类型的速率限制:

  1. 每批限制:单个批处理可以包含最多 50,000 个请求,并且批处理输入文件的大小可以达到 100 MB。请注意,/v1/embeddings 批次也受限于批处理中所有请求中最多 50,000 个嵌入输入。
  2. 每个模型的已排队提示令牌:每个模型对于批处理处理有一定数量的最大已排队提示令牌。您可以在平台设置页面上找到这些限制。

今天,批处理 API 没有输出令牌或提交请求数量的限制。由于批处理 API 的速率限制是一个新的、独立的池,使用批处理 API 不会消耗您标准每个模型速率限制的令牌,从而为您提供一个方便的方法来增加您可以在查询我们的 API 时使用的请求和处理令牌的数量。

批处理到期

未能及时完成的批次最终会转移到已过期状态;该批次中未完成的请求将被取消,并且对已完成的请求的任何响应将通过批处理的输出文件提供。您将被收取来自任何已完成请求消耗的令牌费用。

其他资源

有关更具体的示例,请访问 OpenAI Cookbook,其中包含用于分类、情感分析和摘要生成等用例的示例代码。


相关文章
|
1月前
|
人工智能 监控 负载均衡
一文详述:AI 网关与 API 网关到底有什么区别?
近年来,AI发展迅猛,大模型成为推动业务创新的关键力量。企业面临如何安全管理和部署AI应用的挑战,需设计既能满足当前需求又可适应未来发展的基础架构。AI网关应运而生,在集成、管理和优化AI应用中扮演重要角色。本文探讨AI网关与API网关的区别,分析AI系统为何需要专门网关,并提供选择合适AI网关的建议。AI网关不仅支持多种模型,还具备高级安全性和性能优化功能,有助于企业在复杂环境中灵活应用AI技术。
80 1
|
21天前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
65 14
Elasticsearch Inference API增加对阿里云AI的支持
|
21天前
|
人工智能 机器人 API
【通义】AI视界|谷歌Q3财报:Gemini API六个月增长14倍,公司超25%的新代码由AI生成
本文内容由通义自动生成,涵盖谷歌Q3财报、马斯克xAI融资、九巨头联盟挑战英伟达、Meta加大AI投入及麻省理工研究LLM与人脑相似性等热点资讯。更多精彩内容,请访问通通知道。
|
1月前
|
存储 JSON API
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
41 7
Python| 如何使用 DALL·E 和 OpenAI API 生成图像(1)
|
20天前
|
人工智能 自然语言处理 算法
【通义】AI视界|OpenAI最新发布!ChatGPT搜索功能强势来了,挑战谷歌?
本文由【通义】自动生成,精选24小时内的重要资讯:OpenAI推出ChatGPT搜索功能挑战谷歌,微软披露130亿美元投资OpenAI,Reddit首次盈利股价暴涨20%,软银CEO孙正义看好英伟达及“超级AI”前景,谷歌云与沙特PIF共建全球AI中心。更多内容请访问通通知道。
|
26天前
|
机器学习/深度学习 人工智能 安全
AI真的能与人类数据科学家竞争吗?OpenAI的新基准对其进行了测试
AI真的能与人类数据科学家竞争吗?OpenAI的新基准对其进行了测试
|
1月前
|
人工智能 搜索推荐 API
用于企业AI搜索的Bocha Web Search API,给LLM提供联网搜索能力和长文本上下文
博查Web Search API是由博查提供的企业级互联网网页搜索API接口,允许开发者通过编程访问博查搜索引擎的搜索结果和相关信息,实现在应用程序或网站中集成搜索功能。该API支持近亿级网页内容搜索,适用于各类AI应用、RAG应用和AI Agent智能体的开发,解决数据安全、价格高昂和内容合规等问题。通过注册博查开发者账户、获取API KEY并调用API,开发者可以轻松集成搜索功能。
|
1月前
|
人工智能 自然语言处理 安全
【通义】AI视界|Adobe推出文生视频AI模型,迎战OpenAI和Meta
本文精选了过去24小时内的重要科技新闻,包括微软人工智能副总裁跳槽至OpenAI、Adobe推出文本生成视频的AI模型、Meta取消高端头显转而开发超轻量设备、谷歌与核能公司合作为数据中心供电,以及英伟达股价创下新高,市值接近3.4万亿美元。这些动态展示了科技行业的快速发展和激烈竞争。点击链接或扫描二维码获取更多资讯。
|
1月前
|
数据采集 人工智能 自然语言处理
Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股)AI Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
1月前
|
机器学习/深度学习 人工智能 算法
【通义】AI视界|若未来三年无法盈利,OpenAI或被微软收购!
本文精选了24小时内的重要科技新闻,包括苹果即将发布的全新智能家居战略、OpenAI若未来三年无法盈利或被微软收购的消息、Meta建议网友用AI生成极光照片引发争议,以及黄仁勋对马斯克的高度评价。登录通义官网了解更多功能。