All Products
Search
Document Center

Alibaba Cloud Model Studio:Panduan API Basis Pengetahuan

Last Updated:Mar 27, 2026

Alibaba Cloud Model Studio menyediakan API terbuka untuk basis pengetahuan, memungkinkan Anda mengintegrasikannya dengan cepat ke dalam sistem bisnis yang sudah ada, mengotomatiskan operasi, dan menangani persyaratan pengambilan (retrieval) yang kompleks.

Prasyarat

  1. Anda harus memberikan RAM user (tidak diperlukan untuk akun root) izin API (kebijakan AliyunBailianDataFullAccess) dan menambahkan RAM user tersebut ke ruang kerja. Hanya dengan demikian Anda dapat menggunakan API Alibaba Cloud untuk mengelola basis pengetahuan.

    RAM user hanya dapat mengelola basis pengetahuan di ruang kerja yang telah mereka ikuti. Akun root dapat mengelola basis pengetahuan di semua ruang kerja.
  2. Instal versi terbaru dari Alibaba Cloud Model Studio SDK untuk memanggil API basis pengetahuan Alibaba Cloud. Untuk petunjuk instalasi, lihat Referensi Developer Alibaba Cloud SDK.

    Jika SDK tidak memenuhi kebutuhan Anda, Anda dapat membuat permintaan HTTP ke API basis pengetahuan menggunakan mekanisme signature (lebih kompleks). Untuk detailnya, lihat Ikhtisar API.
  3. Dapatkan Pasangan Kunci Akses dan ID ruang kerja, lalu konfigurasikan sebagai variabel lingkungan sistem untuk menjalankan kode contoh. Untuk Linux:

    Jika Anda menggunakan IDE atau plug-in pengembangan 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='ID AccessKey Alibaba Cloud Anda'
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET='Rahasia AccessKey Alibaba Cloud Anda'
    export WORKSPACE_ID='ID ruang kerja Alibaba Cloud Model Studio Anda'
  4. Siapkan dokumen pengetahuan contoh Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.docx untuk membuat basis pengetahuan.

Kode Contoh Lengkap

Buat basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, Anda harus menyelesaikan semua langkah prasyarat sebelumnya. Sebelum memanggil contoh ini, RAM user harus mendapatkan kebijakan AliyunBailianDataFullAccess.

  • Jika Anda menggunakan IDE atau plug-in bantuan pengembangan lainnya, Anda harus mengonfigurasi variabel ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan WORKSPACE_ID di lingkungan pengembangan yang sesuai.

Python

# Kode contoh hanya untuk referensi. Jangan gunakan langsung di 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 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: Setel variabel lingkungan {var} ({description}).")
    
    return len(missing_vars) == 0


def calculate_md5(file_path: str) -> str:
    """
    Hitung hash MD5 file.

    Parameters:
        file_path (str): Jalur lokal ke file.

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

    # Baca file dalam mode biner
    with open(file_path, "rb") as f:
        # Baca file dalam 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()


def get_file_size(file_path: str) -> int:
    """
    Dapatkan ukuran file dalam byte.

    Parameters:
        file_path (str): Jalur lokal ke file.

    Returns:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


# Inisialisasi 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 di bawah ini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


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

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

    Returns:
        Respons 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)


# Unggah file ke penyimpanan sementara
def upload_file(pre_signed_url, headers, file_path):
    """
    Unggah file ke Alibaba Cloud Model Studio.

    Parameters:
        pre_signed_url (str): URL dari sewa unggah.
        headers (dict): Header untuk permintaan unggah.
        file_path (str): Jalur lokal ke 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 tertentu di Alibaba Cloud Model Studio.

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

    Returns:
        Respons 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)


# Periksa status parsing file
def describe_file(client, workspace_id, file_id):
    """
    Dapatkan informasi dasar tentang file.

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

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


# Inisialisasi basis pengetahuan (indeks)
def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    Buat basis pengetahuan (inisialisasi) di Alibaba Cloud Model Studio.

    Parameters:
        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. Mendukung tipe kategori dan file.
        sink_type (str): Tipe penyimpanan vektor basis pengetahuan.

    Returns:
        Respons 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)


# Kirim pekerjaan pengindeksan
def submit_index(client, workspace_id, index_id):
    """
    Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio.

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

    Returns:
        Respons 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)


# Tunggu hingga pekerjaan pengindeksan selesai
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Kueri status pekerjaan pengindeksan.

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

    Returns:
        Respons 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)


def create_knowledge_base(
        file_path: str,
        workspace_id: str,
        name: str
):
    """
    Buat basis pengetahuan menggunakan Alibaba Cloud Model Studio.

    Parameters:
        file_path (str): Jalur lokal ke file.
        workspace_id (str): ID ruang kerja.
        name (str): Nama basis pengetahuan.

    Returns:
        str atau None: ID basis pengetahuan jika berhasil, selain itu 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: 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: Ajukan 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 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 menunggu parsing. Harap tunggu...")
            elif status == 'PARSING':
                print("File sedang diparsing. Harap tunggu...")
            elif status == 'PARSE_SUCCESS':
                print("Parsing file selesai!")
                break
            else:
                print(f"Status file tidak dikenal: {status}. Hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Buat basis pengetahuan
        print("Langkah 7: Buat 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: Kirim pekerjaan pengindeksan
        print("Langkah 8: Kirim pekerjaan 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 pekerjaan pengindeksan
        print("Langkah 9: Dapatkan status pekerjaan 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 pekerjaan pengindeksan saat ini: {status}")
            if status == 'COMPLETED':
                break
            time.sleep(5)
        print("Basis pengetahuan Alibaba Cloud Model Studio berhasil dibuat!")
        return index_id
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return None


def main():
    if not check_environment_variables():
        print("Validasi variabel lingkungan gagal.")
        return
    file_path = input("Masukkan jalur lokal ke file yang ingin diunggah (untuk Linux, misalnya: /xxx/xxx/Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.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 hanya untuk referensi. Jangan gunakan langsung di 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 {

    /**
     * Periksa dan minta variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Hitung hash MD5 file.
     *
     * @param filePath Jalur lokal ke file
     * @return Hash MD5 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();
    }

    /**
     * Dapatkan ukuran file dalam byte.
     *
     * @param filePath Jalur lokal ke 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 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 di bawah ini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Minta sewa unggah file.
     *
     * @param client      Objek klien
     * @param categoryId  ID kategori
     * @param fileName    Nama file
     * @param fileMd5     Hash MD5 file
     * @param fileSize    Ukuran file dalam byte
     * @param workspaceId ID ruang kerja
     * @return Respons dari Alibaba Cloud 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 sewa unggah
     * @param headers      Header permintaan unggah
     * @param filePath     Jalur lokal ke file
     * @throws Exception Jika terjadi kesalahan selama unggah
     */
    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);

            // Setel 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
            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 yang digunakan untuk file
     * @param categoryId  ID kategori
     * @param workspaceId ID ruang kerja
     * @return Respons dari Alibaba Cloud 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 tentang file.
     *
     * @param client      Objek klien
     * @param workspaceId ID ruang kerja
     * @param fileId      ID file
     * @return Respons dari Alibaba Cloud 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);
    }

    /**
     * Buat basis pengetahuan di Alibaba Cloud 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 basis pengetahuan
     * @param sourceType    Tipe data aplikasi. Mendukung tipe kategori dan file
     * @param sinkType      Tipe penyimpanan vektor basis pengetahuan
     * @return Respons dari Alibaba Cloud 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);
    }

    /**
     * Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio.
     *
     * @param client      Objek klien
     * @param workspaceId ID ruang kerja
     * @param indexId     ID basis pengetahuan
     * @return Respons dari Alibaba Cloud 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);
    }

    /**
     * Kueri status pekerjaan pengindeksan.
     *
     * @param client      Objek klien
     * @param workspaceId ID ruang kerja
     * @param jobId       ID pekerjaan
     * @param indexId     ID basis pengetahuan
     * @return Respons dari Alibaba Cloud 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;
    }

    /**
     * Buat basis pengetahuan menggunakan Alibaba Cloud Model Studio.
     *
     * @param filePath    Jalur lokal ke file
     * @param workspaceId ID ruang kerja
     * @param name        Nama basis pengetahuan
     * @return ID basis pengetahuan jika berhasil, selain itu 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: Siapkan informasi file
            System.out.println("Langkah 2: Siapkan 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 manual.
            // Konversi uploadHeaders ke Map (format 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 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 menunggu parsing. Harap tunggu...");
                } else if (status.equals("PARSING")) {
                    System.out.println("File sedang diparsing. Harap tunggu...");
                } else if (status.equals("PARSE_SUCCESS")) {
                    System.out.println("Parsing file selesai!");
                    break;
                } else {
                    System.out.println("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                    return null;
                }
                TimeUnit.SECONDS.sleep(5);
            }

            // Langkah 7: Buat 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: Kirim pekerjaan pengindeksan
            System.out.println("Langkah 8: Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio.");
            SubmitIndexJobResponse submitResponse = submitIndex(client, workspaceId, indexId);
            String jobId = submitResponse.getBody().getData().getId();

            // Langkah 9: Dapatkan status pekerjaan pengindeksan
            System.out.println("Langkah 9: Dapatkan status pekerjaan 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 pekerjaan pengindeksan saat ini: " + status);

                if (status.equals("COMPLETED")) {
                    break;
                }
                TimeUnit.SECONDS.sleep(5);
            }

            System.out.println("Basis pengetahuan Alibaba Cloud Model Studio berhasil 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 ke file yang ingin diunggah (untuk Linux, misalnya: /xxx/xxx/Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.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 hanya untuk referensi. Jangan gunakan langsung di 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 {

    /**
    * Periksa dan minta variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Hitung hash MD5 file.
     *
     * @param string $filePath Jalur lokal ke file.
     * @return string Hash MD5 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 ke 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")
        ]);
        // Titik akhir di bawah ini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti 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 file.
     * @param int $fileSize Ukuran file dalam byte.
     * @param string $workspaceId ID ruang kerja.
     * @return ApplyFileUploadLeaseResponse Respons dari Alibaba Cloud 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 sewa unggah.
    * @param array $headers Header permintaan unggah.
    * @param string $filePath Jalur lokal ke file.
    */
    public static function uploadFile($preSignedUrl, $headers, $filePath) {
        $fileContent = file_get_contents($filePath);
        // Setel 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);
    }

    /**
     * Tambahkan file ke kategori.
     *
     * @param Bailian $client Klien.
     * @param string $leaseId ID sewa.
     * @param string $parser Parser yang digunakan untuk file.
     * @param string $categoryId ID kategori.
     * @param string $workspaceId ID ruang kerja.
     * @return AddFileResponse Respons dari Alibaba Cloud 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 tentang file.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $fileId ID file.
     * @return DescribeFileResponse Respons dari Alibaba Cloud Model Studio.
     */
    public static function describeFile($client, $workspaceId, $fileId) {
        $headers = [];
        $runtime = new RuntimeOptions([]);
        return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
    }

    /**
     * Buat basis pengetahuan di Alibaba Cloud Model Studio (inisialisasi).
     *
     * @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. Mendukung tipe kategori dan file.
     * @param string $sinkType Tipe penyimpanan vektor basis pengetahuan.
     * @return CreateIndexResponse Respons dari Alibaba Cloud 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);
    }

    /**
     * Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @return SubmitIndexJobResponse Respons 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);
    }

    /**
     * Kueri status pekerjaan pengindeksan.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $jobId ID pekerjaan.
     * @return GetIndexJobStatusResponse Respons dari Alibaba Cloud 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);
    }

    /**
     * Buat basis pengetahuan menggunakan Alibaba Cloud Model Studio.
     *
     * @param string $filePath Jalur lokal ke file.
     * @param string $workspaceId ID ruang kerja.
     * @param string $name Nama basis pengetahuan.
     * @return string|null ID basis pengetahuan jika berhasil, selain itu 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: Siapkan informasi file
            echo "Langkah 2: Siapkan 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 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 menunggu parsing. Harap tunggu...\n";
                } elseif ($status == 'PARSING') {
                    echo "File sedang diparsing. Harap tunggu...\n";
                } elseif ($status == 'PARSE_SUCCESS') {
                    echo "Parsing file selesai!\n";
                    break;
                } else {
                    echo "Status file tidak dikenal: $status. Hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

            // Langkah 7: Buat basis pengetahuan
            echo "Langkah 7: Buat 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: Kirim pekerjaan pengindeksan
            echo "Langkah 8: Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio\n";
            $submitResponse = self::submitIndex($client, $workspaceId, $indexId);
            $jobId = $submitResponse->body->data->id;

            // Langkah 9: Dapatkan status pekerjaan pengindeksan
            echo "Langkah 9: Dapatkan status pekerjaan pengindeksan dari Alibaba Cloud Model Studio\n";
            while (true) {
                $getIndexJobStatusResponse = self::getIndexJobStatus($client, $workspaceId, $jobId, $indexId);
                $status = $getIndexJobStatusResponse->body->data->status;
                echo "Status pekerjaan pengindeksan saat ini: $status\n";
                if ($status == 'COMPLETED') {
                    break;
                }
                sleep(5);
            }
            echo "Basis pengetahuan Alibaba Cloud Model Studio berhasil 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 "Validasi variabel lingkungan gagal.\n";
            return;
        }
        $filePath = readline("Masukkan jalur lokal ke file yang ingin diunggah (untuk Linux, misalnya: /xxx/xxx/Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.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";
       }
    }
}
// Anggap autoload.php berada di direktori induk dari file kode saat ini. Sesuaikan 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 hanya untuk referensi. Jangan gunakan langsung di 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 KbCreate {

  /**
   * Periksa dan minta variabel lingkungan yang diperlukan
   * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel variabel lingkungan ${varName} (${desc})`);
        missing.push(varName);
      }
    }
    return missing.length === 0;
  }

  /**
   * Hitung hash MD5 file
   * @param {string} filePath - Jalur lokal ke file
   * @returns {Promise<string>} - Hash MD5 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, kembalikan sebagai string
   * @param {string} filePath - Jalur lokal ke 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;
    }
  }

  /**
   * 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 di bawah ini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti 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 file
   * @param {string} fileSize - Ukuran file dalam byte
   * @param {string} workspaceId - ID ruang kerja
   * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} - Respons dari Alibaba Cloud Model Studio
   */
  static async 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
    );
  }

  /**
   * Unggah file ke penyimpanan sementara
   * @param {string} preSignedUrl - URL sewa unggah
   * @param {Object} headers - Header permintaan unggah
   * @param {string} filePath - Jalur lokal ke 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 yang digunakan untuk file
   * @param {string} categoryId - ID kategori
   * @param {string} workspaceId - ID ruang kerja
   * @returns {Promise<bailian20231229.AddFileResponse>} - Respons dari Alibaba Cloud Model Studio
   */
  static async 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);
  }

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

  /**
   * Inisialisasi 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. Mendukung tipe kategori dan file
   * @param {string} sinkType - Tipe penyimpanan vektor basis pengetahuan
   * @returns {Promise<bailian20231229.CreateIndexResponse>} - Respons dari Alibaba Cloud Model Studio
   */
  static async 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);
  }

  /**
   * Kirim pekerjaan pengindeksan
   * @param {Bailian20231229Client} client - Klien
   * @param {string} workspaceId - ID ruang kerja
   * @param {string} indexId - ID basis pengetahuan
   * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} - Respons dari Alibaba Cloud Model Studio
   */
  static async 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);
  }

  /**
   * Kueri status pekerjaan pengindeksan
   * @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>} - Respons dari Alibaba Cloud Model Studio
   */
  static async 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);
  }

  /**
   * Buat basis pengetahuan
   * @param {string} filePath - Jalur lokal ke file
   * @param {string} workspaceId - ID ruang kerja
   * @param {string} name - Nama basis pengetahuan
   * @returns {Promise<string | null>} - ID basis pengetahuan jika berhasil, selain itu null
   */
  static async createKnowledgeBase(filePath, workspaceId, name) {
    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: Siapkan 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 leaseRes = await this.applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
      const leaseId = leaseRes.body.data.fileUploadLeaseId;
      const uploadUrl = leaseRes.body.data.param.url;
      const uploadHeaders = leaseRes.body.data.param.headers;

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

      console.log("Langkah 5: Tambahkan file ke Alibaba Cloud Model Studio")
      const addRes = await this.addFile(client, leaseId, parser, categoryId, workspaceId);
      const fileId = addRes.body.data.fileId;

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

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

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

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

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

  /**
   * Tunggu selama beberapa detik yang ditentukan
   * @param {number} seconds - Jumlah detik untuk menunggu
   * @returns {Promise<void>}
   */
  static sleep(seconds) {
    return new Promise(resolve => setTimeout(resolve, seconds * 1000));
  }

  static async main(args) {
    if (!this.checkEnvironmentVariables()) {
      console.log("Validasi 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 ke file yang ingin diunggah (untuk Linux, misalnya: /xxx/xxx/Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.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#

// Contoh kode hanya untuk referensi. Jangan digunakan langsung di 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>
        /// Periksa dan minta pengaturan variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan nilai true jika semua variabel lingkungan yang diperlukan telah diatur, jika tidak maka 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: Atur variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Hitung hash MD5 dari sebuah berkas.
        /// </summary>
        /// <param name="filePath">Jalur lokal ke berkas</param>
        /// <returns>Hash MD5 dari berkas tersebut</returns>
        /// <exception cref="Exception">Dilemparkan ketika terjadi kesalahan selama proses 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 berkas dalam satuan byte.
        /// </summary>
        /// <param name="filePath">Jalur lokal ke berkas</param>
        /// <returns>Ukuran berkas dalam satuan 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 telah dikonfigurasi</returns>
        /// <exception cref="Exception">Dilemparkan ketika terjadi kesalahan selama proses 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 di bawah ini merupakan titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Permintaan sewa unggah berkas.
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="categoryId">ID kategori</param>
        /// <param name="fileName">Nama berkas</param>
        /// <param name="fileMd5">Hash MD5 dari berkas</param>
        /// <param name="fileSize">Ukuran berkas dalam satuan byte</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <returns>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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 berkas ke penyimpanan sementara.
        /// </summary>
        /// <param name="preSignedUrl">URL sewa unggah</param>
        /// <param name="headers">Header permintaan unggah</param>
        /// <param name="filePath">Jalur lokal ke berkas</param>
        /// <exception cref="Exception">Dilemparkan ketika terjadi kesalahan selama proses unggah</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($"Berkas tidak ditemukan atau bukan berkas 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>
        /// Tambahkan berkas ke kategori.
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="leaseId">ID sewa</param>
        /// <param name="parser">Parser yang digunakan untuk berkas</param>
        /// <param name="categoryId">ID kategori</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <returns>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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 tentang sebuah berkas.
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <param name="fileId">ID berkas</param>
        /// <returns>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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>
        /// Buat Basis pengetahuan di Alibaba Cloud Model Studio (inisialisasi).
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <param name="fileId">ID berkas</param>
        /// <param name="name">Nama Basis pengetahuan</param>
        /// <param name="structureType">Jenis data Basis pengetahuan</param>
        /// <param name="sourceType">Jenis data aplikasi. Mendukung tipe kategori dan berkas</param>
        /// <param name="sinkType">Jenis penyimpanan vektor Basis pengetahuan</param>
        /// <returns>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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>
        /// Kirim pekerjaan pengindeksan 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>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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>
        /// Kueri status pekerjaan pengindeksan.
        /// </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>Tanggapan dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilemparkan ketika 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>
        /// Buat Basis pengetahuan menggunakan Alibaba Cloud Model Studio.
        /// </summary>
        /// <param name="filePath">Jalur lokal ke berkas</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <param name="name">Nama Basis pengetahuan</param>
        /// <returns>ID Basis pengetahuan jika berhasil, jika tidak maka null</returns>
        public static string CreateKnowledgeBase(string filePath, string workspaceId, string name)
        {
            // Atur 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: Siapkan informasi berkas");
                var fileInfo = new FileInfo(filePath);
                string fileName = fileInfo.Name;
                string fileMd5 = CalculateMD5(filePath);
                string fileSize = GetFileSize(filePath);

                Console.WriteLine("Langkah 3: Permintaan sewa unggah dari Alibaba Cloud Model Studio");
                Bailian20231229.Models.ApplyFileUploadLeaseResponse 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 berkas ke Alibaba Cloud Model Studio");
                // Instal Newtonsoft.Json secara manual.
                var uploadHeadersMap = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(uploadHeaders));
                UploadFile(uploadUrl, uploadHeadersMap, filePath);

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

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

                    if (status == "INIT")
                    {
                        Console.WriteLine("Berkas menunggu proses Penguraian. Mohon tunggu...");
                    }
                    else if (status == "PARSING")
                    {
                        Console.WriteLine("Proses Penguraian berkas sedang berlangsung. Mohon tunggu...");
                    }
                    else if (status == "PARSE_SUCCESS")
                    {
                        Console.WriteLine("Proses Penguraian berkas selesai!");
                        break;
                    }
                    else
                    {
                        Console.WriteLine($"Status berkas tidak diketahui: {status}. Hubungi dukungan teknis.");
                        return null;
                    }
                    Thread.Sleep(5000);
                }

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

                Console.WriteLine("Langkah 8: Kirim pekerjaan pengindeksan ke Alibaba Cloud Model Studio");
                Bailian20231229.Models.SubmitIndexJobResponse submitResponse = SubmitIndex(client, workspaceId, indexId);
                string jobId = submitResponse.Body.Data.Id;

                Console.WriteLine("Langkah 9: Dapatkan status pekerjaan pengindeksan dari Alibaba Cloud Model Studio");
                while (true)
                {
                    Bailian20231229.Models.GetIndexJobStatusResponse getStatusResponse = GetIndexJobStatus(client, workspaceId, jobId, indexId);
                    string status = getStatusResponse.Body.Data.Status;
                    Console.WriteLine($"Status pekerjaan pengindeksan saat ini: {status}");

                    if (status == "COMPLETED")
                    {
                        break;
                    }
                    Thread.Sleep(5000);
                }

                Console.WriteLine("Basis pengetahuan Alibaba Cloud Model Studio berhasil 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())
            {
                return;
            }

            Console.Write("Masukkan jalur lokal ke berkas yang ingin Anda unggah (untuk Linux, contohnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product 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 hanya untuk referensi. Jangan gunakan langsung di 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 Periksa dan minta 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: Setel variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// CalculateMD5 Hitung hash MD5 file.
//
// Parameters:
//   - filePath (string): Jalur lokal ke file.
//
// Returns:
//   - string: Hash MD5 file.
//   - error: Pesan error.
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 Dapatkan ukuran file dalam byte.
//
// Parameters:
//   - filePath (string): Jalur lokal ke file.
//
// Returns:
//   - string: Ukuran file dalam byte.
//   - error: Pesan error.
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 Buat dan konfigurasikan klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang dikonfigurasi.
//   - error: Pesan error.
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 di bawah ini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// ApplyLease Minta sewa unggah file dari Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - categoryId (string): ID kategori.
//   - fileName (string): Nama file.
//   - fileMD5 (string): Hash MD5 file.
//   - fileSize (string): Ukuran file dalam byte.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Unggah file ke Alibaba Cloud Model Studio.
//
// Parameters:
//   - preSignedUrl (string): URL sewa unggah.
//   - headers (map[string]string): Header permintaan unggah.
//   - filePath (string): Jalur lokal ke 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 Tambahkan file ke kategori tertentu di Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser yang digunakan untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Dapatkan informasi dasar tentang file.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Buat basis pengetahuan (inisialisasi) di Alibaba Cloud Model Studio.
//
// Parameters:
//   - 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. Mendukung tipe kategori dan file.
//   - sinkType (string): Tipe penyimpanan vektor basis pengetahuan.
//
// Returns:
//   - *bailian20231229.CreateIndexResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Kirim pekerjaan pengindeksan.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.SubmitIndexJobResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Kueri status pekerjaan pengindeksan.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID pekerjaan.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Pesan error.
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 Buat basis pengetahuan menggunakan Alibaba Cloud Model Studio.
//
// Parameters:
//   - filePath (string): Jalur lokal ke file.
//   - workspaceId (string): ID ruang kerja.
//   - name (string): Nama basis pengetahuan.
//
// Returns:
//   - string atau nil: ID basis pengetahuan jika berhasil, selain itu nil.
//   - error: Pesan error.
func CreateKnowledgeBase(filePath, workspaceId, name string) (_result string, _err error) {
	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: Siapkan 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 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 menunggu parsing. Harap tunggu...")
		} else if status == "PARSING" {
			fmt.Println("File sedang diparsing. Harap tunggu...")
		} else if status == "PARSE_SUCCESS" {
			fmt.Println("Parsing file selesai!")
			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: Kirim pekerjaan 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 pekerjaan 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 pekerjaan pengindeksan saat ini: %s\n", status)

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

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

// Fungsi utama.
func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Validasi variabel lingkungan gagal.")
		return
	}
	// Buat pemindai untuk input
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal ke file yang ingin diunggah (untuk Linux, misalnya: /xxx/xxx/Pengenalan Produk Ponsel Seri Alibaba Cloud Model Studio.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("Basis pengetahuan berhasil dibuat. ID: %s\n", indexID)
}

Ambil dari basis pengetahuan

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

  • Jika Anda menggunakan lingkungan pengembangan terintegrasi (IDE) atau plug-in pengembangan 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():
    """Periksa dan minta 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: Setel 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 di bawah ini adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


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

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

    Returns:
        Respons dari layanan Alibaba Cloud 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 Alibaba Cloud Model Studio untuk mengambil dari basis pengetahuan.

    Returns:
        str atau None: Segmen teks yang diambil jika operasi berhasil. Selain itu, mengembalikan None.
    """
    if not check_environment_variables():
        print("Validasi variabel lingkungan gagal.")
        return
    try:
        print("Langkah 1: Buat klien")
        client = create_client()
        print("Langkah 2: Ambil dari basis pengetahuan")
        index_id = input("Masukkan ID basis pengetahuan: ")  # Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
        query = input("Masukkan kueri pengambilan: ")
        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 contoh 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 minta variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel 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 di bawah ini 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 kueri untuk pengambilan
     * @return               Respons dari layanan Alibaba Cloud 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 Alibaba Cloud Model Studio untuk mengambil dari basis pengetahuan.
     */
    public static void main(String[] args) {
        if (!checkEnvironmentVariables()) {
            System.out.println("Validasi 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 dari basis pengetahuan
            System.out.println("Langkah 2: Ambil dari 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 dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
            String indexId = scanner.nextLine();
            System.out.print("Masukkan kueri pengambilan: ");
            String query = scanner.nextLine();
            String workspaceId = System.getenv("WORKSPACE_ID");
            RetrieveResponse resp = retrieveIndex(client, workspaceId, indexId, query);

            // Instal jackson-databind. Konversi badan respons ke 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 contoh 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 minta variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel 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 di bawah ini 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 kueri untuk pengambilan
     * @return RetrieveResponse Respons dari layanan Alibaba Cloud 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 Alibaba Cloud Model Studio untuk mengambil dari basis pengetahuan.
     */
    public static function main($args){
        if (!self::checkEnvironmentVariables()) {
            echo "Validasi variabel lingkungan gagal.\n";
            return;
        }

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

            // Langkah 2: Ambil dari basis pengetahuan
            echo "Langkah 2: Ambil dari basis pengetahuan\n";
            $indexId = readline("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
            $query = readline("Masukkan kueri pengambilan: "); 
            $workspaceId = getenv("WORKSPACE_ID");
            // Panggil metode pengambilan.
            $resp = self::retrieveIndex($client, $workspaceId, $indexId, $query);
            // Konversi badan respons ke 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";
        }
    }
}
// Anggap bahwa autoload.php berada di direktori induk dari file 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 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 KbRetrieve {

    /**
     * Periksa dan minta variabel lingkungan yang diperlukan.
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel 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 di bawah ini 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 Kueri pengambilan
     * @returns {Promise<bailian20231229.RetrieveResponse>} Respons dari layanan Alibaba Cloud 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 Alibaba Cloud Model Studio untuk mengambil dari basis pengetahuan.
     */
    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Validasi 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 dari basis pengetahuan")
            const indexId = await new Promise((resolve, reject) => {
                // ID basis pengetahuan adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud 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 kueri pengambilan: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("Kueri pengambilan 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 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 KnowledgeBaseRetrieve
    {
        /// <summary>
        /// Periksa dan minta variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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: Setel variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Inisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang dikonfigurasi</returns>
        /// <exception cref="Exception">Dilempar ketika 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 di bawah ini 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 kueri untuk pengambilan</param>
        /// <returns>Respons dari layanan Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Jika panggilan 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 Alibaba Cloud Model Studio untuk mengambil dari basis pengetahuan.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Validasi variabel lingkungan gagal.");
                return;
            }

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

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

                // Instal Newtonsoft.Json. Konversi badan respons ke 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 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 periksa dan minta 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: Setel variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// createClient buat dan konfigurasikan klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang dikonfigurasi.
//   - error: Informasi error.
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 di bawah ini 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 ambil informasi dari basis pengetahuan tertentu.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId(string): ID basis pengetahuan.
//   - query(string): Pernyataan kueri untuk pengambilan.
//
// Returns:
//   - *bailian20231229.RetrieveResponse: Respons dari layanan Alibaba Cloud Model Studio.
//   - error: Informasi error.
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("Validasi 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 dari basis pengetahuan
	fmt.Println("Langkah 2: Ambil dari basis pengetahuan")
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan ID basis pengetahuan: ") // Ini adalah Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
	indexId, _ := reader.ReadString('\n')
	indexId = strings.TrimSpace(indexId)
	fmt.Print("Masukkan kueri pengambilan: ")
	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)
}

Perbarui basis pengetahuan

Penting
  • Sebelum menjalankan contoh ini, selesaikan semua prasyarat. Sebelum RAM user menjalankan contoh ini, RAM user harus diberikan kebijakan AliyunBailianDataFullAccess.

  • Jika Anda menggunakan IDE atau plug-in pengembangan lainnya, konfigurasikan variabel lingkungan 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 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 bailian2029Client
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': 'ID AccessKey Alibaba Cloud',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Frase sandi AccessKey',
        '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: Setel 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 yang ditunjukkan di sini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


def calculate_md5(file_path: str) -> str:
    """
    Hitung hash MD5 file.

    Parameters:
        file_path (str): Jalur lokal file.

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

    # Baca file dalam mode biner.
    with open(file_path, "rb") as f:
        # Baca file dalam 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()


def get_file_size(file_path: str) -> int:
    """
    Dapatkan ukuran file dalam byte.

    Parameters:
        file_path (str): Jalur lokal file.

    Returns:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


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

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

    Returns:
        Respons 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)


# Unggah file ke penyimpanan sementara.
def upload_file(pre_signed_url, headers, file_path):
    """
    Unggah file ke Alibaba Cloud Model Studio.

    Parameters:
        lease_id (str): ID sewa.
        pre_signed_url (str): URL dalam sewa unggah.
        headers (dict): Header untuk permintaan unggah.
        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()


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

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

    Returns:
        Respons 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)


# Periksa status parsing file.
def describe_file(client, workspace_id, file_id):
    """
    Dapatkan informasi dasar tentang file.

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

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


# Kirim pekerjaan untuk menambahkan dokumen ke indeks.
def submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type):
    """
    Tambahkan dokumen yang diparsing ke basis pengetahuan pencarian dokumen.

    Parameters:
        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.

    Returns:
        Respons dari Alibaba Cloud 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 pekerjaan penambahan selesai.
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Kueri status pekerjaan indeks.

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

    Returns:
        Respons 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)


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

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

    Returns:
        Respons dari Alibaba Cloud 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
):
    """
    Perbarui basis pengetahuan menggunakan Alibaba Cloud Model Studio.

    Parameters:
        file_path (str): Jalur lokal aktual file yang diperbarui.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan yang akan diperbarui.
        old_file_id (str): FileID file yang akan diperbarui.

    Returns:
        str atau None: Jika berhasil, kembalikan ID basis pengetahuan. Selain itu, kembalikan None.
    """
    # Tetapkan 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: Ajukan sewa unggah.
        print("Langkah 3: Ajukan 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 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 diparsing. Harap tunggu.")
            elif status == 'PARSING':
                print("File sedang diparsing. Harap tunggu.")
            elif status == 'PARSE_SUCCESS':
                print("File telah diparsing berhasil!")
                break
            else:
                print(f"Status file tidak dikenal: {status}. Hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Kirim pekerjaan untuk menambahkan file.
        print("Langkah 7: Kirim pekerjaan 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: Periksa status pekerjaan indeks.
        print("Langkah 8: Tunggu hingga pekerjaan 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 berhasil!")
        return index_id
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return None


def main():
    if not check_environment_variables():
        print("Validasi variabel lingkungan gagal.")
        return
    file_path = input("Masukkan jalur lokal aktual file yang akan diunggah (diperbarui). Misalnya, pada Linux: /xxx/xxx/Pengenalan produk ponsel pintar Seri Alibaba Cloud Model Studio.docx: ")
    index_id = input("Masukkan ID basis pengetahuan yang akan diperbarui: ")  # Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
    old_file_id = input("Masukkan FileID file yang akan diperbarui: ")  # Ini adalah FileId yang dikembalikan oleh API AddFile. Anda juga dapat memperolehnya dari halaman Data Aplikasi di konsol Alibaba Cloud Model Studio dengan mengklik ikon ID di sebelah nama file.
    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 contoh ini hanya untuk referensi. Jangan gunakan langsung di 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 menyetel variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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", "Frase sandi AccessKey");
        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();
    }

    /**
     * Buat dan konfigurasikan 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"));
        // Titik akhir yang ditunjukkan di sini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Hitung hash MD5 file.
     *
     * @param filePath Jalur lokal file
     * @return Hash MD5 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 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);
    }

    /**
     * Ajukan sewa unggah file.
     *
     * @param client      Objek klien
     * @param categoryId  ID kategori
     * @param fileName    Nama file
     * @param fileMd5     Hash MD5 file
     * @param fileSize    Ukuran file dalam byte
     * @param workspaceId ID ruang kerja
     * @return Objek respons dari Alibaba Cloud 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 untuk permintaan unggah
     * @param filePath     Jalur lokal file
     * @throws Exception Jika terjadi kesalahan selama unggah
     */
    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);

            // Setel 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
            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 yang digunakan untuk file
     * @param categoryId  ID kategori
     * @param workspaceId ID ruang kerja
     * @return Objek respons dari Alibaba Cloud 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 tentang file.
     *
     * @param client      Objek klien
     * @param workspaceId ID ruang kerja
     * @param fileId      ID file
     * @return Objek respons dari Alibaba Cloud 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);
    }

    /**
     * Tambahkan dokumen yang diparsing 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 Respons dari Alibaba Cloud 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);
    }

    /**
     * Kueri status pekerjaan indeks.
     *
     * @param client      Objek klien
     * @param workspaceId ID ruang kerja
     * @param jobId       ID pekerjaan
     * @param indexId     ID basis pengetahuan
     * @return Objek respons dari Alibaba Cloud 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 beberapa 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 Respons dari Alibaba Cloud 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 Alibaba Cloud Model Studio
     *
     * @param filePath    Jalur lokal aktual file yang diperbarui
     * @param workspaceId ID ruang kerja
     * @param indexId     ID basis pengetahuan yang akan diperbarui
     * @param oldFileId   FileID file yang akan diperbarui
     * @return Jika berhasil, kembalikan ID basis pengetahuan; selain itu kembalikan 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: Buat klien
            System.out.println("Langkah 1: Buat klien.");
            com.aliyun.bailian20231229.Client client = createClient();

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

            // Langkah 3: Ajukan sewa unggah
            System.out.println("Langkah 3: Ajukan 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
            // Instal jackson-databind secara manual
            System.out.println("Langkah 4: Unggah file ke penyimpanan sementara.");
            // Konversi uploadHeaders dari langkah sebelumnya ke Map (format 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 diparsing. Harap tunggu.");
                } else if ("PARSING".equals(status)) {
                    System.out.println("File sedang diparsing. Harap tunggu.");
                } else if ("PARSE_SUCCESS".equals(status)) {
                    System.out.println("File telah diparsing berhasil!");
                    break;
                } else {
                    System.out.println("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                    return null;
                }
                Thread.sleep(5000);
            }

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

            // Langkah 8: Tunggu hingga pekerjaan penambahan selesai
            System.out.println("Langkah 8: Tunggu hingga pekerjaan penambahan 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 berhasil!");
            return indexId;
        } catch (Exception e) {
            System.out.println("Terjadi kesalahan: " + e.getMessage());
            return null;
        }
    }

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

        Scanner scanner = new Scanner(System.in);
        System.out.print("Masukkan jalur lokal aktual file yang akan diunggah (diperbarui). Misalnya, pada Linux: /xxx/xxx/Pengenalan produk ponsel pintar Seri Alibaba Cloud Model Studio.docx: ");
        String filePath = scanner.nextLine();

        System.out.print("Masukkan ID basis pengetahuan yang akan diperbarui: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
        String indexId = scanner.nextLine();

        System.out.print("Masukkan FileID file yang akan diperbarui: "); // Ini adalah FileId yang dikembalikan oleh API AddFile. Anda juga dapat memperolehnya dari halaman Data Aplikasi di konsol Alibaba Cloud Model Studio dengan mengklik ikon ID di sebelah nama file.
        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 telah diperbarui berhasil. ID basis pengetahuan: " + result);
        } else {
            System.out.println("Gagal memperbarui basis pengetahuan.");
        }
    }
}

PHP

<?php
// Kode sampel ini hanya untuk referensi. Jangan gunakan secara langsung dalam 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 mengatur variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan telah diatur, jika tidak, mengembalikan false.
    */
    public static function checkEnvironmentVariables() {
        $requiredVars = [
            'ALIBABA_CLOUD_ACCESS_KEY_ID' => 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET' => 'frasa sandi AccessKey',
            'WORKSPACE_ID' => 'ID ruang kerja Alibaba Cloud Model Studio'
        ];
        $missingVars = [];
        foreach ($requiredVars as $var => $description) {
            if (!getenv($var)) {
                $missingVars[] = $var;
                echo "Error: Atur variabel lingkungan $var ($description)\n";
            }
        }
        return count($missingVars) === 0;
    }

    /**
     * Hitung 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);
    }

    /**
     * Dapatkan 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);
    }

    /**
     * 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 yang ditampilkan di sini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

    /**
     * Ajukan 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 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 untuk permintaan unggah.
    * @param string $filePath Jalur lokal file.
    */
    public static function uploadFile($preSignedUrl, $headers, $filePath) {
        $fileContent = file_get_contents($filePath);
        // Atur 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);
    }

    /**
     * Tambahkan file ke kategori.
     *
     * @param Bailian $client Klien.
     * @param string $leaseId ID sewa.
     * @param string $parser Parser yang digunakan untuk file.
     * @param string $categoryId ID kategori.
     * @param string $workspaceId ID ruang kerja.
     * @return AddFileResponse Tanggapan dari Alibaba Cloud 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 tentang 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 static function describeFile($client, $workspaceId, $fileId) {
        $headers = [];
        $runtime = new RuntimeOptions([]);
        return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
    }

    /**
     * Tambahkan dokumen yang 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 Alibaba Cloud Model Studio
     * @throws Exception
     */
    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);
    }

    /**
     * Kueri status pekerjaan indeks.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $jobId ID pekerjaan.
     * @return GetIndexJobStatusResponse Tanggapan dari Alibaba Cloud 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 Alibaba Cloud Model Studio
     * @throws Exception
     */
    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 Alibaba Cloud Model Studio
     *
     * @param string $filePath Jalur lokal aktual dari file yang diperbarui
     * @param string $workspaceId ID ruang kerja
     * @param string $indexId ID basis pengetahuan yang akan diperbarui
     * @param string $oldFileId FileID dari file yang akan diperbarui
     * @return string| null Jika berhasil, kembalikan ID basis pengetahuan; jika tidak, kembalikan null
     */
    public static function updateKnowledgeBase($filePath, $workspaceId, $indexId, $oldFileId) {
        $categoryId = "default";
        $parser = "DASHSCOPE_DOCMIND";
        $sourceType = "DATA_CENTER_FILE";

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

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

            // Langkah 3: Ajukan sewa unggah dari Alibaba Cloud Model Studio.
            echo "Langkah 3: Ajukan 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 ke penyimpanan sementara.
            echo "Langkah 4: Unggah file ke penyimpanan sementara.\n";
            self::uploadFile($uploadUrl, $uploadHeadersMap, $filePath);

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

            // Langkah 6: Periksa status file di Alibaba Cloud Model Studio.
            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 berhasil diurai!\n";
                    break;
                } else {
                    echo "Status file tidak diketahui: " . $status . ". Hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

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

            // Langkah 8: Tunggu pekerjaan penambahan selesai.
            echo "Langkah 8: Tunggu pekerjaan penambahan 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);
            }

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

            echo "Basis pengetahuan Alibaba Cloud Model Studio berhasil diperbarui!\n";
            return $indexId;

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


    /**
     * Metode utama.
     */
    public static function main($args){
        if (!self::checkEnvironmentVariables()) {
            echo "Validasi variabel lingkungan gagal.\n";
            return;
        }
        $filePath = readline("Masukkan jalur lokal aktual file yang akan diunggah (diperbarui). Contoh, di Linux: /xxx/xxx/Alibaba Cloud Model Studio smartphone product introduction.docx: ");
        $indexId = readline("Masukkan ID basis pengetahuan yang akan diperbarui: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga bisa mendapatkannya dari halaman Basis Pengetahuan di Konsol Alibaba Cloud Model Studio.
        $oldFileId = readline("Masukkan FileID dari file yang akan diperbarui: "); // Ini adalah FileId yang dikembalikan oleh API AddFile. Anda juga bisa mendapatkannya dari halaman Data Aplikasi di Konsol Alibaba Cloud Model Studio dengan mengeklik ikon ID di samping nama file.
        $workspaceId = getenv('WORKSPACE_ID');
        $result = self::updateKnowledgeBase($filePath, $workspaceId, $indexId, $oldFileId);

        if ($result !== null) {
            echo "Basis pengetahuan berhasil diperbarui. ID basis pengetahuan: " . $result . "\n";
        } else {
            echo "Gagal memperbarui basis pengetahuan.\n";
        }
    }
}
// Asumsikan autoload.php terletak di direktori induk dari file kode saat ini. Sesuaikan 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 contoh ini hanya untuk referensi. Jangan gunakan langsung di 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 menyetel variabel lingkungan yang diperlukan
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu false
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'ID AccessKey Alibaba Cloud',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Frase sandi AccessKey',
            '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;
    }

    /**
     * Hitung hash MD5 file
     * @param {string} filePath - Jalur lokal file
     * @returns {Promise<string>} - Hash MD5 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, kembalikan sebagai string
     * @param {string} filePath - Jalur lokal 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;
        }
    }

    /**
     * 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 yang ditunjukkan di sini adalah titik akhir jaringan publik untuk Alibaba Cloud. Ganti sesuai kebutuhan.
        config.endpoint = `bailian.ap-southeast-1.aliyuncs.com`;
        return new bailian20231229.default(config);
    }

    /**
     * Ajukan sewa unggah file
     * @param {Bailian20231229Client} client - Klien
     * @param {string} categoryId - ID kategori
     * @param {string} fileName - Nama file
     * @param {string} fileMd5 - Hash MD5 file
     * @param {string} fileSize - Ukuran file dalam byte
     * @param {string} workspaceId - ID ruang kerja
     * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} - Respons dari Alibaba Cloud Model Studio
     */
    static async 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
        );
    }

    /**
     * Unggah file ke penyimpanan sementara
     * @param {string} preSignedUrl - URL dalam sewa unggah
     * @param {Object} headers - Header untuk permintaan unggah
     * @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}`);
        }
    }

    /**
     * Tambahkan file ke kategori
     * @param {Bailian20231229Client} client - Klien
     * @param {string} leaseId - ID sewa
     * @param {string} parser - Parser yang digunakan untuk file
     * @param {string} categoryId - ID kategori
     * @param {string} workspaceId - ID ruang kerja
     * @returns {Promise<bailian20231229.AddFileResponse>} - Respons dari Alibaba Cloud Model Studio
     */
    static async 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);
    }

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

    /**
     * Kirim pekerjaan 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>} - Respons dari Alibaba Cloud Model Studio
     */
    static async 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);
    }

    /**
     * Kueri 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>} - Respons dari Alibaba Cloud Model Studio
     */
    static async 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);
    }

    /**
     * Hapus 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>} - Respons dari Alibaba Cloud Model Studio
     */
    static async 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);
    }

    /**
     * Perbarui basis pengetahuan menggunakan Alibaba Cloud Model Studio
     * @param {string} filePath - Jalur lokal aktual file yang diperbarui
     * @param {string} workspaceId - ID ruang kerja
     * @param {string} indexId - ID basis pengetahuan yang akan diperbarui
     * @param {string} oldFileId - FileID file yang akan diperbarui
     * @returns {Promise<string | null>} - Jika berhasil, kembalikan ID basis pengetahuan; selain itu kembalikan 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: Siapkan informasi file.");
            const fileName = path.basename(filePath);
            const fileMd5 = await this.calculateMD5(filePath);
            const fileSize = this.getFileSize(filePath);

            console.log("Langkah 3: Ajukan sewa unggah dari Alibaba Cloud Model Studio.");
            const leaseRes = await this.applyLease(client, categoryId, fileName, fileMd5, fileSize, workspaceId);
            const leaseId = leaseRes.body.data.fileUploadLeaseId;
            const uploadUrl = leaseRes.body.data.param.url;
            const uploadHeaders = leaseRes.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 addRes = await this.addFile(client, leaseId, parser, categoryId, workspaceId);
            const fileId = addRes.body.data.fileId;

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

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

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

            console.log("Langkah 8: Tunggu hingga pekerjaan penambahan selesai.");
            while (true) {
                const getJobStatusResponse = await this.getIndexJobStatus(client, workspaceId, jobId, indexId);
                const status = getJobStatusResponse.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 berhasil!");
            return indexId;
        } catch (e) {
            console.error(`Terjadi kesalahan: ${e.message}`);
            return null;
        }
    }

    /**
     * Tunggu selama beberapa detik yang ditentukan
     * @param {number} seconds - Jumlah detik untuk menunggu
     * @returns {Promise<void>}
     */
    static sleep(seconds) {
        return new Promise(resolve => setTimeout(resolve, seconds * 1000));
    }

    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Validasi 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 aktual file yang akan diunggah (diperbarui). Misalnya, pada Linux: /xxx/xxx/Pengenalan produk ponsel pintar Seri Alibaba Cloud Model Studio.docx: ", (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 API CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud 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) => {
                // FileId adalah FileId yang dikembalikan oleh API AddFile. Anda juga dapat memperolehnya dari halaman Data Aplikasi di konsol Alibaba Cloud Model Studio dengan mengklik ikon ID di sebelah nama file.
                readline.question("Masukkan FileID file yang akan diperbarui: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("FileID 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 contoh ini hanya untuk referensi. Jangan gunakan langsung di 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 menyetel variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel, selain itu 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", "Frase sandi AccessKey" },
                { "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>
        /// Hitung hash MD5 file.
        /// </summary>
        /// <param name="filePath">Jalur lokal file</param>
        /// <returns>Hash MD5 file</returns>
        /// <exception cref="Exception">Dilempar ketika 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 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">Dilempar ketika 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 yang ditunjukkan di sini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Ajukan 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 file</param>
        /// <param name="fileSize">Ukuran file dalam byte</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <returns>Objek respons dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan</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 untuk permintaan unggah</param>
        /// <param name="filePath">Jalur lokal file</param>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama unggah</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>
        /// Tambahkan file ke kategori.
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="leaseId">ID sewa</param>
        /// <param name="parser">Parser yang digunakan untuk file</param>
        /// <param name="categoryId">ID kategori</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <returns>Objek respons dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan</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 tentang file.
        /// </summary>
        /// <param name="client">Objek klien</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <param name="fileId">ID file</param>
        /// <returns>Objek respons dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan</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>
        /// Tambahkan dokumen yang diparsing 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>Respons dari Alibaba Cloud 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>
        /// Kueri 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 respons dari Alibaba Cloud Model Studio</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan</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 beberapa 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>Respons dari Alibaba Cloud Model Studio</returns>
        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 Alibaba Cloud Model Studio
        /// </summary>
        /// <param name="filePath">Jalur lokal aktual file yang diperbarui</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <param name="indexId">ID basis pengetahuan yang akan diperbarui</param>
        /// <param name="oldFileId">FileID file yang akan diperbarui</param>
        /// <returns>Jika berhasil, kembalikan ID basis pengetahuan; selain itu kembalikan 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: Siapkan informasi file.");
                string fileName = Path.GetFileName(filePath);
                string fileMd5 = CalculateMD5(filePath);
                string fileSize = GetFileSize(filePath);

                Console.WriteLine("Langkah 3: Ajukan sewa unggah dari Alibaba Cloud Model Studio.");
                Bailian20231229.Models.ApplyFileUploadLeaseResponse 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 secara manual
                var uploadHeadersMap = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsonConvert.SerializeObject(uploadHeaders));
                UploadFile(uploadUrl, uploadHeadersMap, filePath);

                Console.WriteLine("Langkah 5: Tambahkan file ke kategori.");
                Bailian20231229.Models.AddFileResponse 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)
                {
                    Bailian20231229.Models.DescribeFileResponse 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 diparsing. Harap tunggu.");
                    }
                    else if ("PARSING".Equals(status))
                    {
                        Console.WriteLine("File sedang diparsing. Harap tunggu.");
                    }
                    else if ("PARSE_SUCCESS".Equals(status))
                    {
                        Console.WriteLine("File telah diparsing berhasil!");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                        return null;
                    }
                    Thread.Sleep(5000);
                }

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

                Console.WriteLine("Langkah 8: Tunggu hingga pekerjaan penambahan selesai.");
                while (true)
                {
                    Bailian20231229.Models.GetIndexJobStatusResponse 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 berhasil!");
                return indexId;
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
                return null;
            }
        }

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

            Console.Write("Masukkan jalur lokal aktual file yang akan diunggah (diperbarui). Misalnya, pada Linux: /xxx/xxx/Pengenalan produk ponsel pintar Seri Alibaba Cloud Model Studio.docx: ");
            string filePath = Console.ReadLine();

            Console.Write("Masukkan ID basis pengetahuan yang akan diperbarui: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
            string indexId = Console.ReadLine();

            Console.Write("Masukkan FileID file yang akan diperbarui: "); // Ini adalah FileId yang dikembalikan oleh API AddFile. Anda juga dapat memperolehnya dari halaman Data Aplikasi di konsol Alibaba Cloud Model Studio dengan mengklik ikon ID di sebelah nama file.
            string oldFileId = Console.ReadLine();

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

Go

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung di 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 periksa dan minta untuk menyetel 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": "Frase sandi AccessKey",
		"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 hitung hash MD5 file.
//
// Parameters:
//   - filePath (string): Jalur lokal file.
//
// Returns:
//   - string: Hash MD5 file.
//   - error: Kesalahan jika perhitungan gagal.
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 dapatkan ukuran file dalam byte.
//
// Parameters:
//   - filePath (string): Jalur lokal file.
//
// Returns:
//   - string: Ukuran file dalam byte.
//   - error: Kesalahan jika operasi gagal.
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 buat dan konfigurasikan klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang dikonfigurasi.
//   - error: Kesalahan jika pembuatan gagal.
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 yang ditunjukkan di sini adalah titik akhir jaringan publik untuk cloud publik Alibaba Cloud. Ganti sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// ApplyLease ajukan sewa unggah file dari Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - categoryId (string): ID kategori.
//   - fileName (string): Nama file.
//   - fileMD5 (string): Hash MD5 file.
//   - fileSize (string): Ukuran file dalam byte.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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 unggah file ke Alibaba Cloud Model Studio.
//
// Parameters:
//   - preSignedUrl (string): URL dalam sewa unggah.
//   - headers (map[string]string): Header untuk permintaan unggah.
//   - 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 tambahkan file ke kategori tertentu di Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser yang digunakan untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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 dapatkan informasi dasar tentang file.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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)
}

// SubmitIndexAddDocumentsJob tambahkan dokumen yang diparsing ke basis pengetahuan pencarian dokumen.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - fileId (string): ID file.
//   - sourceType (string): Tipe data.
//
// Returns:
//   - *bailian20231229.SubmitIndexAddDocumentsJobResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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)
}

// GetIndexJobStatus kueri status pekerjaan indeks.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID pekerjaan.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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)
}

// DeleteIndexDocument hapus satu atau beberapa file secara permanen dari basis pengetahuan pencarian dokumen tertentu.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DeleteIndexDocumentResponse: Respons dari Alibaba Cloud Model Studio.
//   - error: Kesalahan jika operasi gagal.
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 perbarui basis pengetahuan menggunakan Alibaba Cloud Model Studio.
//
// Parameters:
//   - filePath (string): Jalur lokal aktual file yang diperbarui.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan yang akan diperbarui.
//   - oldFileId (string): FileID file yang akan diperbarui.
//
// Returns:
//   - string: Jika berhasil, kembalikan ID basis pengetahuan. Selain itu, kembalikan string kosong.
//   - error: Kesalahan jika operasi gagal.
func UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId string) (_result string, _err 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: Siapkan 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: Ajukan 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 penyimpanan sementara.")
	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 := 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 untuk diparsing. Harap tunggu.")
		} else if status == "PARSING" {
			fmt.Println("File sedang diparsing. Harap tunggu.")
		} else if status == "PARSE_SUCCESS" {
			fmt.Println("File telah diparsing berhasil!")
			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)
	}

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

	// Tunggu hingga pekerjaan selesai.
	fmt.Println("Langkah 8: Tunggu hingga pekerjaan penambahan selesai.")
	for {
		getIndexJobStatusResponse, err := GetIndexJobStatus(client, workspaceId, jobId, indexId)
		if err != nil {
			return "", err
		}

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

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

	// Hapus file lama.
	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 berhasil!")
	return indexId, nil
}

// Fungsi utama.
func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Validasi variabel lingkungan gagal.")
		return
	}
	// Buat pemindai untuk membaca input.
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal aktual file yang akan diunggah (diperbarui). Misalnya, pada Linux: /xxx/xxx/Pengenalan produk ponsel pintar Seri Alibaba Cloud Model Studio.docx: ")
	filePath, _ := reader.ReadString('\n')
	filePath = strings.TrimSpace(filePath)

	fmt.Print("Masukkan ID basis pengetahuan yang akan diperbarui: ") // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat memperolehnya dari halaman Basis Pengetahuan di konsol Alibaba Cloud Model Studio.
	indexId, _ := reader.ReadString('\n')
	indexId = strings.TrimSpace(indexId)

	fmt.Print("Masukkan FileID file yang akan diperbarui: ") // Ini adalah FileId yang dikembalikan oleh API AddFile. Anda juga dapat memperolehnya dari halaman Data Aplikasi di konsol Alibaba Cloud Model Studio dengan mengklik ikon ID di sebelah nama file.
	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 telah diperbarui berhasil. ID basis pengetahuan: %s\n", result)
	} else {
		fmt.Println("Gagal memperbarui basis pengetahuan.")
	}
}

Kelola basis pengetahuan

Penting
  • Sebelum menjalankan contoh ini, selesaikan semua prasyarat yang tercantum di atas. RAM user harus menambahkan kebijakan AliyunBailianDataFullAccess sebelum menggunakan contoh ini.

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

Python

# Kode contoh hanya untuk referensi. Jangan gunakan langsung di 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 minta untuk menyetel 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: Setel 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 di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


# Daftar basis pengetahuan
def list_indices(client, workspace_id):
    """
    Dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.

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

    Returns:
        Respons dari Alibaba Cloud 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):
    """
    Hapus secara permanen basis pengetahuan yang ditentukan.

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

    Returns:
        Respons dari Alibaba Cloud 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("Validasi variabel lingkungan gagal.")
        return
    try:
        start_option = input(
            "Pilih operasi:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2): ")
        if start_option == '1':
            # Daftar basis pengetahuan
            print("\nMendaftar 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("\nMenghapus basis pengetahuan")
            workspace_id = os.environ.get('WORKSPACE_ID')
            index_id = input("Masukkan ID basis pengetahuan: ")  # Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
            # Konfirmasi penghapusan
            while True:
                confirm = input(f"Hapus secara permanen basis pengetahuan {index_id}? (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} berhasil dihapus!")
            else:
                err_info = UtilClient.to_jsonstring(resp.body)
                print(f"Error: {err_info}")
        else:
            print("Opsi tidak valid. Keluar.")
            return
    except Exception as e:
        print(f"Error: {e}")
        return


if __name__ == '__main__':
    main()

Java

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

import java.util.*;

public class KnowledgeBaseManage {

    /**
     * Periksa dan minta untuk menyetel variabel lingkungan yang diperlukan.
     *
     * @return true jika semua variabel lingkungan yang diperlukan disetel; selain itu, 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: Setel variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Buat dan konfigurasikan klien.
     *
     * @return Klien yang dikonfigurasi
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // Titik akhir di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
        config.endpoint = "bailian.cn-beijing.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.
     *
     * @param client      Klien
     * @param workspaceId ID ruang kerja
     * @return Respons dari Alibaba Cloud Model Studio
     */
    public static ListIndicesResponse listIndices(com.aliyun.bailian20231229.Client client, String workspaceId) throws Exception {
        Map<String, String> headers = new 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);
    }

    /**
     * Hapus secara permanen basis pengetahuan yang ditentukan.
     *
     * @param client      Klien
     * @param workspaceId ID ruang kerja
     * @param indexId     ID basis pengetahuan
     * @return Respons dari Alibaba Cloud Model Studio
     */
    public static DeleteIndexResponse deleteIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
        Map<String, String> headers = new 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);
    }

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

        try {
            Scanner scanner = new Scanner(System.in);
            System.out.print("Pilih operasi:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2): ");
            String startOption = scanner.nextLine();
            com.aliyun.bailian20231229.Client client = createClient();
            if (startOption.equals("1")) {
                // Daftar basis pengetahuan
                System.out.println("\nMendaftar basis pengetahuan");
                String workspaceId = System.getenv("WORKSPACE_ID");
                ListIndicesResponse response = listIndices(client, workspaceId);
                // Instal jackson-databind sendiri. Konversi respons ke 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("\nMenghapus basis pengetahuan");
                String workspaceId = System.getenv("WORKSPACE_ID");
                System.out.print("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
                String indexId = scanner.nextLine();
                // Konfirmasi penghapusan
                boolean confirm = false;
                while (!confirm) {
                    System.out.print("Hapus secara permanen basis pengetahuan " + indexId + "? (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 + " berhasil dihapus!");
                } else {
                    ObjectMapper mapper = new ObjectMapper();
                    System.out.println("Error: " + mapper.writeValueAsString(resp.getBody()));
                }
            } else {
                System.out.println("Opsi tidak valid. Keluar.");
            }
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

PHP

<?php
// Kode contoh hanya untuk referensi. Jangan gunakan langsung di 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 {

    /**
    * Periksa dan minta untuk menyetel variabel lingkungan yang diperlukan.
    *
    * @return bool Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel; selain itu, 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: Setel 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 di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
        $config->endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new Bailian($config);
    }

     /**
     * Dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.
     *
     * @param Bailian $client Objek klien
     * @param string $workspaceId ID ruang kerja
     * @return ListIndicesResponse Respons dari Alibaba Cloud 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);
    }

    /**
     * Hapus 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 Respons dari Alibaba Cloud 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);
    }

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

        try {
            echo "Pilih operasi:\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 "\nMendaftar basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $response = self::listIndices($client, $workspaceId);
                // Konversi respons ke string JSON
                $result = json_encode($response->body->data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
                echo $result . "\n";
            } elseif ($startOption === "2") {
                echo "\nMenghapus basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $indexId = readline("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
                // Konfirmasi penghapusan
                while (true) {
                    $confirm = strtolower(trim(readline("Hapus secara permanen basis pengetahuan $indexId? (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 . " berhasil dihapus!\n";
                else 
                    echo "Error: " . json_encode($response->body) . "\n";
            } else {
                echo "Opsi tidak valid. Keluar.\n";
            }
        } catch (Exception $e) {
            echo "Error: " . $e->getMessage() . "\n";
        }
    }
}
// Anggap autoload.php berada di direktori induk dari file saat ini. Sesuaikan 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 hanya untuk referensi. Jangan gunakan langsung di 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 {

    /**
     * Periksa dan minta untuk menyetel variabel lingkungan yang diperlukan.
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel; selain itu, 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: Setel 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 di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
        config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new bailian20231229.default(config);
    }

    /**
     * Dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.
     * @param {bailian20231229.Client} client Klien
     * @param {string} workspaceId ID ruang kerja
     * @returns {Promise<bailian20231229.ListIndicesResponse>} Respons dari Alibaba Cloud 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);
    }

    /**
     * Hapus 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>} Respons dari Alibaba Cloud 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);
    }

    /**
     * Lakukan operasi (daftar atau hapus basis pengetahuan) menggunakan Alibaba Cloud Model Studio.
     */
    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Validasi 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:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2): ", (ans) => {
                    resolve(ans.trim());
                });
            });

            if (startOption === '1') {
                console.log("\nMendaftar 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("\nMenghapus 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 API CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
                        resolve(ans.trim());
                    });
                });
                // Konfirmasi penghapusan
                let confirm = '';
                while (confirm !== 'y' && confirm !== 'n') {
                    confirm = (await new Promise((resolve) => {
                        readline.question(`Hapus secara permanen basis pengetahuan ${indexId}? (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} berhasil dihapus!`);
                else {
                    const errInfo = JSON.stringify(resp.body);
                    console.error(`Error: ${errInfo}`)
                }
            } else {
                console.log("Opsi tidak valid. Keluar.");
            }
        } catch (err) {
            console.error(`Error: ${err.message}`);
        } finally {
            readline.close();
        }
    }
}

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

C#

// Kode contoh hanya untuk referensi. Jangan gunakan langsung di 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>
        /// Periksa dan minta untuk menyetel variabel lingkungan yang diperlukan.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan disetel; selain itu, 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: Setel variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Inisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang dikonfigurasi</returns>
        /// <exception cref="Exception">Melempar pengecualian jika inisialisasi gagal</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 di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

        /// <summary>
        /// Dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.
        /// </summary>
        /// <param name="client">Klien</param>
        /// <param name="workspaceId">ID ruang kerja</param>
        /// <returns>Respons dari Alibaba Cloud 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>
        /// Hapus 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>Respons dari Alibaba Cloud 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>
        /// Metode utama
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Validasi variabel lingkungan gagal.");
                return;
            }
            try
            {
                Console.Write("Pilih operasi:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2): ");
                string startOption = Console.ReadLine();
                if (startOption == "1")
                {
                    Console.WriteLine("\nMendaftar basis pengetahuan");
                    string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                    Bailian20231229.Client client = CreateClient();
                    Bailian20231229.Models.ListIndicesResponse listIndicesResponse = ListIndices(client, workspaceId);
                    // Instal Newtonsoft.Json sendiri. Konversi objek respons ke string JSON untuk keluaran.
                    var json = JsonConvert.SerializeObject(listIndicesResponse.Body.Data, Formatting.Indented);
                    Console.WriteLine(json);
                }
                else if (startOption == "2")
                {
                    Console.WriteLine("\nMenghapus basis pengetahuan");
                    string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                    Console.Write("Masukkan ID basis pengetahuan: "); // Ini adalah Data.Id yang dikembalikan oleh API CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
                    string indexId = Console.ReadLine();
                    // Konfirmasi penghapusan
                    while (true)
                    {
                        Console.Write($"Hapus secara permanen basis pengetahuan {indexId}? (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} berhasil dihapus!");
                    }
                    else
                    {
                        var mapper = new JsonSerializerSettings { Formatting = Formatting.Indented };
                        string errInfo = JsonConvert.SerializeObject(resp.Body, mapper);
                        Console.WriteLine($"Error: {errInfo}");
                    }
                }
                else
                {
                    Console.WriteLine("Opsi tidak valid. Keluar.");
                    return;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.Message);
            }
        }
    }
}

Go

// Kode contoh hanya untuk referensi. Jangan gunakan langsung di 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 periksa dan minta untuk menyetel 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: Setel variabel lingkungan %s (%s)\n", varName, desc)
			missingVars = append(missingVars, varName)
		}
	}

	return len(missingVars) == 0
}

// createClient buat dan konfigurasikan klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang 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 di bawah ini menggunakan titik akhir Internet cloud publik sebagai contoh. Ganti sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// listIndices dapatkan detail satu atau beberapa basis pengetahuan di ruang kerja yang ditentukan.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ListIndicesResponse: Respons dari Alibaba Cloud 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 hapus secara permanen basis pengetahuan yang ditentukan.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.DeleteIndexResponse: Respons dari Alibaba Cloud 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("Validasi variabel lingkungan gagal.")
		return
	}

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

	// Pastikan input dibaca
	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("\nMendaftar 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("\nMenghapus 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("Hapus secara permanen basis pengetahuan %s? (y/n): ", indexId)
			if !scanner.Scan() {
				fmt.Println("Gagal membaca input 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 berhasil dihapus!\n", indexId)
			} else {
				fmt.Println(resp.Body)
			}
		}
	} else {
		fmt.Println("Opsi tidak valid. Keluar.")
	}
}

Buat basis pengetahuan

Contoh ini memandu Anda membuat basis pengetahuan pencarian dokumen dalam ruang kerja tertentu.

1. Inisialisasi klien

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

  • Endpoint jaringan publik:

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

  • Titik akhir VPC:

    Jika klien Anda dideploy di wilayah Alibaba Cloud Singapura (ap-southeast-1) (cloud publik) dan berada dalam lingkungan jaringan VPC, gunakan endpoint VPC berikut (Akses lintas wilayah tidak didukung).
    • Cloud publik: bailian-vpc.ap-southeast-1.aliyuncs.com

Setelah inisialisasi, Anda akan memiliki objek Client untuk panggilan API selanjutnya.

Python

def create_client() -> bailian20231229Client:
    """
    Buat dan konfigurasikan 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')
    )
    # Endpoint akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)

Java

/**
* Inisialisasi klien.
*
* @return Objek klien yang telah 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 akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah sesuai kebutuhan.
    config.endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new com.aliyun.bailian20231229.Client(config);
}

PHP

/**
 * Inisialisasi 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")
    ]);
    // Endpoint akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah sesuai kebutuhan.
    $config->endpoint = 'bailian-vpc.ap-southeast-1.aliyuncs.com';
    return new Bailian($config);
}

Node.js

/**
 * 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
  });
  // Endpoint akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah sesuai kebutuhan.
  config.endpoint = `bailian-vpc.ap-southeast-1.aliyuncs.com`;
  return new bailian20231229.default(config);
}

C#

/// <summary>
/// Inisialisasi klien.
/// </summary>
/// <returns>Objek klien yang telah dikonfigurasi</returns>
/// <exception cref="Exception">Melemparkan 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 akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah sesuai kebutuhan.
    config.Endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new AlibabaCloud.SDK.Bailian20231229.Client(config);
}

Go

// CreateClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *client.Bailian20231229Client: Klien yang telah 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 akses di bawah ini menggunakan endpoint jaringan publik Alibaba Cloud sebagai contoh. Ubah 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 basis pengetahuan

2.1. Minta sewa unggah file

Sebelum membuat basis pengetahuan, unggah file ke ruang kerja yang sama untuk dijadikan sumber pengetahuan. Sebelum mengunggah, panggil API ApplyFileUploadLease untuk meminta sewa unggah file. Sewa ini merupakan otorisasi sementara yang memungkinkan Anda mengunggah file dalam waktu terbatas (berlaku beberapa menit).

  • workspace_id: Cara mendapatkan ID ruang kerja

  • category_id: Untuk 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 API AddCategory untuk membuat kategori baru dan mendapatkan category_id yang sesuai.

  • file_name: Masukkan nama file yang diunggah (termasuk ekstensi). Nilainya harus sesuai dengan nama file sebenarnya. Misalnya, saat mengunggah file pada gambar, masukkan Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx.

    image

  • file_md5: Masukkan Hash MD5 dari file yang diunggah (Alibaba Cloud saat ini tidak memverifikasi nilai ini, sehingga mempermudah pengunggahan file menggunakan URL).

    Untuk Python, gunakan modul hashlib untuk mendapatkan Hash MD5. Untuk bahasa lain, lihat kode contoh lengkap.

    Contoh kode

    import hashlib
    
    
    def calculate_md5(file_path):
        """
        Hitung Hash MD5 dari sebuah file.
    
        Parameters:
            file_path (str): Jalur lokal ke 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 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()
    
    
    # Contoh penggunaan
    file_path = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah, misalnya /xxx/xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx"
    md5_value = calculate_md5(file_path)
    print(f"Hash MD5 file: {md5_value}")
    

    Ganti variabel file_path dalam kode dengan jalur lokal sebenarnya ke file tersebut, lalu jalankan untuk mendapatkan Hash MD5 file target (contoh nilai di bawah):

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

    Untuk Python, gunakan modul os untuk mendapatkan nilai ini. Untuk bahasa lain, lihat kode contoh lengkap.

    Contoh kode

    import os
    
    
    def get_file_size(file_path: str) -> int:
        """
        Dapatkan ukuran file dalam byte.
    
        Parameters:
            file_path (str): Jalur lokal sebenarnya ke file.
    
        Returns:
            int: Ukuran file dalam byte.
        """
        return os.path.getsize(file_path)
    
    
    # Contoh penggunaan
    file_path = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah, misalnya /xxx/xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx"
    file_size = get_file_size(file_path)
    print(f"Ukuran file dalam byte: {file_size}")
    

    Ganti variabel file_path dalam kode dengan jalur lokal sebenarnya ke file tersebut, lalu jalankan untuk mendapatkan ukuran file target dalam byte (contoh nilai di bawah):

    Ukuran file dalam byte: 14015

Setelah berhasil meminta sewa unggah sementara, Anda akan menerima:

  • Sekumpulan parameter unggah sementara:

    • Data.FileUploadLeaseId

    • Data.Param.Method

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

    • Data.Param.Headers termasuk Content-Type

  • URL unggah sementara: Data.Param.Url

Anda akan menggunakan parameter ini pada langkah berikutnya.

Penting

Python

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

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

    Returns:
        Respons 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

/**
 * Minta sewa unggah file.
 *
 * @param client      Objek klien
 * @param categoryId  ID kategori
 * @param fileName    Nama file
 * @param fileMd5     Hash MD5 file
 * @param fileSize    Ukuran file dalam byte
 * @param workspaceId ID ruang kerja
 * @return Respons 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

/**
 * Minta sewa unggah file.
 *
 * @param Bailian $client Klien.
 * @param string $categoryId ID kategori.
 * @param string $fileName Nama file.
 * @param string $fileMd5 Hash MD5 file.
 * @param int $fileSize Ukuran file dalam byte.
 * @param string $workspaceId ID ruang kerja.
 * @return ApplyFileUploadLeaseResponse Respons 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

/**
 * Minta sewa unggah file
 * @param {Bailian20231229Client} client - Klien
 * @param {string} categoryId - ID kategori
 * @param {string} fileName - Nama file
 * @param {string} fileMd5 - Hash MD5 file
 * @param {string} fileSize - Ukuran file dalam byte
 * @param {string} workspaceId - ID ruang kerja
 * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} - Respons 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>
/// 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 file</param>
/// <param name="fileSize">Ukuran file dalam byte</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Dilempar ketika 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 Minta sewa unggah file dari Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - categoryId (string): ID kategori.
//   - fileName (string): Nama file.
//   - fileMD5 (string): Hash MD5 file.
//   - fileSize (string): Ukuran file dalam byte.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: Respons 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)
}

Permintaan contoh

{
  "CategoryId": "default",
  "FileName": "Alibaba Cloud Model Studio series mobile product introduction.docx",
  "Md5": "2ef7361ea907f3a1b91e3b9936f5643a",
  "SizeInBytes": "14015",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh respons

{
  "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 mendapatkan sewa unggah, gunakan parameter unggah sementara dan URL dari sewa tersebut untuk mengunggah file dari penyimpanan lokal atau akses jaringan publik ke Alibaba Cloud Model Studio. Setiap ruang kerja mendukung maksimal 10.000 file. Format yang didukung saat ini meliputi 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 API ApplyFileUploadLease.

    URL ini adalah URL yang ditandatangani. Tidak mendukung unggahan FormData. Gunakan unggahan biner sebagai gantinya (lihat contoh kode).
Penting

Contoh ini tidak mendukung debugging online atau pembuatan contoh kode multi-bahasa.

Unggahan lokal

Python

import requests
from urllib.parse import urlparse

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

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

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

        # Periksa kode status respons
        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 dengan nilai sebenarnya dari bidang Url dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya"

    # Unggah file lokal ke penyimpanan sementara
    file_path = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.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 di bawah ini untuk unggah file dan harus sesuai dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya.
            connection.setRequestMethod("PUT");
            // Izinkan output ke koneksi, karena koneksi ini digunakan untuk unggah file
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti dengan nilai sebenarnya dari bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya");
            connection.setRequestProperty("Content-Type", "Ganti dengan nilai sebenarnya dari bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya (jika kosong, 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 respons
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // File berhasil diunggah
                System.out.println("File berhasil diunggah.");
            } else {
                // Gagal mengunggah file
                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 dengan nilai sebenarnya dari bidang Url dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya";
        // Unggah file lokal ke penyimpanan sementara
        String filePath = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx)";
        uploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

PHP

<?php

/**
 * Unggah file lokal ke penyimpanan sementara
 *
 * @param string $preSignedUrl URL yang ditandatangani atau alamat HTTP yang diperoleh dari API ApplyFileUploadLease
 * @param array $headers Header permintaan termasuk "X-bailian-extra" dan "Content-Type"
 * @param string $filePath Jalur file lokal
 * @throws Exception Jika unggahan 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); // Atur badan permintaan menjadi konten file
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan hasil respons alih-alih output langsung

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

    // Jalankan permintaan
    $response = curl_exec($ch);

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

    // Tutup sesi cURL
    curl_close($ch);

    // Periksa kode respons
    if ($httpCode != 200) {
        throw new Exception("Unggahan gagal, kode status HTTP: " . $httpCode . ", pesan kesalahan: " . $response);
    }

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

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

    // Ganti dengan X-bailian-extra dan Content-Type dari Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya
    $headers = [
        "X-bailian-extra" => "Ganti dengan nilai sebenarnya dari bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya",
        "Content-Type" => "Ganti dengan nilai sebenarnya dari bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya (jika kosong, berikan nilai kosong)"
    ];

    // Unggah file lokal ke penyimpanan sementara
    $filePath = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.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 permintaan unggahan
 * @param {string} filePath - Jalur lokal ke file
 * @throws {Error} Jika unggahan gagal
 */
async function uploadFile(preSignedUrl, headers, filePath) {
    // Bangun header permintaan untuk unggahan
    const uploadHeaders = {
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type": headers["Content-Type"]
    };

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

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

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

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

    const headers = {
        "X-bailian-extra": "Ganti dengan nilai sebenarnya dari bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya",
        "Content-Type": "Ganti dengan nilai sebenarnya dari bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya (jika kosong, berikan nilai kosong)"
    };

    // Unggah file lokal ke penyimpanan sementara
    const filePath = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx)";

    uploadFile(preSignedUrl, headers, filePath)
        .then(() => {
            console.log("Unggahan selesai.");
        })
        .catch((err) => {
            console.error("Unggahan 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 di bawah ini untuk unggah file dan harus sesuai dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya.
            connection.Method = "PUT";
            // Izinkan buffering stream tulis ke koneksi, karena koneksi ini digunakan untuk unggah file
            connection.AllowWriteStreamBuffering = false;
            connection.SendChunked = false;
            // Atur header permintaan, yang harus sesuai dengan nilai bidang dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya.
            connection.Headers["X-bailian-extra"] = "Ganti dengan nilai sebenarnya dari bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya";
            connection.ContentType = "Ganti dengan nilai sebenarnya dari bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya (jika kosong, 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 respons
            using (HttpWebResponse response = (HttpWebResponse)connection.GetResponse())
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    // File berhasil diunggah
                    Console.WriteLine("File berhasil diunggah.");
                }
                else
                {
                    // Gagal mengunggah file
                    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 dengan nilai sebenarnya dari bidang Url dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya";
        // Unggah file lokal ke penyimpanan sementara
        string filePath = "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx)";
        UploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

Go

package main

import (
    "fmt"
    "io"
    "os"

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

// UploadFile Unggah file lokal ke penyimpanan sementara.
//
// Parameters:
//   - preSignedUrl (string): URL dari sewa unggah.
//   - headers (map[string]string): Header permintaan unggahan.
//   - filePath (string): Jalur lokal ke file.
//
// Returns:
//   - error: Mengembalikan pesan kesalahan jika unggahan 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 untuk unggahan
    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 respons HTTP
    if resp.IsError() {
        return fmt.Errorf("Kesalahan HTTP: %d", resp.StatusCode())
    }

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

// main Fungsi utama
func main() {
    // Ganti dengan nilai sebenarnya dari bidang Url dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya
    preSignedUrl := "Ganti dengan nilai sebenarnya dari bidang Url dalam Data.Param yang dikembalikan oleh API ApplyFileUploadLease pada langkah sebelumnya"

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

    // Unggah file lokal ke penyimpanan sementara
    filePath := "Ganti dengan jalur lokal sebenarnya ke file yang ingin Anda unggah (untuk Linux, misalnya: /xxx/xxx/Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx)"

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

Unggah file menggunakan URL

Pastikan URL tersebut dapat diakses publik dan mengarah ke file yang valid.

Python

import requests
from urllib.parse import urlparse

def upload_file_link(pre_signed_url, source_url_string):
    """
    Unggah file yang dapat diakses publik ke penyimpanan sementara.

    Parameters:
        pre_signed_url (str): URL dari sewa unggah.
        source_url_string (str): URL file.

    Returns:
        Respons dari Alibaba Cloud Model Studio.
    """
    try:
        // Atur header permintaan
        headers = {
            "X-bailian-extra": "Ganti ini dengan nilai bidang X-bailian-extra dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
            "Content-Type": "Ganti ini dengan nilai bidang Content-Type dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong."
        }

        // Gunakan GET untuk mengambil file dari URL sumber
        source_response = requests.get(source_url_string)
        if source_response.status_code != 200:
            raise RuntimeError("Gagal mendapatkan file sumber.")

        // Gunakan metode HTTP yang ditentukan dalam bidang Method dari Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya
        response = requests.put(pre_signed_url, data=source_response.content, headers=headers)

        // Periksa kode status respons
        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 Url dalam Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong."

    // URL file yang akan diunggah
    source_url = "Ganti ini dengan URL file yang ingin Anda unggah."
    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();
            // Gunakan metode HTTP yang ditentukan dalam bidang Method dari Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya
            connection.setRequestMethod("PUT");
            // Aktifkan output karena koneksi ini mengunggah file
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti ini dengan nilai bidang X-bailian-extra dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.");
            connection.setRequestProperty("Content-Type", "Ganti ini dengan nilai bidang Content-Type dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong.");
            URL sourceUrl = new URL(sourceUrlString);
            HttpURLConnection sourceConnection = (HttpURLConnection) sourceUrl.openConnection();
            // Gunakan GET untuk mengambil file dari URL sumber
            sourceConnection.setRequestMethod("GET");
            // Dapatkan kode respons. Nilai 200 berarti sukses
            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 respons
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // Unggahan berhasil
                System.out.println("File berhasil diunggah.");
            } else {
                // Unggahan gagal
                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 Url dalam Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        
        String sourceUrl = "Ganti ini dengan URL file yang ingin Anda unggah.";
        uploadFileLink(preSignedUrlOrHttpUrl, sourceUrl);
    }
}

PHP

<?php

/**
 * Unggah file yang dapat diakses publik ke penyimpanan sementara
 *
 * @param string $preSignedUrl URL yang ditandatangani atau URL HTTP yang diperoleh dari operasi ApplyFileUploadLease
 * @param array $headers Header permintaan yang mencakup "X-bailian-extra" dan "Content-Type"
 * @param string $sourceUrl URL file
 * @throws Exception Jika unggahan gagal
 */
function uploadFile($preSignedUrl, $headers, $sourceUrl) {

    $fileContent = file_get_contents($sourceUrl);
    if ($fileContent === false) {
        throw new Exception("Gagal 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 PUT
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent); // Atur badan permintaan menjadi konten file
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan respons alih-alih mencetaknya

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

    // Jalankan 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("Unggahan gagal. Kode status HTTP: " . $httpCode . ". Pesan kesalahan: " . $response);
    }

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

/**
 * Fungsi utama: Unggah file yang dapat diakses publik ke penyimpanan sementara
 */
function main() {
    // Ganti ini dengan nilai bidang Url dalam Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya
    $preSignedUrl = "Ganti ini dengan nilai bidang Url dalam Data.Param, 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 X-bailian-extra dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type" => "Ganti ini dengan nilai bidang Content-Type dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong."
    ];

    $sourceUrl = "Ganti ini dengan URL file yang ingin Anda unggah.";

    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 yang dapat diakses publik ke penyimpanan sementara
 *
 * @param {string} preSignedUrl - URL dari sewa unggah
 * @param {Object} headers - Header untuk permintaan unggahan
 * @param {string} sourceUrl - URL file
 * @throws {Error} Jika unggahan gagal
 */
async function uploadFileFromUrl(preSignedUrl, headers, sourceUrl) {
    // Bangun header yang diperlukan untuk unggahan
    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'
        });

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

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

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

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

    const sourceUrl = "Ganti ini dengan URL file yang ingin Anda unggah.";

    uploadFileFromUrl(preSignedUrl, headers, sourceUrl)
        .then(() => {
            console.log("Unggahan selesai.");
        })
        .catch((err) => {
            console.error("Unggahan 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 stream file
                using (Stream fileStream = await response.Content.ReadAsStreamAsync())
                {
                    // Buat objek URL
                    Uri urlObj = new Uri(preSignedUrl);
                    HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(urlObj);

                    // Atur metode HTTP untuk unggahan
                    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 X-bailian-extra dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
                    connection.ContentType = "Ganti ini dengan nilai bidang Content-Type dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong.";

                    // Dapatkan stream permintaan dan tulis stream file
                    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 respons
                    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 Url dalam Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        string url = "Ganti ini dengan URL file yang ingin Anda unggah.";   

        await UploadFileFromUrl(preSignedUrlOrHttpUrl, url);
    }
}

Go

package main
 
import (
    "fmt"
    "net/http"
 
    "github.com/go-resty/resty/v2"
)
 
// UploadFileFromUrl mengunggah file yang dapat diakses publik ke penyimpanan sementara.
//
// Parameters:
//   - preSignedUrl (string): URL dari sewa unggah.
//   - headers (map[string]string): Header untuk permintaan unggahan.
//   - sourceUrl (string): URL file.
//
// Returns:
//   - error: Kesalahan jika unggahan gagal. Jika tidak, mengembalikan 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("gagal mendapatkan file: %w", err)
    }
    defer resp.Body.Close()
 
    if resp.StatusCode != http.StatusOK {
        return fmt.Errorf("gagal mendapatkan file. Kode status: %d", resp.StatusCode)
    }
 
    // Buat klien REST
    client := resty.New()
 
    // Bangun header 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("gagal mengirim permintaan: %w", err)
    }
 
    // Periksa kode status respons HTTP
    if response.IsError() {
        return fmt.Errorf("kesalahan HTTP: %d", response.StatusCode())
    }
 
    fmt.Println("File berhasil diunggah dari URL.")
    return nil
}
 
// main adalah titik masuk
func main() {
    // Ganti ini dengan nilai bidang Url dalam Data.Param, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya
    preSignedUrl := "Ganti ini dengan nilai bidang Url dalam Data.Param, 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 X-bailian-extra dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type":    "Ganti ini dengan nilai bidang Content-Type dalam Data.Param.Headers, yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika nilainya kosong, berikan string kosong.",
    }
 
    sourceUrl := "Ganti ini dengan URL file yang ingin Anda unggah."
 
    // 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. Selanjutnya, panggil API 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 API ApplyFileUploadLease.

  • category_id: Untuk contoh ini, masukkan default. Jika Anda menggunakan kategori khusus untuk unggahan, masukkan category_id yang sesuai.

Setelah menambahkan file, Alibaba Cloud Model Studio mengembalikan FileId untuk file tersebut dan secara otomatis mulai menguraikannya. lease_id (ID sewa) menjadi tidak valid. Jangan kirim ulang dengan ID sewa yang sama.

Penting

Python

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

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

    Returns:
        Respons 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

/**
 * Tambahkan file ke kategori.
 *
 * @param client      Objek klien
 * @param leaseId     ID sewa
 * @param parser      Parser yang digunakan untuk file
 * @param categoryId  ID kategori
 * @param workspaceId ID ruang kerja
 * @return Respons 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

/**
 * Tambahkan file ke kategori.
 *
 * @param Bailian $client Klien.
 * @param string $leaseId ID sewa.
 * @param string $parser Parser yang digunakan untuk file.
 * @param string $categoryId ID kategori.
 * @param string $workspaceId ID ruang kerja.
 * @return AddFileResponse Respons 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

/**
 * Tambahkan file ke kategori
 * @param {Bailian20231229Client} client - Klien
 * @param {string} leaseId - ID sewa
 * @param {string} parser - Parser yang digunakan untuk file
 * @param {string} categoryId - ID kategori
 * @param {string} workspaceId - ID ruang kerja
 * @returns {Promise<bailian20231229.AddFileResponse>} - Respons 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>
/// Tambahkan file ke kategori.
/// </summary>
/// <param name="client">Objek klien</param>
/// <param name="leaseId">ID sewa</param>
/// <param name="parser">Parser yang digunakan untuk file</param>
/// <param name="categoryId">ID kategori</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Dilempar ketika 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 Tambahkan file ke kategori tertentu di Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser yang digunakan untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Respons 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 respons

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

2.4. Kueri status penguraian file

File yang belum diurai tidak dapat digunakan untuk basis pengetahuan. Selama periode permintaan puncak, proses ini dapat memakan waktu beberapa jam. Panggil API DescribeFile untuk mengkueri status penguraian file.

  • file_id: Masukkan FileId yang dikembalikan oleh API AddFile.

Ketika bidang Data.Status yang dikembalikan oleh API ini bernilai PARSE_SUCCESS, file tersebut telah diurai dan dapat diimpor ke basis pengetahuan.

Penting

Python

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

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

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

Java

/**
 * Dapatkan informasi dasar tentang file.
 *
 * @param client      Objek klien
 * @param workspaceId ID ruang kerja
 * @param fileId      ID file
 * @return Respons 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

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

Node.js

/**
 * Kueri status penguraian file
 * @param {Bailian20231229Client} client - Klien
 * @param {string} workspaceId - ID ruang kerja
 * @param {string} fileId - ID file
 * @returns {Promise<bailian20231229.DescribeFileResponse>} - Respons 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>
/// Dapatkan informasi dasar tentang file.
/// </summary>
/// <param name="client">Objek klien</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <param name="fileId">ID file</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Dilempar ketika 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 Dapatkan informasi dasar tentang file.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: Respons 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 respons

{
  "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": "Alibaba Cloud Model Studio Series Mobile Phone Product Introduction.docx",
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "SizeInBytes": "14015",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

3. Buat basis pengetahuan

3.1. Inisialisasi basis pengetahuan

Setelah penguraian file selesai, impor file tersebut ke basis pengetahuan dalam ruang kerja yang sama. Untuk menginisialisasi (belum menyelesaikan) basis pengetahuan pencarian dokumen, panggil API CreateIndex.

  • workspace_id: Cara mendapatkan ID ruang kerja

  • file_id: Masukkan FileId yang dikembalikan oleh API AddFile.

    Jika `source_type` bernilai DATA_CENTER_FILE, parameter ini wajib diisi. Jika tidak, API akan mengembalikan kesalahan.
  • structure_type: Untuk contoh ini, masukkan unstructured.

  • source_type: Untuk contoh ini, masukkan DATA_CENTER_FILE.

  • sink_type: Untuk contoh ini, masukkan BUILT_IN.

Bidang Data.Id yang dikembalikan oleh API ini adalah ID basis pengetahuan, yang digunakan untuk pembuatan indeks selanjutnya.

Simpan ID basis pengetahuan Anda dengan aman. Semua operasi API selanjutnya terkait basis pengetahuan ini akan menggunakannya.
Penting

Python

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

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

    Returns:
        Respons 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

/**
 * Buat basis pengetahuan di Alibaba Cloud Model Studio (inisialisasi).
 *
 * @param client        Objek klien
 * @param workspaceId   ID ruang kerja
 * @param fileId        ID file
 * @param name          Nama basis pengetahuan
 * @param structureType Jenis data basis pengetahuan
 * @param sourceType    Jenis data aplikasi. Mendukung jenis kategori dan file
 * @param sinkType      Jenis penyimpanan vektor basis pengetahuan
 * @return Respons 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

/**
 * Buat basis pengetahuan di Alibaba Cloud Model Studio (inisialisasi).
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $fileId ID file.
 * @param string $name Nama basis pengetahuan.
 * @param string $structureType Jenis data basis pengetahuan.
 * @param string $sourceType Jenis data aplikasi. Mendukung jenis kategori dan file.
 * @param string $sinkType Jenis penyimpanan vektor basis pengetahuan.
 * @return CreateIndexResponse Respons 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

/**
 * Inisialisasi 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 - Jenis data basis pengetahuan
 * @param {string} sourceType - Jenis data aplikasi. Mendukung jenis kategori dan file
 * @param {string} sinkType - Jenis penyimpanan vektor basis pengetahuan
 * @returns {Promise<bailian20231229.CreateIndexResponse>} - Respons 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>
/// Buat basis pengetahuan di Alibaba Cloud 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">Jenis data basis pengetahuan</param>
/// <param name="sourceType">Jenis data aplikasi. Mendukung jenis kategori dan file</param>
/// <param name="sinkType">Jenis penyimpanan vektor basis pengetahuan</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Dilempar ketika 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 Buat basis pengetahuan (inisialisasi) di Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//   - name (string): Nama basis pengetahuan.
//   - structureType (string): Jenis data basis pengetahuan.
//   - sourceType (string): Jenis data aplikasi. Mendukung jenis kategori dan file.
//   - sinkType (string): Jenis penyimpanan vektor basis pengetahuan.
//
// Returns:
//   - *bailian20231229.CreateIndexResponse: Respons 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": "Alibaba Cloud Model Studio Mobile Phone Knowledge Base",
  "SinkType": "BUILT_IN",
  "SourceType": "DATA_CENTER_FILE",
  "StructureType": "unstructured",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "DocumentIds": [
    "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
  ]
}

Contoh respons

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

3.2. Kirim pekerjaan pengindeksan

Setelah menginisialisasi basis pengetahuan, Anda perlu memanggil API SubmitIndexJob untuk mengirim pekerjaan indeks guna memulai pembuatan indeks untuk basis pengetahuan.

Setelah pengiriman selesai, Alibaba Cloud Model Studio mulai membangun indeks sebagai tugas asinkron. Data.Id yang dikembalikan oleh pemanggilan API ini adalah ID tugas. Pada langkah berikutnya, Anda akan menggunakan ID ini untuk mengkueri status terbaru tugas tersebut.

Penting

Python

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

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

    Returns:
        Respons 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

/**
 * Kirim pekerjaan indeks ke Alibaba Cloud Model Studio.
 *
 * @param client      Objek klien
 * @param workspaceId ID ruang kerja
 * @param indexId     ID basis pengetahuan
 * @return Objek respons 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

/**
 * Kirim 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 Respons 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

/**
 * Kirim pekerjaan indeks
 * @param {Bailian20231229Client} client - Klien
 * @param {string} workspaceId - ID ruang kerja
 * @param {string} indexId - ID basis pengetahuan
 * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} - Respons 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>
/// Kirim 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 respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Dilempar ketika 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 mengirim pekerjaan indeks.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.SubmitIndexJobResponse: Respons 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 respons

{
  "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 dieksekusi. Selama periode permintaan puncak, proses ini dapat memakan waktu beberapa jam. Panggil API GetIndexJobStatus untuk mengkueri status eksekusinya.

Ketika bidang Data.Status yang dikembalikan oleh API ini bernilai COMPLETED, basis pengetahuan telah dibuat.

Penting

Python

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

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

    Returns:
        Respons 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

/**
 * Kueri status pekerjaan indeks.
 *
 * @param client      Objek klien
 * @param workspaceId ID ruang kerja
 * @param jobId       ID pekerjaan
 * @param indexId     ID basis pengetahuan
 * @return Objek respons 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

/**
 * Kueri status pekerjaan indeks.
 *
 * @param Bailian $client Klien.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @param string $jobId ID pekerjaan.
 * @return GetIndexJobStatusResponse Respons 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

/**
 * Kueri 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>} - Respons 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>
/// Kueri 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 respons dari Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Melemparkan pengecualian 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 Kueri status pekerjaan indeks.
//
// Parameters:
//   - client (bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID pekerjaan.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Respons 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 respons

{
  "Status": "200",
  "Message": "success",
  "RequestId": "E83423B9-7D6D-5283-836B-CF7EAEXXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
        "Message": "Impor berhasil",
        "DocName": "Alibaba Cloud Model Studio Series Mobile Product Introduction",
        "Code": "FINISH"
      }
    ],
    "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

Dengan menyelesaikan langkah-langkah di atas, Anda telah berhasil membuat basis pengetahuan dan menyertakan file yang diunggah.

Cari basis pengetahuan

Saat ini, pencarian basis pengetahuan mendukung dua metode:

  • Gunakan aplikasi Alibaba Cloud Model Studio: Saat memanggil aplikasi, sertakan ID basis pengetahuan index_id melalui rag_options untuk melengkapi aplikasi Large Language Model (LLM) Anda dengan pengetahuan privat dan menyediakan informasi terkini.

  • Gunakan API Alibaba Cloud: Panggil Retrieve API untuk mencari informasi dalam basis pengetahuan tertentu dan mengembalikan segmen teks mentah.

Perbedaannya adalah metode pertama terlebih dahulu meneruskan segmen teks relevan yang diambil ke LLM yang telah Anda konfigurasi, yang kemudian menggabungkan segmen tersebut dengan kueri asli pengguna untuk menghasilkan dan mengembalikan jawaban akhir. Metode kedua langsung mengembalikan segmen teks tersebut.

Berikutnya, kami memperkenalkan metode menggunakan API Alibaba Cloud.

Untuk mencari informasi dalam basis pengetahuan tertentu dan mengembalikan segmen teks, panggil Retrieve API.

Jika hasil yang dikembalikan oleh API ini mengandung terlalu banyak informasi yang tidak relevan, atur kondisi pencarian (seperti filter tag) menggunakan SearchFilters dalam permintaan untuk mengecualikan informasi yang tidak relevan.

Penting

Python

def retrieve_index(client, workspace_id, index_id, query):
    """
    Cari informasi dalam basis pengetahuan tertentu.
        
    Parameter:
        client (bailian20231229Client): Client.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        query (str): Prompt input asli.

    Mengembalikan:
        Respons dari Alibaba Cloud 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

/**
 * Cari informasi dalam basis pengetahuan tertentu.
 *
 * @param client         Objek client (bailian20231229Client)
 * @param workspaceId    ID ruang kerja
 * @param indexId        ID basis pengetahuan
 * @param query          Kueri pencarian
 * @return               Respons dari Alibaba Cloud 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

/**
 * Cari informasi dalam basis pengetahuan tertentu.
 *
 * @param Bailian $client Objek client.
 * @param string $workspaceId ID ruang kerja
 * @param string $indexId ID basis pengetahuan
 * @param string $query Kueri pencarian
 * @return RetrieveResponse Respons dari Alibaba Cloud 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

/**
 * Cari informasi dalam basis pengetahuan tertentu
 * @param {bailian20231229.Client} client Client.
 * @param {string} workspaceId ID ruang kerja
 * @param {string} indexId ID basis pengetahuan
 * @param {string} query Kueri pencarian
 * @returns {Promise<bailian20231229.RetrieveResponse>} Respons dari Alibaba Cloud 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>
/// Cari informasi dalam basis pengetahuan tertentu.
/// </summary>
/// <param name="client">Objek client (bailian20231229Client)</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <param name="indexId">ID basis pengetahuan</param>
/// <param name="query">Kueri pencarian</param>
/// <returns>Respons dari Alibaba Cloud 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 Cari informasi dalam basis pengetahuan tertentu.
//
// Parameter:
//   - client (*bailian20231229.Client): Client.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - query (string): Kueri pencarian.
//
// Mengembalikan:
//   - *bailian20231229.RetrieveResponse: Respons dari Alibaba Cloud 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)
}

Contoh permintaan

{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "Query": "Perkenalkan ponsel Alibaba Cloud Model Studio X1."
}

Contoh respons

{
  "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_Mobile_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 Mobile Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Mobile Phone Product Introduction Alibaba Cloud Model Studio X1 — Nikmati pengalaman visual terbaik: Dilengkapi layar ultra-jernih 6,7 inci resolusi 1440 x 3200 piksel, dipadukan dengan refresh rate 120Hz, menghadirkan pengalaman visual yang mulus. Penyimpanan massal 256GB dan RAM 12GB bekerja sama untuk menangani game besar dan multitasking dengan mudah. Baterai 5000mAh memberikan daya tahan lama, dan sistem quad-kamera super sensitif menangkap setiap momen indah dalam hidup. Harga referensi: 4599–4999. Qwen Vivid 7 — Pengalaman fotografi cerdas baru: Dilengkapi layar penuh 6,5 inci resolusi 1080 x 2400 piksel, serta fungsi fotografi cerdas berbasis AI yang memastikan setiap foto menampilkan warna dan detail tingkat profesional. RAM 8GB dan penyimpanan 128GB menjamin kelancaran operasi, sedangkan baterai 4500mAh memenuhi kebutuhan harian. Unlock sidik jari di samping praktis dan aman. Harga referensi: 2999–3299. Stardust S9 Pro — Pesta visual inovatif: Desain kamera under-screen terobosan berukuran 6,9 inci resolusi 1440 x 3088 piksel menghadirkan pengalaman visual tanpa batas. Konfigurasi teratas dengan penyimpanan 512GB dan RAM 16GB, dipadukan dengan baterai 6000mAh dan teknologi pengisian cepat 100W, memastikan performa dan daya tahan berjalan beriringan, memimpin tren teknologi. Harga referensi: 5999–6499.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Mobile Phone Product Introduction",
          "_rc_t_score": 0.05215025693178177,
          "doc_name": "Alibaba Cloud Model Studio Series Mobile Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_0"
        },
        "Text": "Alibaba Cloud Model Studio Mobile Phone Product Introduction Alibaba Cloud Model Studio X1 — Nikmati pengalaman visual terbaik: Dilengkapi layar ultra-jernih 6,7 inci resolusi 1440 x 3200 piksel, dipadukan dengan refresh rate 120Hz, menghadirkan pengalaman visual yang mulus. Penyimpanan massal 256GB dan RAM 12GB bekerja sama untuk menangani game besar dan multitasking dengan mudah. Baterai 5000mAh memberikan daya tahan lama, dan sistem quad-kamera super sensitif menangkap setiap momen indah dalam hidup. Harga referensi: 4599–4999. Qwen Vivid 7 — Pengalaman fotografi cerdas baru: Dilengkapi layar penuh 6,5 inci resolusi 1080 x 2400 piksel, serta fungsi fotografi cerdas berbasis AI yang memastikan setiap foto menampilkan warna dan detail tingkat profesional. RAM 8GB dan penyimpanan 128GB menjamin kelancaran operasi, sedangkan baterai 4500mAh memenuhi kebutuhan harian. Unlock sidik jari di samping praktis dan aman. Harga referensi: 2999–3299. Stardust S9 Pro — Pesta visual inovatif: Desain kamera under-screen terobosan berukuran 6,9 inci resolusi 1440 x 3088 piksel menghadirkan pengalaman visual tanpa batas. Konfigurasi teratas dengan penyimpanan 512GB dan RAM 16GB, dipadukan dengan baterai 6000mAh dan teknologi pengisian cepat 100W, memastikan performa dan daya tahan berjalan beriringan, 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_Mobile_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 Mobile Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario. Penyimpanan 512GB, RAM 12GB, ditambah baterai 4700mAh dan kaca fleksibel ultra-tipis UTG, membuka babak baru era layar lipat. Selain itu, ponsel ini mendukung Dual SIM Dual Standby dan panggilan satelit, membantu Anda tetap terhubung di mana pun di dunia. Harga eceran referensi: 9999–10999. Setiap ponsel dibuat secara cermat sebagai karya seni teknologi di tangan Anda. Pilih mitra cerdas Anda dan buka babak baru kehidupan teknologi masa depan.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Mobile Phone Product Introduction",
          "_rc_t_score": 0.05188392847776413,
          "doc_name": "Alibaba Cloud Model Studio Series Mobile 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, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario. Penyimpanan 512GB, RAM 12GB, ditambah baterai 4700mAh dan kaca fleksibel ultra-tipis UTG, membuka babak baru era layar lipat. Selain itu, ponsel ini mendukung Dual SIM Dual Standby dan panggilan satelit, membantu Anda tetap terhubung di mana pun di dunia. Harga eceran referensi: 9999–10999. Setiap ponsel dibuat secara cermat sebagai karya seni teknologi di tangan Anda. Pilih mitra cerdas Anda dan buka 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_Mobile_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 Mobile Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Konfigurasi teratas dengan penyimpanan 512GB dan RAM 16GB, dipadukan dengan baterai 6000mAh dan teknologi pengisian cepat 100W, memastikan performa dan daya tahan berjalan beriringan, memimpin tren teknologi. Harga referensi: 5999–6499. Alibaba Cloud Model Studio Ace Ultra — Pilihan gamer: Dilengkapi layar 6,67 inci resolusi 1080 x 2400 piksel, RAM internal 10GB dan penyimpanan 256GB, menjamin kelancaran bermain game. Baterai 5500mAh dipadukan dengan sistem pendingin cair menjaga suhu tetap dingin selama sesi gaming panjang. Speaker ganda high-dynamic dan efek suara imersif meningkatkan pengalaman bermain game. Harga referensi: 3999–4299. Alibaba Cloud Model Studio Zephyr Z9 — Seni portabilitas tipis dan ringan: Desain ringan berlayar 6,4 inci resolusi 1080 x 2340 piksel, dipadukan dengan penyimpanan 128GB dan RAM 6GB, menangani penggunaan harian dengan mudah. Baterai 4000mAh memastikan penggunaan seharian tanpa khawatir, dan lensa zoom digital 30x menangkap detail jarak jauh. Tipis namun tangguh. Harga referensi: 2499–2799. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Mobile Phone Product Introduction",
          "_rc_t_score": 0.05158032476902008,
          "doc_name": "Alibaba Cloud Model Studio Series Mobile Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_1"
        },
        "Text": "Konfigurasi teratas dengan penyimpanan 512GB dan RAM 16GB, dipadukan dengan baterai 6000mAh dan teknologi pengisian cepat 100W, memastikan performa dan daya tahan berjalan beriringan, memimpin tren teknologi. Harga referensi: 5999–6499. Alibaba Cloud Model Studio Ace Ultra — Pilihan gamer: Dilengkapi layar 6,67 inci resolusi 1080 x 2400 piksel, RAM internal 10GB dan penyimpanan 256GB, menjamin kelancaran bermain game. Baterai 5500mAh dipadukan dengan sistem pendingin cair menjaga suhu tetap dingin selama sesi gaming panjang. Speaker ganda high-dynamic dan efek suara imersif meningkatkan pengalaman bermain game. Harga referensi: 3999–4299. Alibaba Cloud Model Studio Zephyr Z9 — Seni portabilitas tipis dan ringan: Desain ringan berlayar 6,4 inci resolusi 1080 x 2340 piksel, dipadukan dengan penyimpanan 128GB dan RAM 6GB, menangani penggunaan harian dengan mudah. Baterai 4000mAh memastikan penggunaan seharian tanpa khawatir, dan lensa zoom digital 30x menangkap detail jarak jauh. Tipis namun tangguh. Harga referensi: 2499–2799. Alibaba Cloud Model Studio Flex Fold+ — Era baru layar lipat: Menggabungkan inovasi dan kemewahan, layar utama berukuran 7,6 inci resolusi 1800 x 2400 piksel dan layar eksternal 4,7 inci resolusi 1080 x 2400 piksel, dengan desain free-stop multi-sudut untuk memenuhi berbagai kebutuhan skenario."
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Perbarui basis pengetahuan

Contoh ini memandu Anda melalui pembaruan basis pengetahuan berbasis pencarian dokumen. Semua aplikasi yang mereferensikan basis pengetahuan ini akan mencerminkan pembaruan Anda secara real time (konten baru akan tersedia untuk pencarian dan pengambilan, sedangkan konten yang dihapus tidak lagi tersedia).

Basis pengetahuan berbasis kueri data dan tanya jawab gambar tidak mendukung pembaruan melalui API. Untuk petunjuk pembaruan, lihat Basis Pengetahuan: Perbarui basis pengetahuan.
  • Cara melakukan pembaruan inkremental pada basis pengetahuan: Ikuti tiga langkah berikut (unggah file yang diperbarui, tambahkan file tersebut ke basis pengetahuan, lalu hapus file lama). Tidak ada metode lain yang tersedia saat ini.

  • Cara melakukan pembaruan penuh pada basis pengetahuan: Untuk semua file dalam basis pengetahuan, lakukan tiga langkah berikut pada setiap file untuk menyelesaikan pembaruan.

  • Cara memperbarui/menyinkronkan basis pengetahuan secara otomatis: Lihat Cara memperbarui/menyinkronkan basis pengetahuan secara otomatis.

  • Apakah ada batas jumlah file dalam satu pembaruan: Kami menyarankan tidak lebih dari 10.000 file. Jika tidak, basis pengetahuan mungkin tidak diperbarui dengan benar.

1. Unggah file yang diperbarui

Ikuti Langkah 2 dalam Membuat basis pengetahuan untuk mengunggah file yang diperbarui ke ruang kerja tempat basis pengetahuan berada.

Anda harus meminta lease unggah file baru untuk menghasilkan serangkaian parameter unggah baru bagi file yang diperbarui.

2. Tambahkan file ke basis pengetahuan

2.1. Kirim pekerjaan penambahan dokumen

Setelah file yang diunggah selesai diurai, panggil API SubmitIndexAddDocumentsJob untuk menambahkan file baru ke basis pengetahuan dan membangun ulang indeks basis pengetahuan.

Setelah dikirim, Alibaba Cloud Model Studio mulai membangun ulang basis pengetahuan sebagai tugas asinkron. Data.Id yang dikembalikan oleh API ini adalah ID pekerjaan yang sesuai. Pada langkah berikutnya, Anda akan menggunakan ID ini untuk menanyakan status terbaru dari tugas tersebut.

Penting
  • Setelah pemanggilan API SubmitIndexAddDocumentsJob berhasil, tugas akan berjalan selama beberapa waktu. Tanyakan status terbaru tugas tersebut menggunakan job_id. Jangan mengirim ulang sebelum tugas selesai.

Penting

Python

def submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type):
    """
    Tambahkan dokumen yang telah diurai ke basis pengetahuan berbasis pencarian dokumen.

    Parameters:
        client (bailian20231229Client): Client.
        workspace_id (str): Workspace ID.
        index_id (str): Knowledge base ID.
        file_id (str): File ID.
        source_type(str): Data type.

    Returns:
        Response from Alibaba Cloud 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

/**
 * Tambahkan dokumen yang telah diurai ke basis pengetahuan berbasis pencarian dokumen
 *
 * @param client      Client
 * @param workspaceId Workspace ID
 * @param indexId     Knowledge base ID
 * @param fileId      File ID
 * @param sourceType  Data type
 * @return Response from Alibaba Cloud 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

/**
 * Tambahkan dokumen yang telah diurai ke basis pengetahuan berbasis pencarian dokumen
 *
 * @param Bailian $client Client object
 * @param string $workspaceId Workspace ID
 * @param string $indexId Knowledge base ID
 * @param string $fileId File ID
 * @param string $sourceType Data type
 * @return SubmitIndexAddDocumentsJobResponse Response from Alibaba Cloud 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

/**
 * Kirim pekerjaan penambahan dokumen
 * @param {Bailian20231229Client} client - Client
 * @param {string} workspaceId - Workspace ID
 * @param {string} indexId - Knowledge base ID
 * @param {string} fileId - File ID
 * @param {string} sourceType - Data type
 * @returns {Promise<bailian20231229.SubmitIndexAddDocumentsJobResponse>} - Response from Alibaba Cloud 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>
/// Tambahkan dokumen yang telah diurai ke basis pengetahuan berbasis pencarian dokumen
/// </summary>
/// <param name="client">Client</param>
/// <param name="workspaceId">Workspace ID</param>
/// <param name="indexId">Knowledge base ID</param>
/// <param name="fileId">File ID</param>
/// <param name="sourceType">Data type</param>
/// <returns>Response from Alibaba Cloud 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 Tambahkan dokumen yang telah diurai ke basis pengetahuan berbasis pencarian dokumen.
//
// Parameters:
//   - client (bailian20231229.Client): Client.
//   - workspaceId (string): Workspace ID.
//   - indexId (string): Knowledge base ID.
//   - fileId (string): File ID.
//   - sourceType (string): Data type.
//
// Returns:
//   - *bailian20231229.SubmitIndexAddDocumentsJobResponse: Response from Alibaba Cloud Model Studio.
//   - error: Error message.
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 respons

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

2.2. Tunggu hingga pekerjaan penambahan dokumen selesai

Pekerjaan pengindeksan memerlukan waktu untuk dieksekusi. Selama periode permintaan puncak, proses ini dapat memakan waktu beberapa jam. Panggil API GetIndexJobStatus untuk menanyakan status eksekusi.

Ketika bidang Data.Status yang dikembalikan oleh API ini bernilai COMPLETED, semua file yang diperbarui dalam operasi ini telah berhasil ditambahkan ke basis pengetahuan.

Daftar file Documents yang dikembalikan oleh API ini mencakup semua file yang ditambahkan dalam operasi ini (diidentifikasi secara unik oleh job_id yang Anda berikan).

Penting

Python

def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    Tanyakan status pekerjaan pengindeksan.

    Parameters:
        client (bailian20231229Client): Client.
        workspace_id (str): Workspace ID.
        index_id (str): Knowledge base ID.
        job_id (str): Job ID.

    Returns:
        Response from 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

/**
 * Tanyakan status pekerjaan pengindeksan.
 *
 * @param client      Client object
 * @param workspaceId Workspace ID
 * @param jobId       Job ID
 * @param indexId     Knowledge base ID
 * @return Response from 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

/**
 * Tanyakan status pekerjaan pengindeksan.
 *
 * @param Bailian $client Client.
 * @param string $workspaceId Workspace ID.
 * @param string $indexId Knowledge base ID.
 * @param string $jobId Job ID.
 * @return GetIndexJobStatusResponse Response from 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

/**
 * Tanyakan status pekerjaan pengindeksan
 * @param {Bailian20231229Client} client - Client
 * @param {string} workspaceId - Workspace ID
 * @param {string} jobId - Job ID
 * @param {string} indexId - Knowledge base ID
 * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - Response from Alibaba Cloud 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>
/// Tanyakan status pekerjaan pengindeksan.
/// </summary>
/// <param name="client">Client object</param>
/// <param name="workspaceId">Workspace ID</param>
/// <param name="jobId">Job ID</param>
/// <param name="indexId">Knowledge base ID</param>
/// <returns>Response from Alibaba Cloud Model Studio</returns>
/// <exception cref="Exception">Thrown when an error occurs during the call</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 Tanyakan status pekerjaan pengindeksan.
//
// Parameters:
//   - client (bailian20231229.Client): Client.
//   - workspaceId (string): Workspace ID.
//   - jobId (string): Job ID.
//   - indexId (string): Knowledge base ID.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Response from Alibaba Cloud Model Studio.
//   - error: Error message.
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 respons

{
  "Status": 200,
  "Message": "success",
  "RequestId": "7F727D58-D90E-51E7-B56E-985A42XXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_247a2fd456a349ee87d071404840109b_10xxxxxx",
        "Message": "Import successful",
        "DocName": "Alibaba Cloud Model Studio Series Mobile Phone Product Introduction",
        "Code": "FINISH"
      }
    ],
    "JobId": "76f243b9ee534d59a61f156ff0xxxxxx"
  },
  "Code": "Success",
  "Success": true
}

3. Hapus file lama

Akhirnya, untuk menghapus permanen versi lama file dari basis pengetahuan tertentu (agar tidak terjadi pengambilan informasi lama yang salah), panggil API DeleteIndexDocument.

  • file_id: Masukkan FileId dari versi lama file tersebut.

Catatan

Anda hanya dapat menghapus file dalam basis pengetahuan dengan status gagal impor (INSERT_ERROR) atau impor berhasil (FINISH). Untuk menanyakan status file dalam basis pengetahuan, panggil API ListIndexDocuments.

Penting

Python

def delete_index_document(client, workspace_id, index_id, file_id):
    """
    Hapus permanen satu atau beberapa file dari basis pengetahuan berbasis pencarian dokumen tertentu.

    Parameters:
        client (bailian20231229Client): Client.
        workspace_id (str): Workspace ID.
        index_id (str): Knowledge base ID.
        file_id (str): File ID.

    Returns:
        Response from Alibaba Cloud 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

/**
 * Hapus permanen satu atau beberapa file dari basis pengetahuan berbasis pencarian dokumen tertentu
 *
 * @param client      Client
 * @param workspaceId Workspace ID
 * @param indexId     Knowledge base ID
 * @param fileId      File ID
 * @return Response from Alibaba Cloud 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

/**
 * Hapus permanen file dari basis pengetahuan berbasis pencarian dokumen tertentu
 *
 * @param Bailian $client Client object
 * @param string $workspaceId Workspace ID
 * @param string $indexId Knowledge base ID
 * @param string $fileId File ID
 * @return mixed Response from Alibaba Cloud 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

/**
 * Hapus file lama
 * @param {Bailian20231229Client} client - Client
 * @param {string} workspaceId - Workspace ID
 * @param {string} indexId - Knowledge base ID
 * @param {string} fileId - File ID
 * @returns {Promise<bailian20231229.DeleteIndexDocumentResponse>} - Response from Alibaba Cloud 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>
/// Hapus permanen satu atau beberapa file dari basis pengetahuan berbasis pencarian dokumen tertentu
/// </summary>
/// <param name="client">Client</param>
/// <param name="workspaceId">Workspace ID</param>
/// <param name="indexId">Knowledge base ID</param>
/// <param name="fileId">File ID</param>
/// <returns>Response from Alibaba Cloud 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 Hapus permanen satu atau beberapa file dari basis pengetahuan berbasis pencarian dokumen tertentu.
//
// Parameters:
//   - client (bailian20231229.Client): Client.
//   - workspaceId (string): Workspace ID.
//   - indexId (string): Knowledge base ID.
//   - fileId (string): File ID.
//
// Returns:
//   - *bailian20231229.DeleteIndexDocumentResponse: Response from Alibaba Cloud Model Studio.
//   - error: Error message.
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 respons

{
  "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 API. Silakan gunakan Konsol Alibaba Cloud Model Studio.

Menampilkan basis pengetahuan

Untuk menampilkan informasi satu atau beberapa basis pengetahuan dalam ruang kerja tertentu, panggil API ListIndices.

Penting

Python

def list_indices(client, workspace_id):
    """
    Mendapatkan detail satu atau beberapa basis pengetahuan dalam ruang kerja tertentu.

    Parameter:
        client (bailian20231229Client): Client.
        workspace_id (str): ID ruang kerja.

    Mengembalikan:
        Respons dari Alibaba Cloud 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 beberapa basis pengetahuan dalam ruang kerja tertentu
 *
 * @param client      Client
 * @param workspaceId ID ruang kerja
 * @return Respons dari Alibaba Cloud Model Studio
 */
public ListIndicesResponse listIndices(com.aliyun.bailian20231229.Client client, String workspaceId) throws Exception {
    Map<String, String> headers = new 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 beberapa basis pengetahuan dalam ruang kerja tertentu
 *
 * @param Bailian $client Objek client
 * @param string $workspaceId ID ruang kerja
 * @return ListIndicesResponse Respons dari Alibaba Cloud 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 beberapa basis pengetahuan dalam ruang kerja tertentu
 * @param {bailian20231229.Client} client Client.
 * @param {string} workspaceId ID ruang kerja
 * @returns {Promise<bailian20231229.ListIndicesResponse>} Respons dari Alibaba Cloud 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 beberapa basis pengetahuan dalam ruang kerja tertentu.
/// </summary>
/// <param name="client">Client</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
public 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);
}

Go

// listIndices Mendapatkan detail satu atau beberapa basis pengetahuan dalam ruang kerja tertentu.
//
// Parameter:
//   - client      *bailian20231229.Client: Client.
//   - workspaceId string: ID ruang kerja.
//
// Mengembalikan:
//   - *bailian20231229.ListIndicesResponse: Respons dari Alibaba Cloud 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)
}

Contoh permintaan

{
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}

Contoh respons

{
  "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 Mobile Phone Knowledge Base",
        "ChunkSize": 500,
        "EmbeddingModelName": "text-embedding-v2",
        "RerankMinScore": 0.01,
        "Id": "mymxbdxxxx",
        "SinkType": "BUILT_IN",
        "Separator": " |,|,|。|?|!|\n|\\?|\\!"
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Menghapus basis pengetahuan

Untuk menghapus basis pengetahuan secara permanen, panggil API DeleteIndex. Sebelum menghapus, putuskan tautan semua aplikasi Alibaba Cloud Model Studio yang terkait (hanya dapat dilakukan melalui Konsol Alibaba Cloud Model Studio). Jika tidak, penghapusan akan gagal.

Catatan: Operasi ini tidak akan menghapus file yang telah Anda tambahkan ke kategori.

Penting

Python

def delete_index(client, workspace_id, index_id):
    """
    Menghapus basis pengetahuan tertentu secara permanen.

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

    Mengembalikan:
        Respons dari Alibaba Cloud 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 tertentu secara permanen
 *
 * @param client      Client
 * @param workspaceId ID ruang kerja
 * @param indexId     ID basis pengetahuan
 * @return Respons dari Alibaba Cloud Model Studio
 */
public DeleteIndexResponse deleteIndex(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId) throws Exception {
    Map<String, String> headers = new 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 tertentu secara permanen
 *
 * @param Bailian $client Objek client
 * @param string $workspaceId ID ruang kerja
 * @param string $indexId ID basis pengetahuan
 * @return mixed Respons dari Alibaba Cloud 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 tertentu secara permanen
 * @param {bailian20231229.Client} client Client.
 * @param {string} workspaceId ID ruang kerja
 * @param {string} indexId ID basis pengetahuan
 * @returns {Promise<bailian20231229.DeleteIndexResponse>} Respons dari Alibaba Cloud 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 tertentu secara permanen.
/// </summary>
/// <param name="client">Client</param>
/// <param name="workspaceId">ID ruang kerja</param>
/// <param name="indexId">ID basis pengetahuan</param>
/// <returns>Respons dari Alibaba Cloud Model Studio</returns>
public 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);
}

Go

// deleteIndex Menghapus basis pengetahuan tertentu secara permanen.
//
// Parameter:
//   - client      *bailian20231229.Client: Client.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Mengembalikan:
//   - *bailian20231229.DeleteIndexResponse: Respons dari Alibaba Cloud 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)

}

Contoh permintaan

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

Contoh respons

{
  "Status": "200",
  "Message": "success",
  "RequestId": "118CB681-75AA-583B-8D84-25440CXXXXXX",
  "Code": "Success",
  "Success": "true"
}

Referensi API

Lihat API Directory (Knowledge Base) untuk daftar terbaru dan lengkap API knowledge base beserta parameter input/output-nya.

FAQ

  1. Bagaimana cara memperbarui/menyinkronkan basis pengetahuan secara otomatis?

    Basis pengetahuan berbasis pencarian dokumen

    Anda dapat mencapai hal ini dengan mengintegrasikan Alibaba Cloud Object Storage Service (OSS), Function Compute (FC), dan API basis pengetahuan Alibaba Cloud Model Studio. Ikuti langkah-langkah sederhana berikut:

    1. Create a bucket: Buka Konsol OSS dan buat bucket OSS untuk menyimpan file asli Anda.

    2. Create a knowledge base: Buat basis pengetahuan berbasis pencarian dokumen untuk menyimpan konten pengetahuan pribadi Anda.

    3. Create a user-defined function: Buka Konsol FC dan buat fungsi untuk menangani event perubahan file (seperti file baru, penghapusan, dll.). Untuk detailnya, lihat Create a function. Fungsi-fungsi ini memanggil API Update a knowledge base yang disebutkan di atas untuk menyinkronkan perubahan file dari OSS ke basis pengetahuan yang telah dibuat.

    4. Create an OSS trigger: Di FC, kaitkan OSS trigger dengan fungsi user-defined yang dibuat pada langkah sebelumnya. Ketika event perubahan file tertangkap (misalnya file baru diunggah ke OSS), trigger yang sesuai akan diaktifkan, yang kemudian memicu FC untuk menjalankan fungsi tersebut. Untuk detailnya, lihat Triggers.

    Basis pengetahuan kueri data/Q&A gambar

    Tidak didukung.

  1. Mengapa basis pengetahuan baru saya kosong?

    Hal ini biasanya terjadi karena langkah Submit indexing job tidak dijalankan atau gagal. Jika Anda memanggil API CreateIndex tetapi gagal memanggil API SubmitIndexJob, Anda akan mendapatkan basis pengetahuan yang kosong. Dalam kasus ini, cukup jalankan ulang langkah Submit indexing job dan tunggu hingga pekerjaan pengindeksan selesai.

  1. Apa yang harus saya lakukan jika mengalami error "Access your uploaded file failed. Please check if your upload action was successful"?

    Hal ini biasanya terjadi karena langkah Upload files to temporary storage tidak dijalankan atau gagal. Setelah memastikan langkah tersebut telah berhasil dijalankan, panggil API AddFile.

  1. Apa yang harus saya lakukan jika mengalami error "Access denied: Either you are not authorized to access this workspace, or the workspace does not exist"?

    Hal ini biasanya terjadi karena:

    • Alamat layanan (endpoint) yang Anda minta salah: Untuk akses jaringan publik, jika Anda adalah pengguna website China, Anda harus mengakses endpoint di Wilayah Beijing (untuk pengguna cloud publik). Jika Anda adalah pengguna website internasional, Anda harus mengakses endpoint di Wilayah Singapura. Jika Anda menggunakan fitur online debugging, pastikan Anda telah memilih alamat layanan yang benar (seperti yang ditunjukkan di bawah).

      image

    • WorkspaceId yang Anda berikan salah, atau Anda bukan anggota ruang kerja tersebut: Pastikan WorkspaceId benar dan Anda merupakan anggota ruang kerja tersebut sebelum memanggil API. Cara ditambahkan sebagai anggota ruang kerja tertentu

  1. Apa yang harus saya lakukan jika mengalami error "Specified access key is not found or invalid"?

    Hal ini biasanya terjadi karena access_key_id atau access_key_secret yang Anda berikan salah, atau access_key_id telah dinonaktifkan. Pastikan access_key_id benar dan tidak dinonaktifkan sebelum memanggil API.

Penagihan

  • Semua fitur basis pengetahuan dan panggilan API gratis. Untuk detailnya, lihat Basis Pengetahuan: Penagihan.

  • Ruang penyimpanan untuk data yang diimpor ke Model Studio, seperti file, disediakan secara gratis.

Kode error

Jika panggilan API dalam topik ini gagal dan Anda menerima pesan error, lihat Error Center untuk solusinya.