All Products
Search
Document Center

Alibaba Cloud Model Studio:Panduan API Basis Pengetahuan

Last Updated:Mar 30, 2026

Alibaba Cloud Model Studio menyediakan Operasi API untuk fitur basis pengetahuannya. Hal ini memungkinkan Anda untuk dengan cepat mengintegrasikan basis pengetahuan dengan sistem bisnis yang ada, mengotomatiskan operasi, dan menangani kebutuhan pengambilan yang kompleks.

Prasyarat

  1. Pengguna RAM harus mendapatkan izin API (kebijakan AliyunBailianDataFullAccess) dan bergabung dengan ruang kerja sebelum mengoperasikan basis pengetahuan menggunakan API Alibaba Cloud. Ini tidak diperlukan untuk akun Alibaba Cloud.

    Pengguna RAM hanya dapat mengelola basis pengetahuan di ruang kerja yang telah mereka gabung. Akun Alibaba Cloud dapat mengelola basis pengetahuan di semua ruang kerja.
  2. Instal versi terbaru GenAI Service SDK untuk memanggil API terkait basis pengetahuan. Untuk panduan instalasi, lihat referensi pengembangan SDK.

    Jika SDK tidak memenuhi kebutuhan Anda, Anda dapat menggunakan mekanisme tanda tangan untuk membuat permintaan HTTP ke API basis pengetahuan terkait. Perhatikan bahwa metode ini relatif kompleks. Untuk informasi lebih lanjut tentang metode integrasi spesifik, lihat Ikhtisar API.
  3. Dapatkan ID AccessKey dan Rahasia AccessKey serta ID ruang kerja. Konfigurasikan mereka sebagai variabel lingkungan sistem untuk menjalankan kode contoh. Contoh berikut menggunakan sistem operasi Linux:

    Jika Anda menggunakan IDE atau plugin pengembang lainnya, konfigurasikan variabel ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID di lingkungan pengembangan Anda.
    export ALIBABA_CLOUD_ACCESS_KEY_ID='Your Alibaba Cloud AccessKey ID'
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET='Your Alibaba Cloud AccessKey secret'
    export WORKSPACE_ID='Your Model Studio workspace ID'
  4. Siapkan dokumen pengetahuan contoh Spesifikasi Telepon Bailian.docx untuk membuat basis pengetahuan.

Kode contoh lengkap

Buat basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, selesaikan semua prasyarat. Pengguna RAM harus diberi kebijakan AliyunBailianDataFullAccess.

  • Jika menggunakan IDE atau plugin pengembangan lainnya, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID.

Python

# Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
import hashlib
import os
import time

import requests
from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models


def check_environment_variables():
    """Periksa dan minta untuk menyetel variabel lingkungan yang diperlukan."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud AccessKey ID',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud AccessKey secret',
        'WORKSPACE_ID': 'ID ruang kerja Alibaba Cloud Model Studio'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Setel variabel lingkungan {var} ({description}).")
    
    return len(missing_vars) == 0


def calculate_md5(file_path: str) -> str:
    """
    Menghitung hash MD5 dari sebuah file.

    Parameter:
        file_path (str): Jalur lokal file.

    Mengembalikan:
        str: Hash MD5 dari file.
    """
    md5_hash = hashlib.md5()

    # Baca file dalam mode biner.
    with open(file_path, "rb") as f:
        # Baca file dalam potongan-potongan untuk menghindari penggunaan memori tinggi pada file besar.
        for chunk in iter(lambda: f.read(4096), b""):
            md5_hash.update(chunk)

    return md5_hash.hexdigest()


def get_file_size(file_path: str) -> int:
    """
    Mendapatkan ukuran file dalam byte.
    Parameter:
        file_path (str): Jalur lokal file.
    Mengembalikan:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


# Inisialisasi klien.
def create_client() -> bailian20231229Client:
    """
    Membuat dan mengonfigurasi klien.

    Mengembalikan:
        bailian20231229Client: Klien yang dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    # Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


# Meminta sewa unggah file.
def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    Meminta sewa unggah file dari layanan Model Studio.

    Parameter:
        client (bailian20231229Client): Klien.
        category_id (str): ID kategori.
        file_name (str): Nama file.
        file_md5 (str): Hash MD5 dari file.
        file_size (int): Ukuran file dalam byte.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.ApplyFileUploadLeaseRequest(
        file_name=file_name,
        md_5=file_md5,
        size_in_bytes=file_size,
    )
    runtime = util_models.RuntimeOptions()
    return client.apply_file_upload_lease_with_options(category_id, workspace_id, request, headers, runtime)


# Unggah file ke penyimpanan sementara.
def upload_file(pre_signed_url, headers, file_path):
    """
    Mengunggah file ke layanan Model Studio.
    Parameter:
        pre_signed_url (str): URL dalam sewa unggah.
        headers (dict): Header permintaan untuk unggahan.
        file_path (str): Jalur lokal file.
    """
    with open(file_path, 'rb') as f:
        file_content = f.read()
    upload_headers = {
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type": headers["Content-Type"]
    }
    response = requests.put(pre_signed_url, data=file_content, headers=upload_headers)
    response.raise_for_status()


# Menambahkan file ke kategori.
def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    Menambahkan file ke kategori tertentu di layanan Model Studio.

    Parameter:
        client (bailian20231229Client): Klien.
        lease_id (str): ID sewa.
        parser (str): Parser untuk file.
        category_id (str): ID kategori.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.AddFileRequest(
        lease_id=lease_id,
        parser=parser,
        category_id=category_id,
    )
    runtime = util_models.RuntimeOptions()
    return client.add_file_with_options(workspace_id, request, headers, runtime)


# Meminta status parsing file.
def describe_file(client, workspace_id, file_id):
    """
    Mendapatkan informasi dasar file.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    runtime = util_models.RuntimeOptions()
    return client.describe_file_with_options(workspace_id, file_id, headers, runtime)


# Menginisialisasi basis pengetahuan (indeks).
def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    Membuat basis pengetahuan di layanan Model Studio (inisialisasi).

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.
        name (str): Nama basis pengetahuan.
        structure_type (str): Tipe data dari basis pengetahuan.
        source_type (str): Tipe data aplikasi. Kategori dan file didukung.
        sink_type (str): Kelas penyimpanan vektor dari basis pengetahuan.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.CreateIndexRequest(
        structure_type=structure_type,
        name=name,
        source_type=source_type,
        sink_type=sink_type,
        document_ids=[file_id]
    )
    runtime = util_models.RuntimeOptions()
    return client.create_index_with_options(workspace_id, request, headers, runtime)


# Mengirimkan tugas pengindeksan.
def submit_index(client, workspace_id, index_id):
    """
    Mengirimkan tugas pengindeksan ke layanan Model Studio.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    submit_index_job_request = bailian_20231229_models.SubmitIndexJobRequest(
        index_id=index_id
    )
    runtime = util_models.RuntimeOptions()
    return client.submit_index_job_with_options(workspace_id, submit_index_job_request, headers, runtime)


# Menunggu tugas pengindeksan selesai.
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Meminta status tugas pengindeksan.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        job_id (str): ID tugas.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    get_index_job_status_request = bailian_20231229_models.GetIndexJobStatusRequest(
        index_id=index_id,
        job_id=job_id
    )
    runtime = util_models.RuntimeOptions()
    return client.get_index_job_status_with_options(workspace_id, get_index_job_status_request, headers, runtime)


def create_knowledge_base(
        file_path: str,
        workspace_id: str,
        name: str
):
    """
    Membuat basis pengetahuan menggunakan layanan Model Studio.
    Parameter:
        file_path (str): Jalur lokal file.
        workspace_id (str): ID ruang kerja.
        name (str): Nama basis pengetahuan.
    Mengembalikan:
        str atau None: ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan None.
    """
    # Tetapkan nilai default.
    category_id = 'default'
    parser = 'DASHSCOPE_DOCMIND'
    source_type = 'DATA_CENTER_FILE'
    structure_type = 'unstructured'
    sink_type = 'DEFAULT'
    try:
        # Langkah 1: Buat klien.
        print("Langkah 1: Buat klien.")
        client = create_client()
        # Langkah 2: Persiapkan informasi file.
        print("Langkah 2: Persiapkan informasi file.")
        file_name = os.path.basename(file_path)
        file_md5 = calculate_md5(file_path)
        file_size = get_file_size(file_path)
        # Langkah 3: Minta sewa unggah.
        print("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.")
        lease_response = apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id)
        lease_id = lease_response.body.data.file_upload_lease_id
        upload_url = lease_response.body.data.param.url
        upload_headers = lease_response.body.data.param.headers
        # Langkah 4: Unggah file.
        print("Langkah 4: Unggah file ke Alibaba Cloud Model Studio.")
        upload_file(upload_url, upload_headers, file_path)
        # Langkah 5: Tambahkan file ke server.
        print("Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.")
        add_response = add_file(client, lease_id, parser, category_id, workspace_id)
        file_id = add_response.body.data.file_id
        # Langkah 6: Periksa status file.
        print("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.")
        while True:
            describe_response = describe_file(client, workspace_id, file_id)
            status = describe_response.body.data.status
            print(f"Status file saat ini: {status}")
            if status == 'INIT':
                print("File sedang menunggu parsing. Tunggu sebentar...")
            elif status == 'PARSING':
                print("File sedang diparsing. Tunggu sebentar...")
            elif status == 'PARSE_SUCCESS':
                print("File telah diparsing.")
                break
            else:
                print(f"Status file tidak dikenal: {status}. Hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Inisialisasi basis pengetahuan.
        print("Langkah 7: Inisialisasi basis pengetahuan di Alibaba Cloud Model Studio.")
        index_response = create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type)
        index_id = index_response.body.data.id
        # Langkah 8: Kirimkan tugas pengindeksan.
        print("Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.")
        submit_response = submit_index(client, workspace_id, index_id)
        job_id = submit_response.body.data.id
        # Langkah 9: Dapatkan status tugas pengindeksan.
        print("Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.")
        while True:
            get_index_job_status_response = get_index_job_status(client, workspace_id, job_id, index_id)
            status = get_index_job_status_response.body.data.status
            print(f"Status tugas pengindeksan saat ini: {status}")
            if status == 'COMPLETED':
                break
            time.sleep(5)
        print("Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.")
        return index_id
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return None


def main():
    if not check_environment_variables():
        print("Pemeriksaan variabel lingkungan gagal.")
        return
    file_path = input("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:")
    kb_name = input("Masukkan nama untuk basis pengetahuan Anda:")
    workspace_id = os.environ.get('WORKSPACE_ID')
    create_knowledge_base(file_path, workspace_id, kb_name)


if __name__ == '__main__':
    main()

Java

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
import com.aliyun.bailian20231229.models.*;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.*;
import java.util.concurrent.TimeUnit;

public class KnowledgeBaseCreate {

    /**
     * Memeriksa dan meminta Anda untuk menyetel variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey secret");
        requiredVars.put("WORKSPACE_ID", "ID ruang kerja Alibaba Cloud Model Studio");

        List<String> missingVars = new ArrayList<>();
        for (Map.Entry<String, String> entry : requiredVars.entrySet()) {
            String value = System.getenv(entry.getKey());
            if (value == null || value.isEmpty()) {
                missingVars.add(entry.getKey());
                System.out.println("Error: Setel variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Menghitung hash MD5 dari sebuah file.
     *
     * @param filePath Jalur lokal file.
     * @return Hash MD5 dari file.
     * @throws Exception jika terjadi kesalahan selama perhitungan.
     */
    public static String calculateMD5(String filePath) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        try (FileInputStream fis = new FileInputStream(filePath)) {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                md.update(buffer, 0, bytesRead);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (byte b : md.digest()) {
            sb.append(String.format("%02x", b & 0xff));
        }
        return sb.toString();
    }

    /**
     * Mendapatkan ukuran file dalam byte.
     *
     * @param filePath Jalur lokal file.
     * @return Ukuran file dalam byte.
     */
    public static String getFileSize(String filePath) {
        File file = new File(filePath);
        long fileSize = file.length();
        return String.valueOf(fileSize);
    }

    /**
     * Menginisialisasi klien.
     *
     * @return Objek klien yang dikonfigurasi.
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Meminta sewa unggah file.
     *
     * @param client      Objek klien.
     * @param categoryId  ID kategori.
     * @param fileName    Nama file.
     * @param fileMd5     Hash MD5 dari file.
     * @param fileSize    Ukuran file dalam byte.
     * @param workspaceId ID ruang kerja.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static ApplyFileUploadLeaseResponse applyLease(com.aliyun.bailian20231229.Client client, String categoryId, String fileName, String fileMd5, String fileSize, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest applyFileUploadLeaseRequest = new com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest();
        applyFileUploadLeaseRequest.setFileName(fileName);
        applyFileUploadLeaseRequest.setMd5(fileMd5);
        applyFileUploadLeaseRequest.setSizeInBytes(fileSize);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        ApplyFileUploadLeaseResponse applyFileUploadLeaseResponse = null;
        applyFileUploadLeaseResponse = client.applyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        return applyFileUploadLeaseResponse;
    }

    /**
     * Mengunggah file ke penyimpanan sementara.
     *
     * @param preSignedUrl URL dalam sewa unggah.
     * @param headers      Header permintaan untuk unggahan.
     * @param filePath     Jalur lokal file.
     * @throws Exception jika terjadi kesalahan selama unggahan.
     */
    public static void uploadFile(String preSignedUrl, Map<String, String> headers, String filePath) throws Exception {
        File file = new File(filePath);
        if (!file.exists() || !file.isFile()) {
            throw new IllegalArgumentException("File tidak ada atau bukan file biasa: " + filePath);
        }

        try (FileInputStream fis = new FileInputStream(file)) {
            URL url = new URL(preSignedUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("PUT");
            conn.setDoOutput(true);

            // Set header permintaan unggah.
            conn.setRequestProperty("X-bailian-extra", headers.get("X-bailian-extra"));
            conn.setRequestProperty("Content-Type", headers.get("Content-Type"));

            // Baca dan unggah file dalam potongan-potongan.
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                conn.getOutputStream().write(buffer, 0, bytesRead);
            }

            int responseCode = conn.getResponseCode();
            if (responseCode != 200) {
                throw new RuntimeException("Unggah gagal: " + responseCode);
            }
        }
    }

    /**
     * Menambahkan file ke kategori.
     *
     * @param client       Objek klien.
     * @param leaseId      ID sewa.
     * @param parser       Parser untuk file.
     * @param categoryId   ID kategori.
     * @param workspaceId  ID ruang kerja.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static AddFileResponse addFile(com.aliyun.bailian20231229.Client client, String leaseId, String parser, String categoryId, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.AddFileRequest addFileRequest = new com.aliyun.bailian20231229.models.AddFileRequest();
        addFileRequest.setLeaseId(leaseId);
        addFileRequest.setParser(parser);
        addFileRequest.setCategoryId(categoryId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.addFileWithOptions(workspaceId, addFileRequest, headers, runtime);
    }

    /**
     * Meminta informasi dasar file.
     *
     * @param client       Objek klien.
     * @param workspaceId  ID ruang kerja.
     * @param fileId       ID file.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static DescribeFileResponse describeFile(com.aliyun.bailian20231229.Client client, String workspaceId, String fileId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
    }

    /**
     * Membuat basis pengetahuan di layanan Model Studio (inisialisasi).
     *
     * @param client        Objek klien.
     * @param workspaceId   ID ruang kerja.
     * @param fileId        ID file.
     * @param name          Nama basis pengetahuan.
     * @param structureType Tipe data dari basis pengetahuan.
     * @param sourceType    Tipe data aplikasi. Kategori dan file didukung.
     * @param sinkType      Kelas penyimpanan vektor dari basis pengetahuan.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static CreateIndexResponse createIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String fileId, String name, String structureType, String sourceType, String sinkType) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.CreateIndexRequest createIndexRequest = new com.aliyun.bailian20231229.models.CreateIndexRequest();
        createIndexRequest.setStructureType(structureType);
        createIndexRequest.setName(name);
        createIndexRequest.setSourceType(sourceType);
        createIndexRequest.setSinkType(sinkType);
        createIndexRequest.setDocumentIds(Collections.singletonList(fileId));
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.createIndexWithOptions(workspaceId, createIndexRequest, headers, runtime);
    }

    /**
     * Mengirimkan tugas pengindeksan ke layanan Model Studio.
     *
     * @param client      Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId     ID basis pengetahuan.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static SubmitIndexJobResponse submitIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.SubmitIndexJobRequest submitIndexJobRequest = new com.aliyun.bailian20231229.models.SubmitIndexJobRequest();
        submitIndexJobRequest.setIndexId(indexId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.submitIndexJobWithOptions(workspaceId, submitIndexJobRequest, headers, runtime);
    }

    /**
     * Meminta status tugas pengindeksan.
     *
     * @param client      Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param jobId       ID tugas.
     * @param indexId     ID basis pengetahuan.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static GetIndexJobStatusResponse getIndexJobStatus(com.aliyun.bailian20231229.Client client, String workspaceId, String jobId, String indexId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.GetIndexJobStatusRequest getIndexJobStatusRequest = new com.aliyun.bailian20231229.models.GetIndexJobStatusRequest();
        getIndexJobStatusRequest.setIndexId(indexId);
        getIndexJobStatusRequest.setJobId(jobId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        GetIndexJobStatusResponse getIndexJobStatusResponse = null;
        getIndexJobStatusResponse = client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
        return getIndexJobStatusResponse;
    }

    /**
     * Membuat basis pengetahuan menggunakan layanan Model Studio.
     *
     * @param filePath    Jalur lokal file.
     * @param workspaceId ID ruang kerja.
     * @param name        Nama basis pengetahuan.
     * @return ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan null.
     */
    public static String createKnowledgeBase(String filePath, String workspaceId, String name) {
        // Tetapkan nilai default.
        String categoryId = "default";
        String parser = "DASHSCOPE_DOCMIND";
        String sourceType = "DATA_CENTER_FILE";
        String structureType = "unstructured";
        String sinkType = "DEFAULT";
        try {
            // Langkah 1: Inisialisasi klien.
            System.out.println("Langkah 1: Inisialisasi klien.");
            com.aliyun.bailian20231229.Client client = createClient();

            // Langkah 2: Persiapkan informasi file.
            System.out.println("Langkah 2: Persiapkan informasi file.");
            String fileName = new File(filePath).getName();
            String fileMd5 = calculateMD5(filePath);
            String fileSize = getFileSize(filePath);

            // Langkah 3: Minta sewa unggah.
            System.out.println("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.");
            ApplyFileUploadLeaseResponse leaseResponse = applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
            String leaseId = leaseResponse.getBody().getData().getFileUploadLeaseId();
            String uploadUrl = leaseResponse.getBody().getData().getParam().getUrl();
            Object uploadHeaders = leaseResponse.getBody().getData().getParam().getHeaders();

            // Langkah 4: Unggah file.
            System.out.println("Langkah 4: Unggah file ke Alibaba Cloud Model Studio.");
            // Instal jackson-databind secara mandiri.
            // Ubah uploadHeaders dari langkah sebelumnya menjadi peta (pasangan kunci-nilai).
            ObjectMapper mapper = new ObjectMapper();
            Map<String, String> uploadHeadersMap = (Map<String, String>) mapper.readValue(mapper.writeValueAsString(uploadHeaders), Map.class);
            uploadFile(uploadUrl, uploadHeadersMap, filePath);

            // Langkah 5: Tambahkan file ke server.
            System.out.println("Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.");
            AddFileResponse addResponse = addFile(client, leaseId, parser, categoryId, workspaceId);
            String fileId = addResponse.getBody().getData().getFileId();

            // Langkah 6: Periksa status file.
            System.out.println("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.");
            while (true) {
                DescribeFileResponse describeResponse = describeFile(client, workspaceId, fileId);
                String status = describeResponse.getBody().getData().getStatus();
                System.out.println("Status file saat ini: " + status);

                if (status.equals("INIT")) {
                    System.out.println("File sedang menunggu parsing. Tunggu sebentar...");
                } else if (status.equals("PARSING")) {
                    System.out.println("File sedang diparsing. Tunggu sebentar...");
                } else if (status.equals("PARSE_SUCCESS")) {
                    System.out.println("File telah diparsing.");
                    break;
                } else {
                    System.out.println("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                    return null;
                }
                TimeUnit.SECONDS.sleep(5);
            }

            // Langkah 7: Inisialisasi basis pengetahuan.
            System.out.println("Langkah 7: Buat basis pengetahuan di Alibaba Cloud Model Studio.");
            CreateIndexResponse indexResponse = createIndex(client, workspaceId, fileId, name, structureType, sourceType, sinkType);
            String indexId = indexResponse.getBody().getData().getId();

            // Langkah 8: Kirimkan tugas pengindeksan.
            System.out.println("Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.");
            SubmitIndexJobResponse submitResponse = submitIndex(client, workspaceId, indexId);
            String jobId = submitResponse.getBody().getData().getId();

            // Langkah 9: Dapatkan status tugas pengindeksan.
            System.out.println("Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.");
            while (true) {
                GetIndexJobStatusResponse getStatusResponse = getIndexJobStatus(client, workspaceId, jobId, indexId);
                String status = getStatusResponse.getBody().getData().getStatus();
                System.out.println("Status tugas pengindeksan saat ini: " + status);

                if (status.equals("COMPLETED")) {
                    break;
                }
                TimeUnit.SECONDS.sleep(5);
            }
            System.out.println("Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.");
            return indexId;

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

    /**
     * Fungsi utama.
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        if (!checkEnvironmentVariables()) {
            return;
        }

        System.out.print("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:");
        String filePath = scanner.nextLine();

        System.out.print("Masukkan nama untuk basis pengetahuan Anda:");
        String kbName = scanner.nextLine();

        String workspaceId = System.getenv("WORKSPACE_ID");
        String result = createKnowledgeBase(filePath, workspaceId, kbName);
        if (result != null) {
            System.out.println("ID basis pengetahuan: " + result);
        }
    }
}

PHP

<?php
// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\SDK\Bailian\V20231229\Bailian;
use AlibabaCloud\SDK\Bailian\V20231229\Models\AddFileRequest;
use \Exception;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Bailian\V20231229\Models\ApplyFileUploadLeaseRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\CreateIndexRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\SubmitIndexJobRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\GetIndexJobStatusRequest;

class KnowledgeBaseCreate {

    /**
     * Memeriksa dan meminta Anda untuk menyetel variabel lingkungan yang diperlukan.
     * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
     */
    public static function checkEnvironmentVariables() {
        $requiredVars = [
            'ALIBABA_CLOUD_ACCESS_KEY_ID' => 'Alibaba Cloud AccessKey ID',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET' => 'Alibaba Cloud AccessKey secret',
            'WORKSPACE_ID' => 'ID ruang kerja Alibaba Cloud Model Studio'
        ];
        $missingVars = [];
        foreach ($requiredVars as $var => $description) {
            if (!getenv($var)) {
                $missingVars[] = $var;
                echo "Error: Setel variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Menghitung hash MD5 dari sebuah file.
     * @param string $filePath Jalur lokal file.
     * @return string Hash MD5 dari file.
     */
    public static function calculateMd5($filePath) {
        $md5Hash = hash_init("md5");
        $handle = fopen($filePath, "rb");
        while (!feof($handle)) {
            $chunk = fread($handle, 4096);
            hash_update($md5Hash, $chunk);
        }
        fclose($handle);
        return hash_final($md5Hash);
    }

    /**
     * Mendapatkan ukuran file dalam byte.
     * @param string $filePath Jalur lokal file.
     * @return int Ukuran file dalam byte.
     */
    public static function getFileSize($filePath) {
        return (string)filesize($filePath);
    }

    /**
     * Menginisialisasi klien.
     * @return Bailian Objek klien yang dikonfigurasi.
     */
    public static function createClient(){
        $config = new Config([
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

    /**
     * Meminta sewa unggah file.
     * @param Bailian $client Objek klien.
     * @param string $categoryId ID kategori.
     * @param string $fileName Nama file.
     * @param string $fileMd5 Hash MD5 dari file.
     * @param int $fileSize Ukuran file dalam byte.
     * @param string $workspaceId ID ruang kerja.
     * @return ApplyFileUploadLeaseResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId) {
        $headers = [];
        $applyFileUploadLeaseRequest = new ApplyFileUploadLeaseRequest([
            "fileName" => $fileName,
            "md5" => $fileMd5,
            "sizeInBytes" => $fileSize
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->applyFileUploadLeaseWithOptions($categoryId, $workspaceId, $applyFileUploadLeaseRequest, $headers, $runtime);
    }

    /**
     * Mengunggah file ke penyimpanan sementara.
     * @param string $preSignedUrl URL dalam sewa unggah.
     * @param array $headers Header permintaan untuk unggahan.
     * @param string $filePath Jalur lokal file.
     */
    public static function uploadFile($preSignedUrl, $headers, $filePath) {
        $fileContent = file_get_contents($filePath);
        // Set header permintaan unggah.
        $uploadHeaders = [
            "X-bailian-extra" => $headers["X-bailian-extra"],
            "Content-Type" => $headers["Content-Type"]
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $preSignedUrl);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array_map(function($key, $value) {
            return "$key: $value";
        }, array_keys($uploadHeaders), $uploadHeaders));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpCode != 200) {
            throw new Exception("Unggah gagal: " . curl_error($ch));
        }
        curl_close($ch);
    }

    /**
     * Menambahkan file ke kategori.
     * @param Bailian $client Objek klien.
     * @param string $leaseId ID sewa.
     * @param string $parser Parser untuk file.
     * @param string $categoryId ID kategori.
     * @param string $workspaceId ID ruang kerja.
     * @return AddFileResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function addFile($client, $leaseId, $parser, $categoryId, $workspaceId) {
        $headers = [];
        $addFileRequest = new AddFileRequest([
            "leaseId" => $leaseId,
            "parser" => $parser,
            "categoryId" => $categoryId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->addFileWithOptions($workspaceId, $addFileRequest, $headers, $runtime);
    }

    /**
     * Meminta informasi dasar file.
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $fileId ID file.
     * @return DescribeFileResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function describeFile($client, $workspaceId, $fileId) {
        $headers = [];
        $runtime = new RuntimeOptions([]);
        return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
    }

    /**
     * Membuat basis pengetahuan di layanan Model Studio (inisialisasi).
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $fileId ID file.
     * @param string $name Nama basis pengetahuan.
     * @param string $structureType Tipe data dari basis pengetahuan.
     * @param string $sourceType Tipe data aplikasi. Kategori dan file didukung.
     * @param string $sinkType Kelas penyimpanan vektor dari basis pengetahuan.
     * @return CreateIndexResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function createIndex($client, $workspaceId, $fileId, $name, $structureType, $sourceType, $sinkType) {
        $headers = [];
        $createIndexRequest = new CreateIndexRequest([
            "structureType" => $structureType,
            "name" => $name,
            "sourceType" => $sourceType,
            "documentIds" => [
                $fileId
            ],
            "sinkType" => $sinkType
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->createIndexWithOptions($workspaceId, $createIndexRequest, $headers, $runtime);
    }

    /**
     * Mengirimkan tugas pengindeksan ke layanan Model Studio.
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @return SubmitIndexJobResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function submitIndex($client, $workspaceId, $indexId) {
        $headers = [];
        $submitIndexJobRequest = new SubmitIndexJobRequest([
            'indexId' => $indexId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->submitIndexJobWithOptions($workspaceId, $submitIndexJobRequest, $headers, $runtime);
    }

    /**
     * Meminta status tugas pengindeksan.
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $jobId ID tugas.
     * @return GetIndexJobStatusResponse Objek tanggapan dari layanan Model Studio.
     */
    public static function getIndexJobStatus($client, $workspaceId, $jobId, $indexId) {
        $headers = [];
        $getIndexJobStatusRequest = new GetIndexJobStatusRequest([
            'indexId' => $indexId,
            'jobId' => $jobId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->getIndexJobStatusWithOptions($workspaceId, $getIndexJobStatusRequest, $headers, $runtime);
    }

    /**
     * Membuat basis pengetahuan menggunakan layanan Model Studio.
     * @param string $filePath Jalur lokal file.
     * @param string $workspaceId ID ruang kerja.
     * @param string $name Nama basis pengetahuan.
     * @return string|null ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan null.
     */
    public static function createKnowledgeBase($filePath, $workspaceId, $name) {
        // Tetapkan nilai default.
        $categoryId = 'default';
        $parser = 'DASHSCOPE_DOCMIND';
        $sourceType = 'DATA_CENTER_FILE';
        $structureType = 'unstructured';
        $sinkType = 'DEFAULT';

        try {
            // Langkah 1: Inisialisasi klien.
            echo "Langkah 1: Inisialisasi klien.\n";
            $client = self::createClient();

            // Langkah 2: Persiapkan informasi file.
            echo "Langkah 2: Persiapkan informasi file.\n";
            $fileName = basename($filePath);
            echo("Ini adalah nama file : $fileName");
            $fileMd5 = self::calculateMd5($filePath);
            $fileSize = self::getFileSize($filePath);

            // Langkah 3: Minta sewa unggah.
            echo "Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.\n";
            $leaseResponse = self::applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId);
            $leaseId = $leaseResponse->body->data->fileUploadLeaseId;
            $uploadUrl = $leaseResponse->body->data->param->url;
            $uploadHeaders = $leaseResponse->body->data->param->headers;
            $uploadHeadersMap = json_decode(json_encode($uploadHeaders), true);

            // Langkah 4: Unggah file.
            echo "Langkah 4: Unggah file ke Alibaba Cloud Model Studio.\n";
            self::uploadFile($uploadUrl, $uploadHeadersMap, $filePath);

            // Langkah 5: Tambahkan file ke server.
            echo "Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.\n";
            $addResponse = self::addFile($client, $leaseId, $parser, $categoryId, $workspaceId);
            $fileId = $addResponse->body->data->fileId;
            echo("fileid: $fileId\n");

            // Langkah 6: Periksa status file.
            echo "Langkah 6: Periksa status file di Alibaba Cloud Model Studio.\n";
            while (true) {
                $describeResponse = self::describeFile($client, $workspaceId, $fileId);
                $status = $describeResponse->body->data->status;
                echo "Status file saat ini: $status\n";

                if ($status == 'INIT') {
                    echo "File sedang menunggu parsing. Tunggu sebentar...\n";
                } elseif ($status == 'PARSING') {
                    echo "File sedang diparsing. Tunggu sebentar...\n";
                } elseif ($status == 'PARSE_SUCCESS') {
                    echo "File telah diparsing.\n";
                    break;
                } else {
                    echo "Status file tidak dikenal: $status. Hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

            // Langkah 7: Inisialisasi basis pengetahuan.
            echo "Langkah 7: Inisialisasi basis pengetahuan di Alibaba Cloud Model Studio.\n";
            $indexResponse = self::createIndex($client, $workspaceId, $fileId, $name, $structureType, $sourceType, $sinkType);
            $indexId = $indexResponse->body->data->id;

            // Langkah 8: Kirimkan tugas pengindeksan.
            echo "Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.\n";
            $submitResponse = self::submitIndex($client, $workspaceId, $indexId);
            $jobId = $submitResponse->body->data->id;

            // Langkah 9: Dapatkan status tugas pengindeksan.
            echo "Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.\n";
            while (true) {
                $getIndexJobStatusResponse = self::getIndexJobStatus($client, $workspaceId, $jobId, $indexId);
                $status = $getIndexJobStatusResponse->body->data->status;
                echo "Status tugas pengindeksan saat ini: $status\n";

                if ($status == 'COMPLETED') {
                    break;
                }
                sleep(5);
            }
            echo "Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.\n";
            return $indexId;
        } catch (Exception $e) {
            echo "Terjadi kesalahan: {$e->getMessage()}\n";
            return null;
        }
    }

    /**
     * Fungsi utama.
     */
    public static function main($args){
        if (!self::checkEnvironmentVariables()) {
            echo "Pemeriksaan variabel lingkungan gagal.\n";
            return;
        }
        $filePath = readline("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:");
        $kbName = readline("Masukkan nama untuk basis pengetahuan Anda:");
        $workspaceId = getenv('WORKSPACE_ID');
        $result = self::createKnowledgeBase($filePath, $workspaceId, $kbName);
       if ($result) {
           echo "ID basis pengetahuan: $result\n";
       } else {
           echo "Gagal membuat basis pengetahuan.\n";
       }
    }
}
// Asumsikan bahwa autoload.php berada di direktori induk file kode saat ini. Sesuaikan jalur berdasarkan struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseCreate::main(array_slice($argv, 1));

Node.js

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
'use strict';

const fs = require('fs');
const path = require('path');
const axios = require('axios');
const crypto = require('crypto');

const bailian20231229 = require('@alicloud/bailian20231229');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');


class KbCreate {

  /**
   * Memeriksa dan meminta Anda untuk menyetel variabel lingkungan yang diperlukan.
   * @returns {boolean} Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel. Jika tidak, kembalikan false.
   */
  static checkEnvironmentVariables() {
    const requiredVars = {
      'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud AccessKey ID',
      'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud AccessKey secret',
      'WORKSPACE_ID': 'ID ruang kerja Alibaba Cloud Model Studio'
    };

    const missing = [];
    for (const [varName, desc] of Object.entries(requiredVars)) {
      if (!process.env[varName]) {
        console.error(`Error: Setel variabel lingkungan ${varName} (${desc})`);
        missing.push(varName);
      }
    }
    return missing.length === 0;
  }

  /**
   * Menghitung hash MD5 dari sebuah file.
   * @param {string} filePath Jalur lokal file.
   * @returns {Promise<string>} Hash MD5 dari file.
   */
  static async calculateMD5(filePath) {
    const hash = crypto.createHash('md5');
    const stream = fs.createReadStream(filePath);

    return new Promise((resolve, reject) => {
      stream.on('data', chunk => hash.update(chunk));
      stream.on('end', () => resolve(hash.digest('hex')));
      stream.on('error', reject);
    });
  }

  /**
   * Mendapatkan ukuran file dalam byte dan mengembalikannya sebagai string.
   * @param {string} filePath Jalur lokal file.
   * @returns {string} Ukuran file, seperti "123456".
   */
  static getFileSize(filePath) {
    try {
      const stats = fs.statSync(filePath);
      return stats.size.toString();
    } catch (err) {
      console.error(`Gagal mendapatkan ukuran file: ${err.message}`);
      throw err;
    }
  }

  /**
   * Membuat dan mengonfigurasi klien.
   * @return Client
   * @throws Exception
   */
  static createClient() {
    const config = new OpenApi.Config({
      accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
      accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
    });
    // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
    config.endpoint = `bailian.ap-southeast-1.aliyuncs.com`;
    return new bailian20231229.default(config);
  }

  /**
   * Meminta sewa unggah file.
   * @param {Bailian20231229Client} client Klien.
   * @param {string} categoryId ID kategori.
   * @param {string} fileName Nama file.
   * @param {string} fileMd5 Hash MD5 dari file.
   * @param {string} fileSize Ukuran file dalam byte.
   * @param {string} workspaceId ID ruang kerja.
   * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} Tanggapan dari layanan Model Studio.
   */
  static async applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId) {
    const headers = {};
    const applyFileUploadLeaseRequest = new bailian20231229.ApplyFileUploadLeaseRequest({
      md5: fileMd5,
      fileName,
      sizeInBytes: fileSize
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.applyFileUploadLeaseWithOptions(
      categoryId,
      workspaceId,
      applyFileUploadLeaseRequest,
      headers,
      runtime
    );
  }

  /**
   * Mengunggah file ke penyimpanan sementara.
   * @param {string} preSignedUrl URL dalam sewa unggah.
   * @param {Object} headers Header permintaan untuk unggahan.
   * @param {string} filePath Jalur lokal file.
   */
  static async uploadFile(preSignedUrl, headers, filePath) {
    const uploadHeaders = {
      "X-bailian-extra": headers["X-bailian-extra"],
      "Content-Type": headers["Content-Type"]
    };
    const stream = fs.createReadStream(filePath);
    try {
      await axios.put(preSignedUrl, stream, { headers: uploadHeaders });
    } catch (e) {
      throw new Error(`Unggah gagal: ${e.message}`);
    }
  }

  /**
   * Menambahkan file ke kategori.
   * @param {Bailian20231229Client} client Klien.
   * @param {string} leaseId ID sewa.
   * @param {string} parser Parser untuk file.
   * @param {string} categoryId ID kategori.
   * @param {string} workspaceId ID ruang kerja.
   * @returns {Promise<bailian20231229.AddFileResponse>} Tanggapan dari layanan Model Studio.
   */
  static async addFile(client, leaseId, parser, categoryId, workspaceId) {
    const headers = {};
    const addFileRequest = new bailian20231229.AddFileRequest({
      leaseId,
      parser,
      categoryId
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.addFileWithOptions(workspaceId, addFileRequest, headers, runtime);
  }

  /**
   * Meminta status parsing file.
   * @param {Bailian20231229Client} client Klien.
   * @param {string} workspaceId ID ruang kerja.
   * @param {string} fileId ID file.
   * @returns {Promise<bailian20231229.DescribeFileResponse>} Tanggapan dari layanan Model Studio.
   */
  static async describeFile(client, workspaceId, fileId) {
    const headers = {};
    const runtime = new Util.RuntimeOptions({});
    return await client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
  }

  /**
   * Membuat basis pengetahuan di layanan Model Studio (inisialisasi).
   * @param {Bailian20231229Client} client Klien.
   * @param {string} workspaceId ID ruang kerja.
   * @param {string} fileId ID file.
   * @param {string} name Nama basis pengetahuan.
   * @param {string} structureType Tipe data dari basis pengetahuan.
   * @param {string} sourceType Tipe data aplikasi. Kategori dan file didukung.
   * @param {string} sinkType Kelas penyimpanan vektor dari basis pengetahuan.
   * @returns {Promise<bailian20231229.CreateIndexResponse>} Tanggapan dari layanan Model Studio.
   */
  static async createIndex(client, workspaceId, fileId, name, structureType, sourceType, sinkType) {
    const headers = {};
    const createIndexRequest = new bailian20231229.CreateIndexRequest({
      name,
      structureType,
      documentIds: [fileId],
      sourceType,
      sinkType
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.createIndexWithOptions(workspaceId, createIndexRequest, headers, runtime);
  }

  /**
   * Mengirimkan tugas pengindeksan ke layanan Model Studio.
   * @param {Bailian20231229Client} client Klien.
   * @param {string} workspaceId ID ruang kerja.
   * @param {string} indexId ID basis pengetahuan.
   * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} Tanggapan dari layanan Model Studio.
   */
  static async submitIndex(client, workspaceId, indexId) {
    const headers = {};
    const submitIndexJobRequest = new bailian20231229.SubmitIndexJobRequest({ indexId });
    const runtime = new Util.RuntimeOptions({});
    return await client.submitIndexJobWithOptions(workspaceId, submitIndexJobRequest, headers, runtime);
  }

  /**
   * Meminta status tugas pengindeksan.
   * @param {Bailian20231229Client} client Klien.
   * @param {string} workspaceId ID ruang kerja.
   * @param {string} jobId ID tugas.
   * @param {string} indexId ID basis pengetahuan.
   * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} Tanggapan dari layanan Model Studio.
   */
  static async getIndexJobStatus(client, workspaceId, jobId, indexId) {
    const headers = {};
    const getIndexJobStatusRequest = new bailian20231229.GetIndexJobStatusRequest({ jobId, indexId });
    const runtime = new Util.RuntimeOptions({});
    return await client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
  }

  /**
   * Membuat basis pengetahuan menggunakan layanan Model Studio.
   * @param {string} filePath Jalur lokal file.
   * @param {string} workspaceId ID ruang kerja.
   * @param {string} name Nama basis pengetahuan.
   * @returns {Promise<string | null>} ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan null.
   */
  static async createKnowledgeBase(filePath, workspaceId, name) {
    // Tetapkan nilai default.
    const categoryId = 'default';
    const parser = 'DASHSCOPE_DOCMIND';
    const sourceType = 'DATA_CENTER_FILE';
    const structureType = 'unstructured';
    const sinkType = 'DEFAULT';

    try {
      console.log("Langkah 1: Inisialisasi klien.");
      const client = this.createClient();

      console.log("Langkah 2: Persiapkan informasi file.");
      const fileName = path.basename(filePath);
      const fileMd5 = await this.calculateMD5(filePath);
      const fileSize = this.getFileSize(filePath);

      console.log("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.")
      const leaseResponse = await this.applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
      const leaseId = leaseResponse.body.data.fileUploadLeaseId;
      const uploadUrl = leaseResponse.body.data.param.url;
      const uploadHeaders = leaseResponse.body.data.param.headers;
      const uploadHeadersMap = JSON.parse(JSON.stringify(uploadHeaders));

      console.log("Langkah 4: Unggah file ke Alibaba Cloud Model Studio.")
      await this.uploadFile(uploadUrl, uploadHeadersMap, filePath);

      console.log("Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.")
      const addResponse = await this.addFile(client, leaseId, parser, categoryId, workspaceId);
      const fileId = addResponse.body.data.fileId;
      console.log(`ID file: ${fileId}`);

      console.log("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.")
      while (true) {
        const describeResponse = await this.describeFile(client, workspaceId, fileId);
        const status = describeResponse.body.data.status;
        console.log(`Status file saat ini: ${status}`);

        if (status === 'INIT') {
          console.log("File sedang menunggu parsing. Tunggu sebentar...");
        } else if (status === 'PARSING') {
          console.log("File sedang diparsing. Tunggu sebentar...");
        } else if (status === 'PARSE_SUCCESS') {
          console.log("File telah diparsing.");
          break;
        } else {
          console.error(`Status file tidak dikenal: ${status}. Hubungi dukungan teknis.`);
          return null;
        }
        await this.sleep(5);
      }

      console.log("Langkah 7: Inisialisasi basis pengetahuan di Alibaba Cloud Model Studio.")
      const indexResponse = await this.createIndex(client, workspaceId, fileId, name, structureType, sourceType, sinkType);
      const indexId = indexResponse.body.data.id;

      console.log("Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.")
      const submitResponse = await this.submitIndex(client, workspaceId, indexId);
      const jobId = submitResponse.body.data.id;

      console.log("Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.")
      while (true) {
        const jobResponse = await this.getIndexJobStatus(client, workspaceId, jobId, indexId);
        const status = jobResponse.body.data.status;
        console.log(`Status tugas pengindeksan saat ini: ${status}`);
        if (status === 'COMPLETED') {
          break;
        }
        await this.sleep(5);
      }
      console.log("Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.");
      return indexId;
    } catch (e) {
      console.error(`Terjadi kesalahan: ${e.message}`);
      return null;
    }
  }

  /**
   * Menunggu selama beberapa detik.
   * @param {number} seconds Waktu tunggu dalam detik.
   * @returns {Promise<void>}
   */
  static sleep(seconds) {
    return new Promise(resolve => setTimeout(resolve, seconds * 1000));
  }

  static async main(args) {
    if (!this.checkEnvironmentVariables()) {
      console.log("Pemeriksaan variabel lingkungan gagal.");
      return;
    }

    const readline = require('readline').createInterface({
      input: process.stdin,
      output: process.stdout
    });

    try {
      const filePath = await new Promise((resolve, reject) => {
        readline.question("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:", (ans) => {
          ans.trim() ? resolve(ans) : reject(new Error("Jalur tidak boleh kosong."));
        });
      });
      const kbName = await new Promise((resolve, reject) => {
        readline.question("Masukkan nama untuk basis pengetahuan Anda:", (ans) => {
          ans.trim() ? resolve(ans) : reject(new Error("Nama basis pengetahuan tidak boleh kosong."));
        });
      });
      const workspaceId = process.env.WORKSPACE_ID;

      const result = await KbCreate.createKnowledgeBase(filePath, workspaceId, kbName);
      if (result) console.log(`ID basis pengetahuan: ${result}`);
      else console.log("Gagal membuat basis pengetahuan.");
    } catch (err) {
      console.error(err.message);
    } finally {
      readline.close();
    }
  }
}

exports.KbCreate = KbCreate;
KbCreate.main(process.argv.slice(2));

C#

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

using Newtonsoft.Json;
using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseCreate
    {
        /// <summary>
        /// Memeriksa dan meminta Anda untuk menyetel variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel. Jika tidak, kembalikan false.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey secret" },
                { "WORKSPACE_ID", "ID ruang kerja Alibaba Cloud Model Studio" }
            };

            var missingVars = new List<string>();
            foreach (var entry in requiredVars)
            {
                string value = Environment.GetEnvironmentVariable(entry.Key);
                if (string.IsNullOrEmpty(value))
                {
                    missingVars.Add(entry.Key);
                    Console.WriteLine($"Error: Setel variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Menghitung hash MD5 dari sebuah file.
        /// </summary>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <returns>Hash MD5 dari file.</returns>
        /// <exception cref="Exception">Pengecualian dilempar jika terjadi kesalahan selama perhitungan.</exception>
        public static string CalculateMD5(string filePath)
        {
            using (var md5 = MD5.Create())
            {
                using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    byte[] hashBytes = md5.ComputeHash(stream);
                    StringBuilder sb = new StringBuilder();
                    foreach (byte b in hashBytes)
                    {
                        sb.Append(b.ToString("x2"));
                    }
                    return sb.ToString();
                }
            }
        }

        /// <summary>
        /// Mendapatkan ukuran file dalam byte.
        /// </summary>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <returns>Ukuran file dalam byte.</returns>
        public static string GetFileSize(string filePath)
        {
            var file = new FileInfo(filePath);
            return file.Length.ToString();
        }

        /// <summary>
        /// Menginisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang dikonfigurasi.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama inisialisasi.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Client CreateClient()
        {
            var config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Meminta sewa unggah file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="categoryId">ID kategori.</param>
        /// <param name="fileName">Nama file.</param>
        /// <param name="fileMd5">Hash MD5 dari file.</param>
        /// <param name="fileSize">Ukuran file dalam byte.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseResponse ApplyLease(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string categoryId,
            string fileName,
            string fileMd5,
            string fileSize,
            string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var applyFileUploadLeaseRequest = new AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseRequest
            {
                FileName = fileName,
                Md5 = fileMd5,
                SizeInBytes = fileSize
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.ApplyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        }

        /// <summary>
        /// Mengunggah file ke penyimpanan sementara.
        /// </summary>
        /// <param name="preSignedUrl">URL dalam sewa unggah.</param>
        /// <param name="headers">Header permintaan untuk unggahan.</param>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama unggahan.</exception>
        public static void UploadFile(string preSignedUrl, Dictionary<string, string> headers, string filePath)
        {
            var file = new FileInfo(filePath);
            if (!File.Exists(filePath))
            {
                throw new ArgumentException($"File tidak ada atau bukan file biasa: {filePath}");
            }

            using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                var url = new Uri(preSignedUrl);
                var conn = (HttpWebRequest)WebRequest.Create(url);
                conn.Method = "PUT";
                conn.ContentType = headers["Content-Type"];
                conn.Headers.Add("X-bailian-extra", headers["X-bailian-extra"]);

                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    conn.GetRequestStream().Write(buffer, 0, bytesRead);
                }

                using (var response = (HttpWebResponse)conn.GetResponse())
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception($"Unggah gagal: {response.StatusCode}");
                    }
                }
            }
        }

        /// <summary>
        /// Menambahkan file ke kategori.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="leaseId">ID sewa.</param>
        /// <param name="parser">Parser untuk file.</param>
        /// <param name="categoryId">ID kategori.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.AddFileResponse AddFile(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string leaseId,
            string parser,
            string categoryId,
            string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var addFileRequest = new AlibabaCloud.SDK.Bailian20231229.Models.AddFileRequest
            {
                LeaseId = leaseId,
                Parser = parser,
                CategoryId = categoryId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.AddFileWithOptions(workspaceId, addFileRequest, headers, runtime);
        }

        /// <summary>
        /// Meminta informasi dasar file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="fileId">ID file.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.DescribeFileResponse DescribeFile(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string fileId)
        {
            var headers = new Dictionary<string, string>() { };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.DescribeFileWithOptions(workspaceId, fileId, headers, runtime);
        }

        /// <summary>
        /// Membuat basis pengetahuan di layanan Model Studio (inisialisasi).
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="fileId">ID file.</param>
        /// <param name="name">Nama basis pengetahuan.</param>
        /// <param name="structureType">Tipe data dari basis pengetahuan.</param>
        /// <param name="sourceType">Tipe data aplikasi. Kategori dan file didukung.</param>
        /// <param name="sinkType">Kelas penyimpanan vektor dari basis pengetahuan.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.CreateIndexResponse CreateIndex(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string fileId,
            string name,
            string structureType,
            string sourceType,
            string sinkType)
        {
            var headers = new Dictionary<string, string>() { };
            var createIndexRequest = new AlibabaCloud.SDK.Bailian20231229.Models.CreateIndexRequest
            {
                StructureType = structureType,
                Name = name,
                SourceType = sourceType,
                SinkType = sinkType,
                DocumentIds = new List<string> { fileId }
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.CreateIndexWithOptions(workspaceId, createIndexRequest, headers, runtime);
        }

        /// <summary>
        /// Mengirimkan tugas pengindeksan ke layanan Model Studio.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexJobResponse SubmitIndex(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string indexId)
        {
            var headers = new Dictionary<string, string>() { };
            var submitIndexJobRequest = new AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexJobRequest
            {
                IndexId = indexId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.SubmitIndexJobWithOptions(workspaceId, submitIndexJobRequest, headers, runtime);
        }

        /// <summary>
        /// Meminta status tugas pengindeksan.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="jobId">ID tugas.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyelemparan pengecualian jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string jobId,
            string indexId)
        {
            var headers = new Dictionary<string, string>() { };
            var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
            {
                IndexId = indexId,
                JobId = jobId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
        }

        /// <summary>
        /// Membuat basis pengetahuan menggunakan layanan Model Studio.
        /// </summary>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="name">Nama basis pengetahuan.</param>
        /// <returns>ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan null.</returns>
        public static string CreateKnowledgeBase(string filePath, string workspaceId, string name)
        {
            // Tetapkan nilai default.
            string categoryId = "default";
            string parser = "DASHSCOPE_DOCMIND";
            string sourceType = "DATA_CENTER_FILE";
            string structureType = "unstructured";
            string sinkType = "DEFAULT";

            try
            {
                Console.WriteLine("Langkah 1: Inisialisasi klien.");
                AlibabaCloud.SDK.Bailian20231229.Client client = CreateClient();

                Console.WriteLine("Langkah 2: Persiapkan informasi file.");
                var fileInfo = new FileInfo(filePath);
                string fileName = fileInfo.Name;
                string fileMd5 = CalculateMD5(filePath);
                string fileSize = GetFileSize(filePath);

                Console.WriteLine("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.");
                var leaseResponse = ApplyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
                string leaseId = leaseResponse.Body.Data.FileUploadLeaseId;
                string uploadUrl = leaseResponse.Body.Data.Param.Url;
                var uploadHeaders = leaseResponse.Body.Data.Param.Headers;

                Console.WriteLine("Langkah 4: Unggah file ke Alibaba Cloud Model Studio.");
                // Instal Newtonsoft.Json secara mandiri.
                var uploadHeadersMap = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(uploadHeaders));
                UploadFile(uploadUrl, uploadHeadersMap, filePath);

                Console.WriteLine("Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.");
                var addResponse = AddFile(client, leaseId, parser, categoryId, workspaceId);
                string fileId = addResponse.Body.Data.FileId;

                Console.WriteLine("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.");
                while (true)
                {
                    var describeResponse = DescribeFile(client, workspaceId, fileId);
                    string status = describeResponse.Body.Data.Status;
                    Console.WriteLine($"Status file saat ini: {status}");

                    if (status == "INIT")
                    {
                        Console.WriteLine("File sedang menunggu parsing. Tunggu sebentar...");
                    }
                    else if (status == "PARSING")
                    {
                        Console.WriteLine("File sedang diparsing. Tunggu sebentar...");
                    }
                    else if (status == "PARSE_SUCCESS")
                    {
                        Console.WriteLine("File telah diparsing.");
                        break;
                    }
                    else
                    {
                        Console.WriteLine($"Status file tidak dikenal: {status}. Hubungi dukungan teknis.");
                        return null;
                    }
                    System.Threading.Thread.Sleep(5000);
                }

                Console.WriteLine("Langkah 7: Buat basis pengetahuan di Alibaba Cloud Model Studio.");
                var indexResponse = CreateIndex(client, workspaceId, fileId, name, structureType, sourceType, sinkType);
                string indexId = indexResponse.Body.Data.Id;

                Console.WriteLine("Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.");
                var submitResponse = SubmitIndex(client, workspaceId, indexId);
                string jobId = submitResponse.Body.Data.Id;

                Console.WriteLine("Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.");
                while (true)
                {
                    var getStatusResponse = GetIndexJobStatus(client, workspaceId, jobId, indexId);
                    string status = getStatusResponse.Body.Data.Status;
                    Console.WriteLine($"Status tugas pengindeksan saat ini: {status}");
                    if (status == "COMPLETED")
                    {
                        break;
                    }
                    System.Threading.Thread.Sleep(5000);
                }

                Console.WriteLine("Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.");
                return indexId;

            }
            catch (Exception ex)
            {
                Console.WriteLine($"Terjadi kesalahan: {ex.Message}");
                Console.WriteLine("Detail Kesalahan: " + ex.StackTrace);
                return null;
            }
        }

        /// <summary>
        /// Fungsi utama.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Pemeriksaan variabel lingkungan gagal.");
                return;
            }

            Console.Write("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:");
            string filePath = Console.ReadLine();

            Console.Write("Masukkan nama untuk basis pengetahuan Anda:");
            string kbName = Console.ReadLine();

            string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
            string result = CreateKnowledgeBase(filePath, workspaceId, kbName);
            if (result != null)
            {
                Console.WriteLine($"ID basis pengetahuan: {result}");
            }
        }
    }
}

Go

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
package main

import (
	"bufio"
	"crypto/md5"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"time"

	bailian20231229 "github.com/alibabacloud-go/bailian-20231229/v2/client"
	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
	"github.com/go-resty/resty/v2"
)

// CheckEnvironmentVariables memeriksa dan meminta Anda untuk menyetel variabel lingkungan yang diperlukan.
func CheckEnvironmentVariables() bool {
	// Variabel lingkungan yang diperlukan dan deskripsinya.
	requiredVars := map[string]string{
		"ALIBABA_CLOUD_ACCESS_KEY_ID":     "Alibaba Cloud AccessKey ID",
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Alibaba Cloud AccessKey secret",
		"WORKSPACE_ID":                    "ID ruang kerja Alibaba Cloud Model Studio",
	}

	var missingVars []string
	for varName, desc := range requiredVars {
		if os.Getenv(varName) == "" {
			fmt.Printf("Error: Setel variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// CalculateMD5 menghitung hash MD5 dari sebuah file.
//
// Parameter:
//   - filePath (string): Jalur lokal file.
//
// Mengembalikan:
//   - string: Hash MD5 dari file.
//   - error: Pesan kesalahan.
func CalculateMD5(filePath string) (_result string, _err error) {
	file, err := os.Open(filePath)
	if err != nil {
		return "", err
	}
	defer file.Close()

	md5Hash := md5.New()
	_, err = io.Copy(md5Hash, file)
	if err != nil {
		return "", err
	}

	return fmt.Sprintf("%x", md5Hash.Sum(nil)), nil
}

// GetFileSize mendapatkan ukuran file dalam byte.
//
// Parameter:
//   - filePath (string): Jalur lokal file.
//
// Mengembalikan:
//   - string: Ukuran file dalam byte.
//   - error: Pesan kesalahan.
func GetFileSize(filePath string) (_result string, _err error) {
	info, err := os.Stat(filePath)
	if err != nil {
		return "", err
	}
	return fmt.Sprintf("%d", info.Size()), nil
}

// CreateClient membuat dan mengonfigurasi klien.
//
// Mengembalikan:
//   - *client.Bailian20231229Client: Klien yang dikonfigurasi.
//   - error: Pesan kesalahan.
func CreateClient() (_result *bailian20231229.Client, _err error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// ApplyLease meminta sewa unggah file dari layanan Model Studio.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - categoryId (string): ID kategori.
//   - fileName (string): Nama file.
//   - fileMD5 (string): Hash MD5 dari file.
//   - fileSize (string): Ukuran file dalam byte.
//   - workspaceId (string): ID ruang kerja.
//
// Mengembalikan:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func ApplyLease(client *bailian20231229.Client, categoryId, fileName, fileMD5 string, fileSize string, workspaceId string) (_result *bailian20231229.ApplyFileUploadLeaseResponse, _err error) {
	headers := make(map[string]*string)
	applyFileUploadLeaseRequest := &bailian20231229.ApplyFileUploadLeaseRequest{
		FileName:    tea.String(fileName),
		Md5:         tea.String(fileMD5),
		SizeInBytes: tea.String(fileSize),
	}
	runtime := &util.RuntimeOptions{}
	return client.ApplyFileUploadLeaseWithOptions(tea.String(categoryId), tea.String(workspaceId), applyFileUploadLeaseRequest, headers, runtime)
}

// UploadFile mengunggah file ke penyimpanan sementara.
//
// Parameter:
//   - preSignedUrl (string): URL dalam sewa unggah.
//   - headers (map[string]string): Header permintaan untuk unggahan.
//   - filePath (string): Jalur lokal file.
func UploadFile(preSignedUrl string, headers map[string]string, filePath string) error {
	file, err := os.Open(filePath)
	if err != nil {
		return err
	}
	defer file.Close()

	body, err := io.ReadAll(file)
	if err != nil {
		return err
	}

	client := resty.New()
	uploadHeaders := map[string]string{
		"X-bailian-extra": headers["X-bailian-extra"],
		"Content-Type":    headers["Content-Type"],
	}

	resp, err := client.R().
		SetHeaders(uploadHeaders).
		SetBody(body).
		Put(preSignedUrl)

	if err != nil {
		return err
	}

	if resp.IsError() {
		return fmt.Errorf("HTTP error: %d", resp.StatusCode())
	}

	return nil
}

// AddFile menambahkan file ke kategori tertentu di layanan Model Studio.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Mengembalikan:
//   - *bailian20231229.AddFileResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func AddFile(client *bailian20231229.Client, leaseId, parser, categoryId, workspaceId string) (_result *bailian20231229.AddFileResponse, _err error) {
	headers := make(map[string]*string)
	addFileRequest := &bailian20231229.AddFileRequest{
		LeaseId:    tea.String(leaseId),
		Parser:     tea.String(parser),
		CategoryId: tea.String(categoryId),
	}
	runtime := &util.RuntimeOptions{}
	return client.AddFileWithOptions(tea.String(workspaceId), addFileRequest, headers, runtime)
}

// DescribeFile mendapatkan informasi dasar file.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Mengembalikan:
//   - any: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func DescribeFile(client *bailian20231229.Client, workspaceId, fileId string) (_result *bailian20231229.DescribeFileResponse, _err error) {
	headers := make(map[string]*string)
	runtime := &util.RuntimeOptions{}
	return client.DescribeFileWithOptions(tea.String(workspaceId), tea.String(fileId), headers, runtime)
}

// CreateIndex membuat basis pengetahuan di layanan Model Studio (inisialisasi).
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//   - name (string): Nama basis pengetahuan.
//   - structureType (string): Tipe data dari basis pengetahuan.
//   - sourceType (string): Tipe data aplikasi. Kategori dan file didukung.
//   - sinkType (string): Kelas penyimpanan vektor dari basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.CreateIndexResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func CreateIndex(client *bailian20231229.Client, workspaceId, fileId, name, structureType, sourceType, sinkType string) (_result *bailian20231229.CreateIndexResponse, _err error) {
	headers := make(map[string]*string)
	createIndexRequest := &bailian20231229.CreateIndexRequest{
		StructureType: tea.String(structureType),
		Name:          tea.String(name),
		SourceType:    tea.String(sourceType),
		SinkType:      tea.String(sinkType),
		DocumentIds:   []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.CreateIndexWithOptions(tea.String(workspaceId), createIndexRequest, headers, runtime)
}

// SubmitIndex mengirimkan tugas pengindeksan.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.SubmitIndexJobResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func SubmitIndex(client *bailian20231229.Client, workspaceId, indexId string) (_result *bailian20231229.SubmitIndexJobResponse, _err error) {
	headers := make(map[string]*string)
	submitIndexJobRequest := &bailian20231229.SubmitIndexJobRequest{
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.SubmitIndexJobWithOptions(tea.String(workspaceId), submitIndexJobRequest, headers, runtime)
}

// GetIndexJobStatus meminta status tugas pengindeksan.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID tugas.
//   - indexId (string): ID basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.GetIndexJobStatusResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func GetIndexJobStatus(client *bailian20231229.Client, workspaceId, jobId, indexId string) (_result *bailian20231229.GetIndexJobStatusResponse, _err error) {
	headers := make(map[string]*string)
	getIndexJobStatusRequest := &bailian20231229.GetIndexJobStatusRequest{
		JobId:   tea.String(jobId),
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.GetIndexJobStatusWithOptions(tea.String(workspaceId), getIndexJobStatusRequest, headers, runtime)
}

// CreateKnowledgeBase membuat basis pengetahuan menggunakan layanan Model Studio.
//
// Parameter:
//   - filePath (string): Jalur lokal file.
//   - workspaceId (string): ID ruang kerja.
//   - name (string): Nama basis pengetahuan.
//
// Mengembalikan:
//   - string atau nil: ID basis pengetahuan jika pemanggilan berhasil. Jika tidak, kembalikan nil.
//   - error: Pesan kesalahan.
func CreateKnowledgeBase(filePath, workspaceId, name string) (_result string, _err error) {
	// Tetapkan nilai default.
	categoryId := "default"
	parser := "DASHSCOPE_DOCMIND"
	sourceType := "DATA_CENTER_FILE"
	structureType := "unstructured"
	sinkType := "DEFAULT"

	fmt.Println("Langkah 1: Inisialisasi klien.")
	client, err := CreateClient()
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 2: Persiapkan informasi file.")
	fileName := filepath.Base(filePath)
	fileMD5, err := CalculateMD5(filePath)
	if err != nil {
		return "", err
	}
	fileSizeStr, err := GetFileSize(filePath)
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.")
	leaseResponse, err := ApplyLease(client, categoryId, fileName, fileMD5, fileSizeStr, workspaceId)
	if err != nil {
		return "", err
	}

	leaseId := tea.StringValue(leaseResponse.Body.Data.FileUploadLeaseId)
	uploadURL := tea.StringValue(leaseResponse.Body.Data.Param.Url)
	uploadHeaders := leaseResponse.Body.Data.Param.Headers

	jsonData, err := json.Marshal(uploadHeaders)
	if err != nil {
		return "", err
	}

	var uploadHeadersMap map[string]string
	err = json.Unmarshal(jsonData, &uploadHeadersMap)
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 4: Unggah file ke Alibaba Cloud Model Studio.")
	err = UploadFile(uploadURL, uploadHeadersMap, filePath)
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 5: Tambahkan file ke server Alibaba Cloud Model Studio.")
	addResponse, err := AddFile(client, leaseId, parser, categoryId, workspaceId)
	if err != nil {
		return "", err
	}
	fileID := tea.StringValue(addResponse.Body.Data.FileId)

	fmt.Println("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.")
	for {
		describeResponse, err := DescribeFile(client, workspaceId, fileID)
		if err != nil {
			return "", err
		}

		status := tea.StringValue(describeResponse.Body.Data.Status)
		fmt.Printf("Status file saat ini: %s\n", status)

		if status == "INIT" {
			fmt.Println("File sedang menunggu parsing. Tunggu sebentar...")
		} else if status == "PARSING" {
			fmt.Println("File sedang diparsing. Tunggu sebentar...")
		} else if status == "PARSE_SUCCESS" {
			fmt.Println("File telah diparsing.")
			break
		} else {
			fmt.Printf("Status file tidak dikenal: %s. Hubungi dukungan teknis.\n", status)
			return "", fmt.Errorf("status dokumen tidak dikenal: %s", status)
		}
		time.Sleep(5 * time.Second)
	}

	fmt.Println("Langkah 7: Buat basis pengetahuan di Alibaba Cloud Model Studio.")
	indexResponse, err := CreateIndex(client, workspaceId, fileID, name, structureType, sourceType, sinkType)
	if err != nil {
		return "", err
	}
	indexID := tea.StringValue(indexResponse.Body.Data.Id)

	fmt.Println("Langkah 8: Kirimkan tugas pengindeksan ke Alibaba Cloud Model Studio.")
	submitResponse, err := SubmitIndex(client, workspaceId, indexID)
	if err != nil {
		return "", err
	}
	jobID := tea.StringValue(submitResponse.Body.Data.Id)

	fmt.Println("Langkah 9: Dapatkan status tugas pengindeksan dari Alibaba Cloud Model Studio.")
	for {
		getIndexJobStatusResponse, err := GetIndexJobStatus(client, workspaceId, jobID, indexID)
		if err != nil {
			return "", err
		}

		status := tea.StringValue(getIndexJobStatusResponse.Body.Data.Status)
		fmt.Printf("Status tugas pengindeksan saat ini: %s\n", status)

		if status == "COMPLETED" {
			break
		}
		time.Sleep(5 * time.Second)
	}

	fmt.Println("Basis pengetahuan Alibaba Cloud Model Studio telah dibuat.")
	return indexID, nil
}

// Fungsi utama.
func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Pemeriksaan variabel lingkungan gagal.")
		return
	}
	// Buat scanner untuk membaca input.
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal file untuk diunggah. Contoh di Linux: /xxx/xxx/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx:")
	filePath, _ := reader.ReadString('\n')
	filePath = strings.TrimSpace(filePath)
	fmt.Print("Masukkan nama untuk basis pengetahuan Anda:")
	kbName, _ := reader.ReadString('\n')
	kbName = strings.TrimSpace(kbName)
	workspaceID := os.Getenv("WORKSPACE_ID")
	indexID, err := CreateKnowledgeBase(filePath, workspaceID, kbName)
	if err != nil {
		fmt.Printf("Terjadi kesalahan: %v\n", err)
		return
	}
	fmt.Printf("ID basis pengetahuan: %s\n", indexID)
}

Pengambilan dari basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, selesaikan semua prasyarat. Pengguna RAM harus mendapatkan kebijakan AliyunBailianDataFullAccess.

  • Jika menggunakan IDE atau plugin pengembangan lainnya, konfigurasikan variabel ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID di lingkungan pengembangan yang sesuai.

Python

# Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
import os

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


def check_environment_variables():
    """Periksa dan beri tahu untuk menetapkan variabel lingkungan yang diperlukan."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud Anda',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud Anda',
        'WORKSPACE_ID': 'ID ruang kerja Model Studio Alibaba Cloud Anda'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Tetapkan variabel lingkungan {var} ({description}).")
    
    return len(missing_vars) == 0


# Buat klien.
def create_client() -> bailian20231229Client:
    """
    Buat dan konfigurasikan klien.

    Returns:
        bailian20231229Client: Klien yang dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
        # Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


# Ambil basis pengetahuan.
def retrieve_index(client, workspace_id, index_id, query):
    """
    Ambil informasi dari basis pengetahuan tertentu.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        query (str): Pernyataan pencarian.

    Returns:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    retrieve_request = bailian_20231229_models.RetrieveRequest(
        index_id=index_id,
        query=query
    )
    runtime = util_models.RuntimeOptions()
    return client.retrieve_with_options(workspace_id, retrieve_request, headers, runtime)


def main():
    """
    Gunakan layanan Model Studio untuk mengambil basis pengetahuan.

    Returns:
        str atau None: Segmen teks yang diambil jika operasi berhasil. Jika tidak, kembalikan None.
    """
    if not check_environment_variables():
        print("Pemeriksaan variabel lingkungan gagal.")
        return
    try:
        print("Langkah 1: Buat klien.")
        client = create_client()
        print("Langkah 2: Ambil basis pengetahuan.")
        index_id = input("Masukkan ID basis pengetahuan: ")  # Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
        query = input("Masukkan pernyataan pencarian: ")
        workspace_id = os.environ.get('WORKSPACE_ID')
        resp = retrieve_index(client, workspace_id, index_id, query)
        result = UtilClient.to_jsonstring(resp.body)
        print(result)
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return None


if __name__ == '__main__':
    main()

Java

// Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.*;

public class KnowledgeBaseRetrieve {

    /**
     * Periksa dan beri tahu untuk menetapkan variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah ditetapkan, false jika tidak.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud Anda");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud Anda");
        requiredVars.put("WORKSPACE_ID", "ID ruang kerja Model Studio Alibaba Cloud Anda");

        List<String> missingVars = new ArrayList<>();
        for (Map.Entry<String, String> entry : requiredVars.entrySet()) {
            String value = System.getenv(entry.getKey());
            if (value == null || value.isEmpty()) {
                missingVars.add(entry.getKey());
                System.out.println("Error: Tetapkan variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Inisialisasi klien.
     *
     * @return Objek klien yang dikonfigurasi.
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Ambil informasi dari basis pengetahuan tertentu.
     *
     * @param client         Objek klien (bailian20231229Client).
     * @param workspaceId    ID ruang kerja.
     * @param indexId        ID basis pengetahuan.
     * @param query          Pernyataan pencarian.
     * @return               Tanggapan dari layanan Model Studio.
     */
    public static RetrieveResponse retrieveIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String query) throws Exception {
        RetrieveRequest retrieveRequest = new RetrieveRequest();
        retrieveRequest.setIndexId(indexId);
        retrieveRequest.setQuery(query);
        RuntimeOptions runtime = new RuntimeOptions();
        return client.retrieveWithOptions(workspaceId, retrieveRequest, null, runtime);
    }

    /**
     * Gunakan layanan Model Studio untuk mengambil basis pengetahuan.
     */
    public static void main(String[] args) {
        if (!checkEnvironmentVariables()) {
            System.out.println("Pemeriksaan variabel lingkungan gagal.");
            return;
        }

        try {
            // Langkah 1: Inisialisasi klien.
            System.out.println("Langkah 1: Buat klien.");
            com.aliyun.bailian20231229.Client client = createClient();

            // Langkah 2: Ambil basis pengetahuan.
            System.out.println("Langkah 2: Ambil basis pengetahuan.");
            Scanner scanner = new Scanner(System.in);
            System.out.print("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
            String indexId = scanner.nextLine();
            System.out.print("Masukkan pernyataan pencarian: ");
            String query = scanner.nextLine();
            String workspaceId = System.getenv("WORKSPACE_ID");
            RetrieveResponse resp = retrieveIndex(client, workspaceId, indexId, query);

            // Instal jackson-databind untuk mengonversi badan tanggapan menjadi string JSON.
            ObjectMapper mapper = new ObjectMapper();
            String result = mapper.writeValueAsString(resp.getBody());
            System.out.println(result);
        } catch (Exception e) {
            System.out.println("Terjadi kesalahan: " + e.getMessage());
        }
    }
}

PHP

<?php
// Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\SDK\Bailian\V20231229\Bailian;
use \Exception;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Bailian\V20231229\Models\RetrieveRequest;

class KnowledgeBaseRetrieve {

    /**
    * Periksa dan beri tahu untuk menetapkan variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan, false jika tidak.
    */
    public static function checkEnvironmentVariables() {
        $requiredVars = [
            'ALIBABA_CLOUD_ACCESS_KEY_ID' => 'ID AccessKey Alibaba Cloud Anda',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET' => 'Rahasia AccessKey Alibaba Cloud Anda',
            'WORKSPACE_ID' => 'ID ruang kerja Model Studio Alibaba Cloud Anda'
        ];
        $missingVars = [];
        foreach ($requiredVars as $var => $description) {
            if (!getenv($var)) {
                $missingVars[] = $var;
                echo "Error: Tetapkan variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Inisialisasi klien.
     *
     * @return Bailian Objek klien yang dikonfigurasi.
     */
    public static function createClient(){
        $config = new Config([
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

     /**
     * Ambil informasi dari basis pengetahuan tertentu.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $query Pernyataan pencarian.
     * @return RetrieveResponse Tanggapan dari layanan Model Studio.
     * @throws Exception
     */
    public static function retrieveIndex($client, $workspaceId, $indexId, $query) {
        $headers = [];
        $retrieveRequest = new RetrieveRequest([
            "query" => $query,
            "indexId" => $indexId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->retrieveWithOptions($workspaceId, $retrieveRequest, $headers, $runtime);
    }

    /**
     * Gunakan layanan Model Studio untuk mengambil basis pengetahuan.
     */
    public static function main($args){
        if (!self::checkEnvironmentVariables()) {
            echo "Pemeriksaan variabel lingkungan gagal.\n";
            return;
        }

        try {
            // Langkah 1: Buat klien.
            echo "Langkah 1: Buat klien.\n";
            $client = self::createClient();

            // Langkah 2: Ambil basis pengetahuan.
            echo "Langkah 2: Ambil basis pengetahuan.\n";
            $indexId = readline("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
            $query = readline("Masukkan pernyataan pencarian: "); 
            $workspaceId = getenv("WORKSPACE_ID");
            // Panggil metode pengambilan.
            $resp = self::retrieveIndex($client, $workspaceId, $indexId, $query);
            // Konversi badan tanggapan menjadi string JSON.
            $result = json_encode($resp->body, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
            echo $result . "\n";
        } catch (Exception $e) {
            echo "Terjadi kesalahan: " . $e->getMessage() . "\n";
        }
    }
}
// Asumsikan bahwa autoload.php ada di folder induk file kode saat ini. Sesuaikan jalur berdasarkan struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseRetrieve::main(array_slice($argv, 1));

Node.js

// Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
'use strict';

const bailian20231229 = require('@alicloud/bailian20231229');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class KbRetrieve {

    /**
     * Periksa dan beri tahu untuk menetapkan variabel lingkungan yang diperlukan.
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan, false jika tidak.
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud Anda',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud Anda',
            'WORKSPACE_ID': 'ID ruang kerja Model Studio Alibaba Cloud Anda'
        };

        const missing = [];
        for (const [varName, desc] of Object.entries(requiredVars)) {
            if (!process.env[varName]) {
                console.error(`Error: Tetapkan variabel lingkungan ${varName} (${desc})`);
                missing.push(varName);
            }
        }
        return missing.length === 0;
    }

    /**
     * Buat dan konfigurasikan klien.
     * @return Client
     * @throws Exception
     */
    static createClient() {
        const config = new OpenApi.Config({
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
        });
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new bailian20231229.default(config);
    }

    /**
     * Ambil informasi dari basis pengetahuan tertentu.
     * @param {bailian20231229.Client} client Klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} indexId ID basis pengetahuan.
     * @param {string} query Pernyataan pencarian.
     * @returns {Promise<bailian20231229.RetrieveResponse>} Tanggapan dari layanan Model Studio.
     */
    static async retrieveIndex(client, workspaceId, indexId, query) {
        const headers = {};
        const req = new bailian20231229.RetrieveRequest({
            indexId,
            query
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.retrieveWithOptions(workspaceId, req, headers, runtime);
    }

    /**
     * Gunakan layanan Model Studio untuk mengambil basis pengetahuan.
     */
    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Pemeriksaan variabel lingkungan gagal.");
            return;
        }

        const readline = require('readline').createInterface({
            input: process.stdin,
            output: process.stdout
        });

        try {
            console.log("Langkah 1: Buat klien.")
            const client = this.createClient();
            
            console.log("Langkah 2: Ambil basis pengetahuan.")
            const indexId = await new Promise((resolve, reject) => {
                // ID basis pengetahuan adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
                readline.question("Masukkan ID basis pengetahuan: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID basis pengetahuan tidak boleh kosong."));
                });
            });
            const query = await new Promise((resolve, reject) => {
                readline.question("Masukkan pernyataan pencarian: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("Pernyataan pencarian tidak boleh kosong."));
                });
            });
            const workspaceId = process.env.WORKSPACE_ID;
            const resp = await this.retrieveIndex(client, workspaceId, indexId, query);
            const result = JSON.stringify(resp.body);
            console.log(result);
        } catch (err) {
            console.error(`Terjadi kesalahan: ${err.message}`);
            return;
        } finally {
            readline.close();
        }
    }
}

exports.KbRetrieve = KbRetrieve;
KbRetrieve.main(process.argv.slice(2));

C#

// Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;

using Newtonsoft.Json;
using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseRetrieve
    {
        /// <summary>
        /// Periksa dan beri tahu untuk menetapkan variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan, false jika tidak.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud Anda" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud Anda" },
                { "WORKSPACE_ID", "ID ruang kerja Model Studio Alibaba Cloud Anda" }
            };

            var missingVars = new List<string>();
            foreach (var entry in requiredVars)
            {
                string value = Environment.GetEnvironmentVariable(entry.Key);
                if (string.IsNullOrEmpty(value))
                {
                    missingVars.Add(entry.Key);
                    Console.WriteLine($"Error: Tetapkan variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Inisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang dikonfigurasi.</returns>
        /// <exception cref="Exception">Penyimpangan dilempar jika terjadi kesalahan selama inisialisasi.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Client CreateClient()
        {
            var config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Ambil informasi dari basis pengetahuan tertentu.
        /// </summary>
        /// <param name="client">Objek klien (bailian20231229Client).</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <param name="query">Pernyataan pencarian.</param>
        /// <returns>Tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Penyimpangan dilempar jika pemanggilan gagal.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.RetrieveResponse RetrieveIndex(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string indexId,
            string query)
        {
            var headers = new Dictionary<string, string>() { };
            var retrieveRequest = new AlibabaCloud.SDK.Bailian20231229.Models.RetrieveRequest
            {
                IndexId = indexId,
                Query = query
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.RetrieveWithOptions(workspaceId, retrieveRequest, headers, runtime);
        }

        /// <summary>
        /// Gunakan layanan Model Studio untuk mengambil basis pengetahuan.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Pemeriksaan variabel lingkungan gagal.");
                return;
            }

            try
            {
                // Langkah 1: Inisialisasi klien.
                Console.WriteLine("Langkah 1: Buat klien.");
                Bailian20231229.Client client = CreateClient();

                // Langkah 2: Ambil basis pengetahuan.
                Console.WriteLine("Langkah 2: Ambil basis pengetahuan.");
                Console.Write("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
                string indexId = Console.ReadLine();
                Console.Write("Masukkan pernyataan pencarian: ");
                string query = Console.ReadLine();
                string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                Bailian20231229.Models.RetrieveResponse resp = RetrieveIndex(client, workspaceId, indexId, query);

                // Instal Newtonsoft.Json untuk mengonversi badan tanggapan menjadi string JSON.
                var mapper = new JsonSerializerSettings { Formatting = Formatting.Indented };
                string result = JsonConvert.SerializeObject(resp.Body, mapper);
                Console.WriteLine(result);
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
            }
        }
    }
}

Go

// Kode sampel ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"

	bailian20231229 "github.com/alibabacloud-go/bailian-20231229/v2/client"
	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
)

// checkEnvironmentVariables memeriksa dan memberi tahu untuk menetapkan variabel lingkungan yang diperlukan.
func checkEnvironmentVariables() bool {
	// Variabel lingkungan yang diperlukan dan deskripsinya.
	requiredVars := map[string]string{
		"ALIBABA_CLOUD_ACCESS_KEY_ID":     "ID AccessKey Alibaba Cloud Anda",
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Rahasia AccessKey Alibaba Cloud Anda",
		"WORKSPACE_ID":                    "ID ruang kerja Model Studio Alibaba Cloud Anda",
	}

	var missingVars []string
	for varName, desc := range requiredVars {
		if os.Getenv(varName) == "" {
			fmt.Printf("Error: Tetapkan variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// createClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *bailian20231229.Client: Klien yang dikonfigurasi.
//   - error: Pesan kesalahan.
func createClient() (_result *bailian20231229.Client, _err error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// retrieveIndex mengambil informasi dari basis pengetahuan tertentu.
//
// Parameters:
//   client: Klien.
//   workspaceId: ID ruang kerja.
//   indexId: ID basis pengetahuan.
//   query: Pernyataan pencarian.
//
// Returns:
//   Tanggapan dari layanan Model Studio.
//   Kesalahan.
func retrieveIndex(client *bailian20231229.Client, workspaceId, indexId, query string) (*bailian20231229.RetrieveResponse, error) {
	headers := make(map[string]*string)
	request := &bailian20231229.RetrieveRequest{
		IndexId: tea.String(indexId),
		Query:   tea.String(query),
	}
	runtime := &util.RuntimeOptions{}
	return client.RetrieveWithOptions(tea.String(workspaceId), request, headers, runtime)
}

// Fungsi utama.
func main() {
	if !checkEnvironmentVariables() {
		fmt.Println("Pemeriksaan variabel lingkungan gagal.")
		return
	}

	// Langkah 1: Inisialisasi klien.
	fmt.Println("Langkah 1: Buat klien.")
	client, err := createClient()
	if err != nil {
		fmt.Println("Gagal membuat klien:", err)
		return
	}

	// Langkah 2: Ambil basis pengetahuan.
	fmt.Println("Langkah 2: Ambil basis pengetahuan.")
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan ID basis pengetahuan: ") // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di konsol Model Studio.
	indexId, _ := reader.ReadString('\n')
	indexId = strings.TrimSpace(indexId)
	fmt.Print("Masukkan pernyataan pencarian: ")
	query, _ := reader.ReadString('\n')
	query = strings.TrimSpace(query)
	workspaceId := os.Getenv("WORKSPACE_ID")
	resp, err := retrieveIndex(client, workspaceId, indexId, query)
	if err != nil {
		fmt.Printf("Pengambilan gagal: %v\n", err)
		return
	}
        fmt.Println(resp.Body)
}

Memperbarui Basis Pengetahuan

Penting
  • Sebelum memanggil contoh ini, selesaikan semua prasyarat. Jika menggunakan Pengguna RAM untuk memanggil contoh ini, berikan kebijakan AliyunBailianDataFullAccess policy kepada Pengguna RAM.

  • Jika menggunakan IDE atau plugin pengembangan lainnya, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID di lingkungan pengembangan Anda.

Python

# Kode sampel hanya untuk referensi. Jangan gunakan di lingkungan produksi.
import hashlib
import os
import time

import requests
from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models


def check_environment_variables():
    """Memeriksa dan meminta untuk mengatur variabel lingkungan yang diperlukan."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud',
        'WORKSPACE_ID': 'ID ruang kerja Model Studio'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Atur variabel lingkungan {var} ({description}).")
    
    return len(missing_vars) == 0


# Buat klien.
def create_client() -> bailian20231229Client:
    """
    Membuat dan mengonfigurasi klien.

    Mengembalikan:
        bailian20231229Client: Klien yang dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    # Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


def calculate_md5(file_path: str) -> str:
    """
    Menghitung hash MD5 dari sebuah file.

    Args:
        file_path (str): Path lokal file.

    Mengembalikan:
        str: Hash MD5 dari file.
    """
    md5_hash = hashlib.md5()

    # Baca file dalam mode biner.
    with open(file_path, "rb") as f:
        # Baca file dalam chunk untuk menghindari penggunaan memori yang tinggi untuk file berukuran besar.
        for chunk in iter(lambda: f.read(4096), b""):
            md5_hash.update(chunk)

    return md5_hash.hexdigest()


def get_file_size(file_path: str) -> int:
    """
    Mendapatkan ukuran file dalam byte.
    Args:
        file_path (str): Path lokal file.
    Mengembalikan:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


# Minta lease unggah file.
def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    Meminta lease unggah file dari layanan Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        category_id (str): ID kategori.
        file_name (str): Nama file.
        file_md5 (str): Hash MD5 dari file.
        file_size (int): Ukuran file dalam byte.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.ApplyFileUploadLeaseRequest(
        file_name=file_name,
        md_5=file_md5,
        size_in_bytes=file_size,
    )
    runtime = util_models.RuntimeOptions()
    return client.apply_file_upload_lease_with_options(category_id, workspace_id, request, headers, runtime)


# Unggah file ke penyimpanan sementara.
def upload_file(pre_signed_url, headers, file_path):
    """
    Unggah file ke layanan Model Studio.
    Args:
        lease_id (str): ID lease.
        pre_signed_url (str): URL dalam lease unggah.
        headers (dict): Header permintaan untuk pengunggahan.
        file_path (str): Path lokal file.
    """
    with open(file_path, 'rb') as f:
        file_content = f.read()
    upload_headers = {
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type": headers["Content-Type"]
    }
    response = requests.put(pre_signed_url, data=file_content, headers=upload_headers)
    response.raise_for_status()


# Tambahkan file ke kategori.
def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    Tambahkan file ke kategori yang ditentukan di layanan Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        lease_id (str): ID lease.
        parser (str): Parser untuk file.
        category_id (str): ID kategori.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.AddFileRequest(
        lease_id=lease_id,
        parser=parser,
        category_id=category_id,
    )
    runtime = util_models.RuntimeOptions()
    return client.add_file_with_options(workspace_id, request, headers, runtime)


# Kueri status penguraian file.
def describe_file(client, workspace_id, file_id):
    """
    Mendapatkan informasi dasar file.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    runtime = util_models.RuntimeOptions()
    return client.describe_file_with_options(workspace_id, file_id, headers, runtime)


# Kirim tugas untuk menambahkan file.
def submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type):
    """
    Menambahkan file yang telah diurai ke basis pengetahuan pencarian dokumen.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        file_id (str): ID file.
        source_type(str): Tipe data.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    submit_index_add_documents_job_request = bailian_20231229_models.SubmitIndexAddDocumentsJobRequest(
        index_id=index_id,
        document_ids=[file_id],
        source_type=source_type
    )
    runtime = util_models.RuntimeOptions()
    return client.submit_index_add_documents_job_with_options(workspace_id, submit_index_add_documents_job_request,
                                                              headers, runtime)


# Tunggu hingga tugas penambahan selesai.
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Mengueri status pekerjaan indeks.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        job_id (str): ID pekerjaan.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    get_index_job_status_request = bailian_20231229_models.GetIndexJobStatusRequest(
        index_id=index_id,
        job_id=job_id
    )
    runtime = util_models.RuntimeOptions()
    return client.get_index_job_status_with_options(workspace_id, get_index_job_status_request, headers, runtime)


# Hapus file lama.
def delete_index_document(client, workspace_id, index_id, file_id):
    """
    Menghapus satu atau beberapa file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        file_id (str): ID file.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    delete_index_document_request = bailian_20231229_models.DeleteIndexDocumentRequest(
        index_id=index_id,
        document_ids=[file_id]
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_index_document_with_options(workspace_id, delete_index_document_request, headers, runtime)


def update_knowledge_base(
        file_path: str,
        workspace_id: str,
        index_id: str,
        old_file_id: str
):
    """
    Memperbarui basis pengetahuan menggunakan layanan Model Studio.
    Args:
        file_path (str): Path lokal dari file yang diperbarui.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan yang akan diperbarui.
        old_file_id (str): ID file dari file yang akan diperbarui.
    Mengembalikan:
        str atau None: ID basis pengetahuan jika pembaruan berhasil. Jika tidak, None.
    """
    # Atur nilai default.
    category_id = 'default'
    parser = 'DASHSCOPE_DOCMIND'
    source_type = 'DATA_CENTER_FILE'
    try:
        # Langkah 1: Buat klien.
        print("Langkah 1: Buat klien.")
        client = create_client()
        # Langkah 2: Siapkan informasi file.
        print("Langkah 2: Siapkan informasi file.")
        file_name = os.path.basename(file_path)
        file_md5 = calculate_md5(file_path)
        file_size = get_file_size(file_path)
        # Langkah 3: Minta lease unggah.
        print("Langkah 3: Minta lease unggah dari Alibaba Cloud Model Studio.")
        lease_response = apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id)
        lease_id = lease_response.body.data.file_upload_lease_id
        upload_url = lease_response.body.data.param.url
        upload_headers = lease_response.body.data.param.headers
        # Langkah 4: Unggah file ke penyimpanan sementara.
        print("Langkah 4: Unggah file ke penyimpanan sementara.")
        upload_file(upload_url, upload_headers, file_path)
        # Langkah 5: Tambahkan file ke kategori.
        print("Langkah 5: Tambahkan file ke kategori.")
        add_response = add_file(client, lease_id, parser, category_id, workspace_id)
        file_id = add_response.body.data.file_id
        # Langkah 6: Periksa status file.
        print("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.")
        while True:
            describe_response = describe_file(client, workspace_id, file_id)
            status = describe_response.body.data.status
            print(f"Status file saat ini: {status}")
            if status == 'INIT':
                print("File sedang menunggu untuk diurai. Harap tunggu...")
            elif status == 'PARSING':
                print("File sedang diurai. Harap tunggu...")
            elif status == 'PARSE_SUCCESS':
                print("File telah diurai.")
                break
            else:
                print(f"Status file tidak diketahui: {status}. Hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Kirim tugas untuk menambahkan file.
        print("Langkah 7: Kirim tugas untuk menambahkan file.")
        index_add_response = submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type)
        job_id = index_add_response.body.data.id
        # Langkah 8: Kueri status pekerjaan indeks.
        print("Langkah 8: Tunggu hingga tugas penambahan selesai.")
        while True:
            get_index_job_status_response = get_index_job_status(client, workspace_id, job_id, index_id)
            status = get_index_job_status_response.body.data.status
            print(f"Status pekerjaan indeks saat ini: {status}")
            if status == 'COMPLETED':
                break
            time.sleep(5)
        print("Langkah 9: Hapus file lama.")
        delete_index_document(client, workspace_id, index_id, old_file_id)
        print("Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.")
        return index_id
    except Exception as e:
        print(f"Terjadi error: {e}")
        return None


def main():
    if not check_environment_variables():
        print("Pemeriksaan variabel lingkungan gagal.")
        return
    file_path = input("Masukkan path lokal dari file yang diperbarui untuk diunggah (contohnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):")
    index_id = input("Masukkan ID basis pengetahuan yang akan diperbarui:")  # Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperoleh ID di halaman basis pengetahuan di konsol Model Studio.
    old_file_id = input("Masukkan ID file dari file yang akan diperbarui:")  # Ini adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga dapat memperoleh ID file dengan mengeklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
    workspace_id = os.environ.get('WORKSPACE_ID')
    update_knowledge_base(file_path, workspace_id, index_id, old_file_id)


if __name__ == '__main__':
    main()

Java

// Kode sampel ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
import com.aliyun.bailian20231229.models.*;
import com.aliyun.teautil.models.RuntimeOptions;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Paths;
import java.security.MessageDigest;
import java.util.*;

public class KnowledgeBaseUpdate {

    /**
     * Periksa dan minta untuk menetapkan variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud");
        requiredVars.put("WORKSPACE_ID", "ID ruang kerja Model Studio Alibaba Cloud");

        List<String> missingVars = new ArrayList<>();
        for (Map.Entry<String, String> entry : requiredVars.entrySet()) {
            String value = System.getenv(entry.getKey());
            if (value == null || value.isEmpty()) {
                missingVars.add(entry.getKey());
                System.out.println("Error: Setel variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Hitung hash MD5 dari sebuah file.
     *
     * @param filePath Jalur lokal dari file.
     * @return Hash MD5 dari file.
     */
    public static String calculateMD5(String filePath) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        try (FileInputStream fis = new FileInputStream(filePath)) {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                md.update(buffer, 0, bytesRead);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (byte b : md.digest()) {
            sb.append(String.format("%02x", b & 0xff));
        }
        return sb.toString();
    }

    /**
     * Dapatkan ukuran file dalam byte.
     *
     * @param filePath Jalur lokal dari file.
     * @return Ukuran file dalam byte.
     */
    public static String getFileSize(String filePath) {
        File file = new File(filePath);
        long fileSize = file.length();
        return String.valueOf(fileSize);
    }

    /**
     * Inisialisasi klien.
     *
     * @return Klien yang dikonfigurasi.
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Minta sewa unggah file.
     *
     * @param client Klien.
     * @param categoryId ID kategori.
     * @param fileName Nama file.
     * @param fileMd5 Hash MD5 dari file.
     * @param fileSize Ukuran file dalam byte.
     * @param workspaceId ID ruang kerja.
     * @return Tanggapan dari layanan Model Studio.
     */
    public static ApplyFileUploadLeaseResponse applyLease(com.aliyun.bailian20231229.Client client, String categoryId, String fileName, String fileMd5, String fileSize, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest applyFileUploadLeaseRequest = new com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest();
        applyFileUploadLeaseRequest.setFileName(fileName);
        applyFileUploadLeaseRequest.setMd5(fileMd5);
        applyFileUploadLeaseRequest.setSizeInBytes(fileSize);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        ApplyFileUploadLeaseResponse applyFileUploadLeaseResponse = null;
        applyFileUploadLeaseResponse = client.applyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        return applyFileUploadLeaseResponse;
    }

    /**
     * Unggah file ke penyimpanan sementara.
     *
     * @param preSignedUrl URL dalam sewa unggah.
     * @param headers Header permintaan untuk unggahan.
     * @param filePath Jalur lokal dari file.
     * @throws Exception jika terjadi kesalahan selama unggahan.
     */
    public static void uploadFile(String preSignedUrl, Map<String, String> headers, String filePath) throws Exception {
        File file = new File(filePath);
        if (!file.exists() || !file.isFile()) {
            throw new IllegalArgumentException("File tidak ada atau bukan file reguler: " + filePath);
        }

        try (FileInputStream fis = new FileInputStream(file)) {
            URL url = new URL(preSignedUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("PUT");
            conn.setDoOutput(true);

            // Tetapkan header permintaan unggahan.
            conn.setRequestProperty("X-bailian-extra", headers.get("X-bailian-extra"));
            conn.setRequestProperty("Content-Type", headers.get("Content-Type"));

            // Baca dan unggah file dalam potongan-potongan.
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                conn.getOutputStream().write(buffer, 0, bytesRead);
            }

            int responseCode = conn.getResponseCode();
            if (responseCode != 200) {
                throw new RuntimeException("Unggah gagal: " + responseCode);
            }
        }
    }

    /**
     * Tambahkan file ke kategori.
     *
     * @param client Objek klien.
     * @param leaseId ID sewa.
     * @param parser Parser untuk file.
     * @param categoryId ID kategori.
     * @param workspaceId ID ruang kerja.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static AddFileResponse addFile(com.aliyun.bailian20231229.Client client, String leaseId, String parser, String categoryId, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.AddFileRequest addFileRequest = new com.aliyun.bailian20231229.models.AddFileRequest();
        addFileRequest.setLeaseId(leaseId);
        addFileRequest.setParser(parser);
        addFileRequest.setCategoryId(categoryId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.addFileWithOptions(workspaceId, addFileRequest, headers, runtime);
    }

    /**
     * Dapatkan informasi dasar dari file.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param fileId ID file.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static DescribeFileResponse describeFile(com.aliyun.bailian20231229.Client client, String workspaceId, String fileId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
    }

    /**
     * Lampirkan file yang telah diuraikan ke basis pengetahuan pencarian dokumen.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan.
     * @param fileId ID file.
     * @param sourceType Jenis data.
     * @return Tanggapan dari layanan Model Studio.
     */
    public static SubmitIndexAddDocumentsJobResponse submitIndexAddDocumentsJob(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId, String sourceType) throws Exception {
        Map<String, String> headers = new HashMap<>();
        SubmitIndexAddDocumentsJobRequest submitIndexAddDocumentsJobRequest = new SubmitIndexAddDocumentsJobRequest();
        submitIndexAddDocumentsJobRequest.setIndexId(indexId);
        submitIndexAddDocumentsJobRequest.setDocumentIds(Collections.singletonList(fileId));
        submitIndexAddDocumentsJobRequest.setSourceType(sourceType);
        RuntimeOptions runtime = new RuntimeOptions();
        return client.submitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
    }

    /**
     * Periksa status pekerjaan indeks.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param jobId ID pekerjaan.
     * @param indexId ID basis pengetahuan.
     * @return Objek tanggapan dari layanan Model Studio.
     */
    public static GetIndexJobStatusResponse getIndexJobStatus(com.aliyun.bailian20231229.Client client, String workspaceId, String jobId, String indexId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.GetIndexJobStatusRequest getIndexJobStatusRequest = new com.aliyun.bailian20231229.models.GetIndexJobStatusRequest();
        getIndexJobStatusRequest.setIndexId(indexId);
        getIndexJobStatusRequest.setJobId(jobId);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        GetIndexJobStatusResponse getIndexJobStatusResponse = null;
        getIndexJobStatusResponse = client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
        return getIndexJobStatusResponse;
    }

    /**
     * Hapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan.
     * @param fileId ID file.
     * @return Tanggapan dari layanan Model Studio.
     */
    public static DeleteIndexDocumentResponse deleteIndexDocument(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        DeleteIndexDocumentRequest deleteIndexDocumentRequest = new DeleteIndexDocumentRequest();
        deleteIndexDocumentRequest.setIndexId(indexId);
        deleteIndexDocumentRequest.setDocumentIds(Collections.singletonList(fileId));
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        return client.deleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
    }

    /**
     * Perbarui basis pengetahuan menggunakan layanan Model Studio.
     *
     * @param filePath Jalur lokal dari file yang diperbarui.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan yang akan diperbarui.
     * @param oldFileId ID file dari file yang akan diperbarui.
     * @return ID basis pengetahuan jika pembaruan berhasil. Jika tidak, null.
     */
    public static String updateKnowledgeBase(String filePath, String workspaceId, String indexId, String oldFileId) {
        // Tetapkan nilai default.
        String categoryId = "default";
        String parser = "DASHSCOPE_DOCMIND";
        String sourceType = "DATA_CENTER_FILE";
        try {
            // Langkah 1: Inisialisasi klien.
            System.out.println("Langkah 1: Buat klien.");
            com.aliyun.bailian20231229.Client client = createClient();

            // Langkah 2: Persiapkan informasi file untuk file yang diperbarui.
            System.out.println("Langkah 2: Persiapkan informasi file.");
            String fileName = Paths.get(filePath).getFileName().toString();
            String fileMd5 = calculateMD5(filePath);
            String fileSize = getFileSize(filePath);

            // Langkah 3: Minta sewa unggah.
            System.out.println("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.");
            ApplyFileUploadLeaseResponse leaseResponse = applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
            String leaseId = leaseResponse.getBody().getData().getFileUploadLeaseId();
            String uploadUrl = leaseResponse.getBody().getData().getParam().getUrl();
            Object uploadHeaders = leaseResponse.getBody().getData().getParam().getHeaders();

            // Langkah 4: Unggah file ke penyimpanan sementara.
            System.out.println("Langkah 4: Unggah file ke penyimpanan sementara.");
            // Instal jackson-databind.
            // Ubah uploadHeaders dari langkah sebelumnya menjadi peta pasangan kunci-nilai.
            ObjectMapper mapper = new ObjectMapper();
            Map<String, String> uploadHeadersMap = (Map<String, String>) mapper.readValue(mapper.writeValueAsString(uploadHeaders), Map.class);
            uploadFile(uploadUrl, uploadHeadersMap, filePath);

            // Langkah 5: Tambahkan file ke kategori.
            System.out.println("Langkah 5: Tambahkan file ke kategori.");
            AddFileResponse addResponse = addFile(client, leaseId, parser, categoryId, workspaceId);
            String fileId = addResponse.getBody().getData().getFileId();

            // Langkah 6: Periksa status file yang diperbarui.
            System.out.println("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.");
            while (true) {
                DescribeFileResponse describeResponse = describeFile(client, workspaceId, fileId);
                String status = describeResponse.getBody().getData().getStatus();
                System.out.println("Status file saat ini: " + status);
                if ("INIT".equals(status)) {
                    System.out.println("File sedang menunggu untuk diurai. Harap tunggu...");
                } else if ("PARSING".equals(status)) {
                    System.out.println("File sedang diurai. Harap tunggu...");
                } else if ("PARSE_SUCCESS".equals(status)) {
                    System.out.println("File telah diurai.");
                    break;
                } else {
                    System.out.println("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                    return null;
                }
                Thread.sleep(5000);
            }

            // Langkah 7: Kirim tugas untuk menambahkan file.
            System.out.println("Langkah 7: Kirim tugas untuk menambahkan file.");
            SubmitIndexAddDocumentsJobResponse indexAddResponse = submitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType);
            String jobId = indexAddResponse.getBody().getData().getId();

            // Langkah 8: Tunggu tugas tambahan selesai.
            System.out.println("Langkah 8: Tunggu tugas tambahan selesai.");
            while (true) {
                GetIndexJobStatusResponse jobStatusResponse = getIndexJobStatus(client, workspaceId, jobId, indexId);
                String status = jobStatusResponse.getBody().getData().getStatus();
                System.out.println("Status pekerjaan indeks saat ini: " + status);
                if ("COMPLETED".equals(status)) {
                    break;
                }
                Thread.sleep(5000);
            }

            // Langkah 9: Hapus file lama.
            System.out.println("Langkah 9: Hapus file lama.");
            deleteIndexDocument(client, workspaceId, indexId, oldFileId);

            System.out.println("Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.");
            return indexId;
        } catch (Exception e) {
            System.out.println("Terjadi kesalahan: " + e.getMessage());
            return null;
        }
    }

    /**
     * Fungsi utama.
     */
    public static void main(String[] args) {
        if (!checkEnvironmentVariables()) {
            System.out.println("Pemeriksaan variabel lingkungan gagal.");
            return;
        }

        Scanner scanner = new Scanner(System.in);
        System.out.print("Masukkan jalur lokal dari file yang diperbarui untuk diunggah (misalnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):");
        String filePath = scanner.nextLine();

        System.out.print("Masukkan ID basis pengetahuan yang akan diperbarui:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkan ID pada halaman basis pengetahuan di konsol Model Studio.
        String indexId = scanner.nextLine();

        System.out.print("Masukkan ID file dari file yang akan diperbarui:"); // Ini adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga bisa mendapatkan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
        String oldFileId = scanner.nextLine();

        String workspaceId = System.getenv("WORKSPACE_ID");
        String result = updateKnowledgeBase(filePath, workspaceId, indexId, oldFileId);
        if (result != null) {
            System.out.println("Basis pengetahuan diperbarui. ID basis pengetahuan adalah: " + result);
        } else {
            System.out.println("Gagal memperbarui basis pengetahuan.");
        }
    }
}

PHP

<?php
// Kode sampel ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\SDK\Bailian\V20231229\Bailian;
use AlibabaCloud\SDK\Bailian\V20231229\Models\AddFileRequest;
use \Exception;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Bailian\V20231229\Models\ApplyFileUploadLeaseRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\DeleteIndexDocumentRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\GetIndexJobStatusRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\SubmitIndexAddDocumentsJobRequest;

class KnowledgeBaseUpdate {

    /**
    * Periksa dan minta untuk menetapkan variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
    */
    public static function checkEnvironmentVariables() {
        $requiredVars = [
            'ALIBABA_CLOUD_ACCESS_KEY_ID' => 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET' => 'Rahasia AccessKey Alibaba Cloud',
            'WORKSPACE_ID' => 'ID ruang kerja Model Studio Alibaba Cloud'
        ];

        $missingVars = [];
        foreach ($requiredVars as $var => $description) {
            if (!getenv($var)) {
                $missingVars[] = $var;
                echo "Error: Setel variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Hitung hash MD5 dari sebuah file.
     *
     * @param string $filePath Jalur lokal dari file.
     * @return string Hash MD5 dari file.
     */
    public static function calculateMd5($filePath) {
        $md5Hash = hash_init("md5");
        $handle = fopen($filePath, "rb");
        while (!feof($handle)) {
            $chunk = fread($handle, 4096);
            hash_update($md5Hash, $chunk);
        }
        fclose($handle);
        return hash_final($md5Hash);
    }

    /**
     * Dapatkan ukuran file dalam byte.
     *
     * @param string $filePath Jalur lokal dari file.
     * @return int Ukuran file dalam byte.
     */
    public static function getFileSize($filePath) {
        return (string)filesize($filePath);
    }

    /**
     * Inisialisasi klien.
     *
     * @return Bailian Objek klien yang dikonfigurasi.
     */
    public static function createClient(){
        $config = new Config([
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

    /**
     * Minta sewa unggah file.
     *
     * @param Bailian $client Klien.
     * @param string $categoryId ID kategori.
     * @param string $fileName Nama file.
     * @param string $fileMd5 Hash MD5 dari file.
     * @param int $fileSize Ukuran file dalam byte.
     * @param string $workspaceId ID ruang kerja.
     * @return ApplyFileUploadLeaseResponse Tanggapan dari layanan Model Studio.
     */
    public static function applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId) {
        $headers = [];
        $applyFileUploadLeaseRequest = new ApplyFileUploadLeaseRequest([
            "fileName" => $fileName,
            "md5" => $fileMd5,
            "sizeInBytes" => $fileSize
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->applyFileUploadLeaseWithOptions($categoryId, $workspaceId, $applyFileUploadLeaseRequest, $headers, $runtime);
    }

    /**
     * Unggah file ke penyimpanan sementara.
     *
     * @param string $preSignedUrl URL dalam sewa unggah.
     * @param array $headers Header permintaan untuk unggahan.
     * @param string $filePath Jalur lokal dari file.
     */
    public static function uploadFile($preSignedUrl, $headers, $filePath) {
        $fileContent = file_get_contents($filePath);
        // Tetapkan header permintaan unggahan.
        $uploadHeaders = [
            "X-bailian-extra" => $headers["X-bailian-extra"],
            "Content-Type" => $headers["Content-Type"]
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $preSignedUrl);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array_map(function($key, $value) {
            return "$key: $value";
        }, array_keys($uploadHeaders), $uploadHeaders));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpCode != 200) {
            throw new Exception("Unggah gagal: " . curl_error($ch));
        }
        curl_close($ch);
    }

    /**
     * Tambahkan file ke kategori.
     *
     * @param Bailian $client Klien.
     * @param string $leaseId ID sewa.
     * @param string $parser Parser untuk file.
     * @param string $categoryId ID kategori.
     * @param string $workspaceId ID ruang kerja.
     * @return AddFileResponse Tanggapan dari layanan Model Studio.
     */
    public static function addFile($client, $leaseId, $parser, $categoryId, $workspaceId) {
        $headers = [];
        $addFileRequest = new AddFileRequest([
            "leaseId" => $leaseId,
            "parser" => $parser,
            "categoryId" => $categoryId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->addFileWithOptions($workspaceId, $addFileRequest, $headers, $runtime);
    }

    /**
     * Dapatkan informasi dasar dari file.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $fileId ID file.
     * @return DescribeFileResponse Tanggapan dari layanan Model Studio.
     */
    public static function describeFile($client, $workspaceId, $fileId) {
        $headers = [];
        $runtime = new RuntimeOptions([]);
        return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
    }

    /**
     * Lampirkan file yang telah diuraikan ke basis pengetahuan pencarian dokumen.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $fileId ID file.
     * @param string $sourceType Jenis data.
     * @return SubmitIndexAddDocumentsJobResponse Tanggapan dari layanan Model Studio.
     */
    public static function submitIndexAddDocumentsJob($client, $workspaceId, $indexId, $fileId, $sourceType) {
        $headers = [];
        $submitIndexAddDocumentsJobRequest = new SubmitIndexAddDocumentsJobRequest([
            "indexId" =>$indexId,
            "sourceType" => $sourceType,
            "documentIds" => [
                $fileId
            ]
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->submitIndexAddDocumentsJobWithOptions($workspaceId, $submitIndexAddDocumentsJobRequest, $headers, $runtime);
    }

    /**
     * Periksa status pekerjaan indeks.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $jobId ID pekerjaan.
     * @param string $indexId ID basis pengetahuan.
     * @return GetIndexJobStatusResponse Tanggapan dari layanan Model Studio.
     */
    public static function getIndexJobStatus($client, $workspaceId, $jobId, $indexId) {
        $headers = [];
        $getIndexJobStatusRequest = new GetIndexJobStatusRequest([
            'indexId' => $indexId,
            'jobId' => $jobId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->getIndexJobStatusWithOptions($workspaceId, $getIndexJobStatusRequest, $headers, $runtime);
    }

    /**
     * Hapus file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $fileId ID file.
     * @return mixed Tanggapan dari layanan Model Studio.
     */
    public static function deleteIndexDocument($client, $workspaceId, $indexId, $fileId) {
        $headers = [];
        $deleteIndexDocumentRequest = new DeleteIndexDocumentRequest([
            "indexId" => $indexId,
            "documentIds" => [
                $fileId
            ]
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->deleteIndexDocumentWithOptions($workspaceId, $deleteIndexDocumentRequest, $headers, $runtime);
    }

    /**
     * Perbarui basis pengetahuan menggunakan layanan Model Studio.
     *
     * @param string $filePath Jalur lokal dari file yang diperbarui.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan yang akan diperbarui.
     * @param string $oldFileId ID file dari file yang akan diperbarui.
     * @return string| null ID basis pengetahuan jika pembaruan berhasil. Jika tidak, null.
     */
    public static function updateKnowledgeBase($filePath, $workspaceId, $indexId, $oldFileId) {
        $categoryId = "default";
        $parser = "DASHSCOPE_DOCMIND";
        $sourceType = "DATA_CENTER_FILE";

        try {
            echo "Langkah 1: Buat klien.\n";
            $client = self::createClient();

            echo "Langkah 2: Persiapkan informasi file.\n";
            $fileName = basename($filePath);
            $fileMd5 = self::calculateMD5($filePath);
            $fileSize = self::getFileSize($filePath);

            echo "Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.\n";
            $leaseResponse = self::applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId);
            $leaseId = $leaseResponse->body->data->fileUploadLeaseId;
            $uploadUrl = $leaseResponse->body->data->param->url;
            $uploadHeaders = $leaseResponse->body->data->param->headers;
            $uploadHeadersMap = json_decode(json_encode($uploadHeaders), true);

            echo "Langkah 4: Unggah file ke penyimpanan sementara.\n";
            self::uploadFile($uploadUrl, $uploadHeadersMap, $filePath);

            echo "Langkah 5: Tambahkan file ke kategori.\n";
            $addResponse = self::addFile($client, $leaseId, $parser, $categoryId, $workspaceId);
            $fileId = $addResponse->body->data->fileId;

            echo "Langkah 6: Periksa status file di Alibaba Cloud Model Studio.\n";
            while (true) {
                $describeResponse = self::describeFile($client, $workspaceId, $fileId);
                $status = $describeResponse->body->data->status;
                echo "Status file saat ini: " . $status . "\n";

                if ($status === "INIT") {
                    echo "File sedang menunggu untuk diurai. Harap tunggu...\n";
                } elseif ($status === "PARSING") {
                    echo "File sedang diurai. Harap tunggu...\n";
                } elseif ($status === "PARSE_SUCCESS") {
                    echo "File telah diurai.\n";
                    break;
                } else {
                    echo "Status file tidak dikenal: " . $status . ". Hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

            echo "Langkah 7: Kirim tugas untuk menambahkan file.\n";
            $indexAddResponse = self::submitIndexAddDocumentsJob($client, $workspaceId, $indexId, $fileId, $sourceType);
            $jobId = $indexAddResponse->body->data->id;

            echo "Langkah 8: Tunggu tugas tambahan selesai.\n";
            while (true) {
                $jobStatusResponse = self::getIndexJobStatus($client, $workspaceId, $jobId, $indexId);
                $status = $jobStatusResponse->body->data->status;
                echo "Status pekerjaan indeks saat ini: " . $status . "\n";
                if ($status === "COMPLETED") {
                    break;
                }
                sleep(5);
            }

            echo "Langkah 9: Hapus file lama.\n";
            self::deleteIndexDocument($client, $workspaceId, $indexId, $oldFileId);

            echo "Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.\n";
            return $indexId;

        } catch (Exception $e) {
            echo "Terjadi kesalahan: " . $e->getMessage() . "\n";
            return null;
        }
    }


    /**
     * Fungsi utama.
     */
    public static function main($args){
        if (!self::checkEnvironmentVariables()) {
            echo "Pemeriksaan variabel lingkungan gagal.\n";
            return;
        }
        $filePath = readline("Masukkan jalur lokal dari file yang diperbarui untuk diunggah (misalnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):");
        $indexId = readline("Masukkan ID basis pengetahuan yang akan diperbarui:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkan ID pada halaman basis pengetahuan di konsol Model Studio.
        $oldFileId = readline("Masukkan ID file dari file yang akan diperbarui:"); // Ini adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga bisa mendapatkan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
        $workspaceId = getenv('WORKSPACE_ID');
        $result = self::updateKnowledgeBase($filePath, $workspaceId, $indexId, $oldFileId);

        if ($result !== null) {
            echo "Basis pengetahuan diperbarui. ID basis pengetahuan adalah: " . $result . "\n";
        } else {
            echo "Gagal memperbarui basis pengetahuan.\n";
        }
    }
}
// Asumsikan bahwa autoload.php berada di direktori induk dari file kode saat ini. Sesuaikan jalur berdasarkan struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseUpdate::main(array_slice($argv, 1));

Node.js

// Kode sampel ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
'use strict';

const fs = require('fs');
const path = require('path');
const axios = require('axios');
const crypto = require('crypto');

const bailian20231229 = require('@alicloud/bailian20231229');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class KbUpdate {

    /**
     * Periksa dan minta untuk menetapkan variabel lingkungan yang diperlukan.
     * @returns {boolean} Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud',
            'WORKSPACE_ID': 'ID ruang kerja Model Studio Alibaba Cloud'
        };

        const missing = [];
        for (const [varName, desc] of Object.entries(requiredVars)) {
            if (!process.env[varName]) {
                console.error(`Error: Setel variabel lingkungan ${varName} (${desc})`);
                missing.push(varName);
            }
        }
        return missing.length === 0;
    }

    /**
     * Hitung hash MD5 dari sebuah file.
     * @param {string} filePath Jalur lokal dari file.
     * @returns {Promise<string>} Hash MD5 dari file.
     */
    static async calculateMD5(filePath) {
        const hash = crypto.createHash('md5');
        const stream = fs.createReadStream(filePath);

        return new Promise((resolve, reject) => {
            stream.on('data', chunk => hash.update(chunk));
            stream.on('end', () => resolve(hash.digest('hex')));
            stream.on('error', reject);
        });
    }

    /**
     * Dapatkan ukuran file dalam byte dan kembalikan sebagai string.
     * @param {string} filePath Jalur lokal dari file.
     * @returns {string} Ukuran file, misalnya "123456".
     */
    static getFileSize(filePath) {
        try {
            const stats = fs.statSync(filePath);
            return stats.size.toString();
        } catch (err) {
            console.error(`Gagal mendapatkan ukuran file: ${err.message}`);
            throw err;
        }
    }

    /**
     * Inisialisasi klien.
     * @return Client
     * @throws Exception
     */
    static createClient() {
        const config = new OpenApi.Config({
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
        });
        // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
        config.endpoint = `bailian.ap-southeast-1.aliyuncs.com`;
        return new bailian20231229.default(config);
    }

    /**
     * Minta sewa unggah file.
     * @param {Bailian20231229Client} client Klien.
     * @param {string} categoryId ID kategori.
     * @param {string} fileName Nama file.
     * @param {string} fileMd5 Hash MD5 dari file.
     * @param {int} fileSize Ukuran file dalam byte.
     * @param {string} workspaceId ID ruang kerja.
     * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} Tanggapan dari layanan Model Studio.
     */
    static async applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId) {
        const headers = {};
        const applyFileUploadLeaseRequest = new bailian20231229.ApplyFileUploadLeaseRequest({
            md5: fileMd5,
            fileName,
            sizeInBytes: fileSize
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.applyFileUploadLeaseWithOptions(
            categoryId,
            workspaceId,
            applyFileUploadLeaseRequest,
            headers,
            runtime
        );
    }

    /**
     * Unggah file ke penyimpanan sementara.
     * @param {string} preSignedUrl URL dalam sewa unggah.
     * @param {Object} headers Header permintaan untuk unggahan.
     * @param {string} filePath Jalur lokal dari file.
     */
    static async uploadFile(preSignedUrl, headers, filePath) {
        const uploadHeaders = {
            "X-bailian-extra": headers["X-bailian-extra"],
            "Content-Type": headers["Content-Type"]
        };
        const stream = fs.createReadStream(filePath);
        try {
            await axios.put(preSignedUrl, stream, { headers: uploadHeaders });
        } catch (e) {
            throw new Error(`Unggah gagal: ${e.message}`);
        }
    }

    /**
     * Tambahkan file ke kategori.
     * @param {Bailian20231229Client} client Klien.
     * @param {string} leaseId ID sewa.
     * @param {string} parser Parser untuk file.
     * @param {string} categoryId ID kategori.
     * @param {string} workspaceId ID ruang kerja.
     * @returns {Promise<bailian20231229.AddFileResponse>} Tanggapan dari layanan Model Studio.
     */
    static async addFile(client, leaseId, parser, categoryId, workspaceId) {
        const headers = {};
        const addFileRequest = new bailian20231229.AddFileRequest({
            leaseId,
            parser,
            categoryId
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.addFileWithOptions(workspaceId, addFileRequest, headers, runtime);
    }

    /**
     * Periksa status penguraian file.
     * @param {Bailian20231229Client} client Klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} fileId ID file.
     * @returns {Promise<bailian20231229.DescribeFileResponse>} Tanggapan dari layanan Model Studio.
     */
    static async describeFile(client, workspaceId, fileId) {
        const headers = {};
        const runtime = new Util.RuntimeOptions({});
        return await client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
    }

    /**
     * Lampirkan file yang telah diuraikan ke basis pengetahuan pencarian dokumen.
     * @param {Bailian20231229Client} client Objek klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} indexId ID basis pengetahuan.
     * @param {string} fileId ID file.
     * @param {string} sourceType Jenis data.
     * @returns {Promise<bailian20231229.SubmitIndexAddDocumentsJobResponse>} Tanggapan dari layanan Model Studio.
     */
    static async submitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType) {
        const headers = {};
        const submitIndexAddDocumentsJobRequest = new bailian20231229.SubmitIndexAddDocumentsJobRequest({
            indexId,
            documentIds: [fileId],
            sourceType,
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.submitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
    }

    /**
     * Periksa status pekerjaan indeks.
     * @param {Bailian20231229Client} client Klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} jobId ID pekerjaan.
     * @param {string} indexId ID basis pengetahuan.
     * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} Tanggapan dari layanan Model Studio.
     */
    static async getIndexJobStatus(client, workspaceId, jobId, indexId) {
        const headers = {};
        const getIndexJobStatusRequest = new bailian20231229.GetIndexJobStatusRequest({ jobId, indexId });
        const runtime = new Util.RuntimeOptions({});
        return await client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
    }

    /**
     * Hapus file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.
     * @param {Bailian20231229Client} client Objek klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} indexId ID basis pengetahuan.
     * @param {string} fileId ID file.
     * @returns {Promise<bailian20231229.DeleteIndexDocumentResponse>} Tanggapan dari layanan Model Studio.
     */
    static async deleteIndexDocument(client, workspaceId, indexId, fileId) {
        const headers = {};
        const deleteIndexDocumentRequest = new bailian20231229.DeleteIndexDocumentRequest({
            indexId,
            documentIds: [fileId],
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.deleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
    }

    /**
     * Perbarui basis pengetahuan menggunakan layanan Model Studio.
     * @param {string} filePath Jalur lokal dari file yang diperbarui.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} indexId ID basis pengetahuan yang akan diperbarui.
     * @param {string} oldFileId ID file dari file yang akan diperbarui.
     * @returns {Promise<string | null>} ID basis pengetahuan jika pembaruan berhasil. Jika tidak, null.
     */
    static async updateKnowledgeBase(filePath, workspaceId, indexId, oldFileId) {
        const categoryId = 'default';
        const parser = 'DASHSCOPE_DOCMIND';
        const sourceType = 'DATA_CENTER_FILE';

        try {
            console.log("Langkah 1: Buat klien.");
            const client = this.createClient();

            console.log("Langkah 2: Persiapkan informasi file.");
            const fileName = path.basename(filePath);
            const fileMd5 = await this.calculateMD5(filePath);
            const fileSize = this.getFileSize(filePath);

            console.log("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.");
            const leaseResponse = await this.applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
            const leaseId = leaseResponse.body.data.fileUploadLeaseId;
            const uploadUrl = leaseResponse.body.data.param.url;
            const uploadHeaders = leaseResponse.body.data.param.headers;

            console.log("Langkah 4: Unggah file ke penyimpanan sementara.");
            await this.uploadFile(uploadUrl, uploadHeaders, filePath);

            console.log("Langkah 5: Tambahkan file ke kategori.");
            const addResponse = await this.addFile(client, leaseId, parser, categoryId, workspaceId);
            const fileId = addResponse.body.data.fileId;

            console.log("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.");
            while (true) {
                const describeResponse = await this.describeFile(client, workspaceId, fileId);
                const status = describeResponse.body.data.status;
                console.log(`Status file saat ini: ${status}`);

                if (status === 'INIT') {
                    console.log("File sedang menunggu untuk diurai. Harap tunggu...");
                } else if (status === 'PARSING') {
                    console.log("File sedang diurai. Harap tunggu...");
                } else if (status === 'PARSE_SUCCESS') {
                    console.log("File telah diurai.");
                    break;
                } else {
                    console.error(`Status file tidak dikenal: ${status}. Hubungi dukungan teknis.`);
                    return null;
                }
                await this.sleep(5);
            }

            console.log("Langkah 7: Kirim tugas untuk menambahkan file.");
            const indexAddResponse = await this.submitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType);
            const jobId = indexAddResponse.body.data.id;

            console.log("Langkah 8: Tunggu tugas tambahan selesai.");
            while (true) {
                const jobStatusResponse = await this.getIndexJobStatus(client, workspaceId, jobId, indexId);
                const status = jobStatusResponse.body.data.status;
                console.log(`Status pekerjaan indeks saat ini: ${status}`);
                if (status === 'COMPLETED') {
                    break;
                }
                await this.sleep(5);
            }

            console.log("Langkah 9: Hapus file lama.");
            await this.deleteIndexDocument(client, workspaceId, indexId, oldFileId);

            console.log("Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.");
            return indexId;
        } catch (e) {
            console.error(`Terjadi kesalahan: ${e.message}`);
            return null;
        }
    }

    /**
     * Tunggu selama beberapa detik tertentu.
     * @param {number} seconds Waktu tunggu dalam detik.
     * @returns {Promise<void>}
     */
    static sleep(seconds) {
        return new Promise(resolve => setTimeout(resolve, seconds * 1000));
    }

    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Pemeriksaan variabel lingkungan gagal.");
            return;
        }

        const readline = require('readline').createInterface({
            input: process.stdin,
            output: process.stdout
        });

        try {
            const filePath = await new Promise((resolve, reject) => {
                readline.question("Masukkan jalur lokal dari file yang diperbarui untuk diunggah (misalnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("Jalur tidak boleh kosong."));
                });
            });
            const indexId = await new Promise((resolve, reject) => {
                // ID basis pengetahuan adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkan ID pada halaman basis pengetahuan di konsol Model Studio.
                readline.question("Masukkan ID basis pengetahuan yang akan diperbarui:", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID basis pengetahuan tidak boleh kosong."));
                });
            });
            const oldFileId = await new Promise((resolve, reject) => {
                // ID file adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga bisa mendapatkan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
                readline.question("Masukkan ID file dari file yang akan diperbarui:", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID file tidak boleh kosong."));
                });
            });
            const workspaceId = process.env.WORKSPACE_ID;

            const result = await this.updateKnowledgeBase(filePath, workspaceId, indexId, oldFileId);
            if (result) console.log(`ID basis pengetahuan: ${result}`);
            else console.log("Gagal memperbarui basis pengetahuan.");
        } catch (err) {
            console.error(err.message);
        } finally {
            readline.close();
        }
    }
}

exports.KbUpdate = KbUpdate;
KbUpdate.main(process.argv.slice(2));

C#

// Kode sampel ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

using Tea;
using Tea.Utils;

namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseUpdate
    {
        /// <summary>
        /// Periksa dan minta untuk menetapkan variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud" },
                { "WORKSPACE_ID", "ID ruang kerja Model Studio Alibaba Cloud" }
            };

            var missingVars = new List<string>();
            foreach (var entry in requiredVars)
            {
                string value = Environment.GetEnvironmentVariable(entry.Key);
                if (string.IsNullOrEmpty(value))
                {
                    missingVars.Add(entry.Key);
                    Console.WriteLine($"Error: Setel variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Hitung hash MD5 dari sebuah file.
        /// </summary>
        /// <param name="filePath">Jalur lokal dari file.</param>
        /// <returns>Hash MD5 dari file.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama perhitungan.</exception>
        public static string CalculateMD5(string filePath)
        {
            using (var md5 = MD5.Create())
            {
                using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    byte[] hashBytes = md5.ComputeHash(stream);
                    StringBuilder sb = new StringBuilder();
                    foreach (byte b in hashBytes)
                    {
                        sb.Append(b.ToString("x2"));
                    }
                    return sb.ToString();
                }
            }
        }

        /// <summary>
        /// Dapatkan ukuran file dalam byte.
        /// </summary>
        /// <param name="filePath">Jalur lokal dari file.</param>
        /// <returns>Ukuran file dalam byte.</returns>
        public static string GetFileSize(string filePath)
        {
            var file = new FileInfo(filePath);
            return file.Length.ToString();
        }

        /// <summary>
        /// Inisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang dikonfigurasi.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama inisialisasi.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Client CreateClient()
        {
            var config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            // Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Minta sewa unggah file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="categoryId">ID kategori.</param>
        /// <param name="fileName">Nama file.</param>
        /// <param name="fileMd5">Hash MD5 dari file.</param>
        /// <param name="fileSize">Ukuran file dalam byte.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseResponse ApplyLease(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string categoryId,
            string fileName,
            string fileMd5,
            string fileSize,
            string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var applyFileUploadLeaseRequest = new AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseRequest
            {
                FileName = fileName,
                Md5 = fileMd5,
                SizeInBytes = fileSize
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.ApplyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        }

        /// <summary>
        /// Unggah file ke penyimpanan sementara.
        /// </summary>
        /// <param name="preSignedUrl">URL dalam sewa unggah.</param>
        /// <param name="headers">Header permintaan untuk unggahan.</param>
        /// <param name="filePath">Jalur lokal dari file.</param>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama unggahan.</exception>
        public static void UploadFile(string preSignedUrl, Dictionary<string, string> headers, string filePath)
        {
            var file = new FileInfo(filePath);
            if (!File.Exists(filePath))
            {
                throw new ArgumentException($"File tidak ada atau bukan file reguler: {filePath}");
            }

            using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                var url = new Uri(preSignedUrl);
                var conn = (HttpWebRequest)WebRequest.Create(url);
                conn.Method = "PUT";
                conn.ContentType = headers["Content-Type"];
                conn.Headers.Add("X-bailian-extra", headers["X-bailian-extra"]);

                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    conn.GetRequestStream().Write(buffer, 0, bytesRead);
                }

                using (var response = (HttpWebResponse)conn.GetResponse())
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception($"Unggah gagal: {response.StatusCode}");
                    }
                }
            }
        }

        /// <summary>
        /// Tambahkan file ke kategori.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="leaseId">ID sewa.</param>
        /// <param name="parser">Parser untuk file.</param>
        /// <param name="categoryId">ID kategori.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.AddFileResponse AddFile(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string leaseId,
            string parser,
            string categoryId,
            string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var addFileRequest = new AlibabaCloud.SDK.Bailian20231229.Models.AddFileRequest
            {
                LeaseId = leaseId,
                Parser = parser,
                CategoryId = categoryId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.AddFileWithOptions(workspaceId, addFileRequest, headers, runtime);
        }

        /// <summary>
        /// Dapatkan informasi dasar dari file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="fileId">ID file.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.DescribeFileResponse DescribeFile(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string fileId)
        {
            var headers = new Dictionary<string, string>() { };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.DescribeFileWithOptions(workspaceId, fileId, headers, runtime);
        }

        /// <summary>
        /// Lampirkan file yang telah diuraikan ke basis pengetahuan pencarian dokumen.
        /// </summary>
        /// <param name="client">Klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <param name="fileId">ID file.</param>
        /// <param name="sourceType">Jenis data.</param>
        /// <returns>Tanggapan dari layanan Model Studio.</returns>
        public static AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobResponse SubmitIndexAddDocumentsJob(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string indexId,
            string fileId,
            string sourceType)
        {
            var headers = new Dictionary<string, string>() { };
            var submitIndexAddDocumentsJobRequest = new AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobRequest
            {
                IndexId = indexId,
                DocumentIds = new List<string> { fileId },
                SourceType = sourceType
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.SubmitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
        }

        /// <summary>
        /// Periksa status pekerjaan indeks.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="jobId">ID pekerjaan.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string jobId,
            string indexId)
        {
            var headers = new Dictionary<string, string>() { };
            var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
            {
                IndexId = indexId,
                JobId = jobId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
        }

        /// <summary>
        /// Hapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <param name="fileId">ID file.</param>
        /// <returns>Objek tanggapan dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Sebuah pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentResponse DeleteIndexDocument(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string indexId,
            string fileId)
        {
            var headers = new Dictionary<string, string>() { };
            var deleteIndexDocumentRequest = new AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentRequest
            {
                IndexId = indexId,
                DocumentIds = new List<string> { fileId },
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.DeleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
        }

        /// <summary>
        /// Perbarui basis pengetahuan menggunakan layanan Model Studio.
        /// </summary>
        /// <param name="filePath">Jalur lokal dari file yang diperbarui.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan yang akan diperbarui.</param>
        /// <param name="oldFileId">ID file dari file yang akan diperbarui.</param>
        /// <returns>ID basis pengetahuan jika pembaruan berhasil. Jika tidak, null.</returns>
        public static string UpdateKnowledgeBase(string filePath, string workspaceId, string indexId, string oldFileId)
        {
            // Tetapkan nilai default.
            string categoryId = "default";
            string parser = "DASHSCOPE_DOCMIND";
            string sourceType = "DATA_CENTER_FILE";

            try
            {
                Console.WriteLine("Langkah 1: Buat klien.");
                var client = CreateClient();

                Console.WriteLine("Langkah 2: Persiapkan informasi file.");
                string fileName = Path.GetFileName(filePath);
                string fileMd5 = CalculateMD5(filePath);
                string fileSize = GetFileSize(filePath);

                Console.WriteLine("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.");
                var leaseResponse = ApplyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
                string leaseId = leaseResponse.Body.Data.FileUploadLeaseId;
                string uploadUrl = leaseResponse.Body.Data.Param.Url;
                var uploadHeaders = leaseResponse.Body.Data.Param.Headers;

                Console.WriteLine("Langkah 4: Unggah file ke penyimpanan sementara.");
                // Instal Newtonsoft.Json.
                var uploadHeadersMap = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(uploadHeaders));
                UploadFile(uploadUrl, uploadHeadersMap, filePath);

                Console.WriteLine("Langkah 5: Tambahkan file ke kategori.");
                var addResponse = AddFile(client, leaseId, parser, categoryId, workspaceId);
                string fileId = addResponse.Body.Data.FileId;

                Console.WriteLine("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.");
                while (true)
                {
                    var describeResponse = DescribeFile(client, workspaceId, fileId);
                    string status = describeResponse.Body.Data.Status;
                    Console.WriteLine("Status file saat ini: " + status);

                    if ("INIT".Equals(status))
                    {
                        Console.WriteLine("File sedang menunggu untuk diurai. Harap tunggu...");
                    }
                    else if ("PARSING".Equals(status))
                    {
                        Console.WriteLine("File sedang diurai. Harap tunggu...");
                    }
                    else if ("PARSE_SUCCESS".Equals(status))
                    {
                        Console.WriteLine("File telah diurai.");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                        return null;
                    }
                    Thread.Sleep(5000);
                }

                Console.WriteLine("Langkah 7: Kirim tugas untuk menambahkan file.");
                var indexAddResponse = SubmitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType);
                string jobId = indexAddResponse.Body.Data.Id;

                Console.WriteLine("Langkah 8: Tunggu tugas tambahan selesai.");
                while (true)
                {
                    var jobStatusResponse = GetIndexJobStatus(client, workspaceId, jobId, indexId);
                    string status = jobStatusResponse.Body.Data.Status;
                    Console.WriteLine("Status pekerjaan indeks saat ini: " + status);
                    if ("COMPLETED".Equals(status))
                    {
                        break;
                    }
                    Thread.Sleep(5000);
                }

                Console.WriteLine("Langkah 9: Hapus file lama.");
                DeleteIndexDocument(client, workspaceId, indexId, oldFileId);

                Console.WriteLine("Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.");
                return indexId;
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
                return null;
            }
        }

        /// <summary>
        /// Fungsi utama.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Pemeriksaan variabel lingkungan gagal.");
                return;
            }

            Console.Write("Masukkan jalur lokal dari file yang diperbarui untuk diunggah (misalnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):");
            string filePath = Console.ReadLine();

            Console.Write("Masukkan ID basis pengetahuan yang akan diperbarui:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkan ID pada halaman basis pengetahuan di konsol Model Studio.
            string indexId = Console.ReadLine();

            Console.Write("Masukkan ID file dari file yang akan diperbarui:"); // Ini adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga bisa mendapatkan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
            string oldFileId = Console.ReadLine();

            string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
            string result = UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId);
            if (result != null)
            {
                Console.WriteLine("Basis pengetahuan diperbarui. ID basis pengetahuan adalah: " + result);
            }
            else
            {
                Console.WriteLine("Gagal memperbarui basis pengetahuan.");
            }
        }
    }
}

Go

// Kode sampel ini hanya untuk referensi. Jangan gunakan dalam lingkungan produksi.
package main

import (
	"bufio"
	"crypto/md5"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"path/filepath"
	"strings"
	"time"

	bailian20231229 "github.com/alibabacloud-go/bailian-20231229/v2/client"
	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
	"github.com/go-resty/resty/v2"
)

// CheckEnvironmentVariables memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
func CheckEnvironmentVariables() bool {
	requiredVars := map[string]string{
		"ALIBABA_CLOUD_ACCESS_KEY_ID":     "ID AccessKey Alibaba Cloud",
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Rahasia AccessKey Alibaba Cloud",
		"WORKSPACE_ID":                    "ID ruang kerja Model Studio Alibaba Cloud",
	}

	var missingVars []string
	for varName, desc := range requiredVars {
		if os.Getenv(varName) == "" {
			fmt.Printf("Error: Setel variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// CalculateMD5 menghitung hash MD5 dari sebuah file.
func CalculateMD5(filePath string) (string, error) {
	file, err := os.Open(filePath)
	if err != nil {
		return "", err
	}
	defer file.Close()

	hash := md5.New()
	if _, err := io.Copy(hash, file); err != nil {
		return "", err
	}

	return fmt.Sprintf("%x", hash.Sum(nil)), nil
}

// GetFileSize mendapatkan ukuran file dalam byte.
func GetFileSize(filePath string) (string, error) {
	info, err := os.Stat(filePath)
	if err != nil {
		return "", err
	}
	return fmt.Sprintf("%d", info.Size()), nil
}

// CreateClient membuat dan mengonfigurasi klien.
func CreateClient() (*bailian20231229.Client, error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Endpoint berikut adalah endpoint publik. Anda dapat mengubah endpoint sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	return bailian20231229.NewClient(config)
}

// ApplyLease meminta sewa unggah file dari layanan Model Studio.
func ApplyLease(client *bailian20231229.Client, categoryId, fileName, fileMd5, fileSize, workspaceId string) (*bailian20231229.ApplyFileUploadLeaseResponse, error) {
	headers := make(map[string]*string)
	applyFileUploadLeaseRequest := &bailian20231229.ApplyFileUploadLeaseRequest{
		FileName:    tea.String(fileName),
		Md5:         tea.String(fileMd5),
		SizeInBytes: tea.String(fileSize),
	}
	runtime := &util.RuntimeOptions{}
	return client.ApplyFileUploadLeaseWithOptions(tea.String(categoryId), tea.String(workspaceId), applyFileUploadLeaseRequest, headers, runtime)
}

// UploadFile mengunggah file ke penyimpanan sementara.
func UploadFile(preSignedUrl string, headers map[string]string, filePath string) error {
	fileContent, err := os.ReadFile(filePath)
	if err != nil {
		return err
	}

	uploadHeaders := map[string]string{
		"X-bailian-extra": headers["X-bailian-extra"],
		"Content-Type":    headers["Content-Type"],
	}

	client := resty.New()
	resp, err := client.R().
		SetHeaders(uploadHeaders).
		SetBody(fileContent).
		Put(preSignedUrl)

	if err != nil {
		return err
	}

	if resp.IsError() {
		return fmt.Errorf("HTTP error: %d", resp.StatusCode())
	}

	return nil
}

// AddFile menambahkan file ke kategori tertentu dalam layanan Model Studio.
func AddFile(client *bailian20231229.Client, leaseId, parser, categoryId, workspaceId string) (*bailian20231229.AddFileResponse, error) {
	headers := make(map[string]*string)
	addFileRequest := &bailian20231229.AddFileRequest{
		LeaseId:    tea.String(leaseId),
		Parser:     tea.String(parser),
		CategoryId: tea.String(categoryId),
	}
	runtime := &util.RuntimeOptions{}
	return client.AddFileWithOptions(tea.String(workspaceId), addFileRequest, headers, runtime)
}

// DescribeFile mendapatkan informasi dasar dari file.
func DescribeFile(client *bailian20231229.Client, workspaceId, fileId string) (*bailian20231229.DescribeFileResponse, error) {
	headers := make(map[string]*string)
	runtime := &util.RuntimeOptions{}
	return client.DescribeFileWithOptions(tea.String(workspaceId), tea.String(fileId), headers, runtime)
}

// SubmitIndexAddDocumentsJob melampirkan file yang telah diuraikan ke basis pengetahuan pencarian dokumen.
func SubmitIndexAddDocumentsJob(client *bailian20231229.Client, workspaceId, indexId, fileId, sourceType string) (*bailian20231229.SubmitIndexAddDocumentsJobResponse, error) {
	headers := make(map[string]*string)
	submitIndexAddDocumentsJobRequest := &bailian20231229.SubmitIndexAddDocumentsJobRequest{
		IndexId:     tea.String(indexId),
		DocumentIds: []*string{tea.String(fileId)},
		SourceType:  tea.String(sourceType),
	}
	runtime := &util.RuntimeOptions{}
	return client.SubmitIndexAddDocumentsJobWithOptions(tea.String(workspaceId), submitIndexAddDocumentsJobRequest, headers, runtime)
}

// GetIndexJobStatus memeriksa status pekerjaan indeks.
func GetIndexJobStatus(client *bailian20231229.Client, workspaceId, jobId, indexId string) (*bailian20231229.GetIndexJobStatusResponse, error) {
	headers := make(map[string]*string)
	getIndexJobStatusRequest := &bailian20231229.GetIndexJobStatusRequest{
		IndexId: tea.String(indexId),
		JobId:   tea.String(jobId),
	}
	runtime := &util.RuntimeOptions{}
	return client.GetIndexJobStatusWithOptions(tea.String(workspaceId), getIndexJobStatusRequest, headers, runtime)
}

// DeleteIndexDocument menghapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen yang ditentukan.
func DeleteIndexDocument(client *bailian20231229.Client, workspaceId, indexId, fileId string) (*bailian20231229.DeleteIndexDocumentResponse, error) {
	headers := make(map[string]*string)
	deleteIndexDocumentRequest := &bailian20231229.DeleteIndexDocumentRequest{
		IndexId:     tea.String(indexId),
		DocumentIds: []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.DeleteIndexDocumentWithOptions(tea.String(workspaceId), deleteIndexDocumentRequest, headers, runtime)
}

// UpdateKnowledgeBase memperbarui basis pengetahuan menggunakan layanan Model Studio.
func UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId string) (string, error) {
	// Tetapkan nilai default.
	categoryId := "default"
	parser := "DASHSCOPE_DOCMIND"
	sourceType := "DATA_CENTER_FILE"

	fmt.Println("Langkah 1: Buat klien.")
	client, err := CreateClient()
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 2: Persiapkan informasi file.")
	fileName := filepath.Base(filePath)
	fileMd5, err := CalculateMD5(filePath)
	if err != nil {
		return "", err
	}
	fileSize, err := GetFileSize(filePath)
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 3: Minta sewa unggah dari Alibaba Cloud Model Studio.")
	leaseResponse, err := ApplyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId)
	if err != nil {
		return "", err
	}
	leaseId := leaseResponse.Body.Data.FileUploadLeaseId
	uploadUrl := leaseResponse.Body.Data.Param.Url
	uploadHeaders := leaseResponse.Body.Data.Param.Headers

	fmt.Println("Langkah 4: Unggah file ke penyimpanan sementara.")
	uploadHeadersMap := make(map[string]string)
	err = json.Unmarshal([]byte(uploadHeaders), &uploadHeadersMap)
	if err != nil {
		return "", err
	}
	err = UploadFile(uploadUrl, uploadHeadersMap, filePath)
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 5: Tambahkan file ke kategori.")
	addResponse, err := AddFile(client, leaseId, parser, categoryId, workspaceId)
	if err != nil {
		return "", err
	}
	fileId := addResponse.Body.Data.FileId

	fmt.Println("Langkah 6: Periksa status file di Alibaba Cloud Model Studio.")
	for {
		describeResponse, err := DescribeFile(client, workspaceId, fileId)
		if err != nil {
			return "", err
		}
		status := describeResponse.Body.Data.Status
		fmt.Printf("Status file saat ini: %s\n", status)

		if status == "INIT" {
			fmt.Println("File sedang menunggu untuk diurai. Harap tunggu...")
		} else if status == "PARSING" {
			fmt.Println("File sedang diurai. Harap tunggu...")
		} else if status == "PARSE_SUCCESS" {
			fmt.Println("File telah diurai.")
			break
		} else {
			fmt.Printf("Status file tidak dikenal: %s. Hubungi dukungan teknis.\n", status)
			return "", fmt.Errorf("status file tidak dikenal: %s", status)
		}
		time.Sleep(5 * time.Second)
	}

	fmt.Println("Langkah 7: Kirim tugas untuk menambahkan file.")
	indexAddResponse, err := SubmitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType)
	if err != nil {
		return "", err
	}
	jobId := indexAddResponse.Body.Data.Id

	fmt.Println("Langkah 8: Tunggu tugas tambahan selesai.")
	for {
		jobStatusResponse, err := GetIndexJobStatus(client, workspaceId, jobId, indexId)
		if err != nil {
			return "", err
		}
		status := jobStatusResponse.Body.Data.Status
		fmt.Printf("Status pekerjaan indeks saat ini: %s\n", status)

		if status == "COMPLETED" {
			break
		}
		time.Sleep(5 * time.Second)
	}

	fmt.Println("Langkah 9: Hapus file lama.")
	_, err = DeleteIndexDocument(client, workspaceId, indexId, oldFileId)
	if err != nil {
		return "", err
	}

	fmt.Println("Basis pengetahuan Alibaba Cloud Model Studio telah diperbarui.")
	return indexId, nil
}

// Fungsi utama.
func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Pemeriksaan variabel lingkungan gagal.")
		return
	}

	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal dari file yang diperbarui untuk diunggah (misalnya, /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.docx pada sistem Linux):")
	filePath, _ := reader.ReadString('\n')
	filePath = strings.TrimSpace(filePath)

	fmt.Print("Masukkan ID basis pengetahuan yang akan diperbarui:") // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkan ID pada halaman basis pengetahuan di konsol Model Studio.
	indexId, _ := reader.ReadString('\n')
	indexId = strings.TrimSpace(indexId)

	fmt.Print("Masukkan ID file dari file yang akan diperbarui:") // Ini adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga bisa mendapatkan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
	oldFileId, _ := reader.ReadString('\n')
	oldFileId = strings.TrimSpace(oldFileId)

	workspaceId := os.Getenv("WORKSPACE_ID")
	result, err := UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId)

	if err != nil {
		fmt.Printf("Terjadi kesalahan: %v\n", err)
		return
	}

	if result != "" {
		fmt.Printf("Basis pengetahuan diperbarui. ID basis pengetahuan adalah: %s\n", result)
	} else {
		fmt.Println("Gagal memperbarui basis pengetahuan.")
	}
}

Mengelola basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, selesaikan semua prasyarat. Pengguna RAM juga harus mendapatkan kebijakan AliyunBailianDataFullAccess.

  • Jika menggunakan IDE atau plugin pengembangan tambahan lainnya, konfigurasikan variabel ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID di lingkungan pengembangan Anda.

Python

# Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
import os

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


def check_environment_variables():
    """Memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud',
        'WORKSPACE_ID': 'ID ruang kerja Alibaba Cloud Model Studio'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Tetapkan variabel lingkungan {var} ({description})")

    return len(missing_vars) == 0


# Membuat klien.
def create_client() -> bailian20231229Client:
    """
    Membuat dan mengonfigurasi klien.

    Returns:
        bailian20231229Client: Klien yang telah dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    # Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


# Daftar basis pengetahuan.
def list_indices(client, workspace_id):
    """
    Mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.

    Parameters:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.

    Returns:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    list_indices_request = bailian_20231229_models.ListIndicesRequest()
    runtime = util_models.RuntimeOptions()
    return client.list_indices_with_options(workspace_id, list_indices_request, headers, runtime)


# Hapus basis pengetahuan.
def delete_index(client, workspace_id, index_id):
    """
    Menghapus secara permanen basis pengetahuan yang ditentukan.

    Parameters:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.

    Returns:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    delete_index_request = bailian_20231229_models.DeleteIndexRequest(
        index_id=index_id
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_index_with_options(workspace_id, delete_index_request, headers, runtime)


def main():
    if not check_environment_variables():
        print("Verifikasi variabel lingkungan gagal.")
        return
    try:
        start_option = input(
            "Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):")
        if start_option == '1':
            # Daftar basis pengetahuan.
            print("\nDaftar basis pengetahuan")
            workspace_id = os.environ.get('WORKSPACE_ID')
            client = create_client()
            list_indices_response = list_indices(client, workspace_id)
            print(UtilClient.to_jsonstring(list_indices_response.body.data))
        elif start_option == '2':
            print("\nHapus basis pengetahuan")
            workspace_id = os.environ.get('WORKSPACE_ID')
            index_id = input("Masukkan ID basis pengetahuan:")  # Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di Konsol Model Studio.
            # Konfirmasi sebelum penghapusan.
            while True:
                confirm = input(f"Apakah Anda yakin ingin menghapus basis pengetahuan {index_id} secara permanen? (y/n): ").strip().lower()
                if confirm == 'y':
                    break
                elif confirm == 'n':
                    print("Penghapusan dibatalkan.")
                    return
                else:
                    print("Input tidak valid. Masukkan y atau n.")
            client = create_client()
            resp = delete_index(client, workspace_id, index_id)
            if resp.body.status == 200:
                print(f"Basis pengetahuan {index_id} telah dihapus.")
            else:
                err_info = UtilClient.to_jsonstring(resp.body)
                print(f"Terjadi kesalahan: {err_info}")
        else:
            print("Opsi tidak valid. Program keluar.")
            return
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return


if __name__ == '__main__':
    main()

Java

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
import com.alibabacloud.bailian20231229.models.DeleteIndexResponse;
import com.alibabacloud.bailian20231229.models.ListIndicesResponse;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.*;

public class KnowledgeBaseManage {

    /**
     * Memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah ditetapkan. Jika tidak, mengembalikan false.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud");
        requiredVars.put("WORKSPACE_ID", "ID ruang kerja Alibaba Cloud Model Studio");

        List<String> missingVars = new ArrayList<>();
        for (Map.Entry<String, String> entry : requiredVars.entrySet()) {
            String value = System.getenv(entry.getKey());
            if (value == null || value.isEmpty()) {
                missingVars.add(entry.getKey());
                System.out.println("Error: Tetapkan variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Membuat dan mengonfigurasi klien.
     *
     * @return Klien yang telah dikonfigurasi.
     */
    public static com.alibabacloud.bailian20231229.Client createClient() throws Exception {
        com.alibabacloud.credentials.Client credential = new com.alibabacloud.credentials.Client();
        com.alibabacloud.teaopenapi.models.Config config = new com.alibabacloud.teaopenapi.models.Config()
                .setCredential(credential);
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.alibabacloud.bailian20231229.Client(config);
    }

    /**
     * Mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.
     *
     * @param client      Klien.
     * @param workspaceId ID ruang kerja.
     * @return Tanggapan dari layanan Model Studio.
     */
    public static ListIndicesResponse listIndices(com.alibabacloud.bailian20231229.Client client, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.alibabacloud.bailian20231229.models.ListIndicesRequest listIndicesRequest = new com.alibabacloud.bailian20231229.models.ListIndicesRequest();
        com.alibabacloud.teautil.models.RuntimeOptions runtime = new com.alibabacloud.teautil.models.RuntimeOptions();
        return client.listIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
    }

    /**
     * Menghapus secara permanen basis pengetahuan yang ditentukan.
     *
     * @param client      Klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId     ID basis pengetahuan.
     * @return Tanggapan dari layanan Model Studio.
     */
    public static DeleteIndexResponse deleteIndex(com.alibabacloud.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.alibabacloud.bailian20231229.models.DeleteIndexRequest deleteIndexRequest = new com.alibabacloud.bailian20231229.models.DeleteIndexRequest();
        deleteIndexRequest.setIndexId(indexId);
        com.alibabacloud.teautil.models.RuntimeOptions runtime = new com.alibabacloud.teautil.models.RuntimeOptions();
        return client.deleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
    }

    /**
     * Fungsi utama.
     */
    public static void main(String[] args) {
        if (!checkEnvironmentVariables()) {
            System.out.println("Verifikasi variabel lingkungan gagal.");
            return;
        }

        try {
            Scanner scanner = new Scanner(System.in);
            System.out.print("Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):");
            String startOption = scanner.nextLine();
            com.alibabacloud.bailian20231229.Client client = createClient();
            if (startOption.equals("1")) {
                // Daftar basis pengetahuan.
                System.out.println("\nDaftar basis pengetahuan");
                String workspaceId = System.getenv("WORKSPACE_ID");
                ListIndicesResponse response = listIndices(client, workspaceId);
                // Instal jackson-databind untuk mengonversi tanggapan menjadi string JSON.
                ObjectMapper mapper = new ObjectMapper();
                String result = mapper.writeValueAsString(response.getBody().getData());
                System.out.println(result);
            } else if (startOption.equals("2")) {
                System.out.println("\nHapus basis pengetahuan");
                String workspaceId = System.getenv("WORKSPACE_ID");
                System.out.print("Masukkan ID basis pengetahuan:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di Konsol Model Studio.
                String indexId = scanner.nextLine();
                // Konfirmasi sebelum penghapusan.
                boolean confirm = false;
                while (!confirm) {
                    System.out.print("Apakah Anda yakin ingin menghapus basis pengetahuan " + indexId + " secara permanen? (y/n): ");
                    String input = scanner.nextLine().trim().toLowerCase();
                    if (input.equals("y")) {
                        confirm = true;
                    } else if (input.equals("n")) {
                        System.out.println("Penghapusan dibatalkan.");
                        return;
                    } else {
                        System.out.println("Input tidak valid. Masukkan y atau n.");
                    }
                }
                DeleteIndexResponse resp = deleteIndex(client, workspaceId, indexId);
                if (resp.getBody().getStatus().equals("200")) {
                    System.out.println("Basis pengetahuan " + indexId + " telah dihapus.");
                } else {
                    ObjectMapper mapper = new ObjectMapper();
                    System.out.println("Terjadi kesalahan: " + mapper.writeValueAsString(resp.getBody()));
                }
            } else {
                System.out.println("Opsi tidak valid. Program keluar.");
            }
        } catch (Exception e) {
            System.out.println("Terjadi kesalahan: " + e.getMessage());
        }
    }
}

PHP

<?php
// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
namespace AlibabaCloud\SDK\KnowledgeBase;

use AlibabaCloud\Dara\Models\RuntimeOptions;
use AlibabaCloud\SDK\Bailian\V20231229\Bailian;
use AlibabaCloud\SDK\Bailian\V20231229\Models\DeleteIndexRequest;
use AlibabaCloud\SDK\Bailian\V20231229\Models\ListIndexDocumentsRequest;
use \Exception;

use Darabonba\OpenApi\Models\Config;

class KnowledgeBaseManage {

    /**
    * Memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan. Jika tidak, mengembalikan false.
    */
    public static function checkEnvironmentVariables() {
        $requiredVars = [
            'ALIBABA_CLOUD_ACCESS_KEY_ID' => 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET' => 'Rahasia AccessKey Alibaba Cloud',
            'WORKSPACE_ID' => 'ID ruang kerja Alibaba Cloud Model Studio'
        ];
        $missingVars = [];
        foreach ($requiredVars as $var => $description) {
            if (!getenv($var)) {
                $missingVars[] = $var;
                echo "Error: Tetapkan variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Menginisialisasi klien.
     *
     * @return Bailian Objek klien yang telah dikonfigurasi.
     */
    public static function createClient(){
        $config = new Config([
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

     /**
     * Mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @return ListIndicesResponse Tanggapan dari layanan Model Studio.
     * @throws Exception
     */
    public static function listIndices($client, $workspaceId) {
        $headers = [];
        $listIndexDocumentsRequest = new ListIndexDocumentsRequest([]);
        $runtime = new RuntimeOptions([]);
        // Panggil metode klien.
        return $client->listIndicesWithOptions($workspaceId, $listIndexDocumentsRequest, $headers, $runtime);
    }

    /**
     * Menghapus secara permanen basis pengetahuan yang ditentukan.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @return mixed Tanggapan dari layanan Model Studio.
     * @throws Exception
     */
    public static function deleteIndex($client, $workspaceId, $indexId) {
        $headers = [];
        $deleteIndexRequest = new DeleteIndexRequest([
            "indexId" => $indexId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->deleteIndexWithOptions($workspaceId, $deleteIndexRequest, $headers, $runtime);
    }

    /**
     * Fungsi utama.
     */
    public static function main($args) {
        if (!self::checkEnvironmentVariables()) {
            echo "Verifikasi variabel lingkungan gagal.\n";
            return;
        }

        try {
            echo "Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):";
            $startOption = trim(fgets(STDIN));
            $client = self::createClient();
            if ($startOption === "1") {
                // Daftar basis pengetahuan.
                echo "\nDaftar basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $response = self::listIndices($client, $workspaceId);
                // Konversi tanggapan menjadi string JSON.
                $result = json_encode($response->body->data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
                echo $result . "\n";
            } elseif ($startOption === "2") {
                echo "\nHapus basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $indexId = readline("Masukkan ID basis pengetahuan:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di Konsol Model Studio.
                // Konfirmasi sebelum penghapusan.
                while (true) {
                    $confirm = strtolower(trim(readline("Apakah Anda yakin ingin menghapus basis pengetahuan $indexId secara permanen? (y/n): ")));
                    if ($confirm === 'y') {
                        break;
                    } elseif ($confirm === 'n') {
                        echo "Penghapusan dibatalkan.\n";
                        return;
                    } else {
                        echo "Input tidak valid. Masukkan y atau n.\n";
                    }
                }
                $response = self::deleteIndex($client, $workspaceId, $indexId);
                if ($response->body->status == "200")
                    echo "Basis pengetahuan " . $indexId . " telah dihapus.\n";
                else 
                    echo "Terjadi kesalahan: " . json_encode($response->body) . "\n";
            } else {
                echo "Opsi tidak valid. Program keluar.\n";
            }
        } catch (Exception $e) {
            echo "Terjadi kesalahan: " . $e->getMessage() . "\n";
        }
    }
}
// Ini mengasumsikan bahwa autoload.php ada di direktori induk file kode saat ini. Sesuaikan jalur berdasarkan struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseManage::main(array_slice($argv, 1));

Node.js

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
'use strict';

const bailian20231229 = require('@alicloud/bailian20231229');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class KbManage {

    /**
     * Memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan. Jika tidak, mengembalikan false.
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Rahasia AccessKey Alibaba Cloud',
            'WORKSPACE_ID': 'ID ruang kerja Alibaba Cloud Model Studio'
        };

        const missing = [];
        for (const [varName, desc] of Object.entries(requiredVars)) {
            if (!process.env[varName]) {
                console.error(`Error: Tetapkan variabel lingkungan ${varName} (${desc})`);
                missing.push(varName);
            }
        }

        return missing.length === 0;
    }

    /**
     * Membuat dan mengonfigurasi klien.
     * @return Client
     * @throws Exception
     */
    static createClient() {
        const config = new OpenApi.Config({
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
        });
        // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new bailian20231229.default(config);
    }

    /**
     * Mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.
     * @param {bailian20231229.Client} client Klien.
     * @param {string} workspaceId ID ruang kerja.
     * @returns {Promise<bailian20231229.ListIndicesResponse>} Tanggapan dari layanan Model Studio.
     */
    static async listIndices(client, workspaceId) {
        const headers = {};
        const listIndicesRequest = new bailian20231229.ListIndicesRequest();
        const runtime = new Util.RuntimeOptions({});
        return await client.listIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
    }

    /**
     * Menghapus secara permanen basis pengetahuan yang ditentukan.
     * @param {bailian20231229.Client} client Klien.
     * @param {string} workspaceId ID ruang kerja.
     * @param {string} indexId ID basis pengetahuan.
     * @returns {Promise<bailian20231229.DeleteIndexResponse>} Tanggapan dari layanan Model Studio.
     */
    static async deleteIndex(client, workspaceId, indexId) {
        const headers = {};
        const deleteIndexRequest = new bailian20231229.DeleteIndexRequest({
            indexId
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.deleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
    }

    /**
     * Menggunakan layanan Model Studio untuk melakukan operasi (daftar atau hapus basis pengetahuan).
     */
    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Verifikasi variabel lingkungan gagal.");
            return;
        }

        const readline = require('readline').createInterface({
            input: process.stdin,
            output: process.stdout
        });

        try {
            const startOption = await new Promise((resolve) => {
                readline.question("Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):", (ans) => {
                    resolve(ans.trim());
                });
            });

            if (startOption === '1') {
                console.log("\nDaftar basis pengetahuan");
                const workspaceId = process.env.WORKSPACE_ID;
                const client = this.createClient();
                const response = await this.listIndices(client, workspaceId);
                console.log(JSON.stringify(response.body.data));
            } else if (startOption === '2') {
                console.log("\nHapus basis pengetahuan");
                const workspaceId = process.env.WORKSPACE_ID;
                const indexId = await new Promise((resolve) => {
                    readline.question("Masukkan ID basis pengetahuan:", (ans) => { // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di Konsol Model Studio.
                        resolve(ans.trim());
                    });
                });
                // Konfirmasi sebelum penghapusan.
                let confirm = '';
                while (confirm !== 'y' && confirm !== 'n') {
                    confirm = (await new Promise((resolve) => {
                        readline.question(`Apakah Anda yakin ingin menghapus basis pengetahuan ${indexId} secara permanen? (y/n): `, (ans) => {
                            resolve(ans.trim().toLowerCase());
                        });
                    })).toLowerCase();
                    if (confirm === 'n') {
                        console.log("Penghapusan dibatalkan.");
                        return;
                    } else if (confirm !== 'y') {
                        console.log("Input tidak valid. Masukkan y atau n.");
                    }
                }
                const client = this.createClient();
                const resp = await this.deleteIndex(client, workspaceId, indexId);
                if (resp.body.status == '200')
                    console.log(`Basis pengetahuan ${indexId} telah dihapus.`);
                else {
                    const errInfo = JSON.stringify(resp.body);
                    console.error(`Terjadi kesalahan: ${errInfo}`)
                }
            } else {
                console.log("Opsi tidak valid. Program keluar.");
            }
        } catch (err) {
            console.error(`Terjadi kesalahan: ${err.message}`);
        } finally {
            readline.close();
        }
    }
}

exports.KbManage = KbManage;
KbManage.main(process.argv.slice(2));

C#

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;

using Newtonsoft.Json;
using Tea;
using Tea.Utils;


namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseManage
    {
        /// <summary>
        /// Memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan telah ditetapkan. Jika tidak, mengembalikan false.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud" },
                { "WORKSPACE_ID", "ID ruang kerja Alibaba Cloud Model Studio" }
            };

            var missingVars = new List<string>();
            foreach (var entry in requiredVars)
            {
                string value = Environment.GetEnvironmentVariable(entry.Key);
                if (string.IsNullOrEmpty(value))
                {
                    missingVars.Add(entry.Key);
                    Console.WriteLine($"Error: Tetapkan variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Menginisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang telah dikonfigurasi.</returns>
        /// <exception cref="Exception">Pengecualian dilempar jika terjadi kesalahan selama inisialisasi.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Client CreateClient()
        {
            var config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            // Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.
        /// </summary>
        /// <param name="client">Klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <returns>Tanggapan dari layanan Model Studio.</returns>
        public static AlibabaCloud.SDK.Bailian20231229.Models.ListIndicesResponse ListIndices(AlibabaCloud.SDK.Bailian20231229.Client client, string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var listIndicesRequest = new Bailian20231229.Models.ListIndicesRequest();
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.ListIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
        }

        /// <summary>
        /// Menghapus secara permanen basis pengetahuan yang ditentukan.
        /// </summary>
        /// <param name="client">Klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <returns>Tanggapan dari layanan Model Studio.</returns>
        public static AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexResponse DeleteIndex(AlibabaCloud.SDK.Bailian20231229.Client client, string workspaceId, string indexId)
        {
            var headers = new Dictionary<string, string>() { };
            var deleteIndexRequest = new Bailian20231229.Models.DeleteIndexRequest
            {
                IndexId = indexId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.DeleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
        }

        /// <summary>
        /// Fungsi utama.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Verifikasi variabel lingkungan gagal.");
                return;
            }
            try
            {
                Console.Write("Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):");
                string startOption = Console.ReadLine();
                if (startOption == "1")
                {
                    Console.WriteLine("\nDaftar basis pengetahuan");
                    string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                    Bailian20231229.Client client = CreateClient();
                    Bailian20231229.Models.ListIndicesResponse listIndicesResponse = ListIndices(client, workspaceId);
                    // Instal Newtonsoft.Json untuk mengonversi objek tanggapan menjadi string JSON untuk output.
                    var json = JsonConvert.SerializeObject(listIndicesResponse.Body.Data, Formatting.Indented);
                    Console.WriteLine(json);
                }
                else if (startOption == "2")
                {
                    Console.WriteLine("\nHapus basis pengetahuan");
                    string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                    Console.Write("Masukkan ID basis pengetahuan:"); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga bisa mendapatkannya dari halaman basis pengetahuan di Konsol Model Studio.
                    string indexId = Console.ReadLine();
                    // Konfirmasi sebelum penghapusan.
                    while (true)
                    {
                        Console.Write($"Apakah Anda yakin ingin menghapus basis pengetahuan {indexId} secara permanen? (y/n): ");
                        string confirm = Console.ReadLine()?.ToLower();
                        if (confirm == "y")
                        {
                            break;
                        }
                        else if (confirm == "n")
                        {
                            Console.WriteLine("Penghapusan dibatalkan.");
                            return;
                        }
                        else
                        {
                            Console.WriteLine("Input tidak valid. Masukkan y atau n.");
                        }
                    }
                    Bailian20231229.Client client = CreateClient();
                    Bailian20231229.Models.DeleteIndexResponse resp = DeleteIndex(client, workspaceId, indexId);
                    if (resp.Body.Status == "200")
                    {
                        Console.WriteLine($"Basis pengetahuan {indexId} telah dihapus.");
                    }
                    else
                    {
                        var mapper = new JsonSerializerSettings { Formatting = Formatting.Indented };
                        string errInfo = JsonConvert.SerializeObject(resp.Body, mapper);
                        Console.WriteLine($"Terjadi kesalahan: {errInfo}");
                    }
                }
                else
                {
                    Console.WriteLine("Opsi tidak valid. Program keluar.");
                    return;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
            }
        }
    }
}

Go

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di lingkungan produksi.
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"

	bailian20231229 "github.com/alibabacloud-go/bailian-20231229/v2/client"
	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
)

// checkEnvironmentVariables memeriksa dan meminta untuk menetapkan variabel lingkungan yang diperlukan.
func checkEnvironmentVariables() bool {
	// Variabel lingkungan yang diperlukan dan deskripsinya.
	requiredVars := map[string]string{
		"ALIBABA_CLOUD_ACCESS_KEY_ID":     "ID AccessKey Alibaba Cloud",
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Rahasia AccessKey Alibaba Cloud",
		"WORKSPACE_ID":                    "ID ruang kerja Alibaba Cloud Model Studio",
	}

	var missingVars []string
	for varName, desc := range requiredVars {
		if os.Getenv(varName) == "" {
			fmt.Printf("Error: Tetapkan variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// createClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang telah dikonfigurasi.
func createClient() (_result *bailian20231229.Client, _err error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// listIndices mendapatkan detail satu atau lebih basis pengetahuan di ruang kerja tertentu.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ListIndicesResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func listIndices(client *bailian20231229.Client, workspaceId string) (_result *bailian20231229.ListIndicesResponse, _err error) {
	headers := make(map[string]*string)
	listIndicesRequest := &bailian20231229.ListIndicesRequest{}
	runtime := &util.RuntimeOptions{}
	return client.ListIndicesWithOptions(tea.String(workspaceId), listIndicesRequest, headers, runtime)
}

// deleteIndex menghapus secara permanen basis pengetahuan yang ditentukan.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.DeleteIndexResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func deleteIndex(client *bailian20231229.Client, workspaceId, indexId string) (_result *bailian20231229.DeleteIndexResponse, _err error) {
	headers := make(map[string]*string)
	deleteIndexRequest := &bailian20231229.DeleteIndexRequest{
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.DeleteIndexWithOptions(tea.String(workspaceId), deleteIndexRequest, headers, runtime)

}

// Fungsi utama.
func main() {
	if !checkEnvironmentVariables() {
		fmt.Println("Verifikasi variabel lingkungan gagal.")
		return
	}

	scanner := bufio.NewScanner(os.Stdin)
	fmt.Print("Pilih operasi untuk dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):")

	// Pastikan untuk membaca input.
	if !scanner.Scan() {
		fmt.Println("Gagal membaca input.")
		return
	}
	startOption := scanner.Text()

	client, err := createClient()
	if err != nil {
		fmt.Println("Gagal membuat klien:", err)
		return
	}

	if strings.TrimSpace(startOption) == "1" {
		fmt.Println("\nDaftar basis pengetahuan")
		workspaceId := os.Getenv("WORKSPACE_ID")
		resp, err := listIndices(client, workspaceId)
		if err != nil {
			fmt.Println("Gagal mendapatkan daftar basis pengetahuan:", err)
			return
		}
		fmt.Printf("Daftar basis pengetahuan:\n%+v\n", resp.Body.Data)
	} else if strings.TrimSpace(startOption) == "2" {
		fmt.Println("\nHapus basis pengetahuan")
		workspaceId := os.Getenv("WORKSPACE_ID")
		fmt.Print("Masukkan ID basis pengetahuan:")
		if !scanner.Scan() {
			fmt.Println("Gagal membaca ID basis pengetahuan.")
			return
		}
		indexId := scanner.Text()
		for {
			fmt.Printf("Apakah Anda yakin ingin menghapus basis pengetahuan %s secara permanen? (y/n): ", indexId)
			if !scanner.Scan() {
				fmt.Println("Gagal membaca konfirmasi.")
				return
			}
			confirm := strings.ToLower(strings.TrimSpace(scanner.Text()))

			if confirm == "y" {
				break
			} else if confirm == "n" {
				fmt.Println("Penghapusan dibatalkan.")
				return
			} else {
				fmt.Println("Input tidak valid. Masukkan y atau n.")
			}
		}
		resp, err := deleteIndex(client, workspaceId, indexId)
		if err != nil {
			fmt.Println("Gagal menghapus basis pengetahuan:", err)
		} else {
			if tea.StringValue(resp.Body.Status) == "200" {
				fmt.Printf("Basis pengetahuan %s telah dihapus.\n", indexId)
			} else {
				fmt.Println(resp.Body)
			}
		}
	} else {
		fmt.Println("Opsi tidak valid. Program keluar.")
	}
}

Membuat basis pengetahuan

Contoh berikut menunjukkan cara membuat basis pengetahuan pencarian dokumen di ruang kerja yang ditentukan.

Anda tidak dapat membuat basis pengetahuan kueri data atau pasangan Q&A gambar menggunakan API. Anda harus menggunakan Konsol Model Studio untuk membuatnya.

1. Inisialisasi klien

Sebelum mengunggah file dan membuat basis pengetahuan, Anda harus menginisialisasi klien. Gunakan AccessKey dan Rahasia AccessKey yang telah dikonfigurasi untuk menyelesaikan verifikasi identitas dan mengonfigurasi endpoint.

  • Endpoint publik:

    Pastikan klien Anda dapat mengakses Internet.
    • Awan publik: bailian.ap-southeast-1.aliyuncs.com

  • Endpoint VPC:

    Jika klien Anda diterapkan di Alibaba Cloud VPC di Singapura ap-southeast-1
    • Awan publik: bailian-vpc.ap-southeast-1.aliyuncs.com

Setelah klien dibuat, Anda akan menerima objek Klien untuk digunakan dalam panggilan API berikutnya.

Python

def create_client() -> bailian20231229Client:
    """
    Membuat dan mengonfigurasi klien.

    Mengembalikan:
        bailian20231229Client: Klien yang dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    # Titik akhir berikut adalah titik akhir publik untuk cloud publik. Ganti sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)

Java

/**
* Menginisialisasi klien.
*
* @return Objek klien yang dikonfigurasi.
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
    com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
            .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
            .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    // Titik akhir berikut adalah titik akhir VPC untuk cloud publik. Ganti sesuai kebutuhan.
    config.endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new com.aliyun.bailian20231229.Client(config);
}

PHP

/**
 * Menginisialisasi klien.
 *
 * @return Bailian Objek klien yang dikonfigurasi.
 */
public static function createClient(){
    $config = new Config([
        "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
        "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    ]);
    // Titik akhir berikut adalah titik akhir VPC untuk cloud publik. Ganti sesuai kebutuhan.
    $config->endpoint = 'bailian-vpc.ap-southeast-1.aliyuncs.com';
    return new Bailian($config);
}

Node.js

/**
 * Membuat dan mengonfigurasi klien.
 * @return Klien
 * @throws Eksepsi
 */
static createClient() {
  const config = new OpenApi.Config({
    accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
    accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
  });
  // Titik akhir berikut adalah titik akhir VPC untuk cloud publik. Ganti sesuai kebutuhan.
  config.endpoint = `bailian-vpc.ap-southeast-1.aliyuncs.com`;
  return new bailian20231229.default(config);
}

C#

/// <summary>
/// Menginisialisasi klien.
/// </summary>
/// <returns>Objek klien yang dikonfigurasi.</returns>
/// <exception cref="Exception">Eksepsi dilemparkan jika terjadi kesalahan selama inisialisasi.</exception>
public static AlibabaCloud.SDK.Bailian20231229.Client CreateClient()
{
    var config = new AlibabaCloud.OpenApiClient.Models.Config
    {
        AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
        AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
    };
    // Titik akhir berikut adalah titik akhir VPC untuk cloud publik. Ganti sesuai kebutuhan.
    config.Endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new AlibabaCloud.SDK.Bailian20231229.Client(config);
}

Go

// CreateClient membuat dan mengonfigurasi klien.
//
// Mengembalikan:
//   - *client.Bailian20231229Client: Klien yang dikonfigurasi.
//   - error: Pesan kesalahan.
func CreateClient() (_result *bailian20231229.Client, _err error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Titik akhir berikut adalah titik akhir VPC untuk cloud publik. Ganti sesuai kebutuhan.
	config.Endpoint = tea.String("bailian-vpc.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

2. Unggah file untuk basis pengetahuan

2.1. Meminta sewa unggah file

Sebelum Anda membuat basis pengetahuan, Anda harus mengunggah file ke ruang kerja yang sama untuk dijadikan sebagai sumber pengetahuan. Sebelum mengunggah file, panggil operasi ApplyFileUploadLease untuk meminta sewa unggah file. Sewa ini adalah otorisasi sementara yang memungkinkan Anda mengunggah file dalam waktu terbatas. Sewa ini berlaku selama beberapa menit.

  • workspace_id: Untuk informasi lebih lanjut, lihat Cara mendapatkan ID ruang kerja.

  • category_id: Dalam contoh ini, masukkan default. Alibaba Cloud Model Studio menggunakan kategori untuk mengelola file yang Anda unggah. Sistem secara otomatis membuat kategori default. Anda juga dapat memanggil operasi AddCategory untuk membuat kategori baru dan mendapatkan category_id yang sesuai.

  • file_name: Masukkan nama file yang akan diunggah, termasuk ekstensi. Nilai tersebut harus sama dengan nama file sebenarnya.

  • file_md5: Masukkan hash MD5 dari file yang akan diunggah. Saat ini, Alibaba Cloud tidak memverifikasi nilai ini. Ini memungkinkan Anda mengunggah file dari URL.

    Sebagai contoh, dalam Python, Anda bisa mendapatkan hash MD5 menggunakan modul hashlib. Untuk bahasa lainnya, lihat kode sampel lengkap.

    Contoh kode

    import hashlib
    
    
    def calculate_md5(file_path):
        """
        Menghitung hash MD5 dari sebuah file.
    
        Args:
            file_path (str): Jalur lokal file.
    
        Returns:
            str: Hash MD5 dari file.
        """
        md5_hash = hashlib.md5()
    
        # Baca file dalam mode biner.
        with open(file_path, "rb") as f:
            # Baca file dalam potongan-potongan untuk menghindari penggunaan memori tinggi untuk file besar.
            for chunk in iter(lambda: f.read(4096), b""):
                md5_hash.update(chunk)
    
        return md5_hash.hexdigest()
    
    
    # Contoh penggunaan
    file_path = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah, misalnya, /xxx/xxx/xxx/Bailian_Phones_Specifications.docx"
    md5_value = calculate_md5(file_path)
    print(f"Hash MD5 dari file adalah: {md5_value}")
    

    Ganti variabel file_path dalam kode dengan jalur lokal sebenarnya dari file, lalu jalankan kode tersebut. Anda akan memperoleh hash MD5 dari file objek. Berikut adalah contoh nilai yang dihasilkan.

    Hash MD5 dari file adalah: 2ef7361ea907f3a1b91e3b9936f5643a
  • file_size: Masukkan ukuran file yang akan diunggah dalam byte.

    Sebagai contoh, dalam Python, Anda bisa mendapatkan nilai ini menggunakan modul os. Untuk bahasa lainnya, lihat kode sampel lengkap.

    Contoh kode

    import os
    
    
    def get_file_size(file_path: str) -> int:
        """
        Mendapatkan ukuran file dalam byte.
    
        Args:
            file_path (str): Jalur lokal sebenarnya dari file.
    
        Returns:
            int: Ukuran file dalam byte.
        """
        return os.path.getsize(file_path)
    
    
    # Contoh penggunaan
    file_path = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah, misalnya, /xxx/xxx/xxx/Bailian_Phones_Specifications.docx"
    file_size = get_file_size(file_path)
    print(f"Ukuran file dalam byte adalah: {file_size}")
    

    Ganti variabel file_path dalam kode dengan jalur lokal sebenarnya dari file dan jalankan kode. Anda kemudian dapat memperoleh ukuran file objek dalam byte. Nilai berikut adalah contoh.

    Ukuran file dalam byte adalah: 14015

Setelah Anda berhasil meminta sewa unggah sementara, Anda akan memperoleh:

  • Sekumpulan parameter unggah sementara:

    • Data.FileUploadLeaseId

    • Data.Param.Method

    • X-bailian-extra dalam Data.Param.Headers

    • Content-Type dalam Data.Param.Headers

  • URL unggah sementara: Data.Param.Url

Anda akan menggunakan ini pada langkah berikutnya.

Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess) sebelum memanggil operasi ini.

  • Operasi ini mendukung debugging online dan pembuatan kode sampel untuk berbagai bahasa.

Python

def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    Meminta sewa unggah file dari Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        category_id (str): ID kategori.
        file_name (str): Nama file.
        file_md5 (str): Hash MD5 dari file.
        file_size (int): Ukuran file dalam byte.
        workspace_id (str): ID ruang kerja.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.ApplyFileUploadLeaseRequest(
        file_name=file_name,
        md_5=file_md5,
        size_in_bytes=file_size,
    )
    runtime = util_models.RuntimeOptions()
    return client.apply_file_upload_lease_with_options(category_id, workspace_id, request, headers, runtime)

Java

/**
 * Meminta sewa unggah file.
 *
 * @param client      Objek klien.
 * @param categoryId  ID kategori.
 * @param fileName    Nama file.
 * @param fileMd5     Hash MD5 dari file.
 * @param fileSize    Ukuran file dalam byte.
 * @param workspaceId ID ruang kerja.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public ApplyFileUploadLeaseResponse applyLease(com.aliyun.bailian20231229.Client client, String categoryId, String fileName, String fileMd5, String fileSize, String workspaceId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest applyFileUploadLeaseRequest = new com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest();
    applyFileUploadLeaseRequest.setFileName(fileName);
    applyFileUploadLeaseRequest.setMd5(fileMd5);
    applyFileUploadLeaseRequest.setSizeInBytes(fileSize);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    ApplyFileUploadLeaseResponse applyFileUploadLeaseResponse = null;
    applyFileUploadLeaseResponse = client.applyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
    return applyFileUploadLeaseResponse;
}

PHP

/**
 * Meminta sewa unggah file.
 *
 * @param Bailian $client Klien.
 * @param string $categoryId ID kategori.
 * @param string $fileName Nama file.
 * @param string $fileMd5 Hash MD5 dari file.
 * @param int $fileSize Ukuran file dalam byte.
 * @param string $workspaceId ID ruang kerja.
 * @return ApplyFileUploadLeaseResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public function applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId) {
    $headers = [];
    $applyFileUploadLeaseRequest = new ApplyFileUploadLeaseRequest([
        "fileName" => $fileName,
        "md5" => $fileMd5,
        "sizeInBytes" => $fileSize
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->applyFileUploadLeaseWithOptions($categoryId, $workspaceId, $applyFileUploadLeaseRequest, $headers, $runtime);
}

Node.js

/**
 * Meminta sewa unggah file.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} categoryId - ID kategori.
 * @param {string} fileName - Nama file.
 * @param {string} fileMd5 - Hash MD5 dari file.
 * @param {string} fileSize - Ukuran file dalam byte.
 * @param {string} workspaceId - ID ruang kerja.
 * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId) {
  const headers = {};
  const req = new bailian20231229.ApplyFileUploadLeaseRequest({
    md5: fileMd5,
    fileName,
    sizeInBytes: fileSize
 });
 const runtime = new Util.RuntimeOptions({});
 return await client.applyFileUploadLeaseWithOptions(
    categoryId,
    workspaceId,
    req,
    headers,
    runtime
  );
}

C#

/// <summary>
/// Meminta sewa unggah file.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="categoryId">ID kategori.</param>
/// <param name="fileName">Nama file.</param>
/// <param name="fileMd5">Hash MD5 dari file.</param>
/// <param name="fileSize">Ukuran file dalam byte.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Dilempar jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseResponse ApplyLease(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string categoryId,
    string fileName,
    string fileMd5,
    string fileSize,
    string workspaceId)
{
    var headers = new Dictionary<string, string>() { };
    var applyFileUploadLeaseRequest = new AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseRequest
    {
        FileName = fileName,
        Md5 = fileMd5,
        SizeInBytes = fileSize
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.ApplyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
}

Go

// ApplyLease meminta sewa unggah file dari Alibaba Cloud Model Studio.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - categoryId (string): ID kategori.
//   - fileName (string): Nama file.
//   - fileMD5 (string): Hash MD5 dari file.
//   - fileSize (string): Ukuran file dalam byte.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func ApplyLease(client *bailian20231229.Client, categoryId, fileName, fileMD5 string, fileSize string, workspaceId string) (_result *bailian20231229.ApplyFileUploadLeaseResponse, _err error) {
	headers := make(map[string]*string)
	applyFileUploadLeaseRequest := &bailian20231229.ApplyFileUploadLeaseRequest{
		FileName:    tea.String(fileName),
		Md5:         tea.String(fileMD5),
		SizeInBytes: tea.String(fileSize),
	}
	runtime := &util.RuntimeOptions{}
	return client.ApplyFileUploadLeaseWithOptions(tea.String(categoryId), tea.String(workspaceId), applyFileUploadLeaseRequest, headers, runtime)
}

Contoh Permintaan

{
  "CategoryId": "default",
  "FileName": "Bailian_Phones_Specifications.docx",
  "Md5": "2ef7361ea907f3a1b91e3b9936f5643a",
  "SizeInBytes": "14015",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh tanggapan

{
  "RequestId": "778C0B3B-59C2-5FC1-A947-36EDD1XXXXXX",
  "Success": true,
  "Message": "",
  "Code": "success",
  "Status": "200",
  "Data": {
    "FileUploadLeaseId": "1e6a159107384782be5e45ac4759b247.1719325231035",
    "Type": "HTTP",
    "Param": {
      "Method": "PUT",
      "Url": "https://bailian-datahub-data-origin-prod.oss-cn-hangzhou.aliyuncs.com/1005426495169178/10024405/68abd1dea7b6404d8f7d7b9f7fbd332d.1716698936847.pdf?Expires=1716699536&OSSAccessKeyId=TestID&Signature=HfwPUZo4pR6DatSDym0zFKVh9Wg%3D",
      "Headers": "        \"X-bailian-extra\": \"MTAwNTQyNjQ5NTE2OTE3OA==\",\n        \"Content-Type\": \"application/pdf\""
    }
  }
}

2.2. Unggah file ke penyimpanan sementara

Setelah Anda mendapatkan sewa unggah, gunakan parameter unggah sementara dan URL dari sewa untuk mengunggah file ke server Model Studio. Anda dapat mengunggah file dari penyimpanan lokal atau URL publik. Setiap ruang kerja mendukung hingga 10.000 file. Format file yang didukung adalah PDF, DOCX, DOC, TXT, Markdown, PPTX, PPT, XLSX, XLS, HTML, PNG, JPG, JPEG, BMP, dan GIF.

  • pre_signed_url: Masukkan Data.Param.Url yang dikembalikan oleh permintaan sewa unggah file.

    Ini adalah URL yang telah ditandatangani sebelumnya. Tidak mendukung pengunggahan FormData. Anda harus mengunggah file dalam format biner. Untuk informasi lebih lanjut, lihat kode sampel.
Penting

Operasi ini tidak mendukung debugging online atau pembuatan kode sampel.

Unggah dari penyimpanan lokal

Python

import requests
from urllib.parse import urlparse

def upload_file(pre_signed_url, file_path):
    """
    Unggah file lokal ke penyimpanan sementara.

    Args:
        pre_signed_url (str): URL dari sewa unggah.
        file_path (str): Jalur lokal file.
    
    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    try:
        # Atur header permintaan.
        headers = {
            "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
            "Content-Type": "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong."
        }

        # Baca file dan unggah.
        with open(file_path, 'rb') as file:
            # Metode permintaan untuk pengunggahan file harus sama dengan nilai bidang Data.Param.Method yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            response = requests.put(pre_signed_url, data=file, headers=headers)

        # Periksa kode status tanggapan.
        if response.status_code == 200:
            print("File berhasil diunggah.")
        else:
            print(f"Gagal mengunggah file. ResponseCode: {response.status_code}")

    except Exception as e:
        print(f"Terjadi kesalahan: {str(e)}")

if __name__ == "__main__":

    pre_signed_url_or_http_url = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya."

    # Unggah file lokal ke penyimpanan sementara.
    file_path = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx)."
    upload_file(pre_signed_url_or_http_url, file_path)

Java

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UploadFile {
    public static void uploadFile(String preSignedUrl, String filePath) {
        HttpURLConnection connection = null;
        try {
            // Buat objek URL.
            URL url = new URL(preSignedUrl);
            connection = (HttpURLConnection) url.openConnection();
            // Metode permintaan untuk pengunggahan file harus sama dengan nilai bidang Data.Param.Method yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.setRequestMethod("PUT");
            // Izinkan output ke koneksi karena koneksi ini digunakan untuk mengunggah file.
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.");
            connection.setRequestProperty("Content-Type", "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong.");
            // Baca file dan unggah melalui koneksi.
            try (DataOutputStream outStream = new DataOutputStream(connection.getOutputStream());
                 FileInputStream fileInputStream = new FileInputStream(filePath)) {
                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                    outStream.write(buffer, 0, bytesRead);
                }
                outStream.flush();
            }
            // Periksa tanggapan.
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // File berhasil diunggah.
                System.out.println("File berhasil diunggah.");
            } else {
                // File gagal diunggah.
                System.out.println("Gagal mengunggah file. ResponseCode: " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
    }

    public static void main(String[] args) {
        String preSignedUrlOrHttpUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        // Unggah file lokal ke penyimpanan sementara.
        String filePath = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx).";
        uploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

PHP

<?php

/**
 * Unggah file lokal ke penyimpanan sementara.
 *
 * @param string $preSignedUrl URL yang telah ditandatangani sebelumnya atau alamat HTTP yang diperoleh dari operasi ApplyFileUploadLease.
 * @param array $headers Array header permintaan yang berisi "X-bailian-extra" dan "Content-Type".
 * @param string $filePath Jalur file lokal.
 * @throws Exception Jika pengunggahan gagal.
 */
function uploadFile($preSignedUrl, $headers, $filePath) {
    // Baca konten file.
    $fileContent = file_get_contents($filePath);
    if ($fileContent === false) {
        throw new Exception("Tidak dapat membaca file: " . $filePath);
    }
    // Inisialisasi sesi cURL.
    $ch = curl_init();

    // Atur opsi cURL.
    curl_setopt($ch, CURLOPT_URL, $preSignedUrl);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Gunakan metode PUT.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent); // Setel badan permintaan ke konten file.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan tanggapan daripada menampilkannya langsung.

    // Bangun header permintaan.
    $uploadHeaders = [
        "X-bailian-extra: " . $headers["X-bailian-extra"],
        "Content-Type: " . $headers["Content-Type"]
    ];
    curl_setopt($ch, CURLOPT_HTTPHEADER, $uploadHeaders);

    // Eksekusi permintaan.
    $response = curl_exec($ch);

    // Dapatkan kode status HTTP.
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // Tutup sesi cURL.
    curl_close($ch);

    // Periksa kode status.
    if ($httpCode != 200) {
        throw new Exception("Pengunggahan gagal. Kode status HTTP: " . $httpCode . ". Pesan kesalahan: " . $response);
    }

    // Pengunggahan berhasil.
    echo "File berhasil diunggah.\n";
}

/**
 * Fungsi utama: Unggah file lokal.
 */
function main() {
    // Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    $preSignedUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";

    // Ganti ini dengan nilai X-bailian-extra dan Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    $headers = [
        "X-bailian-extra" => "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type" => "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong."
    ];

    // Unggah file lokal ke penyimpanan sementara.
    $filePath = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx).";

    try {
        uploadFile($preSignedUrl, $headers, $filePath);
    } catch (Exception $e) {
        echo "Kesalahan: " . $e->getMessage() . "\n";
    }
}

// Panggil fungsi utama.
main();

?>

Node.js

const fs = require('fs');
const axios = require('axios');

/**
 * Unggah file lokal ke penyimpanan sementara.
 *
 * @param {string} preSignedUrl - URL dari sewa unggah.
 * @param {Object} headers - Header untuk permintaan unggah.
 * @param {string} filePath - Jalur lokal file.
 * @throws {Error} Jika pengunggahan gagal.
 */
async function uploadFile(preSignedUrl, headers, filePath) {
    // Bangun header permintaan yang diperlukan untuk pengunggahan.
    const uploadHeaders = {
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type": headers["Content-Type"]
    };

    // Buat aliran baca file.
    const fileStream = fs.createReadStream(filePath);

    try {
        // Gunakan axios untuk mengirim permintaan PUT.
        const response = await axios.put(preSignedUrl, fileStream, {
            headers: uploadHeaders
        });

        // Periksa kode status tanggapan.
        if (response.status === 200) {
            console.log("File berhasil diunggah.");
        } else {
            console.error(`Gagal mengunggah file. ResponseCode: ${response.status}`);
            throw new Error(`Pengunggahan gagal dengan kode status: ${response.status}`);
        }
    } catch (error) {
        // Tangani kesalahan.
        console.error("Kesalahan selama pengunggahan:", error.message);
        throw new Error(`Pengunggahan gagal: ${error.message}`);
    }
}

/**
 * Fungsi utama: Unggah file lokal.
 */
function main() {
    const preSignedUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";

    const headers = {
        "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type": "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong."
    };

    // Unggah file lokal ke penyimpanan sementara.
    const filePath = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx).";

    uploadFile(preSignedUrl, headers, filePath)
        .then(() => {
            console.log("Pengunggahan selesai.");
        })
        .catch((err) => {
            console.error("Pengunggahan gagal:", err.message);
        });
}

// Panggil fungsi utama.
main();

C#

using System;
using System.IO;
using System.Net;

public class UploadFilExample
{
    public static void UploadFile(string preSignedUrl, string filePath)
    {
        HttpWebRequest connection = null;
        try
        {
            // Buat objek URL.
            Uri url = new Uri(preSignedUrl);
            connection = (HttpWebRequest)WebRequest.Create(url);
            // Metode permintaan untuk pengunggahan file harus sama dengan nilai bidang Data.Param.Method yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.Method = "PUT";
            // Izinkan output ke koneksi karena koneksi ini digunakan untuk mengunggah file.
            connection.AllowWriteStreamBuffering = false;
            connection.SendChunked = false;
            // Setel header permintaan agar sama dengan nilai bidang dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.Headers["X-bailian-extra"] = "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
            connection.ContentType = "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong.";
            // Baca file dan unggah melalui koneksi.
            using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            using (var requestStream = connection.GetRequestStream())
            {
                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    requestStream.Write(buffer, 0, bytesRead);
                }
                requestStream.Flush();
            }
            // Periksa tanggapan.
            using (HttpWebResponse response = (HttpWebResponse)connection.GetResponse())
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    // File berhasil diunggah.
                    Console.WriteLine("File berhasil diunggah.");
                }
                else
                {
                    // File gagal diunggah.
                    Console.WriteLine($"Gagal mengunggah file. ResponseCode: {response.StatusCode}");
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            e.StackTrace.ToString();
        }
        finally
        {
            if (connection != null)
            {
                connection.Abort();
            }
        }
    }

    public static void Main(string[] args)
    {
        string preSignedUrlOrHttpUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        // Unggah file lokal ke penyimpanan sementara.
        string filePath = "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx).";
        UploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

Go

package main

import (
    "fmt"
    "io"
    "os"

    "github.com/go-resty/resty/v2"
)

// UploadFile mengunggah file lokal ke penyimpanan sementara.
//
// Args:
//   - preSignedUrl (string): URL dari sewa unggah.
//   - headers (map[string]string): Header untuk permintaan unggah.
//   - filePath (string): Jalur lokal file.
//
// Returns:
//   - error: Pesan kesalahan jika pengunggahan gagal, jika tidak nil.
func UploadFile(preSignedUrl string, headers map[string]string, filePath string) error {
    // Buka file lokal.
    file, err := os.Open(filePath)
    if err != nil {
        return fmt.Errorf("gagal membuka file: %w", err)
    }
    defer file.Close()

    // Baca konten.
    body, err := io.ReadAll(file)
    if err != nil {
        return fmt.Errorf("gagal membaca file: %w", err)
    }

    // Buat klien REST.
    client := resty.New()

    // Bangun header permintaan yang diperlukan untuk pengunggahan.
    uploadHeaders := map[string]string{
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type":    headers["Content-Type"],
    }

    // Kirim permintaan PUT.
    resp, err := client.R().
        SetHeaders(uploadHeaders).
        SetBody(body).
        Put(preSignedUrl)

    if err != nil {
        return fmt.Errorf("gagal mengirim permintaan: %w", err)
    }

    // Periksa kode status tanggapan HTTP.
    if resp.IsError() {
        return fmt.Errorf("kesalahan HTTP: %d", resp.StatusCode())
    }

    fmt.Println("File berhasil diunggah.")
    return nil
}

// fungsi utama
func main() {
    // Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    preSignedUrl := "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya."

    // Ganti ini dengan nilai X-bailian-extra dan Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    headers := map[string]string{
        "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type":    "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong.",
    }

    // Unggah file lokal ke penyimpanan sementara.
    filePath := "Ganti ini dengan jalur lokal sebenarnya dari file yang akan diunggah (misalnya, di Linux: /xxx/xxx/Bailian_Phones_Specifications.docx)."

    // Panggil fungsi unggah.
    err := UploadFile(preSignedUrl, headers, filePath)
    if err != nil {
        fmt.Printf("Pengunggahan gagal: %v\n", err)
    }
}

Unggah dari URL

Pastikan URL dapat diakses secara publik dan menunjuk ke file yang valid.

Python

import requests
from urllib.parse import urlparse

def upload_file_link(pre_signed_url, source_url_string):
    """
    Mengunggah file dari URL publik ke penyimpanan sementara.

    Args:
        pre_signed_url (str): URL dari lease unggah.
        source_url_string (str): URL file.
    
    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    try:
        # Atur header permintaan.
        headers = {
            "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
            "Content-Type": "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, teruskan nilai kosong."
        }

        # Atur metode permintaan ke GET untuk mengakses URL file.
        source_response = requests.get(source_url_string)
        if source_response.status_code != 200:
            raise RuntimeError("Gagal mendapatkan file sumber.")

        # Metode permintaan untuk pengunggahan file harus sama dengan nilai bidang Data.Param.Method yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
        response = requests.put(pre_signed_url, data=source_response.content, headers=headers)

        # Periksa kode status tanggapan.
        if response.status_code == 200:
            print("File berhasil diunggah.")
        else:
            print(f"Gagal mengunggah file. ResponseCode: {response.status_code}")

    except Exception as e:
        print(f"Terjadi kesalahan: {str(e)}")

if __name__ == "__main__":

    pre_signed_url_or_http_url = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, teruskan nilai kosong."

    # URL file.
    source_url = "Ganti ini dengan URL file yang akan diunggah."
    upload_file_link(pre_signed_url_or_http_url, source_url)

Java

import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UploadFile {
    public static void uploadFileLink(String preSignedUrl, String sourceUrlString) {
        HttpURLConnection connection = null;
        try {
            // Buat objek URL.
            URL url = new URL(preSignedUrl);
            connection = (HttpURLConnection) url.openConnection();
            // Metode permintaan untuk pengunggahan file harus sama dengan nilai bidang Data.Param.Method yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.setRequestMethod("PUT");
            // Izinkan output ke koneksi karena koneksi ini digunakan untuk mengunggah file.
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.");
            connection.setRequestProperty("Content-Type", "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong.");
            URL sourceUrl = new URL(sourceUrlString);
            HttpURLConnection sourceConnection = (HttpURLConnection) sourceUrl.openConnection();
            // Atur metode permintaan ke GET untuk mengakses URL file.
            sourceConnection.setRequestMethod("GET");
            // Dapatkan kode respons. 200 menunjukkan bahwa permintaan berhasil.
            int sourceFileResponseCode = sourceConnection.getResponseCode();
            // Baca file dari URL dan unggah melalui koneksi.
            if (sourceFileResponseCode != HttpURLConnection.HTTP_OK) {
                throw new RuntimeException("Gagal mendapatkan file sumber.");
            }
            try (DataOutputStream outStream = new DataOutputStream(connection.getOutputStream());
                 InputStream in = new BufferedInputStream(sourceConnection.getInputStream())) {
                byte[] buffer = new byte[4096];
                int bytesRead;
                while ((bytesRead = in.read(buffer)) != -1) {
                    outStream.write(buffer, 0, bytesRead);
                }
                outStream.flush();
            }
            // Periksa tanggapan.
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // File berhasil diunggah.
                System.out.println("File berhasil diunggah.");
            } else {
                // File gagal diunggah.
                System.out.println("Gagal mengunggah file. ResponseCode: " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
            }
        }
    }

    public static void main(String[] args) {
        String preSignedUrlOrHttpUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        
        String sourceUrl = "Ganti ini dengan URL file yang akan diunggah.";
        uploadFileLink(preSignedUrlOrHttpUrl, sourceUrl);
    }
}

PHP

<?php

/**
 * Unggah file dari URL publik ke penyimpanan sementara.
 *
 * @param string $preSignedUrl URL yang telah ditandatangani sebelumnya atau alamat HTTP yang diperoleh dari operasi ApplyFileUploadLease.
 * @param array $headers Array header permintaan yang berisi "X-bailian-extra" dan "Content-Type".
 * @param string $sourceUrl URL file.
 * @throws Exception Jika pengunggahan gagal.
 */
function uploadFile($preSignedUrl, $headers, $sourceUrl) {

    $fileContent = file_get_contents($sourceUrl);
    if ($fileContent === false) {
        throw new Exception("Tidak dapat mengunduh file dari URL yang diberikan: " . $sourceUrl);
    }
    // Inisialisasi sesi cURL.
    $ch = curl_init();

    // Atur opsi cURL.
    curl_setopt($ch, CURLOPT_URL, $preSignedUrl);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Gunakan metode PUT.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent); // Setel badan permintaan ke konten file.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan tanggapan daripada menampilkannya langsung.

    // Bangun header permintaan.
    $uploadHeaders = [
        "X-bailian-extra: " . $headers["X-bailian-extra"],
        "Content-Type: " . $headers["Content-Type"]
    ];
    curl_setopt($ch, CURLOPT_HTTPHEADER, $uploadHeaders);

    // Eksekusi permintaan.
    $response = curl_exec($ch);

    // Dapatkan kode status HTTP.
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    // Tutup sesi cURL.
    curl_close($ch);

    // Periksa kode status.
    if ($httpCode != 200) {
        throw new Exception("Pengunggahan gagal. Kode status HTTP: " . $httpCode . ". Pesan kesalahan: " . $response);
    }

    // Pengunggahan berhasil.
    echo "File berhasil diunggah.\n";
}

/**
 * Fungsi utama: Unggah file dari URL publik ke penyimpanan sementara.
 */
function main() {
    // Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    $preSignedUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";

    // Ganti ini dengan nilai X-bailian-extra dan Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    $headers = [
        "X-bailian-extra" => "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type" => "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong."
    ];

    $sourceUrl = "Ganti ini dengan URL file yang akan diunggah.";

    try {
        uploadFile($preSignedUrl, $headers, $sourceUrl);
    } catch (Exception $e) {
        echo "Kesalahan: " . $e->getMessage() . "\n";
    }
}

// Panggil fungsi utama.
main();

?>

Node.js

const axios = require('axios');

/**
 * Unggah file dari URL publik ke penyimpanan sementara.
 *
 * @param {string} preSignedUrl - URL dari sewa unggah.
 * @param {Object} headers - Header untuk permintaan unggah.
 * @param {string} sourceUrl - URL file.
 * @throws {Error} Jika pengunggahan gagal.
 */
async function uploadFileFromUrl(preSignedUrl, headers, sourceUrl) {
    // Bangun header permintaan yang diperlukan untuk pengunggahan.
    const uploadHeaders = {
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type": headers["Content-Type"]
    };

    try {
        // Unduh file dari URL yang diberikan.
        const response = await axios.get(sourceUrl, {
            responseType: 'stream'
        });

        // Gunakan axios untuk mengirim permintaan PUT.
        const uploadResponse = await axios.put(preSignedUrl, response.data, {
            headers: uploadHeaders
        });

        // Periksa kode status tanggapan.
        if (uploadResponse.status === 200) {
            console.log("File berhasil diunggah dari URL.");
        } else {
            console.error(`Gagal mengunggah file. ResponseCode: ${uploadResponse.status}`);
            throw new Error(`Pengunggahan gagal dengan kode status: ${uploadResponse.status}`);
        }
    } catch (error) {
        // Tangani kesalahan.
        console.error("Kesalahan selama pengunggahan:", error.message);
        throw new Error(`Pengunggahan gagal: ${error.message}`);
    }
}

/**
 * Fungsi utama: Unggah file yang dapat diunduh secara publik ke penyimpanan sementara.
 */
function main() {
    const preSignedUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";

    const headers = {
        "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type": "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong."
    };

    const sourceUrl = "Ganti ini dengan URL file yang akan diunggah.";

    uploadFileFromUrl(preSignedUrl, headers, sourceUrl)
        .then(() => {
            console.log("Pengunggahan selesai.");
        })
        .catch((err) => {
            console.error("Pengunggahan gagal:", err.message);
        });
}

// Panggil fungsi utama.
main();

C#

using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

public class UploadFileExample
{
    public static async Task UploadFileFromUrl(string preSignedUrl, string url)
    {
        try
        {
            // Buat klien HTTP untuk mengunduh file dari URL yang diberikan.
            using (HttpClient httpClient = new HttpClient())
            {
                HttpResponseMessage response = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
                response.EnsureSuccessStatusCode();

                // Dapatkan aliran file.
                using (Stream fileStream = await response.Content.ReadAsStreamAsync())
                {
                    // Buat objek URL.
                    Uri urlObj = new Uri(preSignedUrl);
                    HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(urlObj);

                    // Atur metode permintaan untuk pengunggahan file.
                    connection.Method = "PUT";
                    connection.AllowWriteStreamBuffering = false;
                    connection.SendChunked = false;

                    // Atur header permintaan. Ganti dengan nilai sebenarnya.
                    connection.Headers["X-bailian-extra"] = "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
                    connection.ContentType = "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, berikan nilai kosong.";

                    // Dapatkan aliran permintaan dan tulis aliran file ke dalamnya.
                    using (Stream requestStream = connection.GetRequestStream())
                    {
                        byte[] buffer = new byte[4096];
                        int bytesRead;
                        while ((bytesRead = await fileStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
                        {
                            await requestStream.WriteAsync(buffer, 0, bytesRead);
                        }
                        await requestStream.FlushAsync();
                    }

                    // Periksa tanggapan.
                    using (HttpWebResponse responseResult = (HttpWebResponse)connection.GetResponse())
                    {
                        if (responseResult.StatusCode == HttpStatusCode.OK)
                        {
                            Console.WriteLine("File berhasil diunggah dari URL.");
                        }
                        else
                        {
                            Console.WriteLine($"Gagal mengunggah file. ResponseCode: {responseResult.StatusCode}");
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
        }
    }

    public static async Task Main(string[] args)
    {
        string preSignedUrlOrHttpUrl = "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        string url = "Ganti ini dengan URL file yang akan diunggah.";   

        await UploadFileFromUrl(preSignedUrlOrHttpUrl, url);
    }
}

Go

package main
 
import (
    "fmt"
    "net/http"
 
    "github.com/go-resty/resty/v2"
)
 
// UploadFileFromUrl mengunggah file dari URL publik ke penyimpanan sementara.
//
// Arg:
//   - preSignedUrl (string): URL dari sewa unggah.
//   - headers (map[string]string): Header untuk permintaan unggah.
//   - sourceUrl (string): URL file.
//
// Mengembalikan:
//   - error: Pesan kesalahan jika unggahan gagal, jika tidak, nil.
func UploadFileFromUrl(preSignedUrl string, headers map[string]string, sourceUrl string) error {
    // Unduh file dari URL yang diberikan.
    resp, err := http.Get(sourceUrl)
    if err != nil {
        return fmt.Errorf("failed to get file: %w", err)
    }
    defer resp.Body.Close()
 
    if resp.StatusCode != http.StatusOK {
        return fmt.Errorf("failed to get file, status code: %d", resp.StatusCode)
    }
 
    // Buat klien REST.
    client := resty.New()
 
    // Buat header permintaan yang diperlukan untuk unggahan.
    uploadHeaders := map[string]string{
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type":    headers["Content-Type"],
    }
 
    // Kirim permintaan PUT.
    response, err := client.R().
        SetHeaders(uploadHeaders).
        SetBody(resp.Body).
        Put(preSignedUrl)
 
    if err != nil {
        return fmt.Errorf("failed to send request: %w", err)
    }
 
    if err != nil {
        return fmt.Errorf("failed to send request: %w", err)
    }
 
    // Periksa kode status tanggapan HTTP.
    if response.IsError() {
        return fmt.Errorf("HTTP error: %d", response.StatusCode())
    }
 
    fmt.Println("File berhasil diunggah dari URL.")
    return nil
}
 
// fungsi main
func main() {
    // Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    preSignedUrl := "Ganti ini dengan nilai bidang Data.Param.Url yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya."
 
    // Ganti ini dengan nilai X-bailian-extra dan Content-Type di Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    headers := map[string]string{
        "X-bailian-extra": "Ganti ini dengan nilai bidang Data.Param.Headers.X-bailian-extra yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type":    "Ganti ini dengan nilai bidang Data.Param.Headers.Content-Type yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilai kosong dikembalikan, teruskan nilai kosong.",
    }
 
    sourceUrl := "Ganti ini dengan URL file yang akan diunggah."
 
    // Panggil fungsi unggah.
    err := UploadFileFromUrl(preSignedUrl, headers, sourceUrl)
    if err != nil {
        fmt.Printf("Unggahan gagal: %v\n", err)
    }
}

2.3. Tambahkan file ke kategori

Alibaba Cloud Model Studio menggunakan kategori untuk mengelola file yang Anda unggah. Oleh karena itu, Anda harus memanggil operasi AddFile untuk menambahkan file yang diunggah ke kategori dalam ruang kerja yang sama.

  • parser: Masukkan DASHSCOPE_DOCMIND.

  • lease_id: Masukkan Data.FileUploadLeaseId yang dikembalikan oleh permintaan untuk sewa unggah file.

  • category_id: Dalam contoh ini, masukkan default. Jika Anda mengunggah file ke kategori kustom, masukkan category_id yang sesuai.

Setelah file ditambahkan, Model Studio mengembalikan FileId untuk file tersebut dan secara otomatis mulai mengurai file tersebut. lease_id menjadi tidak valid. Jangan gunakan ID sewa yang sama untuk mengirimkan permintaan lagi.

Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess) sebelum memanggil operasi ini.

  • Operasi ini mendukung debugging online dan pembuatan contoh kode untuk berbagai bahasa.

Python

def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    Menambahkan file ke kategori tertentu di Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        lease_id (str): ID sewa.
        parser (str): Parser untuk file.
        category_id (str): ID kategori.
        workspace_id (str): ID ruang kerja.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.AddFileRequest(
        lease_id=lease_id,
        parser=parser,
        category_id=category_id,
    )
    runtime = util_models.RuntimeOptions()
    return client.add_file_with_options(workspace_id, request, headers, runtime)

Java

/**
 * Menambahkan file ke kategori.
 *
 * @param client      Objek klien.
 * @param leaseId     ID sewa.
 * @param parser      Parser untuk file.
 * @param categoryId  ID kategori.
 * @param workspaceId ID ruang kerja.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public AddFileResponse addFile(com.aliyun.bailian20231229.Client client, String leaseId, String parser, String categoryId, String workspaceId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.AddFileRequest addFileRequest = new com.aliyun.bailian20231229.models.AddFileRequest();
    addFileRequest.setLeaseId(leaseId);
    addFileRequest.setParser(parser);
    addFileRequest.setCategoryId(categoryId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.addFileWithOptions(workspaceId, addFileRequest, headers, runtime);
}

PHP

/**
 * Menambahkan file ke kategori.
 *
 * @param Bailian $client Klien.
 * @param string $leaseId ID sewa.
 * @param string $parser Parser untuk file.
 * @param string $categoryId ID kategori.
 * @param string $workspaceId ID ruang kerja.
 * @return AddFileResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public function addFile($client, $leaseId, $parser, $categoryId, $workspaceId) {
    $headers = [];
    $addFileRequest = new AddFileRequest([
        "leaseId" => $leaseId,
        "parser" => $parser,
        "categoryId" => $categoryId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->addFileWithOptions($workspaceId, $addFileRequest, $headers, $runtime);
}

Node.js

/**
 * Menambahkan file ke kategori.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} leaseId - ID sewa.
 * @param {string} parser - Parser untuk file.
 * @param {string} categoryId - ID kategori.
 * @param {string} workspaceId - ID ruang kerja.
 * @returns {Promise<bailian20231229.AddFileResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function addFile(client, leaseId, parser, categoryId, workspaceId) {
 const headers = {};
 const req = new bailian20231229.AddFileRequest({
  leaseId,
  parser,
  categoryId
});
 const runtime = new Util.RuntimeOptions({});
 return await client.addFileWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menambahkan file ke kategori.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="leaseId">ID sewa.</param>
/// <param name="parser">Parser untuk file.</param>
/// <param name="categoryId">ID kategori.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Pengecualian dilempar jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.AddFileResponse AddFile(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string leaseId,
    string parser,
    string categoryId,
    string workspaceId)
{
    var headers = new Dictionary<string, string>() { };
    var addFileRequest = new AlibabaCloud.SDK.Bailian20231229.Models.AddFileRequest
    {
        LeaseId = leaseId,
        Parser = parser,
        CategoryId = categoryId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.AddFileWithOptions(workspaceId, addFileRequest, headers, runtime);
}

Go

// AddFile menambahkan file ke kategori tertentu di Alibaba Cloud Model Studio.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func AddFile(client *bailian20231229.Client, leaseId, parser, categoryId, workspaceId string) (_result *bailian20231229.AddFileResponse, _err error) {
	headers := make(map[string]*string)
	addFileRequest := &bailian20231229.AddFileRequest{
		LeaseId:    tea.String(leaseId),
		Parser:     tea.String(parser),
		CategoryId: tea.String(categoryId),
	}
	runtime := &util.RuntimeOptions{}
	return client.AddFileWithOptions(tea.String(workspaceId), addFileRequest, headers, runtime)
}

Contoh permintaan

{
  "CategoryId": "default",
  "LeaseId": "d92bd94fa9b54326a2547415e100c9e2.1742195250069",
  "Parser": "DASHSCOPE_DOCMIND",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh tanggapan

{
  "Status": "200",
  "Message": "",
  "RequestId": "5832A1F4-AF91-5242-8B75-35BDC9XXXXXX",
  "Data": {
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

2.4. Memeriksa status penguraian file

File yang belum diuraikan tidak dapat digunakan dalam Basis Pengetahuan. Selama jam sibuk, proses ini bisa memakan waktu beberapa jam. Anda dapat memanggil operasi DescribeFile untuk memeriksa status penguraian sebuah file.

Ketika bidang Data.Status dalam tanggapan adalah PARSE_SUCCESS, file tersebut telah berhasil diuraikan dan dapat diimpor ke dalam Basis Pengetahuan.

Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess atau AliyunBailianDataReadOnlyAccess) sebelum memanggil operasi ini.

  • Operasi ini mendukung debugging online dan pembuatan contoh kode untuk berbagai bahasa.

Python

def describe_file(client, workspace_id, file_id):
    """
    Dapatkan informasi dasar tentang sebuah file.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    runtime = util_models.RuntimeOptions()
    return client.describe_file_with_options(workspace_id, file_id, headers, runtime)

Java

/**
 * Periksa informasi dasar tentang sebuah file.
 *
 * @param client      Objek klien.
 * @param workspaceId ID ruang kerja.
 * @param fileId      ID file.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public DescribeFileResponse describeFile(com.aliyun.bailian20231229.Client client, String workspaceId, String fileId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
}

PHP

/**
 * Periksa informasi dasar tentang sebuah file.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $fileId ID file.
 * @return DescribeFileResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public function describeFile($client, $workspaceId, $fileId) {
    $headers = [];
    $runtime = new RuntimeOptions([]);
    return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
}

Node.js

/**
 * Periksa status penguraian sebuah file.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} fileId - ID file.
 * @returns {Promise<bailian20231229.DescribeFileResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function describeFile(client, workspaceId, fileId) {
 const headers = {};
 const runtime = new Util.RuntimeOptions({});
 return await client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
}

C#

/// <summary>
/// Periksa informasi dasar tentang sebuah file.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="fileId">ID file.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.DescribeFileResponse DescribeFile(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string fileId)
{
    var headers = new Dictionary<string, string>() { };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.DescribeFileWithOptions(workspaceId, fileId, headers, runtime);
}

Go

// DescribeFile mendapatkan informasi dasar tentang sebuah file.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - any: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func DescribeFile(client *bailian20231229.Client, workspaceId, fileId string) (_result *bailian20231229.DescribeFileResponse, _err error) {
	headers := make(map[string]*string)
	runtime := &util.RuntimeOptions{}
	return client.DescribeFileWithOptions(tea.String(workspaceId), tea.String(fileId), headers, runtime)
}

Contoh permintaan

{
  "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh tanggapan

{
  "Status": "200",
  "Message": "",
  "RequestId": "B9246251-987A-5628-8E1E-17BB39XXXXXX",
  "Data": {
    "CategoryId": "cate_206ea350f0014ea4a324adff1ca13011_10xxxxxx",
    "Status": "PARSE_SUCCESS",
    "FileType": "docx",
    "CreateTime": "2025-03-17 15:47:13",
    "FileName": "Bailian_Phones_Specifications.docx",
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "SizeInBytes": "14015",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

3. Membuat basis pengetahuan

3.1. Inisialisasi basis pengetahuan

Setelah file diurai, Anda dapat mengimpornya ke basis pengetahuan di ruang kerja yang sama. Untuk menginisialisasi basis pengetahuan pencarian dokumen, panggil operasi CreateIndex. Ini tidak menyelesaikan pengiriman.

  • workspace_id: Untuk informasi lebih lanjut, lihat Cara mendapatkan ID ruang kerja.

  • file_id: Masukkan FileId yang dikembalikan saat Anda menambahkan file ke kategori.

    Jika `source_type` diatur ke DATA_CENTER_FILE, parameter ini diperlukan. Jika tidak, akan dilaporkan kesalahan.
  • structure_type: Dalam contoh ini, masukkan unstructured.

    Anda tidak dapat membuat basis pengetahuan kueri data atau pasangan Q&A gambar menggunakan API. Anda harus menggunakan Konsol Model Studio untuk membuatnya.
  • source_type: Dalam contoh ini, masukkan DATA_CENTER_FILE.

  • sink_type: Dalam contoh ini, masukkan BUILT_IN.

Nilai dari bidang Data.Id dalam tanggapan adalah ID basis pengetahuan. ID ini digunakan untuk pembuatan indeks selanjutnya.

Jaga agar ID basis pengetahuan tetap aman. Anda akan membutuhkannya untuk semua operasi API selanjutnya yang terkait dengan basis pengetahuan ini.
Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess) sebelum memanggil operasi ini.

  • Operasi ini mendukung debugging online dan pembuatan kode sampel untuk berbagai bahasa.

Python

def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    Membuat (menginisialisasi) basis pengetahuan di Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.
        name (str): Nama basis pengetahuan.
        structure_type (str): Tipe data basis pengetahuan.
        source_type (str): Tipe data aplikasi. Jenis kategori dan file didukung.
        sink_type (str): Tipe penyimpanan vektor basis pengetahuan.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.CreateIndexRequest(
        structure_type=structure_type,
        name=name,
        source_type=source_type,
        sink_type=sink_type,
        document_ids=[file_id]
    )
    runtime = util_models.RuntimeOptions()
    return client.create_index_with_options(workspace_id, request, headers, runtime)

Java

/**
 * Membuat (menginisialisasi) basis pengetahuan di Alibaba Cloud Model Studio.
 *
 * @param client        Objek klien.
 * @param workspaceId   ID ruang kerja.
 * @param fileId        ID file.
 * @param name          Nama basis pengetahuan.
 * @param structureType Tipe data basis pengetahuan.
 * @param sourceType    Tipe data aplikasi. Jenis kategori dan file didukung.
 * @param sinkType      Tipe penyimpanan vektor basis pengetahuan.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public CreateIndexResponse createIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String fileId, String name, String structureType, String sourceType, String sinkType) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.CreateIndexRequest createIndexRequest = new com.aliyun.bailian20231229.models.CreateIndexRequest();
    createIndexRequest.setStructureType(structureType);
    createIndexRequest.setName(name);
    createIndexRequest.setSourceType(sourceType);
    createIndexRequest.setSinkType(sinkType);
    createIndexRequest.setDocumentIds(Collections.singletonList(fileId));
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.createIndexWithOptions(workspaceId, createIndexRequest, headers, runtime);
}

PHP

/**
 * Membuat (menginisialisasi) basis pengetahuan di Alibaba Cloud Model Studio.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $fileId ID file.
 * @param string $name Nama basis pengetahuan.
 * @param string $structureType Tipe data basis pengetahuan.
 * @param string $sourceType Tipe data aplikasi. Jenis kategori dan file didukung.
 * @param string $sinkType Tipe penyimpanan vektor basis pengetahuan.
 * @return CreateIndexResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public function createIndex($client, $workspaceId, $fileId, $name, $structureType, $sourceType, $sinkType) {
    $headers = [];
    $createIndexRequest = new CreateIndexRequest([
        "structureType" => $structureType,
        "name" => $name,
        "sourceType" => $sourceType,
        "documentIds" => [
            $fileId
        ],
        "sinkType" => $sinkType
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->createIndexWithOptions($workspaceId, $createIndexRequest, $headers, $runtime);
}

Node.js

/**
 * Menginisialisasi basis pengetahuan (indeks).
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} fileId - ID file.
 * @param {string} name - Nama basis pengetahuan.
 * @param {string} structureType - Tipe data basis pengetahuan.
 * @param {string} sourceType - Tipe data aplikasi. Jenis kategori dan file didukung.
 * @param {string} sinkType - Tipe penyimpanan vektor basis pengetahuan.
 * @returns {Promise<bailian20231229.CreateIndexResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function createIndex(client, workspaceId, fileId, name, structureType, sourceType, sinkType) {
 const headers = {};
 const req = new bailian20231229.CreateIndexRequest({
   name,
   structureType,
   documentIds: [fileId],
   sourceType,
   sinkType
 });
 const runtime = new Util.RuntimeOptions({});
 return await client.createIndexWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Membuat (menginisialisasi) basis pengetahuan di Alibaba Cloud Model Studio.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="fileId">ID file.</param>
/// <param name="name">Nama basis pengetahuan.</param>
/// <param name="structureType">Tipe data basis pengetahuan.</param>
/// <param name="sourceType">Tipe data aplikasi. Jenis kategori dan file didukung.</param>
/// <param name="sinkType">Tipe penyimpanan vektor basis pengetahuan.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Dilempar jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.CreateIndexResponse CreateIndex(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string fileId,
    string name,
    string structureType,
    string sourceType,
    string sinkType)
{
    var headers = new Dictionary<string, string>() { };
    var createIndexRequest = new AlibabaCloud.SDK.Bailian20231229.Models.CreateIndexRequest
    {
        StructureType = structureType,
        Name = name,
        SourceType = sourceType,
        SinkType = sinkType,
        DocumentIds = new List<string> { fileId }
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.CreateIndexWithOptions(workspaceId, createIndexRequest, headers, runtime);
}

Go

// CreateIndex membuat (menginisialisasi) basis pengetahuan di Alibaba Cloud Model Studio.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//   - name (string): Nama basis pengetahuan.
//   - structureType (string): Tipe data basis pengetahuan.
//   - sourceType (string): Tipe data aplikasi. Jenis kategori dan file didukung.
//   - sinkType (string): Tipe penyimpanan vektor basis pengetahuan.
//
// Returns:
//   - *bailian20231229.CreateIndexResponse: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func CreateIndex(client *bailian20231229.Client, workspaceId, fileId, name, structureType, sourceType, sinkType string) (_result *bailian20231229.CreateIndexResponse, _err error) {
	headers := make(map[string]*string)
	createIndexRequest := &bailian20231229.CreateIndexRequest{
		StructureType: tea.String(structureType),
		Name:          tea.String(name),
		SourceType:    tea.String(sourceType),
		SinkType:      tea.String(sinkType),
		DocumentIds:   []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.CreateIndexWithOptions(tea.String(workspaceId), createIndexRequest, headers, runtime)
}

Contoh permintaan

{
  "Name": "Model Studio Phone Knowledge Base",
  "SinkType": "BUILT_IN",
  "SourceType": "DATA_CENTER_FILE",
  "StructureType": "unstructured",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "DocumentIds": [
    "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
  ]
}

Contoh tanggapan

{
  "Status": "200",
  "Message": "success",
  "RequestId": "87CB0999-F1BB-5290-8C79-A875B2XXXXXX",
  "Data": {
    "Id": "mymxbdxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

3.2. Kirim pekerjaan indeks

Setelah Anda menginisialisasi basis pengetahuan, Anda harus memanggil operasi SubmitIndexJob untuk mengirimkan pekerjaan indeks. Ini memulai pembuatan indeks untuk basis pengetahuan.

Setelah Anda mengirimkan pekerjaan, Alibaba Cloud Model Studio mulai membangun indeks sebagai tugas asinkron. Data.Id yang dikembalikan oleh operasi ini adalah ID pekerjaan yang sesuai. Pada langkah berikutnya, Anda akan menggunakan ID ini untuk mengkueri status terbaru dari pekerjaan tersebut.

Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess).

  • Operasi ini mendukung debugging online dan pembuatan kode sampel untuk berbagai bahasa.

Python

def submit_index(client, workspace_id, index_id):
    """
    Mengirimkan pekerjaan indeks ke Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    submit_index_job_request = bailian_20231229_models.SubmitIndexJobRequest(
        index_id=index_id
    )
    runtime = util_models.RuntimeOptions()
    return client.submit_index_job_with_options(workspace_id, submit_index_job_request, headers, runtime)

Java

/**
 * Mengirimkan pekerjaan indeks ke Alibaba Cloud Model Studio.
 *
 * @param client      Objek klien.
 * @param workspaceId ID ruang kerja.
 * @param indexId     ID basis pengetahuan.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public SubmitIndexJobResponse submitIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.SubmitIndexJobRequest submitIndexJobRequest = new com.aliyun.bailian20231229.models.SubmitIndexJobRequest();
    submitIndexJobRequest.setIndexId(indexId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.submitIndexJobWithOptions(workspaceId, submitIndexJobRequest, headers, runtime);
}

PHP

/**
 * Mengirimkan pekerjaan indeks ke Alibaba Cloud Model Studio.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @return SubmitIndexJobResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public static function submitIndex($client, $workspaceId, $indexId) {
    $headers = [];
    $submitIndexJobRequest = new SubmitIndexJobRequest([
        'indexId' => $indexId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->submitIndexJobWithOptions($workspaceId, $submitIndexJobRequest, $headers, $runtime);
}

Node.js

/**
 * Mengirimkan pekerjaan indeks.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} indexId - ID basis pengetahuan.
 * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function submitIndex(client, workspaceId, indexId) {
  const headers = {};
  const req = new bailian20231229.SubmitIndexJobRequest({ indexId });
  const runtime = new Util.RuntimeOptions({});
  return await client.submitIndexJobWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Mengirimkan pekerjaan indeks ke Alibaba Cloud Model Studio.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Dilempar jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexJobResponse SubmitIndex(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId)
{
    var headers = new Dictionary<string, string>() { };
    var submitIndexJobRequest = new AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexJobRequest
    {
           IndexId = indexId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.SubmitIndexJobWithOptions(workspaceId, submitIndexJobRequest, headers, runtime);
}

Go

// SubmitIndex mengirimkan pekerjaan indeks.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.SubmitIndexJobResponse: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func SubmitIndex(client *bailian20231229.Client, workspaceId, indexId string) (_result *bailian20231229.SubmitIndexJobResponse, _err error) {
	headers := make(map[string]*string)
	submitIndexJobRequest := &bailian20231229.SubmitIndexJobRequest{
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.SubmitIndexJobWithOptions(tea.String(workspaceId), submitIndexJobRequest, headers, runtime)
}

Contoh Permintaan

{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh Tanggapan

{
  "Status": "200",
  "Message": "success",
  "RequestId": "7774575F-571D-5854-82C2-634AB8XXXXXX",
  "Data": {
    "IndexId": "mymxbdxxxx",
    "Id": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

3.3. Tunggu hingga pekerjaan indeks selesai

Pekerjaan indeks memerlukan waktu untuk diselesaikan. Selama jam sibuk, proses ini dapat memakan waktu beberapa jam. Untuk mengecek status eksekusinya, Anda dapat memanggil operasi GetIndexJobStatus.

Ketika bidang Data.Status dalam tanggapan adalah COMPLETED, basis pengetahuan telah berhasil dibuat.

Penting
  • Pengguna RAM harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess) sebelum memanggil operasi ini.

  • Operasi ini mendukung debugging online dan pembuatan kode sampel untuk berbagai bahasa pemrograman.

Python

def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    Menanyakan status pekerjaan indeks.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        job_id (str): ID pekerjaan.

    Returns:
        Tanggapan dari Alibaba Cloud Model Studio.
    """
    headers = {}
    get_index_job_status_request = bailian_20231229_models.GetIndexJobStatusRequest(
        index_id=index_id,
        job_id=job_id
    )
    runtime = util_models.RuntimeOptions()
    return client.get_index_job_status_with_options(workspace_id, get_index_job_status_request, headers, runtime)

Java

/**
 * Menanyakan status pekerjaan indeks.
 *
 * @param client      Objek klien.
 * @param workspaceId ID ruang kerja.
 * @param jobId       ID pekerjaan.
 * @param indexId     ID basis pengetahuan.
 * @return Objek tanggapan dari Alibaba Cloud Model Studio.
 */
public GetIndexJobStatusResponse getIndexJobStatus(com.aliyun.bailian20231229.Client client, String workspaceId, String jobId, String indexId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.GetIndexJobStatusRequest getIndexJobStatusRequest = new com.aliyun.bailian20231229.models.GetIndexJobStatusRequest();
    getIndexJobStatusRequest.setIndexId(indexId);
    getIndexJobStatusRequest.setJobId(jobId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    GetIndexJobStatusResponse getIndexJobStatusResponse = null;
    getIndexJobStatusResponse = client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
    return getIndexJobStatusResponse;
}

PHP

/**
 * Menanyakan status pekerjaan indeks.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $jobId ID pekerjaan.
 * @param string $indexId ID basis pengetahuan.
 * @return GetIndexJobStatusResponse Tanggapan dari Alibaba Cloud Model Studio.
 */
public function getIndexJobStatus($client, $workspaceId, $jobId, $indexId) {
    $headers = [];
    $getIndexJobStatusRequest = new GetIndexJobStatusRequest([
        'indexId' => $indexId,
        'jobId' => $jobId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->getIndexJobStatusWithOptions($workspaceId, $getIndexJobStatusRequest, $headers, $runtime);
}

Node.js

/**
 * Menanyakan status pekerjaan indeks.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} jobId - ID pekerjaan.
 * @param {string} indexId - ID basis pengetahuan.
 * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - Tanggapan dari Alibaba Cloud Model Studio.
 */
async function getIndexJobStatus(client, workspaceId, jobId, indexId) {
  const headers = {};
  const req = new bailian20231229.GetIndexJobStatusRequest({ jobId, indexId });
  const runtime = new Util.RuntimeOptions({});
  return await client.getIndexJobStatusWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menanyakan status pekerjaan indeks.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="jobId">ID pekerjaan.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <returns>Objek tanggapan dari Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Dilempar jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string jobId,
    string indexId)
{
    var headers = new Dictionary<string, string>() { };
    var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
    {
        IndexId = indexId,
        JobId = jobId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
}

Go

// GetIndexJobStatus menanyakan status pekerjaan indeks.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID pekerjaan.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Tanggapan dari Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func GetIndexJobStatus(client *bailian20231229.Client, workspaceId, jobId, indexId string) (_result *bailian20231229.GetIndexJobStatusResponse, _err error) {
	headers := make(map[string]*string)
	getIndexJobStatusRequest := &bailian20231229.GetIndexJobStatusRequest{
		JobId:   tea.String(jobId),
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.GetIndexJobStatusWithOptions(tea.String(workspaceId), getIndexJobStatusRequest, headers, runtime)
}

Contoh permintaan

{
  "IndexId": "mymxbdxxxx",
  "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh tanggapan

{
  "Status": "200",
  "Message": "success",
  "RequestId": "E83423B9-7D6D-5FC1-A947-36EDD1XXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
        "Message": "Impor berhasil",
        "DocName": "Spesifikasi Telepon Bailian",
        "Code": "FINISH"
      }
    ],
    "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

Dengan mengikuti langkah-langkah ini, Anda telah berhasil membuat basis pengetahuan yang mencakup file yang diunggah.

Mengambil Basis Pengetahuan

Anda dapat mengambil informasi dari basis pengetahuan melalui dua metode:

  • Menggunakan aplikasi Alibaba Cloud Model Studio: Saat memanggil aplikasi, tentukan ID basis pengetahuan index_id dalam parameter rag_options untuk melengkapi model aplikasi Anda dengan pengetahuan pribadi dan memberikan informasi terbaru.

  • Menggunakan API Alibaba Cloud: Panggil API Retrieve untuk mengambil informasi dari basis pengetahuan yang ditentukan dan mengembalikan segmen teks asli.

Metode pertama mengirimkan segmen teks yang diambil ke model yang telah dikonfigurasi. Model kemudian menggabungkan segmen ini dengan kueri asli pengguna untuk menghasilkan dan mengembalikan jawaban akhir. Metode kedua langsung mengembalikan segmen teks.

Topik ini menjelaskan cara menggunakan API Alibaba Cloud.

Anda dapat memanggil API Retrieve untuk mengambil informasi dari basis pengetahuan yang ditentukan dan mengembalikan segmen teks.

Jika hasil yang dikembalikan oleh operasi ini berisi informasi tidak relevan yang berlebihan, Anda dapat menentukan SearchFilters dalam permintaan untuk menetapkan kondisi filter, seperti menyaring berdasarkan tag, guna mengecualikan informasi yang tidak relevan.

Penting
  • Sebelum memanggil contoh ini, pengguna RAM harus mendapatkan izin API (kebijakan AliyunBailianDataFullAccess).

  • Contoh ini mendukung debugging online dan pembuatan contoh kode multi-bahasa contoh kode.

Python

def retrieve_index(client, workspace_id, index_id, query):
    """
    Mengambil informasi dari basis pengetahuan yang ditentukan.
        
    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        query (str): Prompt input asli.

    Returns:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    retrieve_request = bailian_20231229_models.RetrieveRequest(
        index_id=index_id,
        query=query
    )
    runtime = util_models.RuntimeOptions()
    return client.retrieve_with_options(workspace_id, retrieve_request, headers, runtime)

Java

/**
 * Mengambil informasi dari basis pengetahuan yang ditentukan.
 *
 * @param client         Objek klien (bailian20231229Client)
 * @param workspaceId    ID ruang kerja
 * @param indexId        ID basis pengetahuan
 * @param query          Pernyataan pencarian
 * @return               Tanggapan dari layanan Model Studio
 */
public RetrieveResponse retrieveIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String query) throws Exception {
    RetrieveRequest retrieveRequest = new RetrieveRequest();
    retrieveRequest.setIndexId(indexId);
    retrieveRequest.setQuery(query);
    RuntimeOptions runtime = new RuntimeOptions();
    return client.retrieveWithOptions(workspaceId, retrieveRequest, null, runtime);
}

PHP

/**
 * Mengambil informasi dari basis pengetahuan yang ditentukan.
 *
 * @param Bailian $client Objek klien (Client).
 * @param string $workspaceId ID ruang kerja
 * @param string $indexId ID basis pengetahuan
 * @param string $query Pernyataan pencarian
 * @return RetrieveResponse Tanggapan dari layanan Model Studio
 * @throws Exception
 */
public function retrieveIndex($client, $workspaceId, $indexId, $query) {
    $headers = [];
    $retrieveRequest = new RetrieveRequest([
        "query" => $query,
        "indexId" => $indexId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->retrieveWithOptions($workspaceId, $retrieveRequest, $headers, $runtime);
}

Node.js

/**
 * Mengambil informasi dari basis pengetahuan yang ditentukan
 * @param {bailian20231229.Client} client Klien.
 * @param {string} workspaceId ID ruang kerja
 * @param {string} indexId ID basis pengetahuan
 * @param {string} query Kueri pengambilan
 * @returns {Promise<bailian20231229.RetrieveResponse>} Tanggapan dari layanan Model Studio
 */
async function retrieveIndex(client, workspaceId, indexId, query) {
    const headers = {};
    const req = new bailian20231229.RetrieveRequest({
        indexId,
        query
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.retrieveWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Mengambil informasi dari basis pengetahuan yang ditentukan.
/// </summary>
/// <param name="client">Objek klien (bailian20231229Client)</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <param name="indexId">ID basis pengetahuan</param>
/// <param name="query">Pernyataan pencarian</param>
/// <returns>Tanggapan dari layanan Model Studio</returns>
/// <exception cref="Exception">Jika pemanggilan gagal</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.RetrieveResponse RetrieveIndex(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId,
    string query)
{
    var headers = new Dictionary<string, string>() { };
    var retrieveRequest = new AlibabaCloud.SDK.Bailian20231229.Models.RetrieveRequest
    {
        IndexId = indexId,
        Query = query
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.RetrieveWithOptions(workspaceId, retrieveRequest, headers, runtime);
}

Go

// retrieveIndex mengambil informasi dari basis pengetahuan yang ditentukan.
//
// Args:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - query (string): Pernyataan pencarian
//
// Returns:
//   - *bailian20231229.RetrieveResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func retrieveIndex(client *bailian20231229.Client, workspaceId, indexId, query string) (*bailian20231229.RetrieveResponse, error) {
	headers := make(map[string]*string)
	request := &bailian20231229.RetrieveRequest{
		IndexId: tea.String(indexId),
		Query:   tea.String(query),
	}
	runtime := &util.RuntimeOptions{}
	return client.RetrieveWithOptions(tea.String(workspaceId), request, headers, runtime)
}

Permintaan contoh

{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "Query": "Silakan perkenalkan Alibaba Cloud Model Studio X1 phone."
}

Tanggapan contoh

{
  "Status": "200",
  "Message": "success",
  "RequestId": "17316EA2-1F4D-55AC-8872-53F6F1XXXXXX",
  "Data": {
    "Nodes": [
      {
        "Score": 0.6294550895690918,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Model_Studio_Series_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.7449869735535081,
          "image_url": [],
          "nid": "9ad347d9e4d7465d2c1e693a08b0077c|d6f7fbf8403e0df796258e5ada1ee1c1|4772257e93ed64ea087ff4be0d5e4620|7ce1370e4a1958842c9268144a452cc7",
          "_q_score": 1,
          "source": "0",
          "_score": 0.6294550895690918,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Phone Product Introduction Alibaba Cloud Model Studio X1 — Nikmati pengalaman visual terbaik: Fitur layar ultra-jernih 6,7 inci 1440 × 3200 piksel dengan refresh rate 120 Hz untuk pengalaman visual yang halus dan hidup. Kombinasi kuat antara penyimpanan massal 256 GB dan 12 GB RAM menangani game besar dan multitasking dengan mudah. Baterai tahan lama 5000 mAh dan sistem quad-kamera ultra-sensitif menangkap setiap momen indah dalam hidup Anda. Harga referensi: 4599–4999 Tongyi Vivid 7 — Pengalaman baru dalam fotografi pintar: Memiliki layar penuh 6,5 inci 1080 × 2400 piksel. Fitur fotografi pintar AI memastikan setiap foto menunjukkan warna dan detail tingkat profesional. 8 GB RAM dan penyimpanan 128 GB memastikan operasi yang lancar, dan baterai 4500 mAh memenuhi kebutuhan sehari-hari. Sidik jari samping yang nyaman dan aman. Harga referensi: 2999–3299 Stardust S9 Pro — Pesta visual inovatif: Desain kamera di bawah layar 6,9 inci 1440 × 3088 piksel yang revolusioner memberikan pengalaman visual tanpa batas. Konfigurasi top-tier dengan penyimpanan 512 GB dan 16 GB RAM, dikombinasikan dengan baterai 6000 mAh dan teknologi pengisian cepat 100 W, memberikan performa dan daya tahan, memimpin tren teknologi. Harga referensi: 5999–6499.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05215025693178177,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_0"
        },
        "Text": "Alibaba Cloud Model Studio Phone Product Introduction Alibaba Cloud Model Studio X1 — Nikmati pengalaman visual terbaik: Fitur layar ultra-jernih 6,7 inci 1440 × 3200 piksel dengan refresh rate 120 Hz untuk pengalaman visual yang halus dan hidup. Kombinasi kuat antara penyimpanan massal 256 GB dan 12 GB RAM menangani game besar dan multitasking dengan mudah. Baterai tahan lama 5000 mAh dan sistem quad-kamera ultra-sensitif menangkap setiap momen indah dalam hidup Anda. Harga referensi: 4599–4999 Tongyi Vivid 7 — Pengalaman baru dalam fotografi pintar: Memiliki layar penuh 6,5 inci 1080 × 2400 piksel. Fitur fotografi pintar AI memastikan setiap foto menunjukkan warna dan detail tingkat profesional. 8 GB RAM dan penyimpanan 128 GB memastikan operasi yang lancar, dan baterai 4500 mAh memenuhi kebutuhan sehari-hari. Sidik jari samping yang nyaman dan aman. Harga referensi: 2999–3299 Stardust S9 Pro — Pesta visual inovatif: Desain kamera di bawah layar 6,9 inci 1440 × 3088 piksel yang revolusioner memberikan pengalaman visual tanpa batas. Konfigurasi top-tier dengan penyimpanan 512 GB dan 16 GB RAM, dikombinasikan dengan baterai 6000 mAh dan teknologi pengisian cepat 100 W, memberikan performa dan daya tahan, memimpin tren teknologi. Harga referensi: 5999–6499."
      },
      {
        "Score": 0.5322970747947693,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Model_Studio_Series_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.641660213470459,
          "image_url": [],
          "nid": "00be1864c18b4c39c59f83713af80092|4f2bfb02cc9fc4e85597b2e717699207",
          "_q_score": 0.9948930557644994,
          "source": "0",
          "_score": 0.5322970747947693,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda. Penyimpanan 512 GB, 12 GB RAM, baterai 4700 mAh, dan kaca fleksibel ultra-tipis UTG membuka babak baru di era layar lipat. Selain itu, ponsel ini mendukung Dual SIM Dual Standby dan panggilan satelit, membantu Anda tetap terhubung di mana saja di dunia. Harga eceran referensi: 9999–10999. Setiap ponsel adalah mahakarya kerajinan, dirancang sebagai karya seni teknologi di tangan Anda. Pilihlah pendamping pintar Anda dan mulailah babak baru kehidupan teknologi masa depan.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05188392847776413,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_2"
        },
        "Text": "Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda. Penyimpanan 512 GB, 12 GB RAM, baterai 4700 mAh, dan kaca fleksibel ultra-tipis UTG membuka babak baru di era layar lipat. Selain itu, ponsel ini mendukung Dual SIM Dual Standby dan panggilan satelit, membantu Anda tetap terhubung di mana saja di dunia. Harga eceran referensi: 9999–10999. Setiap ponsel adalah mahakarya kerajinan, dirancang sebagai karya seni teknologi di tangan Anda. Pilihlah pendamping pintar Anda dan mulailah babak baru kehidupan teknologi masa depan."
      },
      {
        "Score": 0.5050643086433411,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Model_Studio_Series_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.6757396459579468,
          "image_url": [],
          "nid": "f05d1b51eb6b033b32a162d90a9da71b|5cb6b848be8d11eb168c031025415cc5|4f2bfb02cc9fc4e85597b2e717699207",
          "_q_score": 0.9890713450653327,
          "source": "0",
          "_score": 0.5050643086433411,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Konfigurasi top-tier dengan penyimpanan 512 GB dan 16 GB RAM, dikombinasikan dengan baterai 6000 mAh dan teknologi pengisian cepat 100 W, memberikan performa dan daya tahan, memimpin tren teknologi. Harga referensi: 5999–6499. Alibaba Cloud Model Studio Ace Ultra — Pilihan gamer: Dilengkapi dengan layar 6,67 inci 1080 × 2400 piksel, 10 GB RAM, dan penyimpanan 256 GB untuk memastikan gameplay yang sangat halus. Baterai 5500 mAh dengan sistem pendingin cair tetap dingin bahkan selama sesi gaming panjang. Speaker dinamis ganda meningkatkan pengalaman gaming dengan efek suara imersif. Harga referensi: 3999–4299. Alibaba Cloud Model Studio Zephyr Z9 — Seni menjadi tipis dan portabel: Desain ringan 6,4 inci 1080 × 2340 piksel, dengan penyimpanan 128 GB dan 6 GB RAM, lebih dari cukup untuk penggunaan sehari-hari. Baterai 4000 mAh memastikan penggunaan sepanjang hari tanpa khawatir. Lensa zoom digital 30x menangkap detail jauh. Tipis namun kuat. Harga referensi: 2499–2799. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05158032476902008,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_1"
        },
        "Text": "Konfigurasi top-tier dengan penyimpanan 512 GB dan 16 GB RAM, dikombinasikan dengan baterai 6000 mAh dan teknologi pengisian cepat 100 W, memberikan performa dan daya tahan, memimpin tren teknologi. Harga referensi: 5999–6499. Alibaba Cloud Model Studio Ace Ultra — Pilihan gamer: Dilengkapi dengan layar 6,67 inci 1080 × 2400 piksel, 10 GB RAM, dan penyimpanan 256 GB untuk memastikan gameplay yang sangat halus. Baterai 5500 mAh dengan sistem pendingin cair tetap dingin bahkan selama sesi gaming panjang. Speaker dinamis ganda meningkatkan pengalaman gaming dengan efek suara imersif. Harga referensi: 3999–4299. Alibaba Cloud Model Studio Zephyr Z9 — Seni menjadi tipis dan portabel: Desain ringan 6,4 inci 1080 × 2340 piksel, dengan penyimpanan 128 GB dan 6 GB RAM, lebih dari cukup untuk penggunaan sehari-hari. Baterai 4000 mAh memastikan penggunaan sepanjang hari tanpa khawatir. Lensa zoom digital 30x menangkap detail jauh. Tipis namun kuat. Harga referensi: 2499–2799. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, fitur layar utama 7,6 inci 1800 × 2400 piksel dan layar eksternal 4,7 inci 1080 × 2400 piksel. Desain engsel bebas-stop multi-sudut memenuhi kebutuhan skenario yang berbeda."
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Memperbarui basis pengetahuan

Topik ini menjelaskan cara memperbarui basis pengetahuan untuk pencarian dokumen. Aplikasi yang menggunakan basis pengetahuan akan mencerminkan pembaruan secara real-time. Konten baru dapat dicari dan diambil, sementara konten yang dihapus tidak lagi tersedia.

Anda tidak dapat memperbarui basis pengetahuan kueri data atau pasangan Q&A citra menggunakan API. Untuk informasi lebih lanjut, lihat Memperbarui Basis Pengetahuan.
  • Pembaruan Bertahap: Ikuti tiga langkah berikut: unggah file yang diperbarui, tambahkan file ke basis pengetahuan, lalu hapus file lama. Tidak ada metode lain yang tersedia.

  • Pembaruan Penuh: Untuk setiap file dalam basis pengetahuan, selesaikan tiga langkah untuk menyelesaikan pembaruan.

  • Pembaruan Otomatis atau Sinkronisasi: Untuk informasi lebih lanjut, lihat Cara Memperbarui atau Menyinkronkan Basis Pengetahuan Secara Otomatis.

  • Batas File untuk Pembaruan Tunggal: Jangan memperbarui lebih dari 10.000 file sekaligus. Jika Anda melebihi batas ini, basis pengetahuan mungkin tidak diperbarui dengan benar.

1. Unggah file yang diperbarui

Ikuti prosedur di Buat Basis Pengetahuan: Langkah 2 untuk mengunggah file yang diperbarui ke ruang kerja basis pengetahuan.

Minta sewa unggah file baru untuk menghasilkan serangkaian parameter unggah baru untuk file yang diperbarui.

2. Tambahkan file ke basis pengetahuan

2.1. Kirim tugas untuk menambahkan file

Setelah file yang diunggah diurai, Anda dapat memanggil operasi SubmitIndexAddDocumentsJob untuk menambahkan file baru ke basis pengetahuan dan membangun ulang indeks basis pengetahuan.

Setelah Anda mengirimkan tugas, Alibaba Cloud Model Studio mulai membangun ulang basis pengetahuan sebagai tugas asinkron. Data.Id yang dikembalikan oleh operasi ini adalah ID tugas (job_id). Anda akan menggunakan ID ini pada langkah berikutnya untuk memeriksa status tugas.

Penting
  • Setelah Anda memanggil operasi SubmitIndexAddDocumentsJob, tugas tersebut akan berjalan selama periode tertentu. Anda dapat menggunakan job_id untuk memeriksa status tugas. Jangan kirim ulang tugas sebelum selesai.

Penting

Python

def submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type):
    """
    Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        file_id (str): ID file.
        source_type(str): Tipe data.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    submit_index_add_documents_job_request = bailian_20231229_models.SubmitIndexAddDocumentsJobRequest(
        index_id=index_id,
        document_ids=[file_id],
        source_type=source_type
    )
    runtime = util_models.RuntimeOptions()
    return client.submit_index_add_documents_job_with_options(workspace_id, submit_index_add_documents_job_request, headers, runtime)

Java

/**
 * Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
 *
 * @param client      Klien.
 * @param workspaceId ID ruang kerja.
 * @param indexId     ID basis pengetahuan.
 * @param fileId      ID file.
 * @param sourceType  Tipe data.
 * @return Tanggapan dari layanan Model Studio.
 */
public SubmitIndexAddDocumentsJobResponse submitIndexAddDocumentsJob(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId, String sourceType) throws Exception {
    Map<String, String> headers = new HashMap<>();
    SubmitIndexAddDocumentsJobRequest submitIndexAddDocumentsJobRequest = new SubmitIndexAddDocumentsJobRequest();
    submitIndexAddDocumentsJobRequest.setIndexId(indexId);
    submitIndexAddDocumentsJobRequest.setDocumentIds(Collections.singletonList(fileId));
    submitIndexAddDocumentsJobRequest.setSourceType(sourceType);
    RuntimeOptions runtime = new RuntimeOptions();
    return client.submitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
}

PHP

/**
 * Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
 *
 * @param Bailian $client Objek klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @param string $fileId ID file.
 * @param string $sourceType Tipe data.
 * @return SubmitIndexAddDocumentsJobResponse Tanggapan dari layanan Model Studio.
 * @throws Exception
 */
public function submitIndexAddDocumentsJob($client, $workspaceId, $indexId, $fileId, $sourceType) {
    $headers = [];
    $submitIndexAddDocumentsJobRequest = new SubmitIndexAddDocumentsJobRequest([
        "indexId" =>$indexId,
        "sourceType" => $sourceType,
        "documentIds" => [
            $fileId
        ]
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->submitIndexAddDocumentsJobWithOptions($workspaceId, $submitIndexAddDocumentsJobRequest, $headers, $runtime);
}

Node.js

/**
 * Mengirim tugas untuk menambahkan file.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} indexId - ID basis pengetahuan.
 * @param {string} fileId - ID file.
 * @param {string} sourceType - Tipe data.
 * @returns {Promise<bailian20231229.SubmitIndexAddDocumentsJobResponse>} - Tanggapan dari layanan Model Studio.
 */
async function submitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType) {
    const headers = {};
    const req = new bailian20231229.SubmitIndexAddDocumentsJobRequest({
        indexId,
        documentIds: [fileId],
        sourceType,
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.submitIndexAddDocumentsJobWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
/// </summary>
/// <param name="client">Klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <param name="fileId">ID file.</param>
/// <param name="sourceType">Tipe data.</param>
/// <returns>Tanggapan dari layanan Model Studio.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobResponse SubmitIndexAddDocumentsJob(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId,
    string fileId,
    string sourceType)
{
    var headers = new Dictionary<string, string>() { };
    var submitIndexAddDocumentsJobRequest = new AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobRequest
    {
        IndexId = indexId,
        DocumentIds = new List<string> { fileId },
        SourceType = sourceType
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.SubmitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
}

Go

// SubmitIndexAddDocumentsJob menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - fileId(string): ID file.
//   - sourceType(string): Tipe data.
//
// Mengembalikan:
//   - *bailian20231229.SubmitIndexAddDocumentsJobResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func SubmitIndexAddDocumentsJob(client *bailian20231229.Client, workspaceId, indexId, fileId, sourceType string) (_result *bailian20231229.SubmitIndexAddDocumentsJobResponse, _err error) {
	headers := make(map[string]*string)
	submitIndexAddDocumentsJobRequest := &bailian20231229.SubmitIndexAddDocumentsJobRequest{
		IndexId:     tea.String(indexId),
		SourceType:  tea.String(sourceType),
		DocumentIds: []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.SubmitIndexAddDocumentsJobWithOptions(tea.String(workspaceId), submitIndexAddDocumentsJobRequest, headers, runtime)
}

Contoh Permintaan

{
  "IndexId": "mymxbdxxxx",
  "SourceType": "DATA_CENTER_FILE",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "DocumentIds": [
    "file_247a2fd456a349ee87d071404840109b_10xxxxxx"
  ]
}

Contoh Tanggapan

{
  "Status": "200",
  "RequestId": "F693EB60-FEFC-559A-BF56-A41F52XXXXXX",
  "Message": "success",
  "Data": {
    "Id": "d8d189a36a3248438dca23c078xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

2.2. Tunggu tugas penambahan selesai

Tugas pengindeksan membutuhkan waktu untuk selesai. Selama jam sibuk, proses ini bisa memakan waktu beberapa jam. Anda dapat memanggil operasi GetIndexJobStatus untuk memeriksa status eksekusi.

Jika nilai bidang Data.Status dalam tanggapan adalah COMPLETED, semua file yang diperbarui telah berhasil ditambahkan ke basis pengetahuan.

Daftar Documents dalam tanggapan berisi semua file untuk tugas penambahan, yang diidentifikasi secara unik oleh job_id yang Anda berikan.

Penting

Python

def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    Memeriksa status tugas pengindeksan.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        job_id (str): ID tugas.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    get_index_job_status_request = bailian_20231229_models.GetIndexJobStatusRequest(
        index_id=index_id,
        job_id=job_id
    )
    runtime = util_models.RuntimeOptions()
    return client.get_index_job_status_with_options(workspace_id, get_index_job_status_request, headers, runtime)

Java

/**
 * Memeriksa status tugas pengindeksan.
 *
 * @param client      Objek klien.
 * @param workspaceId ID ruang kerja.
 * @param jobId       ID tugas.
 * @param indexId     ID basis pengetahuan.
 * @return Objek tanggapan dari layanan Model Studio.
 */
public GetIndexJobStatusResponse getIndexJobStatus(com.aliyun.bailian20231229.Client client, String workspaceId, String jobId, String indexId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.GetIndexJobStatusRequest getIndexJobStatusRequest = new com.aliyun.bailian20231229.models.GetIndexJobStatusRequest();
    getIndexJobStatusRequest.setIndexId(indexId);
    getIndexJobStatusRequest.setJobId(jobId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    GetIndexJobStatusResponse getIndexJobStatusResponse = null;
    getIndexJobStatusResponse = client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
    return getIndexJobStatusResponse;
}

PHP

/**
 * Memeriksa status tugas pengindeksan.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @param string $jobId ID tugas.
 * @return GetIndexJobStatusResponse Tanggapan dari layanan Model Studio.
 */
public function getIndexJobStatus($client, $workspaceId, $jobId, $indexId) {
    $headers = [];
    $getIndexJobStatusRequest = new GetIndexJobStatusRequest([
        'indexId' => $indexId,
        'jobId' => $jobId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->getIndexJobStatusWithOptions($workspaceId, $getIndexJobStatusRequest, $headers, $runtime);
}

Node.js

/**
 * Memeriksa status tugas pengindeksan.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} jobId - ID tugas.
 * @param {string} indexId - ID basis pengetahuan.
 * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - Tanggapan dari layanan Model Studio.
 */
static getIndexJobStatus(client, workspaceId, jobId, indexId) {
    const headers = {};
    const req = new bailian20231229.GetIndexJobStatusRequest({ jobId, indexId });
    const runtime = new Util.RuntimeOptions({});
    return await client.getIndexJobStatusWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Memeriksa status tugas pengindeksan.
/// </summary>
/// <param name="client">Objek klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="jobId">ID tugas.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <returns>Objek tanggapan dari layanan Model Studio.</returns>
/// <exception cref="Exception">Pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string jobId,
    string indexId)
{
    var headers = new Dictionary<string, string>() { };
    var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
    {
        IndexId = indexId,
        JobId = jobId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
}

Go

// GetIndexJobStatus memeriksa status tugas pengindeksan.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID tugas.
//   - indexId (string): ID basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.GetIndexJobStatusResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func GetIndexJobStatus(client *bailian20231229.Client, workspaceId, jobId, indexId string) (_result *bailian20231229.GetIndexJobStatusResponse, _err error) {
	headers := make(map[string]*string)
	getIndexJobStatusRequest := &bailian20231229.GetIndexJobStatusRequest{
		JobId:   tea.String(jobId),
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.GetIndexJobStatusWithOptions(tea.String(workspaceId), getIndexJobStatusRequest, headers, runtime)
}

Contoh Permintaan

{
  "IndexId": "mymxbdxxxx",
  "JobId": "76f243b9ee534d59a61f156ff0xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh Tanggapan

{
  "Status": 200,
  "Message": "success",
  "RequestId": "7F727D58-D90E-51E7-B56E-985A42XXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_247a2fd456a349ee87d071404840109b_10xxxxxx",
        "Message": "Impor berhasil",
        "DocName": "Seri Pengenalan Produk Ponsel Alibaba Cloud Model Studio",
        "Code": "FINISH"
      }
    ],
    "JobId": "76f243b9ee534d59a61f156ff0xxxxxx"
  },
  "Code": "Success",
  "Success": true
}

3. Hapus file lama

Akhirnya, Anda dapat memanggil operasi DeleteIndexDocument untuk menghapus versi lama file dari basis pengetahuan secara permanen. Ini mencegah informasi lama diambil secara tidak sengaja.

  • file_id: Masukkan FileId dari file lama.

Catatan

Anda hanya dapat menghapus file yang memiliki status impor gagal (INSERT_ERROR) atau impor berhasil (FINISH). Untuk memeriksa status file dalam basis pengetahuan, Anda dapat memanggil operasi ListIndexDocuments.

Penting

Python

def delete_index_document(client, workspace_id, index_id, file_id):
    """
    Menghapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen tertentu.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        file_id (str): ID file.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    delete_index_document_request = bailian_20231229_models.DeleteIndexDocumentRequest(
        index_id=index_id,
        document_ids=[file_id]
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_index_document_with_options(workspace_id, delete_index_document_request, headers, runtime)

Java

/**
 * Menghapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen tertentu.
 *
 * @param client      Klien.
 * @param workspaceId ID ruang kerja.
 * @param indexId     ID basis pengetahuan.
 * @param fileId      ID file.
 * @return Tanggapan dari layanan Model Studio.
 */
public DeleteIndexDocumentResponse deleteIndexDocument(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    DeleteIndexDocumentRequest deleteIndexDocumentRequest = new DeleteIndexDocumentRequest();
    deleteIndexDocumentRequest.setIndexId(indexId);
    deleteIndexDocumentRequest.setDocumentIds(Collections.singletonList(fileId));
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.deleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
}

PHP

/**
 * Menghapus file dari basis pengetahuan pencarian dokumen tertentu.
 *
 * @param Bailian $client Objek klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @param string $fileId ID file.
 * @return mixed Tanggapan dari layanan Model Studio.
 * @throws Exception
 */
public function deleteIndexDocument($client, $workspaceId, $indexId, $fileId) {
    $headers = [];
    $deleteIndexDocumentRequest = new DeleteIndexDocumentRequest([
        "indexId" => $indexId,
        "documentIds" => [
            $fileId
        ]
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->deleteIndexDocumentWithOptions($workspaceId, $deleteIndexDocumentRequest, $headers, $runtime);
}

Node.js

/**
 * Menghapus file lama.
 * @param {Bailian20231229Client} client - Klien.
 * @param {string} workspaceId - ID ruang kerja.
 * @param {string} indexId - ID basis pengetahuan.
 * @param {string} fileId - ID file.
 * @returns {Promise<bailian20231229.DeleteIndexDocumentResponse>} - Tanggapan dari layanan Model Studio.
 */
async function deleteIndexDocument(client, workspaceId, indexId, fileId) {
    const headers = {};
    const req = new bailian20231229.DeleteIndexDocumentRequest({
        indexId,
        documentIds: [fileId],
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.deleteIndexDocumentWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menghapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen tertentu.
/// </summary>
/// <param name="client">Klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <param name="fileId">ID file.</param>
/// <returns>Tanggapan dari layanan Model Studio.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentResponse DeleteIndexDocument(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId,
    string fileId)
{
    var headers = new Dictionary<string, string>() { };
    var deleteIndexDocumentRequest = new AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentRequest
    {
        IndexId = indexId,
        DocumentIds = new List<string> { fileId }
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.DeleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
}

Go

// DeleteIndexDocument menghapus satu atau lebih file secara permanen dari basis pengetahuan pencarian dokumen tertentu.
//
// Parameter:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - fileId (string): ID file.
//
// Mengembalikan:
//   - *bailian20231229.DeleteIndexDocumentResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func DeleteIndexDocument(client *bailian20231229.Client, workspaceId, indexId, fileId string) (*bailian20231229.DeleteIndexDocumentResponse, error) {
	headers := make(map[string]*string)
	deleteIndexDocumentRequest := &bailian20231229.DeleteIndexDocumentRequest{
		IndexId:     tea.String(indexId),
		DocumentIds: []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.DeleteIndexDocumentWithOptions(tea.String(workspaceId), deleteIndexDocumentRequest, headers, runtime)
}

Contoh Permintaan

{
  "DocumentIds": [
    "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
  ],
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh Tanggapan

{
  "Status": "200",
  "RequestId": "2D8505EC-C667-5102-9154-00B6FEXXXXXX",
  "Message": "success",
  "Data": {
    "DeletedDocument": [
      "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Mengelola basis pengetahuan

Membuat dan menggunakan basis pengetahuan tidak didukung melalui operasi API. Operasi ini harus dilakukan di Konsol Model Studio.

Menampilkan basis pengetahuan

Anda dapat memanggil operasi API ListIndices untuk melihat informasi tentang satu atau lebih basis pengetahuan dalam ruang kerja tertentu.

Penting

Python

def list_indices(client, workspace_id):
    """
    Mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    list_indices_request = bailian_20231229_models.ListIndicesRequest()
    runtime = util_models.RuntimeOptions()
    return client.list_indices_with_options(workspace_id, list_indices_request, headers, runtime)

Java

/**
 * Mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.
 *
 * @param client      Klien.
 * @param workspaceId ID ruang kerja.
 * @return Tanggapan dari layanan Model Studio.
 */
public ListIndicesResponse listIndices(com.aliyun.bailian20231229.Client client, String workspaceId) throws Exception {
    java.util.Map<String, String> headers = new java.util.HashMap<>();
    com.aliyun.bailian20231229.models.ListIndicesRequest listIndicesRequest = new com.aliyun.bailian20231229.models.ListIndicesRequest();
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.listIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
}

PHP

/**
 * Mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.
 *
 * @param Bailian $client Objek klien.
 * @param string $workspaceId ID ruang kerja.
 * @return ListIndicesResponse Tanggapan dari layanan Model Studio.
 * @throws Exception
 */
public function listIndices($client, $workspaceId) {
    $headers = [];
    $listIndexDocumentsRequest = new ListIndexDocumentsRequest([]);
    $runtime = new RuntimeOptions([]);
    return $client->listIndicesWithOptions($workspaceId, $listIndexDocumentsRequest, $headers, $runtime);
}

Node.js

/**
 * Mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.
 * @param {bailian20231229.Client} client Klien.
 * @param {string} workspaceId ID ruang kerja.
 * @returns {Promise<bailian20231229.ListIndicesResponse>} Tanggapan dari layanan Model Studio.
 */
async function listIndices(client, workspaceId) {
    const headers = {};
    const listIndicesRequest = new bailian20231229.ListIndicesRequest();
    const runtime = new Util.RuntimeOptions({});
    return await client.listIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
}

C#

/// <summary>
/// Mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.
/// </summary>
/// <param name="client">Klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <returns>Tanggapan dari layanan Model Studio.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.ListIndicesResponse ListIndices(AlibabaCloud.SDK.Bailian20231229.Client client, string workspaceId)
{
    var headers = new System.Collections.Generic.Dictionary<string, string>() { };
    var listIndicesRequest = new Bailian20231229.Models.ListIndicesRequest();
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.ListIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
}

Go

// listIndices mendapatkan detail satu atau lebih basis pengetahuan dalam ruang kerja tertentu.
//
// Parameter:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//
// Mengembalikan:
//   - *bailian20231229.ListIndicesResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func listIndices(client *bailian20231229.Client, workspaceId string) (_result *bailian20231229.ListIndicesResponse, _err error) {
	headers := make(map[string]*string)
	listIndicesRequest := &bailian20231229.ListIndicesRequest{}
	runtime := &util.RuntimeOptions{}
	return client.ListIndicesWithOptions(tea.String(workspaceId), listIndicesRequest, headers, runtime)
}

Permintaan Contoh

{
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Tanggapan Contoh

{
  "Status": "200",
  "RequestId": "5ACB2EB3-6C9A-5B0F-8E60-3FBE7EXXXXXX",
  "Message": "success",
  "Data": {
    "TotalCount": "1",
    "PageSize": "10",
    "PageNumber": "1",
    "Indices": [
      {
        "DocumentIds": [
          "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
        ],
        "Description": "",
        "OverlapSize": 100,
        "SinkInstanceId": "gp-2zegk3i6ca4xxxxxx",
        "SourceType": "DATA_CENTER_FILE",
        "RerankModelName": "gte-rerank-hybrid",
        "SinkRegion": "cn-beijing",
        "Name": "Model Studio Phone Knowledge Base",
        "ChunkSize": 500,
        "EmbeddingModelName": "text-embedding-v2",
        "RerankMinScore": 0.01,
        "Id": "mymxbdxxxx",
        "SinkType": "BUILT_IN",
        "Separator": " |,|,|。|?|!|\n|\\?|\\!"
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Hapus basis pengetahuan

Untuk menghapus basis pengetahuan secara permanen, Anda dapat memanggil API DeleteIndex. Sebelum menghapus basis pengetahuan, Anda harus memutuskan semua aplikasi Alibaba Cloud Model Studio terkait. Ini hanya dapat dilakukan di Konsol Model Studio. Jika tidak, penghapusan akan gagal.

Catatan: Operasi ini tidak menghapus file yang telah Anda tambahkan ke kategori.

Penting

Python

def delete_index(client, workspace_id, index_id):
    """
    Menghapus basis pengetahuan yang ditentukan secara permanen.

    Parameter:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.

    Mengembalikan:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    delete_index_request = bailian_20231229_models.DeleteIndexRequest(
        index_id=index_id
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_index_with_options(workspace_id, delete_index_request, headers, runtime)

Java

/**
 * Menghapus basis pengetahuan yang ditentukan secara permanen.
 *
 * @param client      Klien.
 * @param workspaceId ID ruang kerja.
 * @param indexId     ID basis pengetahuan.
 * @return Tanggapan dari layanan Model Studio.
 */
public DeleteIndexResponse deleteIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
    java.util.Map<String, String> headers = new java.util.HashMap<>();
    com.aliyun.bailian20231229.models.DeleteIndexRequest deleteIndexRequest = new com.aliyun.bailian20231229.models.DeleteIndexRequest();
    deleteIndexRequest.setIndexId(indexId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.deleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
}

PHP

/**
 * Menghapus basis pengetahuan yang ditentukan secara permanen.
 *
 * @param Bailian $client Objek klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @return mixed Tanggapan dari layanan Model Studio.
 * @throws Exception
 */
public function deleteIndex($client, $workspaceId, $indexId) {
    $headers = [];
    $deleteIndexRequest = new DeleteIndexRequest([
        "indexId" => $indexId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->deleteIndexWithOptions($workspaceId, $deleteIndexRequest, $headers, $runtime);
}

Node.js

/**
 * Menghapus basis pengetahuan yang ditentukan secara permanen.
 * @param {bailian20231229.Client} client Klien.
 * @param {string} workspaceId ID ruang kerja.
 * @param {string} indexId ID basis pengetahuan.
 * @returns {Promise<bailian20231229.DeleteIndexResponse>} Tanggapan dari layanan Model Studio.
 */
async function deleteIndex(client, workspaceId, indexId) {
    const headers = {};
    const deleteIndexRequest = new bailian20231229.DeleteIndexRequest({
        indexId
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.deleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
}

C#

/// <summary>
/// Menghapus basis pengetahuan yang ditentukan secara permanen.
/// </summary>
/// <param name="client">Klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <returns>Tanggapan dari layanan Model Studio.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexResponse DeleteIndex(AlibabaCloud.SDK.Bailian20231229.Client client, string workspaceId, string indexId)
{
    var headers = new System.Collections.Generic.Dictionary<string, string>() { };
    var deleteIndexRequest = new Bailian20231229.Models.DeleteIndexRequest
    {
        IndexId = indexId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.DeleteIndexWithOptions(workspaceId, deleteIndexRequest, headers, runtime);
}

Go

// deleteIndex menghapus basis pengetahuan yang ditentukan secara permanen.
//
// Parameter:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.DeleteIndexResponse: Tanggapan dari layanan Model Studio.
//   - error: Pesan kesalahan.
func deleteIndex(client *bailian20231229.Client, workspaceId, indexId string) (_result *bailian20231229.DeleteIndexResponse, _err error) {
	headers := make(map[string]*string)
	deleteIndexRequest := &bailian20231229.DeleteIndexRequest{
		IndexId: tea.String(indexId),
	}
	runtime := &util.RuntimeOptions{}
	return client.DeleteIndexWithOptions(tea.String(workspaceId), deleteIndexRequest, headers, runtime)

}

Permintaan Contoh

{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Tanggapan Contoh

{
  "Status": "200",
  "Message": "success",
  "RequestId": "118CB681-75AA-583B-8D84-25440CXXXXXX",
  "Code": "Success",
  "Success": "true"
}

Referensi API

Untuk informasi lebih lanjut, lihat Katalog API (Basis Pengetahuan) untuk daftar terkini dan lengkap mengenai API Basis Pengetahuan, termasuk parameter permintaan dan respons.

FAQ

  1. Bagaimana cara saya memperbarui atau menyinkronkan basis pengetahuan secara otomatis?

    Basis pengetahuan pencarian dokumen

    Untuk melakukannya, integrasikan API untuk Alibaba Cloud OSS, FC, dan basis pengetahuan Model Studio. Ikuti langkah-langkah berikut:

    1. Buat Bucket: Buka Konsol OSS dan buat Bucket OSS untuk menyimpan file sumber Anda.

    2. Buat Basis Pengetahuan: Buat basis pengetahuan pencarian dokumen untuk menyimpan konten pengetahuan pribadi Anda.

    3. Buat User-Defined Function: Buka Konsol FC dan buat fungsi untuk event perubahan file seperti operasi tambah atau hapus. Untuk informasi lebih lanjut, lihat Buat Fungsi. Fungsi-fungsi ini memanggil API Perbarui Basis Pengetahuan yang relevan untuk menyinkronkan perubahan file dari OSS ke basis pengetahuan Anda.

    4. Buat Trigger OSS: Di FC, asosiasikan Trigger OSS dengan fungsi yang telah dibuat pada langkah sebelumnya. Ketika event perubahan file terdeteksi, seperti pengunggahan file baru ke OSS, trigger tersebut akan diaktifkan dan menyebabkan FC mengeksekusi fungsi tersebut. Untuk informasi lebih lanjut, lihat Trigger.

    Basis pengetahuan kueri data atau Citra Q&A

    Fitur ini tidak didukung.

  1. Mengapa basis pengetahuan baru saya kosong?

    Hal ini biasanya disebabkan oleh langkah Kirim Pekerjaan Indeks yang tidak dieksekusi atau gagal dieksekusi. Jika Anda memanggil API CreateIndex tetapi tidak berhasil memanggil API SubmitIndexJob, Anda akan mendapatkan basis pengetahuan kosong. Dalam hal ini, jalankan kembali langkah Kirim Pekerjaan Indeks dan tunggu hingga pekerjaan indeks selesai.

  1. Apa yang harus saya lakukan jika saya menerima kesalahan "Akses file yang diunggah gagal. Silakan periksa apakah tindakan unggah Anda berhasil"?

    Kesalahan ini biasanya terjadi karena langkah Unggah File ke Penyimpanan Sementara tidak dieksekusi atau tidak berhasil dijalankan. Anda dapat memanggil operasi API AddFile setelah memastikan bahwa langkah ini telah berhasil dijalankan.

  1. Apa yang harus saya lakukan jika saya menerima kesalahan "Akses ditolak: Anda tidak memiliki otorisasi untuk mengakses ruang kerja ini, atau ruang kerja tidak ada"?

    Kesalahan ini biasanya disebabkan oleh alasan berikut:

    • Endpoint yang diminta (Service Endpoint) salah: Misalnya, jika Anda mengakses layanan melalui Internet, pengguna situs China (aliyun.com) harus menggunakan endpoint di Wilayah Beijing untuk cloud publik atau Wilayah Shanghai untuk Cloud Keuangan. Pengguna situs internasional (alibabacloud.com) harus menggunakan endpoint di Wilayah Singapura. Jika Anda menggunakan fitur Debugging Online, pastikan Anda memilih endpoint yang benar, seperti yang ditunjukkan pada gambar berikut.

      image

    • Nilai `WorkspaceId` salah, atau Anda bukan anggota ruang kerja: Pastikan bahwa WorkspaceId benar dan bahwa Anda adalah anggota ruang kerja sebelum memanggil API. Untuk informasi lebih lanjut, lihat Cara Ditambahkan sebagai Anggota Ruang Kerja.

  1. Apa yang harus saya lakukan jika saya menerima kesalahan "Access key yang ditentukan tidak ditemukan atau tidak valid"?

    Kesalahan ini biasanya terjadi karena access_key_id atau access_key_secret yang diberikan salah, atau access_key_id telah dinonaktifkan. Pastikan bahwa access_key_id benar dan belum dinonaktifkan sebelum memanggil API.

Penagihan

  • Semua fitur basis pengetahuan dan panggilan API tidak dikenakan biaya. Untuk informasi lebih lanjut, lihat Knowledge Base: Billing.

  • Ruang penyimpanan untuk data seperti file yang diimpor ke dalam Model Studio tidak dikenakan biaya.

Kode kesalahan

Jika pemanggilan API dalam topik ini gagal dan mengembalikan pesan kesalahan, kunjungi Pusat Kesalahan untuk menyelesaikan masalah tersebut.