All Products
Search
Document Center

Alibaba Cloud Model Studio:Kompatibel dengan OpenAI - Batch (input file)

Last Updated:Mar 07, 2026

Alibaba Cloud Model Studio menyediakan API File Batch yang kompatibel dengan OpenAI. API ini memungkinkan Anda mengirimkan tugas batch melalui file. Sistem memproses tugas tersebut secara asinkron dan mengembalikan hasil setelah tugas selesai atau waktu tunggu maksimum tercapai. Biayanya 50% dari panggilan real-time, sehingga ideal untuk layanan seperti analitik data dan evaluasi model yang memerlukan pemrosesan skala besar namun tidak sensitif terhadap latensi.

Untuk melakukan operasi ini di konsol, lihat Inferensi batch.

Alur kerja

image

Prasyarat

Anda dapat memanggil API File Batch menggunakan SDK OpenAI untuk Python atau Node.js, atau melalui panggilan API HTTP.

Ketersediaan

Internasional

Dalam mode penyebaran internasional, baik titik akhir maupun penyimpanan data berlokasi di Wilayah Singapura. Sumber daya komputasi inferensi model dijadwalkan secara dinamis di seluruh wilayah global, kecuali Tiongkok daratan.

Model yang didukung: qwen-max, qwen-plus, qwen-flash, qwen-turbo.

Tiongkok daratan

Dalam mode penyebaran Tiongkok daratan, baik titik akhir maupun penyimpanan data berlokasi di Wilayah Beijing. Sumber daya komputasi inferensi model hanya tersedia di Tiongkok daratan.

Model yang didukung:

  • Model generasi teks: Versi stabil Qwen-Max, Plus, Flash, dan Long, serta beberapa versi latest. Seri QwQ (qwq-plus) dan beberapa model pihak ketiga (deepseek-r1, deepseek-v3) juga didukung.

  • Model multimodal: Versi stabil Qwen-VL-Max, Plus, dan Flash, ditambah beberapa versi latest. Model Qwen-OCR juga didukung.

  • Model text embedding: text-embedding-v4.

Nama model yang didukung

Penting
  • Beberapa model mendukung mode pemikiran. Saat diaktifkan, mode ini menghasilkan token pemikiran dan meningkatkan biaya.

  • Seri qwen3.5 (seperti qwen3.5-plus dan qwen3.5-flash) mengaktifkan mode pemikiran secara default. Saat menggunakan model hybrid-thinking, atur eksplisit parameter enable_thinking (true atau false).

Mulai

Sebelum memproses tugas formal, Anda dapat menggunakan model uji batch-test-model untuk melakukan pengujian tertutup end-to-end guna memverifikasi bahwa rantai panggilan API dan format data sudah benar.

Catatan

Batasan model uji (batch-test-model):

  • File uji harus memenuhi persyaratan file input. Ukuran file tidak boleh melebihi 1 MB, dan jumlah baris tidak boleh melebihi 100.

  • Batas konkurensi: Jumlah maksimum tugas paralel adalah 2.

  • Biaya: Model uji tidak dikenakan biaya inferensi model.

Langkah 1: Siapkan file input

Siapkan file bernama test_model.jsonl dengan konten berikut:

{"custom_id":"1","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"Hello! How can I help you?"}]}}
{"custom_id":"2","method":"POST","url":"/v1/chat/ds-test","body":{"model":"batch-test-model","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}

Langkah 2: Jalankan kode

Pilih kode contoh untuk bahasa pemrograman Anda, simpan di direktori yang sama dengan file input, lalu jalankan. Kode ini menyelesaikan seluruh proses mengunggah file, membuat tugas, memeriksa status secara berkala, dan mengunduh hasil.

Untuk menyesuaikan path file atau parameter lainnya, Anda dapat memodifikasi kode sesuai kebutuhan.

Kode contoh

SDK Python OpenAI

import os
from pathlib import Path
from openai import OpenAI
import time

# Inisialisasi klien.
client = OpenAI(
    # Jika variabel lingkungan belum diatur, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx".
    # Untuk keamanan, jangan hard-code Kunci API Anda dalam kode produksi.
    # Kunci API untuk wilayah Singapura dan Beijing berbeda.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"  # base_url untuk layanan Alibaba Cloud Model Studio
)

def upload_file(file_path):
    print(f"Mengunggah file JSONL yang berisi informasi permintaan...")
    file_object = client.files.create(file=Path(file_path), purpose="batch")
    print(f"File diunggah. ID File: {file_object.id}\n")
    return file_object.id

def create_batch_job(input_file_id):
    print(f"Membuat tugas batch dari ID file...")
    # Catatan: Nilai parameter endpoint harus sama dengan nilai field url dalam file input. Untuk model uji (batch-test-model), atur endpoint ke /v1/chat/ds-test. Untuk model text embedding, atur ke /v1/embeddings. Untuk model lainnya, atur ke /v1/chat/completions.
    batch = client.batches.create(input_file_id=input_file_id, endpoint="/v1/chat/ds-test", completion_window="24h")
    print(f"Tugas batch dibuat. ID Tugas batch: {batch.id}\n")
    return batch.id

def check_job_status(batch_id):
    print(f"Memeriksa status tugas batch...")
    batch = client.batches.retrieve(batch_id=batch_id)
    print(f"Status tugas batch: {batch.status}\n")
    return batch.status

def get_output_id(batch_id):
    print(f"Mendapatkan ID file output untuk permintaan yang berhasil dalam tugas batch...")
    batch = client.batches.retrieve(batch_id=batch_id)
    print(f"ID file output: {batch.output_file_id}\n")
    return batch.output_file_id

def get_error_id(batch_id):
    print(f"Mendapatkan ID file output untuk permintaan yang gagal dalam tugas batch...")
    batch = client.batches.retrieve(batch_id=batch_id)
    print(f"ID file error: {batch.error_file_id}\n")
    return batch.error_file_id

def download_results(output_file_id, output_file_path):
    print(f"Mencetak dan mengunduh hasil yang berhasil dari tugas batch...")
    content = client.files.content(output_file_id)
    # Cetak sebagian konten untuk pengujian.
    print(f"Mencetak 1000 karakter pertama dari hasil yang berhasil: {content.text[:1000]}...\n")
    # Simpan file hasil secara lokal.
    content.write_to_file(output_file_path)
    print(f"Output lengkap telah disimpan ke file hasil lokal result.jsonl\n")

def download_errors(error_file_id, error_file_path):
    print(f"Mencetak dan mengunduh informasi kegagalan dari tugas batch...")
    content = client.files.content(error_file_id)
    # Cetak sebagian konten untuk pengujian.
    print(f"Mencetak 1000 karakter pertama dari informasi kegagalan: {content.text[:1000]}...\n")
    # Simpan file informasi error secara lokal.
    content.write_to_file(error_file_path)
    print(f"Informasi kegagalan lengkap telah disimpan ke file error lokal error.jsonl\n")

def main():
    # Path file
    input_file_path = "test_model.jsonl"  # Ganti dengan path file input Anda.
    output_file_path = "result.jsonl"  # Ganti dengan path file output Anda.
    error_file_path = "error.jsonl"  # Ganti dengan path file error Anda.
    try:
        # Langkah 1: Unggah file JSONL yang berisi informasi permintaan untuk mendapatkan ID file input.
        input_file_id = upload_file(input_file_path)
        # Langkah 2: Buat tugas batch berdasarkan ID file input.
        batch_id = create_batch_job(input_file_id)
        # Langkah 3: Periksa status tugas batch hingga selesai.
        status = ""
        while status not in ["completed", "failed", "expired", "cancelled"]:
            status = check_job_status(batch_id)
            print(f"Menunggu tugas selesai...")
            time.sleep(10)  # Tunggu 10 detik sebelum memeriksa status lagi.
        # Jika tugas gagal, cetak pesan error dan keluar.
        if status == "failed":
            batch = client.batches.retrieve(batch_id)
            print(f"Tugas batch gagal. Error: {batch.errors}\n")
            print(f"Untuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code")
            return
        # Langkah 4: Unduh hasilnya. Jika ID file output tidak kosong, cetak 1000 karakter pertama dari hasil yang berhasil dan unduh hasil lengkap ke file output lokal.
        # Jika ID file error tidak kosong, cetak 1000 karakter pertama dari informasi kegagalan dan unduh informasi lengkap ke file error lokal.
        output_file_id = get_output_id(batch_id)
        if output_file_id:
            download_results(output_file_id, output_file_path)
        error_file_id = get_error_id(batch_id)
        if error_file_id:
            download_errors(error_file_id, error_file_path)
            print(f"Untuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code")
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        print(f"Untuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code")

if __name__ == "__main__":
    main()

SDK Node.js OpenAI

/**
 * Pengujian API Batch Alibaba Cloud Model Studio - Menggunakan SDK Node.js OpenAI
 *
 * Instal dependensi: npm install openai
 * Jalankan: node test-nodejs.js
 */

const OpenAI = require('openai');
const fs = require('fs');

// URL dasar untuk wilayah Singapura
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, gunakan URL berikut:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap atur variabel lingkungan DASHSCOPE_API_KEY.');
    process.exit(1);
}

// Inisialisasi klien.
const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

async function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function main() {
    try {
        console.log('=== Memulai pengujian API Batch ===\n');

        // Langkah 1: Unggah file
        console.log('Langkah 1: Mengunggah file JSONL dengan informasi permintaan...');
        const fileStream = fs.createReadStream('test_model.jsonl');
        const fileObject = await client.files.create({
            file: fileStream,
            purpose: 'batch'
        });
        const fileId = fileObject.id;
        console.log(`✓ File diunggah. ID File: ${fileId}\n`);

        // Langkah 2: Buat tugas batch
        console.log('Langkah 2: Membuat tugas batch...');
        const batch = await client.batches.create({
            input_file_id: fileId,
            endpoint: '/v1/chat/ds-test',  // Gunakan /v1/chat/ds-test untuk model uji
            completion_window: '24h'
        });
        const batchId = batch.id;
        console.log(`✓ Tugas batch dibuat. ID Tugas: ${batchId}\n`);

        // Langkah 3: Periksa status tugas secara berkala
        console.log('Langkah 3: Menunggu tugas selesai...');
        let status = batch.status;
        let pollCount = 0;
        let latestBatch = batch;

        while (!['completed', 'failed', 'expired', 'cancelled'].includes(status)) {
            await sleep(10000); // Tunggu 10 detik
            latestBatch = await client.batches.retrieve(batchId);
            status = latestBatch.status;
            pollCount++;
            console.log(`  [${pollCount}] Status tugas: ${status}`);
        }

        console.log(`\n✓ Tugas selesai. Status akhir: ${status}\n`);

        // Langkah 4: Proses hasilnya
        if (status === 'completed') {
            console.log('Langkah 4: Mengunduh file hasil...');

            // Unduh hasil yang berhasil
            const outputFileId = latestBatch.output_file_id;
            if (outputFileId) {
                console.log(`  ID file output: ${outputFileId}`);
                const content = await client.files.content(outputFileId);
                const text = await content.text();
                console.log('\n--- Hasil yang berhasil (500 karakter pertama) ---');
                console.log(text.substring(0, Math.min(500, text.length)));
                console.log('...\n');
            }

            // Unduh file error (jika ada)
            const errorFileId = latestBatch.error_file_id;
            if (errorFileId) {
                console.log(`  ID file error: ${errorFileId}`);
                const errorContent = await client.files.content(errorFileId);
                const errorText = await errorContent.text();
                console.log('\n--- Informasi error ---');
                console.log(errorText);
            }

            console.log('\n=== Pengujian selesai dengan sukses ===');
        } else if (status === 'failed') {
            console.error('\n✗ Tugas batch gagal');
            if (latestBatch.errors) {
                console.error('Informasi error:', latestBatch.errors);
            }
            console.error('\nUntuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code');
        } else {
            console.log(`\nStatus tugas: ${status}`);
        }

    } catch (error) {
        console.error('Terjadi kesalahan:', error.message);
        console.error(error);
    }
}

main();

Java (HTTP)

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;

/**
 * Pengujian API Batch Alibaba Cloud Model Studio - Menggunakan panggilan API HTTP
 *
 * Prasyarat:
 * 1. Pastikan variabel lingkungan DASHSCOPE_API_KEY telah diatur.
 * 2. Siapkan file uji test_model.jsonl di direktori root proyek.
 *
 * Catatan konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 */
public class BatchAPITest {

    // URL dasar untuk wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";

    private static String API_KEY;

    public static void main(String[] args) throws Exception {
        // Dapatkan Kunci API dari variabel lingkungan.
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Harap atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.exit(1);
        }

        System.out.println("=== Memulai pengujian API Batch ===\n");

        try {
            // Langkah 1: Unggah file
            System.out.println("Langkah 1: Mengunggah file JSONL dengan informasi permintaan...");
            String fileId = uploadFile("test_model.jsonl");
            System.out.println("✓ File diunggah. ID File: " + fileId + "\n");

            // Langkah 2: Buat tugas batch
            System.out.println("Langkah 2: Membuat tugas batch...");
            String batchId = createBatch(fileId);
            System.out.println("✓ Tugas batch dibuat. ID Tugas: " + batchId + "\n");

            // Langkah 3: Periksa status tugas secara berkala
            System.out.println("Langkah 3: Menunggu tugas selesai...");
            String status = "";
            int pollCount = 0;

            while (!isTerminalStatus(status)) {
                Thread.sleep(10000); // Tunggu 10 detik
                String batchInfo = getBatch(batchId);
                status = parseStatus(batchInfo);
                pollCount++;
                System.out.println("  [" + pollCount + "] Status tugas: " + status);

                // Langkah 4: Jika selesai, unduh hasilnya
                if ("completed".equals(status)) {
                    System.out.println("\n✓ Tugas selesai!\n");
                    System.out.println("Langkah 4: Mengunduh file hasil...");

                    String outputFileId = parseOutputFileId(batchInfo);
                    if (outputFileId != null && !outputFileId.isEmpty()) {
                        System.out.println("  ID file output: " + outputFileId);
                        String content = getFileContent(outputFileId);
                        System.out.println("\n--- Hasil yang berhasil (500 karakter pertama) ---");
                        System.out.println(content.substring(0, Math.min(500, content.length)));
                        System.out.println("...\n");
                    }

                    String errorFileId = parseErrorFileId(batchInfo);
                    if (errorFileId != null && !errorFileId.isEmpty() && !"null".equals(errorFileId)) {
                        System.out.println("  ID file error: " + errorFileId);
                        String errorContent = getFileContent(errorFileId);
                        System.out.println("\n--- Informasi error ---");
                        System.out.println(errorContent);
                    }

                    System.out.println("\n=== Pengujian selesai dengan sukses ===");
                    break;
                } else if ("failed".equals(status)) {
                    System.err.println("\n✗ Tugas batch gagal");
                    System.err.println("Informasi tugas: " + batchInfo);
                    System.err.println("\nUntuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code");
                    break;
                } else if ("expired".equals(status) || "cancelled".equals(status)) {
                    System.out.println("\nStatus tugas: " + status);
                    break;
                }
            }

        } catch (Exception e) {
            System.err.println("Terjadi kesalahan: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * Unggah file
     */
    private static String uploadFile(String filePath) throws Exception {
        String boundary = "----WebKitFormBoundary" + System.currentTimeMillis();
        URL url = new URL(BASE_URL + "/files");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

        try (DataOutputStream out = new DataOutputStream(conn.getOutputStream())) {
            // Tambahkan field purpose
            out.writeBytes("--" + boundary + "\r\n");
            out.writeBytes("Content-Disposition: form-data; name=\"purpose\"\r\n\r\n");
            out.writeBytes("batch\r\n");

            // Tambahkan file
            out.writeBytes("--" + boundary + "\r\n");
            out.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + filePath + "\"\r\n");
            out.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

            byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
            out.write(fileBytes);
            out.writeBytes("\r\n");
            out.writeBytes("--" + boundary + "--\r\n");
        }

        String response = readResponse(conn);
        return parseField(response, "\"id\":\s*\"([^\"]+)\"");
    }

    /**
     * Buat tugas batch
     */
    private static String createBatch(String fileId) throws Exception {
        String jsonBody = String.format(
            "{\"input_file_id\":\"%s\",\"endpoint\":\"/v1/chat/ds-test\",\"completion_window\":\"24h\"}",
            fileId
        );

        String response = sendRequest("POST", "/batches", jsonBody);
        return parseField(response, "\"id\":\s*\"([^\"]+)\"");
    }

    /**
     * Dapatkan informasi tugas batch
     */
    private static String getBatch(String batchId) throws Exception {
        return sendRequest("GET", "/batches/" + batchId, null);
    }

    /**
     * Dapatkan konten file
     */
    private static String getFileContent(String fileId) throws Exception {
        return sendRequest("GET", "/files/" + fileId + "/content", null);
    }

    /**
     * Kirim permintaan HTTP
     */
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);

        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }

        return readResponse(conn);
    }

    /**
     * Baca respons
     */
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();

        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }

    /**
     * Parsing field JSON (implementasi sederhana)
     */
    private static String parseField(String json, String regex) {
        java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(regex);
        java.util.regex.Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }

    private static String parseStatus(String json) {
        return parseField(json, "\"status\":\s*\"([^\"]+)\"");
    }

    private static String parseOutputFileId(String json) {
        return parseField(json, "\"output_file_id\":\s*\"([^\"]+)\"");
    }

    private static String parseErrorFileId(String json) {
        return parseField(json, "\"error_file_id\":\s*\"([^\"]+)\"");
    }

    /**
     * Periksa apakah statusnya terminal
     */
    private static boolean isTerminalStatus(String status) {
        return "completed".equals(status)
            || "failed".equals(status)
            || "expired".equals(status)
            || "cancelled".equals(status);
    }
}

curl (HTTP)

#!/bin/bash
# Pengujian API Batch Alibaba Cloud Model Studio - Menggunakan curl
#
# Prasyarat:
# 1. Pastikan variabel lingkungan DASHSCOPE_API_KEY telah diatur.
# 2. Siapkan file uji test_model.jsonl di direktori saat ini.
#
# Catatan konfigurasi wilayah:
# - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
# - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1

API_KEY="${DASHSCOPE_API_KEY}"
BASE_URL="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"

# Jika Anda menggunakan wilayah Beijing, ganti BASE_URL dengan:
# BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"

# Periksa Kunci API
if [ -z "$API_KEY" ]; then
    echo "Error: Harap atur variabel lingkungan DASHSCOPE_API_KEY."
    exit 1
fi

echo "=== Memulai pengujian API Batch ==="
echo ""

# Langkah 1: Unggah file
echo "Langkah 1: Mengunggah file JSONL dengan informasi permintaan..."
UPLOAD_RESPONSE=$(curl -s -X POST "${BASE_URL}/files" \
  -H "Authorization: Bearer ${API_KEY}" \
  -F 'file=@test_model.jsonl' \
  -F 'purpose=batch')

FILE_ID=$(echo $UPLOAD_RESPONSE | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "✓ File diunggah. ID File: ${FILE_ID}"
echo ""

# Langkah 2: Buat tugas batch
echo "Langkah 2: Membuat tugas batch..."
BATCH_RESPONSE=$(curl -s -X POST "${BASE_URL}/batches" \
  -H "Authorization: Bearer ${API_KEY}" \
  -H "Content-Type: application/json" \
  -d "{\"input_file_id\":\"${FILE_ID}\",\"endpoint\":\"/v1/chat/ds-test\",\"completion_window\":\"24h\"}")

BATCH_ID=$(echo $BATCH_RESPONSE | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
echo "✓ Tugas batch dibuat. ID Tugas: ${BATCH_ID}"
echo ""

# Langkah 3: Periksa status tugas secara berkala
echo "Langkah 3: Menunggu tugas selesai..."
STATUS=""
POLL_COUNT=0

while [[ "$STATUS" != "completed" && "$STATUS" != "failed" && "$STATUS" != "expired" && "$STATUS" != "cancelled" ]]; do
    sleep 10
    BATCH_INFO=$(curl -s -X GET "${BASE_URL}/batches/${BATCH_ID}" \
      -H "Authorization: Bearer ${API_KEY}")
    STATUS=$(echo $BATCH_INFO | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
    POLL_COUNT=$((POLL_COUNT + 1))
    echo "  [${POLL_COUNT}] Status tugas: ${STATUS}"
done

echo ""
echo "✓ Tugas selesai. Status akhir: ${STATUS}"
echo ""

# Langkah 4: Unduh hasilnya
if [[ "$STATUS" == "completed" ]]; then
    echo "Langkah 4: Mengunduh file hasil..."

    OUTPUT_FILE_ID=$(echo $BATCH_INFO | grep -o '"output_file_id":"[^"]*"' | cut -d'"' -f4)
    if [[ -n "$OUTPUT_FILE_ID" && "$OUTPUT_FILE_ID" != "null" ]]; then
        echo "  ID file output: ${OUTPUT_FILE_ID}"

        RESULT_CONTENT=$(curl -s -X GET "${BASE_URL}/files/${OUTPUT_FILE_ID}/content" \
          -H "Authorization: Bearer ${API_KEY}")

        echo ""
        echo "--- Hasil yang berhasil (500 karakter pertama) ---"
        echo "${RESULT_CONTENT:0:500}"
        echo "..."
        echo ""
    fi

    ERROR_FILE_ID=$(echo $BATCH_INFO | grep -o '"error_file_id":"[^"]*"' | cut -d'"' -f4)
    if [[ -n "$ERROR_FILE_ID" && "$ERROR_FILE_ID" != "null" ]]; then
        echo "  ID file error: ${ERROR_FILE_ID}"

        ERROR_CONTENT=$(curl -s -X GET "${BASE_URL}/files/${ERROR_FILE_ID}/content" \
          -H "Authorization: Bearer ${API_KEY}")

        echo ""
        echo "--- Informasi error ---"
        echo "${ERROR_CONTENT}"
    fi

    echo ""
    echo "=== Pengujian selesai dengan sukses ==="
elif [[ "$STATUS" == "failed" ]]; then
    echo ""
    echo "✗ Tugas batch gagal"
    echo "Informasi tugas: ${BATCH_INFO}"
    echo ""
    echo "Untuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/model-studio/developer-reference/error-code"
else
    echo ""
    echo "Status tugas: ${STATUS}"
fi

Langkah 3: Verifikasi hasil uji

Setelah tugas berhasil selesai, file hasil result.jsonl akan berisi respons tetap {"content":"This is a test result."}:

{"id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","custom_id":"1","response":{"status_code":200,"request_id":"a2b1ae25-21f4-4d9a-8634-99a29926486c","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-bca7295b-67c3-4b1f-8239-d78323bb669f","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}
{"id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","custom_id":"2","response":{"status_code":200,"request_id":"39b74f09-a902-434f-b9ea-2aaaeebc59e0","body":{"created":1743562621,"usage":{"completion_tokens":6,"prompt_tokens":20,"total_tokens":26},"model":"batch-test-model","id":"chatcmpl-1e32a8ba-2b69-4dc4-be42-e2897eac9e84","choices":[{"finish_reason":"stop","index":0,"message":{"content":"This is a test result."}}],"object":"chat.completion"}},"error":null}

Jalankan tugas formal

Persyaratan file input

  • Format: JSONL dengan encoding UTF-8 (satu objek JSON independen per baris)

  • Batas ukuran: Satu file dapat berisi hingga 50.000 permintaan dan tidak boleh lebih besar dari 500 MB.

  • Batas baris: Setiap objek JSON tidak boleh melebihi 6 MB dan tidak boleh melebihi panjang konteks model.

  • Persyaratan konsistensi: Semua permintaan dalam file yang sama harus menggunakan model dan mode pemikiran yang sama (jika berlaku).

  • Pengenal unik: Setiap permintaan harus menyertakan field `custom_id` yang unik dalam file tersebut. Ini digunakan untuk mencocokkan hasil.

Contoh konten file:

{"custom_id":"1","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"Hello!"}]}}
{"custom_id":"2","method":"POST","url":"/v1/chat/completions","body":{"model":"qwen-plus","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is 2+2?"}]}}

Alat pembuatan batch JSONL

Gunakan alat ini untuk menghasilkan file JSONL dengan cepat.

Alat pembuatan batch JSONL
Pilih mode:

1. Modifikasi File Input

  • Anda dapat langsung memodifikasi file test_model.jsonl yang digunakan untuk pengujian. Atur parameter model ke model produksi yang ingin Anda gunakan, dan atur field url.

    Jenis Model

    URL

    Model Generasi Teks/Multimodal

    /v1/chat/completions

    Model Text Embedding

    /v1/embeddings

  • Atau, Anda dapat menggunakan Alat Pembuatan Batch JSONL untuk menghasilkan file baru untuk tugas produksi. Pastikan field model dan url sudah benar.

2. Modifikasi Kode QuickStart

  1. Ubah path file input ke nama file Anda.

  2. Modifikasi nilai parameter endpoint agar sesuai dengan field url dalam file input.

3. Jalankan Kode dan Tunggu Hasil

Setelah tugas berhasil, hasil permintaan yang berhasil disimpan di file lokal result.jsonl. Jika beberapa permintaan gagal, detail error disimpan di file error.jsonl.

  • Hasil yang berhasil (output_file_id): Setiap baris merepresentasikan permintaan yang berhasil dan berisi custom_id dan response.

    {"id":"3a5c39d5-3981-4e4c-97f2-e0e821893f03","custom_id":"req-001","response":{"status_code":200,"request_id":"3a5c39d5-3981-4e4c-97f2-e0e821893f03","body":{"created":1768306034,"usage":{"completion_tokens":654,"prompt_tokens":14,"total_tokens":668},"model":"qwen-plus","id":"chatcmpl-3a5c39d5-3981-4e4c-97f2-e0e821893f03","choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"Hello! West Lake in Hangzhou is a famous scenic area in China, located in the western part of Hangzhou, Zhejiang Province, hence its name 'West Lake'. It is one of China's top ten scenic spots and a World Cultural Heritage site (listed in UNESCO's World Heritage List in 2011), renowned for its beautiful natural scenery and profound cultural heritage.\n\n### I. Natural Landscape\nWest Lake is surrounded by mountains on three sides and borders the city on one side. Its surface area is about 6.39 square kilometers, shaped like a Ruyi scepter, with shimmering blue waters. The lake is divided into multiple water areas by natural or artificial features such as Gushan Mountain, Bai Causeway, Su Causeway, and Yanggong Causeway, forming a pattern of 'one mountain, two pagodas, three islands, and three causeways'.\n\nMajor attractions include the following:\n- **Spring Dawn at Su Causeway**: During the Northern Song Dynasty, the great literati Su Dongpo, while serving as the governor of Hangzhou, oversaw the dredging of West Lake and used the excavated silt to build a causeway, later named 'Su Causeway'. In spring, peach blossoms and willows create a picturesque scene.\n- **Lingering Snow on Broken Bridge**: Located at the eastern end of Bai Causeway, it is the setting for the 'Broken Bridge Reunion' in the Legend of the White Snake. It is especially famous for its silver-clad appearance after a winter snowfall.\n- **Leifeng Pagoda in the Sunset**: Leifeng Pagoda, gleaming golden under the setting sun, was once one of the 'Ten Scenes of West Lake'.\n- **Three Ponds Mirroring the Moon**: Three stone pagodas on Xiaoyingzhou Island in the lake. During the Mid-Autumn Festival, lights can be lit inside the pagodas, creating a beautiful interplay of moonlight, lamplight, and lake reflections.\n- **Autumn Moon Over the Calm Lake**: Located at the western end of Bai Causeway, it is an excellent spot to admire the moon over the lake.\n- **Viewing Fish at Flower Pond**: Known for appreciating flowers and viewing fish, with peonies and koi complementing each other in the garden.\n\n### II. Human History\nWest Lake is not only beautiful but also carries a rich historical and cultural legacy:\n- Since the Tang and Song dynasties, many literati such as Bai Juyi, Su Dongpo, Lin Bu, and Yang Wanli have left poems here.\n- Bai Juyi once oversaw the construction of 'Bai Causeway' and dredged West Lake, benefiting the local people.\n- There are many historical sites around West Lake, such as Yue Fei Temple (commemorating national hero Yue Fei), Lingyin Temple (a thousand-year-old Buddhist temple), Liuhe Pagoda, and Longjing Village (the origin of Longjing tea, one of China's top ten famous teas).\n\n### III. Cultural Symbol\nWest Lake is hailed as a representative of 'heaven on earth' and a model of traditional Chinese landscape aesthetics. It integrates natural beauty with humanistic beauty, embodying the philosophical idea of 'unity of heaven and humanity'. Many poems, paintings, and operas feature West Lake as their theme, making it an important symbol of Chinese culture.\n\n### IV. Travel Tips\n- Best seasons to visit: Spring (March-May) with blooming peach blossoms and green willows, and Autumn (September-November) with clear skies and crisp air.\n- Recommended ways to explore: Walking, cycling (around the lake's greenway), and boating on the lake.\n- Local delicacies: West Lake Fish in Vinegar Gravy, Longjing Shrimp, Dongpo Pork, Pian'er Chuan noodles, etc.\n\nIn summary, Hangzhou West Lake is not only a natural beauty but also a living cultural museum, worth savoring. If you have the chance to visit Hangzhou, do not miss this 'heaven on earth' that is 'always beautiful, whether lightly or heavily adorned'."}}],"object":"chat.completion"}},"error":null}
    {"id":"628312ba-172c-457d-ba7f-3e5462cc6899","custom_id":"req-002","response":{"status_code":200,"request_id":"628312ba-172c-457d-ba7f-3e5462cc6899","body":{"created":1768306035,"usage":{"completion_tokens":25,"prompt_tokens":18,"total_tokens":43},"model":"qwen-plus","id":"chatcmpl-628312ba-172c-457d-ba7f-3e5462cc6899","choices":[{"finish_reason":"stop","index":0,"message":{"role":"assistant","content":"Spring breeze brushes green willows,\nNight rain moistens red flowers.\nBirds chirp amidst the forest,\nMountains and rivers are everywhere the same."}}],"object":"chat.completion"}},"error":null}
  • Detail kegagalan (error_file_id): Berisi informasi baris permintaan dan alasan error untuk setiap permintaan yang gagal. Untuk informasi troubleshooting, lihat Kode Kesalahan.

Prosedur

Alur kerja API Batch terdiri dari empat langkah: mengunggah file, membuat tugas Batch, memeriksa status tugas, dan mengunduh hasil.

1. Unggah File

Sebelum membuat tugas Batch, unggah file JSONL yang memenuhi persyaratan format file input menggunakan antarmuka pengunggahan file untuk mendapatkan file_id.

Saat mengunggah file, atur parameter purpose ke batch.

SDK Python OpenAI

Contoh Permintaan

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

# test.jsonl adalah file contoh lokal. Purpose harus batch.
file_object = client.files.create(file=Path("test.jsonl"), purpose="batch")

print(file_object.model_dump_json())

SDK Node.js OpenAI

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Unggah File
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');
const fs = require('fs');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

const fileStream = fs.createReadStream('test.jsonl');
const fileObject = await client.files.create({
    file: fileStream,
    purpose: 'batch'
});
console.log(fileObject.id);

Java (HTTP)

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Unggah File
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPIUploadFile {
    
    // Konfigurasi wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }
        
String fileId = uploadFile("test.jsonl");
        System.out.println("ID File: " + fileId);
    }
    
    // === Metode utilitas ===
    
    private static String uploadFile(String filePath) throws Exception {
        String boundary = "----WebKitFormBoundary" + System.currentTimeMillis();
        URL url = new URL(BASE_URL + "/files");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

        try (DataOutputStream out = new DataOutputStream(conn.getOutputStream())) {
            // Tambahkan field purpose
            out.writeBytes("--" + boundary + "\r\n");
            out.writeBytes("Content-Disposition: form-data; name=\"purpose\"\r\n\r\n");
            out.writeBytes("batch\r\n");

            // Tambahkan file
            out.writeBytes("--" + boundary + "\r\n");
            out.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + filePath + "\"\r\n");
            out.writeBytes("Content-Type: application/octet-stream\r\n\r\n");

            byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
            out.write(fileBytes);
            out.writeBytes("\r\n");
            out.writeBytes("--" + boundary + "--\r\n");
        }

        String response = readResponse(conn);
        return parseField(response, "\"id\":\\s*\"([^\"]+)\"");
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/files
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"test.jsonl"' \
--form 'purpose="batch"'

Contoh Respons

{
    "id": "file-batch-xxx",
    "bytes": 437,
    "created_at": 1742304153,
    "filename": "test.jsonl",
    "object": "file",
    "purpose": "batch",
    "status": "processed",
    "status_details": null
}

2. Buat Tugas Batch

Gunakan file_id yang dikembalikan oleh antarmuka pengunggahan file untuk membuat pekerjaan Batch.

SDK Python OpenAI

Contoh Permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

batch = client.batches.create(
    input_file_id="file-batch-xxx",  # ID yang dikembalikan dari pengunggahan file.
    endpoint="/v1/chat/completions",  # Untuk model batch-test-model, gunakan /v1/chat/ds-test. Untuk model text embedding, gunakan /v1/embeddings. Untuk model generasi teks/multimodal, gunakan /v1/chat/completions.
    completion_window="24h",
    metadata={'ds_name':"Nama Tugas",'ds_description':'Deskripsi Tugas'} # Metadata, field opsional, digunakan untuk membuat nama dan deskripsi tugas.
)
print(batch)

SDK Node.js OpenAI

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Buat Tugas Batch
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

const batch = await client.batches.create({
    input_file_id: 'file-batch-xxx',
    endpoint: '/v1/chat/completions',
    completion_window: '24h',
    metadata: {'ds_name': 'Nama Tugas', 'ds_description': 'Deskripsi Tugas'}
});
console.log(batch.id);

Java (HTTP)

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Buat Tugas Batch
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPICreateBatch {
    
    // Konfigurasi wilayah Singapura (default)
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }
        
        String jsonBody = "{\"input_file_id\":\"file-batch-xxx\",\"endpoint\":\"/v1/chat/completions\",\"completion_window\":\"24h\",\"metadata\":{\"ds_name\":\"Nama Tugas\",\"ds_description\":\"Deskripsi Tugas\"}}";
String response = sendRequest("POST", "/batches", jsonBody);
        String batchId = parseField(response, "\"id\":\\s*\"([^\"]+)\"");
        System.out.println("ID Tugas Batch: " + batchId);
    }
    
    // === Metode utilitas ===
    
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        
        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }
        
        return readResponse(conn);
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/batches
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-batch-xxx",
    "endpoint": "/v1/chat/completions",
    "completion_window": "24h",
    "metadata":{"ds_name":"Nama Tugas","ds_description":"Deskripsi Tugas"}
  }'

Parameter Input

Field

Tipe

Melewatkan parameter

Metode

Wajib

Deskripsi

input_file_id

String

Body

Ya

Tentukan ID file sebagai file input untuk tugas Batch.

Gunakan ID file yang dikembalikan oleh operasi Siapkan dan unggah file, seperti file-batch-xxx.

endpoint

String

Body

Ya

Path akses. Harus konsisten dengan field url dalam file input.

  • Untuk model uji batch-test-model, gunakan /v1/chat/ds-test

  • Untuk model lainnya, gunakan /v1/chat/completions

completion_window

String

Body

Ya

Waktu tunggu. Waktu tunggu minimum adalah 24h, dan maksimum adalah 336h. Hanya bilangan bulat yang didukung.

Mendukung satuan "h" dan "d", seperti "24h" atau "14d".

metadata

Map

Body

Tidak

Metadata ekstensi tugas. Lampirkan informasi sebagai pasangan kunci-nilai.

metadata.ds_name

String

Body

Tidak

Nama tugas.

Contoh: "ds_name": "Tugas Batch"

Batas: Panjang maksimum adalah 100 karakter.

Jika field ini didefinisikan beberapa kali, nilai terakhir yang diberikan yang berlaku.

metadata.ds_description

String

Body

Tidak

Deskripsi tugas.

Contoh: "ds_description": "Pengujian Tugas Inferensi Batch"

Batas: Panjang maksimum adalah 200 karakter.

Jika field ini didefinisikan beberapa kali, nilai terakhir yang diberikan yang berlaku.

Contoh Respons

{
    "id": "batch_xxx",
    "object": "batch",
    "endpoint": "/v1/chat/completions",
    "errors": null,
    "input_file_id": "file-batch-xxx",
    "completion_window": "24h",
    "status": "validating",
    "output_file_id": null,
    "error_file_id": null,
    "created_at": 1742367779,
    "in_progress_at": null,
    "expires_at": null,
    "finalizing_at": null,
    "completed_at": null,
    "failed_at": null,
    "expired_at": null,
    "cancelling_at": null,
    "cancelled_at": null,
    "request_counts": {
        "total": 0,
        "completed": 0,
        "failed": 0
    },
    "metadata": {
        "ds_name": "Nama Tugas",
        "ds_description": "Deskripsi Tugas"
    }
}

Parameter Respons

Field

Tipe

Deskripsi

id

String

ID tugas Batch yang dibuat.

object

String

Jenis objek, bidang statis batch.

endpoint

String

Path akses.

errors

Map

Pesan error.

input_file_id

String

ID File.

completion_window

String

Waktu tunggu. Waktu tunggu minimum adalah 24h, dan maksimum adalah 336h. Hanya bilangan bulat yang didukung.

Mendukung satuan "h" dan "d", seperti "24h" atau "14d".

status

String

Status tugas, termasuk validating, failed, in_progress, finalizing, completed, expired, cancelling, cancelled.

output_file_id

String

ID file output untuk permintaan yang dieksekusi dengan sukses.

error_file_id

String

ID file output untuk permintaan yang gagal.

created_at

Integer

Stempel waktu UNIX (detik) saat tugas dibuat.

in_progress_at

Integer

Stempel waktu UNIX (detik) saat tugas mulai berjalan.

expires_at

Integer

Stempel waktu (detik) saat tugas mulai timeout.

finalizing_at

Integer

Stempel waktu (detik) saat tugas terakhir dimulai.

completed_at

Integer

Stempel waktu (detik) saat tugas selesai.

failed_at

Integer

Stempel waktu (detik) saat tugas gagal.

expired_at

Integer

Stempel waktu (detik) saat tugas kedaluwarsa.

cancelling_at

Integer

Stempel waktu (detik) saat tugas diatur untuk dibatalkan.

cancelled_at

Integer

Stempel waktu (detik) saat tugas dibatalkan.

request_counts

Map

Jumlah permintaan dalam status berbeda.

metadata

Map

Informasi tambahan, pasangan kunci-nilai.

metadata.ds_name

String

Nama tugas saat ini.

metadata.ds_description

String

Deskripsi tugas saat ini.

3. Kueri dan Kelola Tugas Batch

Setelah membuat tugas, Anda dapat memeriksa statusnya, mencantumkan tugas historis, atau membatalkan tugas yang sedang berjalan menggunakan antarmuka berikut.

Periksa Status Tugas Spesifik

Periksa informasi untuk tugas Batch tertentu dengan memberikan ID tugas Batch-nya. Anda hanya dapat memeriksa tugas Batch yang dibuat dalam 30 hari terakhir.

SDK Python OpenAI

Contoh Permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
batch = client.batches.retrieve("batch_id")  # Ganti batch_id dengan ID Tugas Batch.
print(batch)

SDK Node.js OpenAI

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Kueri Tugas Tunggal
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

const batch = await client.batches.retrieve('batch_id');
console.log(batch.status);

Java (HTTP)

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Kueri Tugas Tunggal
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPIRetrieveBatch {
    
    // Konfigurasi wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }
        
        String batchInfo = sendRequest("GET", "/batches/batch_id", null);
        String status = parseField(batchInfo, "\"status\":\\s*\"([^\"]+)\"");
        System.out.println("Status Tugas: " + status);
    }
    
    // === Metode utilitas ===
    
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        
        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }
        
        return readResponse(conn);
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/batches/batch_id
# === Hapus komentar ini sebelum eksekusi ===
curl --request GET 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches/batch_id' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"

Contoh respons

Setelah kueri berhasil, informasi lengkap tugas Batch dikembalikan. Berikut adalah contoh respons untuk tugas yang telah selesai:

{
  "id": "batch_abc123",
  "object": "batch",
  "endpoint": "/v1/chat/completions",
  "errors": null,
  "input_file_id": "file-abc123",
  "completion_window": "24h",
  "status": "completed",
  "output_file_id": "file-batch_output-xyz789",
  "error_file_id": "file-batch_error-xyz789",
  "created_at": 1711402400,
  "in_progress_at": 1711402450,
  "expires_at": 1711488800,
  "finalizing_at": 1711405000,
  "completed_at": 1711406000,
  "failed_at": null,
  "expired_at": null,
  "cancelling_at": null,
  "cancelled_at": null,
  "request_counts": {
    "total": 100,
    "completed": 95,
    "failed": 5
  },
  "metadata": {
    "customer_id": "user_123456789",
    "batch_description": "Nightly eval job"
  }
}

Objek JSON yang dikembalikan berisi informasi lengkap tugas Batch, termasuk status tugas, ID file hasil, dan statistik permintaan. Lihat tabel di bawah untuk deskripsi detail field.

Field

Tipe

Deskripsi

id

String

ID tugas Batch.

status

String

Status tugas. Nilai yang mungkin meliputi:

  • validating: File input sedang divalidasi.

  • in_progress: Tugas sedang diproses.

  • finalizing: Tugas telah selesai diproses dan sedang menghasilkan file output.

  • completed: Tugas selesai dengan sukses.

  • failed: Tugas gagal karena error kritis.

  • expired: Tugas kedaluwarsa karena tidak selesai dalam completion_window.

  • cancelling: Tugas sedang dibatalkan.

  • cancelled: Tugas telah dibatalkan.

output_file_id

String

ID file hasil yang berhasil, dihasilkan setelah tugas selesai.

error_file_id

String

ID file hasil yang gagal, dihasilkan setelah tugas selesai jika ada permintaan yang gagal.

request_counts

Object

Objek statistik yang berisi jumlah total, berhasil, dan gagal.

Kueri Daftar Tugas

Anda dapat menggunakan metode batches.list() untuk mengambil daftar pekerjaan Batch. Gunakan mekanisme paging untuk mengambil daftar lengkap secara bertahap.

SDK Python OpenAI

Contoh Permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
batches = client.batches.list(after="batch_xxx", limit=2,extra_query={'ds_name':'Nama Tugas','input_file_ids':'file-batch-xxx,file-batch-xxx','status':'completed,expired','create_after':'20250304000000','create_before':'20250306123000'})
print(batches)

SDK Node.js OpenAI

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Kueri Daftar Tugas
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

const batches = await client.batches.list({
    after: 'batch_xxx',
    limit: 2,
    extra_query: {
        'ds_name': 'Nama Tugas',
        'input_file_ids': 'file-batch-xxx,file-batch-xxx',
        'status': 'completed,expired',
        'create_after': '20250304000000',
        'create_before': '20250306123000'
    }
});

for (const batch of batches.data) {
    console.log(batch.id, batch.status);
}

Java (HTTP)

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Kueri Daftar Tugas
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPIListBatches {
    
    // Konfigurasi wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }
        
        String response = sendRequest("GET", "/batches?after=batch_xxx&limit=2&ds_name=Batch&input_file_ids=file-batch-xxx,file-batch-xxx&status=completed,failed&create_after=20250303000000&create_before=20250320000000", null);
// Parsing JSON untuk mendapatkan daftar tugas
        System.out.println(response);
    }
    
    // === Metode utilitas ===
    
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        
        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }
        
        return readResponse(conn);
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dasar dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/batches?xxx同下方内容xxx
# === Hapus komentar ini sebelum eksekusi ===
curl --request GET  'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches?after=batch_xxx&limit=2&ds_name=Batch&input_file_ids=file-batch-xxx,file-batch-xxx&status=completed,failed&create_after=20250303000000&create_before=20250320000000' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"
Ganti batch_id dalam after=batch_id dengan nilai aktual, atur parameter limit ke jumlah tugas yang dikembalikan, tentukan ds_name sebagai fragmen nama tugas, nilai input_file_ids bisa berupa beberapa ID file, tentukan status sebagai beberapa status untuk tugas Batch, dan tentukan nilai create_after dan create_before sebagai titik waktu.

Parameter Input

Field

Tipe

Metode Pengiriman Parameter

Wajib

Deskripsi

after

String

Kueri

Tidak

Kursor pagination yang nilainya adalah ID pekerjaan terakhir pada halaman sebelumnya.

limit

Integer

Kueri

Tidak

Jumlah tugas yang dikembalikan per halaman, berkisar dari 1 hingga 100. Default adalah 20.

ds_name

String

Kueri

Tidak

Pencocokan fuzzy berdasarkan nama tugas.

input_file_ids

String

Kueri

Tidak

Filter berdasarkan ID file, pisahkan beberapa ID dengan koma. Anda dapat menentukan hingga 20 ID.

status

String

Kueri

Tidak

Filter berdasarkan status tugas. Pisahkan beberapa status dengan koma.

create_after

String

Kueri

Tidak

Filter tugas yang dibuat setelah titik waktu ini. Format: yyyyMMddHHmmss.

create_before

String

Kueri

Tidak

Filter tugas yang dibuat sebelum waktu ini. Format: yyyyMMddHHmmss.

Contoh Respons

{
  "object": "list",
  "data": [
    {
      "id": "batch_xxx",
      "object": "batch",
      "endpoint": "/v1/chat/completions",
      "errors": null,
      "input_file_id": "file-batch-xxx",
      "completion_window": "24h",
      "status": "completed",
      "output_file_id": "file-batch_output-xxx",
      "error_file_id": null,
      "created_at": 1722234109,
      "in_progress_at": 1722234109,
      "expires_at": null,
      "finalizing_at": 1722234165,
      "completed_at": 1722234165,
      "failed_at": null,
      "expired_at": null,
      "cancelling_at": null,
      "cancelled_at": null,
      "request_counts": {
        "total": 100,
        "completed": 95,
        "failed": 5
      },
      "metadata": {}
    },
    { ... }
  ],
  "first_id": "batch_xxx",
  "last_id": "batch_xxx",
  "has_more": true
}

Parameter Respons

Field

Tipe

Deskripsi

object

String

Tipe, bidang statis list.

data

Array

Objek tugas Batch. Lihat parameter respons untuk membuat tugas Batch.

first_id

String

ID tugas Batch pertama pada halaman saat ini.

last_id

String

ID tugas Batch terakhir pada halaman saat ini.

has_more

Boolean

Menunjukkan apakah ada halaman lain.

Batalkan Tugas Batch

Anda dapat membatalkan tugas yang sedang berjalan atau dalam antrian. Setelah panggilan berhasil, status tugas berubah menjadi cancelling, lalu akhirnya menjadi cancelled. Bagian tugas yang telah selesai tetap ditagih hingga tugas sepenuhnya dibatalkan.

SDK Python OpenAI

Contoh Permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
batch = client.batches.cancel("batch_id")  # Ganti batch_id dengan ID Tugas Batch.
print(batch)

SDK Node.js OpenAI

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Batalkan Tugas
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

const batch = await client.batches.cancel('batch_id');
console.log(batch.status); // cancelled

Java (HTTP)

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Batalkan Tugas
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPICancelBatch {
    
    // Konfigurasi wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }
        
        String response = sendRequest("POST", "/batches/batch_id/cancel", null);
        System.out.println(response);
    }
    
    // === Metode utilitas ===
    
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        
        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }
        
        return readResponse(conn);
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/batches/batch_id/cancel
# === Hapus komentar ini sebelum eksekusi ===
curl --request POST 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/batches/batch_id/cancel' \
 -H "Authorization: Bearer $DASHSCOPE_API_KEY"
Ganti batch_id dengan nilai aktual.

Contoh Respons

Setelah pembatalan tugas berhasil, informasi lengkap tugas Batch dikembalikan. Berikut adalah contoh respons untuk tugas yang sedang dibatalkan:

{
  "id": "batch_abc123",
  "object": "batch",
  "endpoint": "/v1/chat/completions",
  "errors": null,
  "input_file_id": "file-abc123",
  "completion_window": "24h",
  "status": "cancelling",
  "output_file_id": null,
  "error_file_id": null,
  "created_at": 1711402400,
  "in_progress_at": 1711402450,
  "expires_at": 1711488800,
  "finalizing_at": null,
  "completed_at": null,
  "failed_at": null,
  "expired_at": null,
  "cancelling_at": 1711403000,
  "cancelled_at": null,
  "request_counts": {
    "total": 100,
    "completed": 23,
    "failed": 1
  },
  "metadata": null
}
Setelah membatalkan tugas, status pertama kali berubah menjadi cancelling, menunggu permintaan yang sedang berjalan selesai. Akhirnya menjadi cancelled. Hasil dari permintaan yang telah selesai tetap disimpan di file output.

4. Unduh File Hasil Batch

Setelah tugas selesai, file hasil (output_file_id) dan file error potensial (error_file_id) dihasilkan. Kedua file diambil menggunakan antarmuka pengunduhan file yang sama.

Anda hanya dapat mengunduh file yang file_id-nya diawali dengan file-batch_output.

SDK Python OpenAI

Gunakan metode content untuk mengambil konten file hasil tugas Batch. Gunakan metode write_to_file untuk menyimpannya secara lokal.

Contoh Permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx" menggunakan Kunci API Alibaba Cloud Model Studio Anda. Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
    # Kunci API berbeda untuk wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
content = client.files.content(file_id="file-batch_output-xxx")
# Cetak konten file hasil
print(content.text)
# Simpan file hasil secara lokal
content.write_to_file("result.jsonl")

Contoh Respons

{"id":"c308ef7f-xxx","custom_id":"1","response":{"status_code":200,"request_id":"c308ef7f-0824-9c46-96eb-73566f062426","body":{"created":1742303743,"usage":{"completion_tokens":35,"prompt_tokens":26,"total_tokens":61},"model":"qwen-plus","id":"chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426","choices":[{"finish_reason":"stop","index":0,"message":{"content":"Hello! Of course. Whether you need information queries, study materials, methods to solve problems, or any other help, I am here to support you. Please tell me what kind of help you need?"}}],"object":"chat.completion"}},"error":null}
{"id":"73291560-xxx","custom_id":"2","response":{"status_code":200,"request_id":"73291560-7616-97bf-87f2-7d747bbe84fd","body":{"created":1742303743,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"qwen-plus","id":"chatcmpl-73291560-7616-97bf-87f2-7d747bbe84fd","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}

SDK Node.js OpenAI

Gunakan metode content untuk mengambil konten file hasil tugas Batch.

Contoh Permintaan

/**
 * API Batch Alibaba Cloud Model Studio - Unduh File Hasil
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: apiKey: 'sk-xxx'
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Instal dependensi: npm install openai
 */
const OpenAI = require('openai');
const fs = require('fs');

// Konfigurasi wilayah Singapura (default)
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Atur variabel lingkungan DASHSCOPE_API_KEY.');
    console.error('Atau atur di kode: const apiKey = "sk-xxx";');
    process.exit(1);
}

const client = new OpenAI({
    apiKey: apiKey,
    baseURL: BASE_URL
});

// Unduh file hasil
const content = await client.files.content('file-batch_output-xxx');
const text = await content.text();
console.log(text);

// Simpan ke file lokal
fs.writeFileSync('result.jsonl', text);
console.log('Hasil disimpan ke result.jsonl');

Java (HTTP)

Ambil konten file dengan mengirim permintaan GET ke endpoint /files/{file_id}/content.

Contoh Permintaan

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * API Batch Alibaba Cloud Model Studio - Unduh File Hasil
 * 
 * Jika variabel lingkungan belum dikonfigurasi, Anda dapat hard-code Kunci API: API_KEY = "sk-xxx"
 * Namun, hindari hard-coding Kunci API secara langsung di lingkungan produksi untuk mengurangi risiko kebocoran Kunci API.
 * Kunci API berbeda untuk wilayah Singapura dan Beijing.
 * 
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 * Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
 */
public class BatchAPIDownloadFile {
    
    // Konfigurasi wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika Anda menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
    // private static final String BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
    // Catatan: Saat mengganti wilayah, perbarui Kunci API yang sesuai.
    
    private static String API_KEY;
    
    public static void main(String[] args) throws Exception {
        API_KEY = System.getenv("DASHSCOPE_API_KEY");
        if (API_KEY == null || API_KEY.isEmpty()) {
            System.err.println("Error: Atur variabel lingkungan DASHSCOPE_API_KEY.");
            System.err.println("Atau atur di kode: API_KEY = \"sk-xxx\";");
            System.exit(1);
        }

// Unduh file hasil
String content = sendRequest("GET", "/files/file-batch_output-xxx/content", null);
System.out.println(content);

// Simpan ke file lokal
        Files.write(Paths.get("result.jsonl"), content.getBytes());
        System.out.println("Hasil disimpan ke result.jsonl");
    }
    
    // === Metode utilitas ===
    
    private static String sendRequest(String method, String path, String jsonBody) throws Exception {
        URL url = new URL(BASE_URL + path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);
        conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
        
        if (jsonBody != null) {
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/json");
            try (OutputStream os = conn.getOutputStream()) {
                os.write(jsonBody.getBytes("UTF-8"));
            }
        }
        
        return readResponse(conn);
    }
    
    private static String readResponse(HttpURLConnection conn) throws Exception {
        int responseCode = conn.getResponseCode();
        InputStream is = (responseCode < 400) ? conn.getInputStream() : conn.getErrorStream();
        try (Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A")) {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
    
    private static String parseField(String json, String regex) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(json);
        return matcher.find() ? matcher.group(1) : null;
    }
}

curl (HTTP)

Unduh file hasil tugas Batch dengan menentukan file_id dalam URL menggunakan permintaan GET.

Contoh Permintaan

# ======= Catatan Penting =======
# Kunci API berbeda untuk wilayah Singapura dan Beijing.
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/files/file-batch_output-xxx/content
# === Hapus komentar ini sebelum eksekusi ===
curl -X GET https://dashscope-intl.aliyuncs.com/compatible-mode/v1/files/file-batch_output-xxx/content \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" > result.jsonl

Contoh Respons

Hasil respons tunggal:

{
    "id": "c308ef7f-xxx",
    "custom_id": "1",
    "response": {
        "status_code": 200,
        "request_id": "c308ef7f-0824-9c46-96eb-73566f062426",
        "body": {
            "created": 1742303743,
            "usage": {
                "completion_tokens": 35,
                "prompt_tokens": 26,
                "total_tokens": 61
            },
            "model": "qwen-plus",
            "id": "chatcmpl-c308ef7f-0824-9c46-96eb-73566f062426",
            "choices": [
                {
                    "finish_reason": "stop",
                    "index": 0,
                    "message": {
                        "content": "Hello! Of course. Whether you need information queries, study materials, methods to solve problems, or any other help, I am here to support you. Please tell me what kind of help you need?"
                    }
                }
            ],
            "object": "chat.completion"
        }
    },
    "error": null
}

Parameter Respons

Field

Tipe

Deskripsi

id

String

ID Permintaan.

custom_id

String

ID yang ditentukan pengguna.

response

Object

Hasil permintaan.

status_code

Integer

Kode status. 200 menunjukkan permintaan berhasil.

request_id

String

ID unik yang dihasilkan server untuk permintaan ini.

completion_tokens

Integer

Jumlah token yang dikonsumsi oleh respons yang dihasilkan model (completion).

prompt_tokens

Integer

Jumlah token yang dikonsumsi oleh konten input (prompt) yang dikirim ke model.

total_tokens

Integer

Jumlah total token yang dikonsumsi oleh panggilan ini.

model

String

Nama model yang digunakan untuk panggilan ini.

error

Object

Objek pesan error. Jika panggilan API berhasil, nilai ini adalah null. Jika terjadi error, ini berisi kode error dan pesan error detail.

error.code

String

Informasi baris error dan penyebab error. Anda dapat merujuk ke kode kesalahan untuk troubleshooting.

error.message

String

Pesan error.

Fitur lanjutan

Konfigurasi notifikasi penyelesaian tugas

Untuk pekerjaan berdurasi panjang, polling bisa menjadi boros sumber daya. Kami menyarankan Anda menggunakan notifikasi asinkron sebagai gantinya. Dengan notifikasi asinkron, sistem secara otomatis memberi tahu Anda ketika pekerjaan selesai.

  • Callback: Tentukan URL yang dapat diakses publik saat Anda membuat pekerjaan.

  • Antrian pesan EventBridge: Metode ini terintegrasi dengan ekosistem Alibaba Cloud dan tidak memerlukan alamat IP publik.

Metode 1: Callback

Saat membuat pekerjaan, atur URL yang dapat diakses publik dalam parameter metadata. Setelah pekerjaan selesai, sistem mengirim permintaan POST ke URL tersebut. Permintaan tersebut mencakup status pekerjaan:

SDK Python OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengatur variabel lingkungan, ganti baris berikut dengan: api_key="sk-xxx". Namun jangan hard code Kunci API Anda dalam kode produksi. Hard coding meningkatkan risiko eksposur.
    # Kunci API berbeda antara wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"), 
    # URL dasar untuk wilayah Beijing. Untuk model wilayah Singapura, gunakan: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    # Catatan: Ubah Kunci API Anda saat Anda mengganti wilayah.
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

batch = client.batches.create(
    input_file_id="file-batch-xxx",  # ID yang dikembalikan setelah mengunggah file
    endpoint="/v1/chat/completions",  # Untuk model text embedding, gunakan "/v1/embeddings". Untuk model uji seperti batch-test-model, gunakan "/v1/chat/ds-test". Untuk model lainnya, gunakan "/v1/chat/completions".
    completion_window="24h", 
    metadata={
            "ds_batch_finish_callback": "https://xxx/xxx"
          }
)
print(batch)

curl (HTTP)

Contoh permintaan

curl -X POST --location "https://dashscope.aliyuncs.com/compatible-mode/v1/batches" \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
          "input_file_id": "file-batch-xxxxx",
          "endpoint": "/v1/chat/completions",
          "completion_window": "24h",
          "metadata": {
            "ds_batch_finish_callback": "https://xxx/xxx"
          }
        }'

Metode 2: Antrian pesan EventBridge

Metode ini tidak memerlukan alamat IP publik. Sangat ideal untuk skenario kompleks yang memerlukan integrasi dengan layanan Alibaba Cloud lainnya, seperti Function Compute atau RocketMQ.

Saat pekerjaan Batch selesai, sistem mengirim event ke Alibaba Cloud EventBridge. Anda dapat mengonfigurasi aturan EventBridge untuk mendengarkan event ini dan mengarahkannya ke target.

  • Sumber event (Source): acs.dashscope

  • Jenis event (Type): dashscope:System:BatchTaskFinish

Untuk informasi lebih lanjut, lihat Arahkan event ke Antrian Pesan untuk Apache RocketMQ.

Mulai Produksi

  • Manajemen File

    • Secara berkala panggil API Penghapusan File OpenAI untuk menghapus file yang tidak perlu dan menghindari mencapai batas penyimpanan file (10.000 file atau 100 GB).

    • Untuk file besar, simpan di Alibaba Cloud OSS.

  • Pemantauan Tugas

    • Lebih disukai pesan notifikasi asinkron Callback atau EventBridge.

    • Gunakan interval polling lebih dari 1 menit dan terapkan kebijakan backoff eksponensial.

  • Penanganan Error

    • Implementasikan mekanisme penanganan exception komprehensif yang mencakup error jaringan, error API, dan exception lainnya.

    • Unduh dan analisis detail error yang terkait dengan error_file_id.

    • Untuk solusi kode error umum, lihat Pesan Error.

  • Optimasi Biaya

    • Gabungkan tugas kecil menjadi satu batch.

    • Atur parameter completion_window untuk meningkatkan fleksibilitas penjadwalan.

Utilitas

CSV ke JSONL

Jika data mentah Anda disimpan dalam file CSV—di mana kolom pertama berisi ID dan kolom kedua berisi konten—gunakan skrip berikut untuk menghasilkan file JSONL yang diperlukan untuk tugas Batch.

Modifikasi kode sesuai kebutuhan untuk menyesuaikan path file atau parameter lainnya.
import csv
import json
def messages_builder_example(content):
    messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": content}]
    return messages

with open("input_demo.csv", "r") as fin:
    with open("input_demo.jsonl", 'w', encoding='utf-8') as fout:
        csvreader = csv.reader(fin)
        for row in csvreader:
            body = {"model": "qwen-turbo", "messages": messages_builder_example(row[1])}
            # Saat memanggil model text embedding, nilai URL harus "/v1/embeddings". Untuk model lainnya, gunakan /v1/chat/completions.
            request = {"custom_id": row[0], "method": "POST", "url": "/v1/chat/completions", "body": body}
            fout.write(json.dumps(request, separators=(',', ':'), ensure_ascii=False) + "\n")

Hasil JSONL ke CSV

Gunakan skrip berikut untuk mengurai file result.jsonl menjadi file result.csv yang ramah Excel.

Modifikasi kode sesuai kebutuhan untuk menyesuaikan path file atau parameter lainnya.
import json
import csv
columns = ["custom_id",
           "model",
           "request_id",
           "status_code",
           "error_code",
           "error_message",
           "created",
           "content",
           "usage"]

def dict_get_string(dict_obj, path):
    obj = dict_obj
    try:
        for element in path:
            obj = obj[element]
        return obj
    except:
        return None

with open("result.jsonl", "r") as fin:
    with open("result.csv", 'w', encoding='utf-8') as fout:
        rows = [columns]
        for line in fin:
            request_result = json.loads(line)
            row = [dict_get_string(request_result, ["custom_id"]),
                   dict_get_string(request_result, ["response", "body", "model"]),
                   dict_get_string(request_result, ["response", "request_id"]),
                   dict_get_string(request_result, ["response", "status_code"]),
                   dict_get_string(request_result, ["error", "error_code"]),
                   dict_get_string(request_result, ["error", "error_message"]),
                   dict_get_string(request_result, ["response", "body", "created"]),
                   dict_get_string(request_result, ["response", "body", "choices", 0, "message", "content"]),
                   dict_get_string(request_result, ["response", "body", "usage"])]
            rows.append(row)
        writer = csv.writer(fout)
        writer.writerows(rows)

Mengatasi Karakter Rusak di Excel

  • Gunakan editor teks seperti Sublime Text untuk mengonversi encoding file CSV ke GBK, lalu buka di Excel.

  • Atau, buat file Excel baru dan tentukan encoding UTF-8 saat mengimpor data.

Batas Laju Antarmuka

Antarmuka

Batas Laju (tingkat Akun Alibaba Cloud)

Buat tugas

1000 permintaan/menit, maksimum 1000 tugas konkuren

Kueri tugas

1000 permintaan/menit

Kueri daftar tugas

100 permintaan/menit

Batalkan tugas

1000 permintaan/menit

Informasi Penagihan

  • Harga satuan: Token input dan output untuk semua permintaan yang berhasil dikenakan biaya sebesar 50% dari harga inferensi real-time untuk model yang sesuai. Untuk informasi lebih lanjut, lihat Daftar model.

  • Lingkup penagihan:

    • Hanya permintaan yang berhasil dieksekusi dalam pekerjaan yang ditagih.

    • Permintaan yang gagal karena error parsing file, kegagalan eksekusi pekerjaan, atau error tingkat baris tidak dikenakan biaya.

    • Untuk pekerjaan yang dibatalkan, permintaan yang berhasil diselesaikan sebelum pembatalan tetap ditagih secara normal.

Catatan
  • Inferensi batch adalah item penagihan terpisah. Tidak memenuhi syarat untuk diskon, seperti langganan (Savings Plan) atau kuota gratis untuk pengguna baru. Juga tidak mendukung fitur seperti cache konteks.

  • Beberapa model, seperti qwen3.5-plus dan qwen3.5-flash, memiliki mode pemikiran yang diaktifkan secara default. Mode ini menghasilkan token pemikiran tambahan, yang ditagih dengan harga token output dan meningkatkan biaya. Untuk mengontrol biaya, atur parameter `enable_thinking` berdasarkan kompleksitas tugas. Untuk informasi lebih lanjut, lihat Pemikiran mendalam.

Kode kesalahan

Jika panggilan gagal dan mengembalikan pesan error, lihat Pesan error untuk menyelesaikan masalah.

FAQ

  1. Kapan saya harus menggunakan Batch Chat atau Batch File?

    Gunakan Batch File untuk memproses satu file besar yang berisi banyak permintaan, terutama ketika Anda dapat mengambil file hasil secara asinkron. Gunakan Batch Chat ketika logika aplikasi Anda memerlukan pengiriman volume tinggi permintaan percakapan terpisah secara konkuren melalui panggilan API sinkron.

  2. Bagaimana penagihan panggilan Batch File? Apakah saya perlu membeli paket terpisah?

    Batch adalah metode pemanggilan yang menggunakan model bayar sesuai penggunaan. Anda ditagih berdasarkan penggunaan token dari permintaan yang berhasil dalam pekerjaan Anda. Tidak diperlukan pembelian paket terpisah.

  3. Apakah pekerjaan Batch File yang dikirim dieksekusi sesuai urutan pengiriman?

    Tidak. Backend menggunakan mekanisme penjadwalan dinamis. Sistem menjadwalkan eksekusi pekerjaan berdasarkan beban sumber daya komputasi secara keseluruhan saat ini, sehingga urutan eksekusi tidak dijamin. Ketika sumber daya terbatas, startup dan eksekusi pekerjaan mungkin tertunda.

  4. Berapa lama waktu yang dibutuhkan pekerjaan Batch File yang dikirim untuk selesai?

    Waktu eksekusi tergantung pada alokasi sumber daya sistem dan ukuran pekerjaan Anda. Jika pekerjaan tidak selesai dalam completion_window yang Anda atur, statusnya berubah menjadi expired. Pada titik itu, permintaan yang belum diproses tidak dieksekusi dan tidak dikenakan biaya.

    Rekomendasi: Untuk skenario dengan persyaratan real-time ketat untuk inferensi model, gunakan panggilan real-time. Untuk skenario yang memproses data skala besar dan dapat mentolerir beberapa latensi, gunakan panggilan Batch.