对于数据标注、内容生成等无需实时响应的场景,实时推理API存在成本高、并发受限的问题。阿里云百炼的批量对话(Batch Chat)API ,保持了与实时API一致的同步调用方式,您只需发起请求等待最终结果返回。目前该功能享有官网限时 5 折优惠,能将您的推理成本直接降低 50%。
本接口仅支持提交单个请求。如需一次性传入多个请求,可通过文件方式提交,详情请参考OpenAI兼容-Batch(文件输入)。
工作原理
请求提交:客户端发起请求并建立连接。
连接保持:请求进入队列排队,客户端保持连接等待。
同步返回:请求处理完成后,服务端通过之前保持的连接,将完整结果一次性返回给客户端。
如果超过最长等待时间,连接将自动断开并返回超时错误。
适用范围
中国内地
在中国内地部署模式下,接入点与数据存储均位于北京地域,模型推理计算资源仅限于中国内地。
如何使用
前提条件
已开通阿里云百炼服务,并已获取 API Key。
建议配置API Key到环境变量中以降低API Key的泄露风险。
若通过OpenAI SDK进行调用,需要安装SDK。
pip3 install -U openai
步骤1:配置 API 端点
只需修改 API 端点(base_url),即可轻松将现有的实时推理请求切换至批量推理。请根据调用方式,配置正确的 API 端点。
SDK配置:将base_url设置为https://batch.dashscope.aliyuncs.com/compatible-mode/v1
HTTP调用:请求端点为POST https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
步骤2:发起调用
此处以文本对话为例,展示如何调用 Batch Chat 接口。
请求的默认等待超时时间为3600秒(1小时),在多数情况下无需额外配置。
下方示例展示如何主动设置一个自定义的超时时间(60-3600秒)作为参考。
Python
请求示例
import os
from openai import OpenAI
client = OpenAI(
# 若没有配置环境变量,可用阿里云百炼API Key将下行替换为:api_key="sk-xxx",但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险.
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://batch.dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云百炼Batch chat API 的 URL
).with_options(timeout=1800.0) # 设置1800秒(30分钟)的等待时间,最长3600秒
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"},
]
)
print(completion.choices[0].message.content)响应示例
我是千问,阿里巴巴集团旗下的超大规模语言模型。我能够回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!Java
请求示例
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
// 若没有配置环境变量,可用百炼API Key将下行替换为:.apiKey("sk-xxx")。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.baseUrl("https://batch.dashscope.aliyuncs.com/compatible-mode/v1") // # 阿里云百炼Batch chat API 的 URL
.timeout(Duration.ofSeconds(1800)) // 设置等待时间1800秒(半小时),最长3600秒
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addUserMessage("你是谁")
.model("qwen-plus")
.build();
try {
ChatCompletion chatCompletion = client.chat().completions().create(params);
System.out.println(chatCompletion);
} catch (Exception e) {
System.err.println("Error occurred: " + e.getMessage());
e.printStackTrace();
}
}
}响应示例
ChatCompletion{id=chatcmpl-a12c115e-15fc-94f9-a984-81bd65f0527b, choices=[Choice{finishReason=stop, index=0, logprobs=, message=ChatCompletionMessage{
content=我是千问,阿里巴巴集团旗下的超大规模语言模型。我可以帮助你回答问题、创作文字、提供信息查询等服务。很高兴认识你!, refusal=, role=assistant, annotations=, audio=, functionCall=, toolCalls=, additionalProperties={}}, additionalProperties={}}], created=1763609020, model=qwen-plus, object_=chat.completion, serviceTier=, systemFingerprint=, usage=CompletionUsage{completionTokens=33, promptTokens=10, totalTokens=43, completionTokensDetails=, promptTokensDetails=, additionalProperties={}}, additionalProperties={}}Node.js
请求示例
import OpenAI from "openai";
const openai = new OpenAI(
{
// 若没有配置环境变量,请用百炼API Key将下行替换为:apiKey: "sk-xxx",但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://batch.dashscope.aliyuncs.com/compatible-mode/v1", // 阿里云百炼Batch chat API的 URL
// 在这里添加超时设置 (单位:毫秒)
// 1800秒 * 1000 = 1,800,000 毫秒,最长支持 3,600,000 毫秒
timeout: 1800 * 1000,
}
);
async function main() {
const completion = await openai.chat.completions.create({
model: "qwen-plus", //此处以qwen-plus为例,可按需更换模型名称。
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "你是谁?" }
],
});
console.log(JSON.stringify(completion))
}
main();响应示例
{
"created": 1763618557,
"usage": {
"completion_tokens": 80,
"prompt_tokens": 22,
"total_tokens": 102
},
"model": "qwen-plus",
"id": "chatcmpl-af23c086-8662-91eb-b236-892032ddee92",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "我是千问,由阿里云研发的超大规模语言模型。我能够回答问题、创作文字,如写故事、公文、邮件、剧本等,还能进行逻辑推理、编程,表达观点,玩游戏等。我支持多种语言,包括中文、英文、德语、法语、西班牙语等。如果你有任何问题或需要帮助,欢迎随时告诉我!"
}
}
],
"object": "chat.completion"
}Go
请求示例
package main
import (
"context"
"os"
"time"
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey(os.Getenv("DASHSCOPE_API_KEY")),
// 阿里云百炼Batch chat API 的 URL
option.WithBaseURL("https://batch.dashscope.aliyuncs.com/compatible-mode/v1"),
)
// 设置超时时间:1800秒 = 30分钟,最长支持3600秒
ctx, cancel := context.WithTimeout(context.Background(), 3600*time.Second)
defer cancel()
chatCompletion, err := client.Chat.Completions.New(
ctx, openai.ChatCompletionNewParams{
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("你是谁"),
},
Model: "qwen-plus",
},
)
if err != nil {
panic(err.Error())
}
println(chatCompletion.Choices[0].Message.Content)
}
响应示例
我是千问,由阿里云研发的超大规模语言模型。我可以生成各种类型的文本,如文章、故事、诗歌、故事等,并能够根据不同的场景和需求进行变换和扩展。此外,我还能够回答各种问题,提供帮助和解决方案。很高兴为您服务!C#(HTTP)
请求示例
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
class Program
{
private static readonly HttpClient httpClient = new HttpClient
{
// 设置超时时间:1800秒 = 30分钟,最长支持3600秒
Timeout = TimeSpan.FromSeconds(1800)
};
static async Task Main(string[] args)
{
// 若没有配置环境变量,请用百炼API Key将下行替换为:string? apiKey = "sk-xxx";
string? apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY");
if (string.IsNullOrEmpty(apiKey))
{
Console.WriteLine("API Key 未设置。请确保环境变量 'DASHSCOPE_API_KEY' 已设置。");
return;
}
// 设置请求 URL 和内容
string url = "https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"; // Batch chat API 的 URL
// 此处以qwen-plus为例,可按需更换模型名称。
string jsonContent = @"{
""model"": ""qwen-plus"",
""messages"": [
{
""role"": ""system"",
""content"": ""You are a helpful assistant.""
},
{
""role"": ""user"",
""content"": ""你是谁?""
}
]
}";
// 发送请求并获取响应
string result = await SendPostRequestAsync(url, jsonContent, apiKey);
// 输出结果
Console.WriteLine(result);
}
private static async Task<string> SendPostRequestAsync(string url, string jsonContent, string apiKey)
{
using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"))
{
// 设置请求头
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// 发送请求并获取响应
HttpResponseMessage response = await httpClient.PostAsync(url, content);
// 处理响应
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return $"请求失败: {response.StatusCode}";
}
}
}
}响应示例
{
"created": 1763620689,
"usage": {
"completion_tokens": 60,
"prompt_tokens": 22,
"total_tokens": 82
},
"model": "qwen-plus",
"id": "chatcmpl-db85828d-af47-97a3-a2f4-120b8f7d72d3",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "我是千问,阿里巴巴集团旗下的超大规模语言模型。我能够回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,欢迎随时告诉我!"
}
}
],
"object": "chat.completion"
}PHP(HTTP)
请求示例
<?php
// 设置Batch Chat 请求 的 URL
$url = 'https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
// 若没有配置环境变量,请用百炼API Key将下行替换为:$apiKey = "sk-xxx";
$apiKey = getenv('DASHSCOPE_API_KEY');
// 设置请求头
$headers = [
'Authorization: Bearer '.$apiKey,
'Content-Type: application/json'
];
// 设置请求体
$data = [
// 此处以qwen-plus为例,可按需更换模型名称。
"model" => "qwen-plus",
"messages" => [
[
"role" => "system",
"content" => "You are a helpful assistant."
],
[
"role" => "user",
"content" => "你是谁?"
]
]
];
// 初始化cURL会话
$ch = curl_init();
// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 在此处设置Batch chat 请求的超时时间:1800秒 = 30分钟,最长支持3600秒
curl_setopt($ch, CURLOPT_TIMEOUT, 1800);
// 执行cURL会话
$response = curl_exec($ch);
// 检查是否有错误发生
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// 关闭cURL资源
curl_close($ch);
// 输出响应结果
echo $response;
?>响应示例
{
"created": 1763621824,
"usage": {
"completion_tokens": 81,
"prompt_tokens": 22,
"total_tokens": 103
},
"model": "qwen-plus",
"id": "chatcmpl-b25aeb86-5cfe-93ea-ab03-aa3de1381c23",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "我是千问,由阿里云研发的超大规模语言模型。我能够回答问题、创作文字,如写故事、公文、邮件、剧本等,还能进行逻辑推理、编程,甚至表达观点和玩游戏。我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等。如果你有任何问题或需要帮助,欢迎随时告诉我!"
}
}
],
"object": "chat.completion"
}curl
请求示例
设置最长等待时间max-time为1800秒,最长支持3600秒。
curl -X POST https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
--max-time 1800 \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你是谁?"
}
]
}'响应示例
{
"created": 1763622152,
"usage": {
"completion_tokens": 79,
"prompt_tokens": 22,
"total_tokens": 101
},
"model": "qwen-plus",
"id": "chatcmpl-daa344d2-60df-9b79-81a4-28c9a10a0a0e",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "我是千问,阿里巴巴集团旗下的超大规模语言模型。我能够回答问题、创作文字,如写故事、公文、邮件、剧本等,还能进行逻辑推理、编程,表达观点,玩游戏等。我支持多种语言,包括但不限于中文、英文、德语、法语、西班牙语等。如果你有任何问题或需要帮助,欢迎随时告诉我!"
}
}
],
"object": "chat.completion"
}使用限制
等待时间:提交请求后,会同步等待结果,服务端最长会保持连接3600秒(1小时)。可根据实际需求设置自定义超时时间,取值范围为60-3600秒。
并发限制:单个账户为每个模型最多可维持10,000个等待中的请求。超出此限制的新请求将被拒绝并返回相应错误码,直到有请求完成并释放出可用位置。
调用速率:单个账户提交请求的频率上限为 1000 QPS(10,000次 / 10秒)。
此上限为系统设定的理论最大值。在实际调用中,API的可用资源会受到整体系统负载的动态影响,建议您在代码中实现重试逻辑。
计费说明
计费单价:按成功请求的输入和输出Token计费,目录价与对应模型实时调用价格一致。官网限时为 Batch Chat 调用提供 5 折优惠,其最终费用为实时调用价格的 50%,具体请参见模型列表。
计费范围:仅对任务中成功执行的请求进行计费。任何失败的请求(包括系统错误或超时)均不计费。
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
常见问题
Batch Chat 请求耗时和实时 API 比较有区别吗?
有区别。Batch Chat 请求需要排队等待调度,因此端到端耗时通常高于实时 API。请求在服务端最长等待时间为1小时,超时未执行将自动断开并返回错误。
如何选择使用 Batch Chat 还是Batch File?
当业务逻辑需要以 API 同步调用的方式、高并发地提交大量独立的对话请求时,选择 Batch Chat。当需要处理的是包含大量请求的单个大文件,并且可以接受异步获取结果文件,则选择 Batch File。
Batch Chat 能保证请求全部完成吗?
不保证。Batch Chat 使用的是 Batch 资源,完成情况取决于系统资源分配情况。如果系统资源繁忙,请求可能在队列中等待。若超过最长等待时间仍未被调度执行,连接将超时断开,此时请求不会被计费,可以稍后重试。
相关文档
查看模型实时调用的完整参数列表,请参阅OpenAI Chat。
如需通过提交文件进行批量处理,并异步获取结果,请参阅OpenAI兼容-Batch(文件输入)。