Pour les scénarios non temps réel tels que l'annotation de données et la génération de contenu, l'API Batch Chat offre une alternative peu coûteuse et à haute concurrence utilisant la même méthode d'appel synchrone. Remise limitée de 50 % disponible.
Soumission de la demande : le client envoie une requête et établit une connexion.
Mise en file d'attente et attente : la requête est placée dans une file d'attente tandis que le client maintient la connexion active.
Retour du résultat : une fois le traitement terminé, le serveur renvoie l'intégralité du résultat via la connexion établie. La connexion est interrompue avec une erreur de délai d'expiration si le temps d'attente maximal est dépassé.
Disponibilité
Chine (Pékin)
- Modèles de génération de texte : qwen3,8-max, qwen3.8-flash, qwen3,7-max, qwen3,7-plus, qwen3,6-plus, qwen3,7-flash, qwen3,6-flash, qwen3,5-plus, qwen3,5-flash, qwen-plus, qwen-flash
- Modèles de compréhension d'images et de vidéos : qwen3,8-max, qwen3.8-flash, qwen3,7-plus, qwen3,6-plus, qwen3,7-flash, qwen3,6-flash, qwen3,5-plus, qwen3,5-flash, qwen3,5-omni-plus, qwen3-vl-plus
Important
- Dans le scénario de traitement par lots, le nombre maximal de jetons de contexte par requête est de 256 K pour
qwen3.8-max,qwen3.8-flash,qwen3.7-max,qwen3.7-plus,qwen3.6-plus,qwen3.7-flash,qwen3.6-flash,qwen3.5-plus,qwen3.5-flash,qwen3.5-omni-flashetqwen3.5-omni-plus. - Certains modèles prennent en charge le mode de réflexion. L'activation de ce mode génère des
tokensde réflexion et augmente les coûts. - Les modèles des séries
qwen3.8,qwen3.7,qwen3.6etqwen3.5ont le mode de réflexion activé par défaut. Si vous utilisez un modèle de réflexion hybride, vous devez définir explicitement le paramètreenable_thinking. Définissez ce paramètre surtruepour activer le mode ou surfalsepour le désactiver. - Dans le corps de la requête JSONL,
enable_thinkingest un paramètre de premier niveau debodyet doit être placé au même niveau quemodel. Ne le placez pas à l'intérieur deextra_body.
Utilisation
Prérequis
-
Activez Alibaba Cloud Model Studio et obtenez une clé API.
Configurez la clé API en tant que variable d'environnement afin de réduire les risques de fuite.
-
Pour utiliser le SDK OpenAI, installez-le :
pip3 install -U openai
Étape 1 : Configurez le point de terminaison de l'API
Basculez de l'inférence en temps réel vers l'inférence par lots en modifiant le point de terminaison de l'API (base_url) selon votre méthode d'appel :
SDK : définissez base_url sur https://batch.dashscope.aliyuncs.com/compatible-mode/v1
HTTP : POST https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
Étape 2 : Effectuez un appel
Les exemples suivants illustrent comment appeler l'API Batch Chat. Le délai d'expiration par défaut est de 3 600 secondes (1 heure) ; aucune configuration supplémentaire n'est nécessaire dans la plupart des cas.
Plage de délai d'expiration personnalisée : 60–3 600 secondes.
Python
Exemple de requêteimport os
from openai import OpenAI
client = OpenAI(
# If environment variable not set, replace with api_key="sk-xxx".
# Avoid hard-coding API keys in production to reduce leak risk.
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://batch.dashscope.aliyuncs.com/compatible-mode/v1", # Batch Chat API endpoint
).with_options(timeout=1800.0) # Timeout: 1800s (30 min). Max: 3600s.
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who are you?"},
]
)
print(completion.choices[0].message.content)
Exemple de réponseI am Qwen, a large-scale language model from Alibaba Group. I can answer questions, create text such as stories, official documents, emails, and scripts, perform logical reasoning, write code, and more. I can also express opinions and play games. If you have any questions or need help, feel free to let me know!
Java
Exemple de requêteimport 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()
// If environment variable not set, replace with .apiKey("sk-xxx").
// Avoid hard-coding API keys in production to reduce leak risk.
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.baseUrl("https://batch.dashscope.aliyuncs.com/compatible-mode/v1") // Batch Chat API endpoint
.timeout(Duration.ofSeconds(1800)) // Timeout: 1800s (30 min). Max: 3600s.
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.addUserMessage("Who are you?")
.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();
}
}
}
Exemple de réponseChatCompletion{id=chatcmpl-a12c115e-15fc-94f9-a984-81bd65f0527b, choices=[Choice{finishReason=stop, index=0, logprobs=, message=ChatCompletionMessage{
content=I am Qwen, a large-scale language model from Alibaba Group. I can help you answer questions, create text, and provide information query services. It's nice to meet you!, 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
Exemple de requêteimport OpenAI from "openai";
const openai = new OpenAI(
{
// If environment variable not set, replace with apiKey: "sk-xxx".
// Avoid hard-coding API keys in production to reduce leak risk.
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://batch.dashscope.aliyuncs.com/compatible-mode/v1", // Batch Chat API endpoint
// Timeout in milliseconds: 1800s = 1,800,000ms. Max: 3,600,000ms.
timeout: 1800 * 1000,
}
);
async function main() {
const completion = await openai.chat.completions.create({
model: "qwen-plus", // Replace with your model name as needed
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Who are you?" }
],
});
console.log(JSON.stringify(completion))
}
main();
Exemple de réponse{
"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": "I am Qwen, a large-scale language model developed by Alibaba Cloud. I can answer questions and create text, such as stories, official documents, emails, and scripts. I can also perform logical reasoning, write code, express opinions, and play games. I support multiple languages, including Chinese, English, German, French, and Spanish. If you have any questions or need help, feel free to let me know!"
}
}
],
"object": "chat.completion"
}
Go
Exemple de requêtepackage 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 endpoint
option.WithBaseURL("https://batch.dashscope.aliyuncs.com/compatible-mode/v1"),
)
// Timeout: 1800s (30 min). Max: 3600s.
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("Who are you?"),
},
Model: "qwen-plus",
},
)
if err != nil {
panic(err.Error())
}
println(chatCompletion.Choices[0].Message.Content)
}
Exemple de réponseI am Qwen, a large-scale language model developed by Alibaba Cloud. I can generate various types of text, such as articles, stories, and poems, and can adapt and expand them for different scenarios and needs. In addition, I can answer various questions and provide help and solutions. I am happy to be of service!
C# (HTTP)
Exemple de requêteusing 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
{
// Timeout: 1800s (30 min). Max: 3600s.
Timeout = TimeSpan.FromSeconds(1800)
};
static async Task Main(string[] args)
{
// If environment variable not set, replace with: string? apiKey = "sk-xxx";
string? apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY");
if (string.IsNullOrEmpty(apiKey))
{
Console.WriteLine("API Key is not set. Make sure the 'DASHSCOPE_API_KEY' environment variable is set.");
return;
}
// Set the request URL and content
string url = "https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions"; // Batch Chat API endpoint
// Replace with your model name as needed
string jsonContent = @"{
""model"": ""qwen-plus"",
""messages"": [
{
""role"": ""system"",
""content"": ""You are a helpful assistant.""
},
{
""role"": ""user"",
""content"": ""Who are you?""
}
]
}";
// Send the request and get the response
string result = await SendPostRequestAsync(url, jsonContent, apiKey);
// Print the result
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"))
{
// Set request headers
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Send the request and get the response
HttpResponseMessage response = await httpClient.PostAsync(url, content);
// Process the response
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return $"Request failed: {response.StatusCode}";
}
}
}
}
Exemple de réponse{
"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": "I am Qwen, a large-scale language model from Alibaba Group. I can answer questions, create text such as stories, official documents, emails, and scripts, perform logical reasoning, write code, and more. I can also express opinions and play games. If you have any questions or need help, feel free to let me know!"
}
}
],
"object": "chat.completion"
}
PHP (HTTP)
Exemple de requête<?php
// Set the URL for the Batch Chat request
$url = 'https://batch.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
// If environment variable not set, replace with: $apiKey = "sk-xxx";
$apiKey = getenv('DASHSCOPE_API_KEY');
// Set request headers
$headers = [
'Authorization: Bearer '.$apiKey,
'Content-Type: application/json'
];
// Set the request body
$data = [
// Replace with your model name as needed
"model" => "qwen-plus",
"messages" => [
[
"role" => "system",
"content" => "You are a helpful assistant."
],
[
"role" => "user",
"content" => "Who are you?"
]
]
];
// Initialize cURL session
$ch = curl_init();
// Set cURL options
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);
// Timeout: 1800s (30 min). Max: 3600s.
curl_setopt($ch, CURLOPT_TIMEOUT, 1800);
// Execute cURL session
$response = curl_exec($ch);
// Check for errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL resource
curl_close($ch);
// Print the response
echo $response;
?>
Exemple de réponse{
"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": "I am Qwen, a large-scale language model developed by Alibaba Cloud. I can answer questions and create text, such as stories, official documents, emails, and scripts. I can also perform logical reasoning, write code, and even express opinions and play games. I support multiple languages, including but not limited to Chinese, English, German, French, and Spanish. If you have any questions or need help, feel free to let me know!"
}
}
],
"object": "chat.completion"
}
curl
Exemple de requêteDéfinissez le paramètre max-time sur 1800 secondes. Maximum : 3600 secondes.
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": "Who are you?"
}
]
}'
Exemple de réponse{
"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": "I am Qwen, a large-scale language model from Alibaba Group. I can answer questions and create text, such as stories, official documents, emails, and scripts. I can also perform logical reasoning, write code, express opinions, and play games. I support multiple languages, including but not limited to Chinese, English, German, French, and Spanish. If you have any questions or need help, feel free to let me know!"
}
}
],
"object": "chat.completion"
}
Cette API prend en charge uniquement les soumissions de requêtes uniques. Pour soumettre plusieurs requêtes simultanément, regroupez-les dans un fichier. Consultez OpenAI-compatible - Batch (entrée par fichier) .
Limites
-
Temps d'attente : durée maximale de 3600 secondes (1 heure) pour l'attente synchrone. Définissez un délai d'expiration personnalisé entre 60 et 3600 secondes.
-
Limites de concurrence : maximum de 10 000 requêtes en attente par modèle et par compte. Les requêtes dépassant cette limite sont rejetées avec un code d'erreur. Les nouvelles requêtes ne sont acceptées qu'une fois les requêtes en attente traitées.
-
Taux d'appels : maximum de 1000 QPS par compte, soit 10 000 appels toutes les 10 secondes.
Il s'agit d'un maximum théorique. La disponibilité réelle dépend de la charge du système. Implémentez une logique de nouvelle tentative.
Facturation
- Prix unitaire : facturation basée sur les jetons d'entrée et de sortie des requêtes abouties. Le prix catalogue correspond au tarif des appels en temps réel. Remise limitée de 50 % disponible sur le site officiel. Consultez la liste des modèles.
- Périmètre de facturation : seules les requêtes abouties sont facturées. Les requêtes échouées (erreurs système ou délais d'expiration dépassés) ne sont pas facturées.
Remarque
- L'inférence par lots constitue un poste de facturation distinct. Elle est éligible au plan d'économies polyvalent pour l'IA, mais n'est pas compatible avec les réductions telles que l'abonnement (autres plans d'économies) ni avec les quotas gratuits pour les nouveaux utilisateurs. Elle ne prend pas non plus en charge des fonctionnalités telles que le cache de contexte.
- Certains modèles, comme qwen3,5-plus et qwen3,5-flash, activent le mode de réflexion par défaut. Ce mode génère des jetons de réflexion supplémentaires, facturés au tarif des jetons de sortie, ce qui augmente les coûts. Pour maîtriser vos dépenses, définissez le paramètre
enable_thinkingen fonction de la complexité de la tâche. Pour plus d'informations, consultez la section Réflexion approfondie.
Codes d'erreur
Si l'appel au modèle échoue et renvoie un message d'erreur, consultez les codes d'erreur pour résoudre le problème.
FAQ
-
Existe-t-il une différence de temps de traitement des requêtes entre Batch Chat et l'API en temps réel ?
Oui. Les requêtes sont mises en file d'attente pour être planifiées, ce qui allonge généralement le temps de traitement de bout en bout par rapport à l'API en temps réel. Le délai d'attente maximal est d'une heure. Si ce délai est dépassé, la connexion est interrompue avec une erreur.
-
Comment choisir entre Batch Chat et Batch File ?
Optez pour Batch Chat si vous devez traiter de nombreuses requêtes de dialogue indépendantes avec une forte concurrence via des appels synchrones. Privilégiez Batch File pour le traitement d'un seul fichier volumineux contenant de nombreuses requêtes, avec récupération asynchrone des résultats.
-
Batch Chat garantit-il l'exécution de toutes les requêtes ?
Non. L'exécution dépend de l'allocation des ressources partagées. Les requêtes peuvent rester en file d'attente si les ressources sont saturées. La connexion expire si la requête n'est pas exécutée dans le délai d'attente maximal. Les requêtes ayant expiré ne sont pas facturées ; veuillez réessayer ultérieurement.
Références
- Liste complète des paramètres pour les appels de modèle en temps réel : OpenAI compatible - Chat.
- Traitement par lot via soumission de fichier avec résultats asynchrones : OpenAI-compatible - Batch (file input).