全部产品
Search
文档中心

Alibaba Cloud Model Studio:Kompatibel dengan OpenAI - Batch

更新时间:Jan 31, 2026

Alibaba Cloud Model Studio menyediakan API Batch yang kompatibel dengan OpenAI, memungkinkan Anda mengirimkan file batch untuk eksekusi asinkron. Layanan ini memproses data skala besar secara offline selama jam sepi dan mengembalikan hasil setelah tugas selesai atau waktu tunggu maksimum tercapai, dengan biaya hanya 50% dari panggilan real-time.

Untuk operasi konsol, lihat Pemrosesan batch.

Alur kerja

image

Prasyarat

Gunakan SDK OpenAI (Python, Node.js) atau HTTP API.

Cakupan

Tiongkok Daratan

Dalam mode penyebaran Tiongkok Daratan, titik akhir dan penyimpanan data berlokasi di wilayah Beijing, sedangkan sumber daya komputasi untuk inferensi model dibatasi hanya di Tiongkok Daratan.

Model yang didukung:

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

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

  • Model penyematan teks: text-embedding-v4.

Daftar nama model yang didukung

Internasional

Dalam mode penyebaran internasional, titik akhir dan penyimpanan data berlokasi di wilayah Singapura. Sumber daya komputasi untuk inferensi model dialokasikan secara dinamis di seluruh dunia, tidak termasuk Tiongkok Daratan.

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

Mulai

Sebelum memproses tugas formal, gunakan model uji batch-test-model untuk pengujian end-to-end. Model uji melewati proses inferensi dan mengembalikan respons sukses tetap untuk memverifikasi bahwa rantai panggilan API dan format data sudah benar.

Catatan

Batasan batch-test-model:

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

  • Batas konkurensi: Maksimal 2 tugas paralel.

  • 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 salah satu contoh kode berikut berdasarkan bahasa pemrograman Anda. Simpan di direktori yang sama dengan file input Anda dan jalankan. Kode ini menyelesaikan seluruh alur kerja, termasuk unggah file, pembuatan tugas, polling status, dan unduh hasil.

Untuk menyesuaikan path file atau parameter lainnya, ubah 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 Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx" menggunakan Kunci API Model Studio Anda.
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"  # base_url untuk layanan 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 berhasil diunggah. ID File: {file_object.id}\n")
    return file_object.id

def create_batch_job(input_file_id):
    print(f"Membuat tugas batch berdasarkan ID file...")
    # Catatan: Nilai parameter endpoint di sini harus sesuai dengan field url di file input.
    # Untuk model uji (batch-test-model), gunakan /v1/chat/ds-test.
    # Untuk model penyematan teks, gunakan /v1/embeddings.
    # Untuk model lainnya, gunakan /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 permintaan yang berhasil dari tugas batch...")
    content = client.files.content(output_file_id)
    # Cetak sebagian konten untuk pengujian
    print(f"Mencetak 1.000 karakter pertama dari hasil permintaan yang berhasil: {content.text[:1000]}...\n")
    # Simpan file hasil secara lokal
    content.write_to_file(output_file_path)
    print(f"Hasil output lengkap telah disimpan ke file output lokal result.jsonl\n")

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

def main():
    # Path file
    input_file_path = "test_model.jsonl"  # Anda dapat mengganti ini dengan path file input Anda
    output_file_path = "result.jsonl"  # Anda dapat mengganti ini dengan path file output Anda
    error_file_path = "error.jsonl"  # Anda dapat mengganti ini 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 lalu periksa status lagi
        # Jika tugas gagal, cetak pesan error dan keluar
        if status == "failed":
            batch = client.batches.retrieve(batch_id)
            print(f"Tugas batch gagal. Pesan error: {batch.errors}\n")
            print(f"Untuk informasi lebih lanjut, lihat Kode error: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")
            return
        # Langkah 4: Unduh hasil: Jika ID file output tidak kosong, cetak 1.000 karakter pertama dari hasil permintaan yang berhasil dan unduh hasil lengkap ke file output lokal.
        # Jika ID file error tidak kosong, cetak 1.000 karakter pertama dari informasi kegagalan permintaan 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 Kode error: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        print(f"Untuk informasi lebih lanjut, lihat Kode error: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code")

if __name__ == "__main__":
    main()

SDK Node.js OpenAI

/**
 * Pengujian API Batch 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');

// Base URL untuk wilayah Singapura
const BASE_URL = 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1';
// Jika 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('=== Mulai Pengujian API Batch ===\n');

        // Langkah 1: Unggah file
        console.log('Langkah 1: Mengunggah file JSONL yang berisi 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 berhasil 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 berhasil dibuat, ID Tugas: ${batchId}\n`);

        // Langkah 3: Polling status tugas
        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 hasil
        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('Pesan error:', latestBatch.errors);
            }
            console.error('\nLihat dokumentasi kode error: https://www.alibabacloud.com/help/zh/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 Model Studio - Menggunakan HTTP API
 *
 * Prasyarat:
 * 1. Pastikan variabel lingkungan DASHSCOPE_API_KEY telah diatur
 * 2. Siapkan file uji test_model.jsonl (di direktori root proyek)
 *
 * Konfigurasi wilayah:
 * - Wilayah Beijing: https://dashscope.aliyuncs.com/compatible-mode/v1
 * - Wilayah Singapura: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
 */
public class BatchAPITest {

    // Base URL untuk wilayah Singapura
    private static final String BASE_URL = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
    // Jika 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("=== Mulai Pengujian API Batch ===\n");

        try {
            // Langkah 1: Unggah file
            System.out.println("Langkah 1: Mengunggah file JSONL yang berisi informasi permintaan...");
            String fileId = uploadFile("test_model.jsonl");
            System.out.println("✓ File berhasil 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 berhasil dibuat, ID Tugas: " + batchId + "\n");

            // Langkah 3: Polling status tugas
            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 hasil
                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("Info tugas: " + batchInfo);
                    System.err.println("\nLihat dokumentasi kode error: https://www.alibabacloud.com/help/zh/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 info 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 status merupakan status 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 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)
#
# 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 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 "=== Mulai Pengujian API Batch ==="
echo ""

# Langkah 1: Unggah file
echo "Langkah 1: Mengunggah file JSONL yang berisi 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 berhasil 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 berhasil dibuat, ID Tugas: ${BATCH_ID}"
echo ""

# Langkah 3: Polling status tugas
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 hasil
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 "Info tugas: ${BATCH_INFO}"
    echo ""
    echo "Lihat dokumentasi kode error: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code"
else
    echo ""
    echo "Status tugas: ${STATUS}"
fi

Langkah 3: Verifikasi hasil uji

Setelah tugas berhasil, 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. Setiap baris harus berupa objek JSON terpisah.

  • Batas ukuran: Maksimal 50.000 permintaan per file dan tidak lebih dari 500 MB.

  • Batas baris: Setiap objek JSON maksimal 6 MB dan berada dalam jendela konteks model.

  • Konsistensi: Semua permintaan dalam file yang sama harus menggunakan model yang sama dan, jika berlaku, mode pemikiran yang sama.

  • 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 membuat file JSONL dengan cepat.

Alat pembuatan batch JSONL
Pilih mode:

1. Ubah file input

  • Ubah langsung test_model.jsonl. Atur parameter model ke model aktual yang akan digunakan dan konfigurasikan field url:

    Jenis

    url

    Generasi teks/multimodal

    /v1/chat/completions

    Penyematan teks

    /v1/embeddings

  • Atau, gunakan "Alat pembuatan batch JSONL" di atas untuk membuat file baru. Pastikan field model dan url sudah benar.

2. Ubah kode di Getting started

  1. Ubah path file input ke nama file Anda.

  2. Ubah nilai parameter endpoint agar sesuai dengan field url di file input Anda.

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 sesuai dengan permintaan asli 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! Hangzhou West Lake is a famous scenic spot in China, located in the western part of Hangzhou City, Zhejiang Province, hence the name \"West Lake\". It is one of China's top ten scenic spots and a World Cultural Heritage site (listed by UNESCO in 2011). It is renowned worldwide 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, covering an area of approximately 6.39 square kilometers, shaped like a ruyi scepter with rippling blue waters. The lake is naturally or artificially divided into multiple water areas by Solitary Hill, Bai Causeway, Su Causeway, and Yanggong Causeway, forming a layout of \"one mountain, two pagodas, three islands, and three causeways\".\n\nMain attractions include the following:\n- **Spring Dawn at Su Causeway**: During the Northern Song Dynasty, the great literary figure Su Dongpo, while serving as the prefect of Hangzhou, led 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, this is where the reunion scene from the Legend of the White Snake took place. After snowfall in winter, it is particularly famous for its silver-white appearance.\n- **Leifeng Pagoda at Sunset**: Leifeng Pagoda glows golden under the setting sun and was once one of the \"Ten Scenes of West Lake\".\n- **Three Pools Mirroring the Moon**: On Xiaoyingzhou Island in the lake, there are three stone pagodas. During the Mid-Autumn Festival, lanterns can be lit inside the pagodas, creating a harmonious interplay of moonlight, lamplight, and lake reflections.\n- **Autumn Moon over Calm Lake**: Located at the western end of Bai Causeway, it is an excellent spot for viewing the moon over the lake.\n- **Viewing Fish at Flower Harbor**: Known for viewing flowers and fish, with peonies and koi complementing each other beautifully in the garden.\n\n### II. Cultural History\nWest Lake not only boasts beautiful scenery but also carries rich historical and cultural significance:\n- Since the Tang and Song dynasties, numerous literati such as Bai Juyi, Su Dongpo, Lin Bu, and Yang Wanli have left poems here.\n- Bai Juyi oversaw the construction of \"Bai Causeway\" and dredged West Lake, benefiting the local people.\n- Around West Lake are many historical sites, including Yuewang Temple (commemorating national hero Yue Fei), Lingyin Temple (a millennium-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 Symbolism\nWest Lake is regarded as a representative of \"paradise on earth\" and a model of traditional Chinese landscape aesthetics. It embodies the philosophical concept of \"harmony between heaven and humanity\" by integrating natural beauty with cultural depth. Many poems, paintings, and operas feature West Lake, making it an important symbol of Chinese culture.\n\n### IV. Travel Recommendations\n- Best visiting seasons: Spring (March-May) for peach blossoms and willows, Autumn (September-November) for clear skies and cool weather.\n- Recommended ways: Walking, cycling (along the lakeside greenway), or boating on the lake.\n- Local cuisine: West Lake vinegar fish, Longjing shrimp, Dongpo pork, pian'erchuan noodles.\n\nIn summary, Hangzhou West Lake is not just a natural wonder but also a living cultural museum worth exploring in detail. If you ever visit Hangzhou, don't miss this earthly paradise that is \"equally charming in light or heavy makeup\"."}}],"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":"The spring breeze brushes green willows,\nNight rain nourishes red flowers.\nBird songs fill the forest,\nMountains and rivers share the same beauty."}}],"object":"chat.completion"}},"error":null}
  • Detail kegagalan (error_file_id): Berisi informasi tentang baris permintaan yang gagal dan alasan error yang sesuai. Untuk troubleshooting, lihat Kode error.

Prosedur detail

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

1. Unggah file

Unggah file JSONL Anda yang memenuhi persyaratan format file input menggunakan API unggah file untuk mendapatkan file_id.

Saat mengunggah file, parameter purpose harus diatur ke batch.

SDK Python OpenAI

Contoh permintaan

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga Kunci API yang sesuai.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

# test.jsonl adalah file sampel 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 Model Studio - Unggah file
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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 Model Studio - Unggah file
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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

# ======= Penting =======
# Kunci API berbeda antara 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

Buat tugas batch menggunakan ID file yang dikembalikan dari langkah unggah file.

SDK Python OpenAI

Contoh permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga 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 setelah mengunggah file
    endpoint="/v1/chat/completions",  # Untuk model uji batch-test-model, gunakan /v1/chat/ds-test. Untuk model penyematan teks, gunakan /v1/embeddings. Untuk model generasi teks/multimodal, gunakan /v1/chat/completions.
    completion_window="24h",
    metadata={'ds_name':"Nama tugas",'ds_description':'Deskripsi tugas'} # Field metadata opsional untuk membuat nama dan deskripsi tugas
)
print(batch)

SDK Node.js OpenAI

Contoh permintaan

/**
 * API Batch Model Studio - Buat tugas batch
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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 Model Studio - Buat tugas batch
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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

# ======= Penting =======
# Kunci API berbeda antara 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

Lokasi

Wajib

Deskripsi

input_file_id

String

Body

Ya

Menentukan ID file dari file input.

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

endpoint

String

Body

Ya

Path akses. Ini harus sesuai dengan field url di file input.

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

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

completion_window

String

Body

Ya

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

Unit yang didukung adalah "h" dan "d", seperti "24h" atau "14d".

metadata

Map

Body

Tidak

Metadata tambahan untuk tugas, dilampirkan sebagai pasangan kunci-nilai.

metadata.ds_name

String

Body

Tidak

Nama tugas.

Contoh: "ds_name": "Tugas batch"

Batas: Panjang tidak boleh melebihi 100 karakter.

Jika field ini didefinisikan beberapa kali, nilai terakhir yang dilewatkan yang digunakan.

metadata.ds_description

String

Body

Tidak

Deskripsi tugas.

Contoh: "ds_description": "Pengujian tugas inferensi batch"

Batas: Panjang tidak boleh melebihi 200 karakter.

Jika field ini didefinisikan beberapa kali, nilai terakhir yang dilewatkan yang digunakan.

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 untuk pembuatan ini.

object

String

Tipe objek, nilai tetap 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, maksimum 336h. Hanya bilangan bulat yang didukung.

Unit yang didukung adalah "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 berhasil.

error_file_id

String

ID file output untuk permintaan yang gagal.

created_at

Integer

Timestamp Unix (detik) saat tugas dibuat.

in_progress_at

Integer

Timestamp Unix (detik) saat tugas mulai berjalan.

expires_at

Integer

Timestamp (detik) saat tugas mulai timeout.

finalizing_at

Integer

Timestamp (detik) saat tugas terakhir dimulai.

completed_at

Integer

Timestamp (detik) saat tugas selesai.

failed_at

Integer

Timestamp (detik) saat tugas gagal.

expired_at

Integer

Timestamp (detik) saat tugas kedaluwarsa.

cancelling_at

Integer

Timestamp (detik) saat tugas diatur ke cancelling.

cancelled_at

Integer

Timestamp (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 untuk tugas saat ini.

metadata.ds_description

String

Deskripsi tugas untuk tugas saat ini.

3. Kueri dan kelola tugas batch

Setelah membuat tugas, gunakan API berikut untuk memeriksa statusnya, mencantumkan tugas historis, atau membatalkan tugas yang sedang berjalan.

Periksa status tugas tertentu

Periksa tugas batch tertentu berdasarkan ID tugas batch-nya. Saat ini, 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 Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga 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 Model Studio - Kueri tugas tunggal
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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 Model Studio - Kueri tugas tunggal
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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

# ======= Penting =======
# Kunci API berbeda antara 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

Kueri yang berhasil mengembalikan informasi detail tentang tugas batch. Berikut adalah contoh respons untuk tugas dengan status completed:

{
  "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 tentang tugas batch, seperti status tugas, ID file hasil, dan statistik permintaan. Untuk deskripsi field detail, lihat tabel di bawah.

Field

Type

Deskripsi

id

String

ID tugas batch.

status

String

Status tugas. Nilai yang mungkin meliputi:

  • validating: Memvalidasi file input.

  • in_progress: Tugas sedang diproses.

  • finalizing: Pemrosesan tugas selesai, menghasilkan file output.

  • completed: Tugas selesai dengan sukses.

  • failed: Tugas gagal karena error serius.

  • expired: Tugas kedaluwarsa karena tidak dapat selesai dalam completion_window.

  • cancelling: Membatalkan tugas.

  • cancelled: Tugas telah dibatalkan.

output_file_id

String

ID file hasil sukses, dihasilkan setelah tugas selesai.

error_file_id

String

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

request_counts

Object

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

Kueri daftar tugas

Gunakan metode batches.list() untuk mengkueri daftar tugas batch. Gunakan pagination untuk mengambil daftar tugas lengkap.

SDK Python OpenAI

Contoh permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga 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 Model Studio - Kueri daftar tugas
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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 Model Studio - Kueri daftar tugas
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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

# ======= Penting =======
# Kunci API berbeda antara 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?xxx sama seperti di bawah 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 di after=batch_id dengan nilai aktual. Atur parameter limit ke jumlah tugas yang akan dikembalikan. Masukkan nama tugas parsial untuk ds_name. Masukkan satu atau beberapa ID file untuk input_file_ids. Masukkan satu atau beberapa status tugas batch untuk status. Masukkan titik waktu untuk create_after dan create_before.

Parameter input

Field

Tipe

Lokasi

Wajib

Deskripsi

after

String

Kueri

Tidak

Kursor untuk pagination. Nilai adalah ID tugas terakhir di halaman sebelumnya.

limit

Integer

Kueri

Tidak

Jumlah tugas yang dikembalikan per halaman, rentang [1, 100], default 20.

ds_name

String

Kueri

Tidak

Pencocokan fuzzy berdasarkan nama tugas.

input_file_ids

String

Kueri

Tidak

Filter berdasarkan ID file. Beberapa ID dipisahkan koma, maksimal 20.

status

String

Kueri

Tidak

Filter berdasarkan status tugas. Beberapa status dipisahkan 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 titik 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, nilai tetap list.

data

Array

Objek tugas batch, lihat parameter respons untuk membuat tugas batch.

first_id

String

ID tugas batch pertama di halaman saat ini.

last_id

String

ID tugas batch terakhir di halaman saat ini.

has_more

Boolean

Menunjukkan apakah ada halaman berikutnya.

Batalkan tugas batch

Batalkan tugas yang sedang berjalan atau dalam antrian. Setelah panggilan berhasil, status tugas berubah menjadi cancelling lalu cancelled. Anda tetap dikenakan biaya untuk bagian tugas yang telah selesai sebelum sepenuhnya dibatalkan.

SDK Python OpenAI

Contoh permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga 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 Model Studio - Batalkan tugas
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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 Model Studio - Batalkan tugas
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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

# ======= Penting =======
# Kunci API berbeda antara 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 Anda berhasil membatalkan tugas, API mengembalikan informasi detail tentang tugas batch. Berikut adalah contoh respons untuk tugas dengan status cancelling:

{
  "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 Anda membatalkan tugas, status pertama kali berubah menjadi cancelling sementara sistem menunggu permintaan yang sedang dieksekusi selesai. Status akhirnya berubah 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 (error_file_id) mungkin dihasilkan. Ambil kedua jenis file menggunakan API unduh file yang sama.

Hanya file yang file_id-nya dimulai dengan file-batch_output yang dapat diunduh.

SDK Python OpenAI

Gunakan metode content untuk mengambil konten file hasil tugas batch dan gunakan metode write_to_file untuk menyimpan konten ke file lokal.

Contoh permintaan

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara 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 juga 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, learning materials, problem-solving methods, or any other help, I am here to support you. Please tell me what you need help with."}}],"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 Model Studio - Unduh file hasil
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: apiKey: 'sk-xxx'
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 menggunakan wilayah Beijing, ganti BASE_URL di atas dengan:
// const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
// Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.

const apiKey = process.env.DASHSCOPE_API_KEY;
if (!apiKey) {
    console.error('Error: Harap 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)

Gunakan permintaan GET ke endpoint /files/{file_id}/content untuk mengambil konten file.

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 Model Studio - Unduh file hasil
 * 
 * Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat hard-code Kunci API di kode: API_KEY = "sk-xxx"
 * Tetapi jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
 * Kunci API berbeda antara 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 juga 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 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 juga 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: Harap 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)

Anda dapat mengunduh file hasil tugas batch menggunakan metode GET dan menentukan file_id di URL.

Contoh permintaan

# ======= Penting =======
# Kunci API berbeda antara 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

Berikut adalah contoh 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, learning materials, problem-solving methods, or any other help, I am here to support you. Please tell me what you need help with."
                    }
                }
            ],
            "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 balasan yang dihasilkan model (completion).

prompt_tokens

Integer

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

total_tokens

Integer

Total jumlah token yang dikonsumsi oleh panggilan ini.

model

String

Nama model yang digunakan dalam panggilan ini.

error

Object

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

error.code

String

Informasi dan alasan baris error. Lihat Kode error untuk troubleshooting.

error.message

String

Pesan error.

Fitur lanjutan

Atur notifikasi penyelesaian

Untuk tugas berjalan lama, polling menghabiskan sumber daya yang tidak perlu. Gunakan mekanisme notifikasi asinkron di mana sistem secara aktif memberi tahu Anda saat tugas selesai.

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

  • Antrian pesan EventBridge: Terintegrasi mendalam dengan ekosistem Alibaba Cloud dan tidak memerlukan IP publik.

Metode 1: Callback

Saat membuat tugas, tentukan URL yang dapat diakses publik melalui metadata. Setelah tugas selesai, sistem mengirim permintaan POST yang berisistatus tugas ke URL yang ditentukan:

SDK Python OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan api_key="sk-xxx".
    # Jangan hard-code Kunci API di kode produksi untuk mengurangi risiko kebocoran.
    # Kunci API berbeda antara wilayah Singapura dan Beijing.
    api_key=os.getenv("DASHSCOPE_API_KEY"), 
    # Berikut adalah base_url untuk wilayah Beijing. Jika Anda menggunakan model di wilayah Singapura, ganti base_url dengan: https://dashscope-intl.aliyuncs.com/compatible-mode/v1
    # Catatan: Saat mengganti wilayah, perbarui juga Kunci API yang sesuai.
    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 penyematan teks, masukkan "/v1/embeddings". Untuk model uji batch-test-model, masukkan /v1/chat/ds-test. Untuk model lainnya, masukkan /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 IP publik dan cocok untuk skenario kompleks yang perlu integrasi dengan layanan Alibaba Cloud lainnya, seperti Function Compute atau RocketMQ.

Saat tugas batch selesai, sistem mengirim event ke Alibaba Cloud EventBridge. Konfigurasikan aturan EventBridge untuk mendengarkan event ini dan mengarahkannya ke target yang ditentukan.

  • Sumber event (Source): acs.dashscope

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

Referensi: Arahkan event ke ApsaraMQ for RocketMQ.

Peluncuran

  • Manajemen file

    • Panggil secara berkala API hapus file untuk menghapus file yang tidak diperlukan dan menghindari mencapai batas penyimpanan file (10.000 file atau 100 GB).

    • Simpan file besar di OSS sebagai gantinya.

  • Pemantauan tugas

    • Utamakan menggunakan notifikasi asinkron Callback atau EventBridge.

    • Jika polling diperlukan, atur interval lebih dari 1 menit dan gunakan strategi backoff eksponensial.

  • Penanganan error

    • Implementasikan mekanisme penanganan exception lengkap yang mencakup error jaringan, error API, dan masalah potensial lainnya.

    • Unduh dan analisis detail error di error_file_id.

    • Untuk kode error umum, lihat Pesan error untuk solusi.

  • Optimasi biaya

    • Gabungkan tugas kecil menjadi satu batch.

    • Atur completion_window secara tepat untuk memberikan fleksibilitas penjadwalan yang lebih besar.

Alat utilitas

CSV ke JSONL

Jika data asli Anda disimpan dalam file CSV (dengan kolom pertama sebagai ID dan kolom kedua sebagai konten), gunakan skrip berikut untuk membuat file batch JSONL dengan cepat.

Untuk menyesuaikan path file atau parameter lainnya, ubah kode sesuai kebutuhan.
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 penyematan teks, atur nilai url ke "/v1/embeddings". Untuk model lainnya, atur ke /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 result.jsonl menjadi result.csv yang mudah dianalisis di Excel.

Untuk menyesuaikan path file atau parameter lainnya, ubah kode sesuai kebutuhan.
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)

Atasi teks rusak di Excel

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

  • Atau, buat file Excel baru dan tentukan format encoding yang benar (UTF-8) saat mengimpor data.

Batas tingkat

Antarmuka

Batas tingkat (per Akun Alibaba Cloud)

Buat tugas

1.000 panggilan/menit, maksimal 1.000 tugas konkuren

Kueri tugas

1.000 panggilan/menit

Kueri daftar tugas

100 panggilan/menit

Batalkan tugas

1.000 panggilan/menit

Penagihan

  • Harga satuan: Untuk permintaan yang berhasil, harga satuan untuk token input dan output adalah 50% dari harga real-time untuk model yang sesuai. Lihat Daftar model.

  • Cakupan:

    • Hanya permintaan yang dieksekusi dengan sukses dalam tugas yang ditagih.

    • Kegagalan parsing file, kegagalan eksekusi tugas, atau permintaan error tingkat baris tidak dikenakan biaya.

    • Untuk tugas yang dibatalkan, permintaan apa pun yang telah berhasil diselesaikan sebelum pembatalan dikenakan biaya.

Penting

Inferensi batch adalah item yang dapat ditagih terpisah dan tidak mendukung langganan (rencana penghematan), kuota gratis pengguna baru, atau fitur seperti cache konteks.

Kode error

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

FAQ

  1. Bagaimana penagihan pemanggilan batch? Apakah saya perlu membeli secara terpisah?

    Anda ditagih berdasarkan token yang digunakan oleh permintaan yang berhasil dalam tugas. Tidak diperlukan pembelian paket terpisah.

  2. Apakah tugas batch yang dikirim dieksekusi secara berurutan?

    Tidak. Backend menggunakan mekanisme penjadwalan dinamis untuk menjadwalkan eksekusi tugas berdasarkan beban sumber daya komputasi keseluruhan. Oleh karena itu, eksekusi tidak dijamin berurutan sesuai pengiriman. Jika sumber daya terbatas, startup dan eksekusi tugas mungkin tertunda.

  3. Berapa lama waktu yang dibutuhkan untuk menyelesaikan tugas batch yang dikirim?

    Waktu eksekusi tergantung pada alokasi sumber daya sistem dan skala tugas Anda. Jika tugas tidak selesai dalam completion_window yang ditentukan, tugas tersebut kedaluwarsa. Permintaan yang tidak diproses dalam tugas yang kedaluwarsa tidak dieksekusi dan tidak dikenakan biaya apa pun.

    Rekomendasi skenario: Untuk skenario yang memerlukan inferensi model real-time, kami merekomendasikan menggunakan panggilan real-time. Untuk skenario pemrosesan data skala besar yang tidak sensitif terhadap waktu, kami merekomendasikan menggunakan panggilan batch.