All Products
Search
Document Center

Alibaba Cloud Model Studio:API Basis Pengetahuan

Last Updated:Apr 29, 2026

Alibaba Cloud Model Studio menyediakan API terbuka yang memungkinkan Anda mengintegrasikannya dengan sistem bisnis yang sudah ada, mengotomatiskan operasi, serta memenuhi kebutuhan pengambilan (retrieval) yang kompleks.

Prasyarat

  1. Untuk mengelola basis pengetahuan melalui API, Pengguna RAM harus memiliki izin API (kebijakan AliyunBailianDataFullAccess) dan bergabung ke ruang kerja. Persyaratan ini tidak berlaku untuk Akun Alibaba Cloud.

    Pengguna RAM hanya dapat mengelola basis pengetahuan di ruang kerja tempat mereka bergabung. Akun Alibaba Cloud dapat mengelola basis pengetahuan di semua ruang kerja.
  2. Instal versi terbaru dari Alibaba Cloud Model Studio SDK untuk memanggil API basis pengetahuan. Untuk petunjuk instalasi, lihat Referensi Pengembangan SDK Alibaba Cloud.

    Jika SDK tidak memenuhi kebutuhan Anda, Anda dapat memanggil API basis pengetahuan melalui permintaan HTTP menggunakan mekanisme tanda tangan. Untuk detail koneksi, lihat Ikhtisar API.
  3. Dapatkan ID AccessKey dan Secret AccessKey, serta ID ruang kerja. Konfigurasikan ketiganya sebagai variabel lingkungan sistem untuk menjalankan kode contoh. Contoh berikut menunjukkan cara mengatur variabel tersebut di Linux:

    Jika Anda menggunakan IDE atau plugin 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='Your AccessKey ID'
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET='Your AccessKey Secret'
    export WORKSPACE_ID='Your Alibaba Cloud Model Studio workspace ID'
  4. Siapkan dokumen pengetahuan contoh Alibaba Cloud Model Studio Phone Introduction.docx untuk membuat basis pengetahuan.

Kode contoh

Buat basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, lengkapi prasyarat dan pastikan pengguna RAM memiliki kebijakan AliyunBailianDataFullAccess.

  • Jika Anda menggunakan IDE atau plugin pengembangan lainnya, atur 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 dalam lingkungan produksi.
import hashlib
import os
import time

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


def check_environment_variables():
    """Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud AccessKey ID',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud AccessKey Secret',
        'WORKSPACE_ID': 'Alibaba Cloud Model Studio workspace ID'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Silakan atur variabel lingkungan {var} ({description}).")
    
    return len(missing_vars) == 0


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

    Args:
        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 menghemat memori saat memproses 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:
    """
    Mengembalikan ukuran file dalam byte.
    Args:
        file_path (str): Jalur lokal file.
    Returns:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


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

    Returns:
        bailian20231229Client: Klien yang telah dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    # Titik akhir ini untuk wilayah Asia Pasifik SE 1 (Singapura). Ubah jika Anda menggunakan wilayah berbeda.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


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

    Args:
        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 layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.ApplyFileUploadLeaseRequest(
        file_name=file_name,
        md_5=file_md5,
        size_in_bytes=file_size,
    )
    runtime = util_models.RuntimeOptions()
    return client.apply_file_upload_lease_with_options(category_id, workspace_id, request, headers, runtime)


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


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

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

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


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

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

    Returns:
        Respons dari layanan 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):
    """
    Membuat basis pengetahuan (menginisialisasi indeks) dalam layanan Model Studio.

    Args:
        client (bailian20231229Client): Klien.
        workspace_id (str): ID ruang kerja.
        file_id (str): ID file.
        name (str): Nama basis pengetahuan.
        structure_type (str): Tipe data basis pengetahuan.
        source_type (str): Tipe sumber data. Misalnya, skrip menggunakan 'DATA_CENTER_FILE'.
        sink_type (str): Tipe penyimpanan vektor untuk basis pengetahuan.

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


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

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

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


# Dapatkan status tugas pengindeksan.
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Menanyakan status tugas pengindeksan.

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

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


def create_knowledge_base(
        file_path: str,
        workspace_id: str,
        name: str
):
    """
    Membuat basis pengetahuan di Model Studio.
    Args:
        file_path (str): Jalur lokal file.
        workspace_id (str): ID ruang kerja.
        name (str): Nama basis pengetahuan.
    Returns:
        str atau None: ID basis pengetahuan jika berhasil, atau None jika gagal.
    """
    # Atur nilai default.
    category_id = 'default'
    parser = 'DASHSCOPE_DOCMIND'
    source_type = 'DATA_CENTER_FILE'
    structure_type = 'unstructured'
    sink_type = 'DEFAULT'
    try:
        # Langkah 1: Inisialisasi klien.
        print("Langkah 1: Menginisialisasi klien...")
        client = create_client()
        # Langkah 2: Siapkan informasi file.
        print("Langkah 2: Menyiapkan informasi file...")
        file_name = os.path.basename(file_path)
        file_md5 = calculate_md5(file_path)
        file_size = get_file_size(file_path)
        # Langkah 3: Meminta sewa unggah.
        print("Langkah 3: Meminta sewa unggah dari 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: Mengunggah file ke Model Studio...")
        upload_file(upload_url, upload_headers, file_path)
        # Langkah 5: Tambahkan file ke server.
        print("Langkah 5: Menambahkan file ke 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: Memeriksa status file di 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("File berhasil diparsing!")
                break
            else:
                print(f"Status file tidak dikenal: {status}. Harap hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Inisialisasi basis pengetahuan.
        print("Langkah 7: Menginisialisasi basis pengetahuan di 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 tugas pengindeksan.
        print("Langkah 8: Mengirimkan tugas pengindeksan ke Model Studio...")
        submit_response = submit_index(client, workspace_id, index_id)
        job_id = submit_response.body.data.id
        # Langkah 9: Dapatkan status tugas pengindeksan.
        print("Langkah 9: Mendapatkan status tugas pengindeksan dari Model Studio...")
        while True:
            get_index_job_status_response = get_index_job_status(client, workspace_id, job_id, index_id)
            status = get_index_job_status_response.body.data.status
            print(f"Status tugas pengindeksan saat ini: {status}")
            if status == 'COMPLETED':
                break
            time.sleep(5)
        print("Basis pengetahuan 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("Pemeriksaan variabel lingkungan gagal.")
        return
    file_path = input("Masukkan jalur lokal file yang akan diunggah (misalnya, /path/to/file.docx): ")
    kb_name = input("Masukkan nama untuk basis pengetahuan Anda: ")
    workspace_id = os.environ.get('WORKSPACE_ID')
    create_knowledge_base(file_path, workspace_id, kb_name)


if __name__ == '__main__':
    main()

Java

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

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

public class KnowledgeBaseCreate {

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

        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: Atur variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

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

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

    /**
     * Menginisialisasi klien.
     *
     * @return Objek klien yang 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"));
        // Titik akhir berikut adalah titik akhir cloud publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Meminta sewa unggah file.
     *
     * @param client      Objek klien.
     * @param categoryId  ID kategori.
     * @param fileName    Nama file.
     * @param fileMd5     Hash MD5 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;
    }

    /**
     * Mengunggah file ke penyimpanan sementara.
     *
     * @param preSignedUrl URL dari sewa unggah.
     * @param headers      Header permintaan untuk unggahan.
     * @param filePath     Jalur lokal file.
     * @throws Exception jika terjadi kesalahan.
     */
    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);

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

            // Baca dan unggah file dalam potongan.
            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("Unggahan gagal: " + responseCode);
            }
        }
    }

    /**
     * Menambahkan file ke kategori.
     *
     * @param client      Objek klien.
     * @param leaseId     ID sewa.
     * @param parser      Parser file.
     * @param categoryId  ID kategori.
     * @param workspaceId ID ruang kerja.
     * @return Respons dari layanan 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);
    }

    /**
     * Mendapatkan informasi tentang file.
     *
     * @param client      Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param fileId      ID file.
     * @return Respons dari layanan 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);
    }

    /**
     * Membuat basis pengetahuan (menginisialisasi indeks) di Alibaba Cloud Model Studio.
     *
     * @param client        Objek klien.
     * @param workspaceId   ID ruang kerja.
     * @param fileId        ID file.
     * @param name          Nama basis pengetahuan.
     * @param structureType Struktur data basis pengetahuan.
     * @param sourceType    Tipe sumber data. Tipe yang didukung adalah kategori dan file.
     * @param sinkType      Tipe penyimpanan vektor untuk basis pengetahuan.
     * @return Respons dari layanan 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);
    }

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

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

    /**
     * Membuat basis pengetahuan di Alibaba Cloud Model Studio.
     *
     * @param filePath    Jalur lokal file.
     * @param workspaceId ID ruang kerja.
     * @param name        Nama basis pengetahuan.
     * @return ID basis pengetahuan jika berhasil; jika tidak, null.
     */
    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 {
            // Langkah 1: Menginisialisasi klien.
            System.out.println("Langkah 1: Menginisialisasi klien.");
            com.aliyun.bailian20231229.Client client = createClient();

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

            // Langkah 3: Meminta sewa unggah dari Alibaba Cloud Model Studio.
            System.out.println("Langkah 3: Meminta 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: Mengunggah file ke Alibaba Cloud Model Studio.
            System.out.println("Langkah 4: Mengunggah file ke Alibaba Cloud Model Studio.");
            // Dependensi jackson-databind diperlukan.
            // Konversi uploadHeaders dari langkah sebelumnya ke Map (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: Menambahkan file ke server Alibaba Cloud Model Studio.
            System.out.println("Langkah 5: Menambahkan file ke server Alibaba Cloud Model Studio.");
            AddFileResponse addResponse = addFile(client, leaseId, parser, categoryId, workspaceId);
            String fileId = addResponse.getBody().getData().getFileId();

            // Langkah 6: Memeriksa status file di Alibaba Cloud Model Studio.
            System.out.println("Langkah 6: Memeriksa 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.");
                } else if (status.equals("PARSING")) {
                    System.out.println("File sedang diparsing.");
                } else if (status.equals("PARSE_SUCCESS")) {
                    System.out.println("File berhasil diparsing.");
                    break;
                } else {
                    System.out.println("Status file tidak dikenal: " + status + ". Hubungi dukungan teknis.");
                    return null;
                }
                TimeUnit.SECONDS.sleep(5);
            }

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

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

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

            System.out.println("Basis pengetahuan berhasil dibuat.");
            return indexId;

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

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

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

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

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

PHP

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

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

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

class KnowledgeBaseCreate {

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

    /**
     * Menghitung hash MD5 dari file.
     *
     * @param string $filePath Jalur lokal 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);
    }

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

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

    /**
     * Mengajukan 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 layanan.
     */
    public static function applyLease($client, $categoryId, $fileName, $fileMd5, $fileSize, $workspaceId) {
        $headers = [];
        $applyFileUploadLeaseRequest = new ApplyFileUploadLeaseRequest([
            "fileName" => $fileName,
            "md5" => $fileMd5,
            "sizeInBytes" => $fileSize
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->applyFileUploadLeaseWithOptions($categoryId, $workspaceId, $applyFileUploadLeaseRequest, $headers, $runtime);
    }

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

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

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

    /**
     * Membuat basis pengetahuan (menginisialisasi indeks).
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $fileId ID file.
     * @param string $name Nama basis pengetahuan.
     * @param string $structureType Struktur data basis pengetahuan.
     * @param string $sourceType Tipe data sumber data. Tipe kategori dan file didukung.
     * @param string $sinkType Tipe penyimpanan vektor untuk basis pengetahuan.
     * @return CreateIndexResponse Respons layanan.
     */
    public static function createIndex($client, $workspaceId, $fileId, $name, $structureType, $sourceType, $sinkType) {
        $headers = [];
        $createIndexRequest = new CreateIndexRequest([
            "structureType" => $structureType,
            "name" => $name,
            "sourceType" => $sourceType,
            "documentIds" => [
                $fileId
            ],
            "sinkType" => $sinkType
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->createIndexWithOptions($workspaceId, $createIndexRequest, $headers, $runtime);
    }

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

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

    /**
     * Membuat basis pengetahuan.
     *
     * @param string $filePath Jalur lokal file.
     * @param string $workspaceId ID ruang kerja.
     * @param string $name Nama basis pengetahuan.
     * @return string|null ID basis pengetahuan yang dibuat, atau null jika gagal.
     */
    public static function createKnowledgeBase($filePath, $workspaceId, $name) {
        // Atur 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 "Nama file: $fileName\n";
            $fileMd5 = self::calculateMd5($filePath);
            $fileSize = self::getFileSize($filePath);

            // Langkah 3: Ajukan sewa unggah.
            echo "Langkah 3: Mengajukan sewa unggah\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: Mengunggah file\n";
            self::uploadFile($uploadUrl, $uploadHeadersMap, $filePath);

            // Langkah 5: Daftarkan file ke layanan.
            echo "Langkah 5: Mendaftarkan file ke layanan\n";
            $addResponse = self::addFile($client, $leaseId, $parser, $categoryId, $workspaceId);
            $fileId = $addResponse->body->data->fileId;
            echo "ID file: $fileId\n";
            // Langkah 6: Periksa status file.
            echo "Langkah 6: Memeriksa status file\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 "File berhasil diparsing.\n";
                    break;
                } else {
                    echo "Status file tidak dikenal: $status. Hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

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

            // Langkah 8: Kirim tugas pengindeksan.
            echo "Langkah 8: Mengirimkan tugas pengindeksan\n";
            $submitResponse = self::submitIndex($client, $workspaceId, $indexId);
            $jobId = $submitResponse->body->data->id;

            // Langkah 9: Dapatkan status tugas pengindeksan.
            echo "Langkah 9: Memeriksa status tugas pengindeksan\n";
            while (true) {
                $getIndexJobStatusResponse = self::getIndexJobStatus($client, $workspaceId, $jobId, $indexId);
                $status = $getIndexJobStatusResponse->body->data->status;
                echo "Status tugas pengindeksan saat ini: $status\n";
                if ($status == 'COMPLETED') {
                    break;
                }
                sleep(5);
            }
            echo "Basis pengetahuan 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 "Pemeriksaan variabel lingkungan gagal.\n";
            return;
        }
        $filePath = readline("Masukkan jalur lokal file yang akan diunggah (misalnya, /path/to/your/file.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";
       }
    }
}
// Mengasumsikan autoload.php berada di direktori induk file saat ini. Sesuaikan jalur sesuai struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseCreate::main(array_slice($argv, 1));

Node.js

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

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

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

class KbCreate {

  /**
   * Memeriksa apakah variabel lingkungan yang diperlukan telah diatur.
   * @returns {boolean} - True jika semua variabel lingkungan yang diperlukan telah diatur, false jika tidak.
   */
  static checkEnvironmentVariables() {
    const requiredVars = {
      'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud Access Key ID',
      'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud Access Key Secret',
      'WORKSPACE_ID': 'Alibaba Cloud Model Studio workspace ID'
    };

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

  /**
   * Menghitung hash MD5 dari file.
   * @param {string} filePath - Jalur ke file lokal.
   * @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);
    });
  }

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

  /**
   * Membuat dan mengonfigurasi klien API.
   * @returns {bailian20231229.default} Instance klien.
   */
  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 untuk cloud publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
    config.endpoint = `bailian.ap-southeast-1.aliyuncs.com`;
    return new bailian20231229.default(config);
  }

  /**
   * Meminta sewa untuk mengunggah file.
   * @param {Bailian20231229Client} client - Instance 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 yang berisi detail sewa.
   */
  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
    );
  }

  /**
   * Mengunggah file ke penyimpanan sementara.
   * @param {string} preSignedUrl - URL yang ditandatangani sebelumnya untuk unggahan.
   * @param {Object} headers - Header permintaan untuk unggahan.
   * @param {string} filePath - Jalur ke file lokal.
   */
  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(`Unggahan gagal: ${e.message}`);
    }
  }

  /**
   * Menambahkan file ke kategori.
   * @param {Bailian20231229Client} client - Instance klien.
   * @param {string} leaseId - ID sewa.
   * @param {string} parser - Parser untuk file.
   * @param {string} categoryId - ID kategori.
   * @param {string} workspaceId - ID ruang kerja.
   * @returns {Promise<bailian20231229.AddFileResponse>} - Respons yang berisi ID file.
   */
  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);
  }

  /**
   * Menanyakan status parsing file.
   * @param {Bailian20231229Client} client - Instance klien.
   * @param {string} workspaceId - ID ruang kerja.
   * @param {string} fileId - ID file.
   * @returns {Promise<bailian20231229.DescribeFileResponse>} - Respons yang berisi status file.
   */
  static async describeFile(client, workspaceId, fileId) {
    const headers = {};
    const runtime = new Util.RuntimeOptions({});
    return await client.describeFileWithOptions(workspaceId, fileId, headers, runtime);
  }

  /**
   * Menginisialisasi basis pengetahuan (indeks).
   * @param {Bailian20231229Client} client - Instance klien.
   * @param {string} workspaceId - ID ruang kerja.
   * @param {string} fileId - ID file.
   * @param {string} name - Nama basis pengetahuan.
   * @param {string} structureType - Tipe struktur data basis pengetahuan.
   * @param {string} sourceType - Tipe data sumber. Tipe kategori dan file didukung.
   * @param {string} sinkType - Tipe penyimpanan vektor untuk basis pengetahuan.
   * @returns {Promise<bailian20231229.CreateIndexResponse>} - Respons yang berisi ID indeks.
   */
  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);
  }

  /**
   * Mengirimkan tugas pengindeksan.
   * @param {Bailian20231229Client} client - Instance klien.
   * @param {string} workspaceId - ID ruang kerja.
   * @param {string} indexId - ID indeks (basis pengetahuan) yang akan diproses.
   * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} - Respons yang berisi ID tugas.
   */
  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);
  }

  /**
   * Menanyakan status tugas pengindeksan.
   * @param {Bailian20231229Client} client - Instance klien.
   * @param {string} workspaceId - ID ruang kerja.
   * @param {string} jobId - ID tugas.
   * @param {string} indexId - ID indeks (basis pengetahuan) yang akan diproses.
   * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - Respons yang berisi status tugas pengindeksan.
   */
  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);
  }

  /**
   * Membuat basis pengetahuan.
   * @param {string} filePath - Jalur ke file lokal.
   * @param {string} workspaceId - ID ruang kerja.
   * @param {string} name - Nama basis pengetahuan.
   * @returns {Promise<string | null>} - ID basis pengetahuan jika berhasil, jika tidak 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: Menginisialisasi klien.");
      const client = this.createClient();

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

      console.log("Langkah 3: Mengajukan 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: Mengunggah file ke Alibaba Cloud Model Studio");
      await this.uploadFile(uploadUrl, uploadHeaders, filePath);

      console.log("Langkah 5: Menambahkan 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: Memeriksa 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}. Harap hubungi dukungan teknis.`);
          return null;
        }
        await this.sleep(5);
      }

      console.log("Langkah 7: Menginisialisasi 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: Mengirimkan tugas pengindeksan ke Alibaba Cloud Model Studio");
      const submitRes = await this.submitIndex(client, workspaceId, indexId);
      const jobId = submitRes.body.data.id;

      console.log("Langkah 9: Memeriksa status tugas 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 tugas 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;
    }
  }

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

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

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

    try {
      const filePath = await new Promise((resolve, reject) => {
        readline.question("Masukkan jalur lokal file yang akan diunggah (misalnya, pada Linux: /path/to/Alibaba Cloud Model Studio Phone Series Introduction.docx):", (ans) => {
          ans.trim() ? resolve(ans) : reject(new Error("Jalur tidak boleh kosong."));
        });
      });
      const kbName = await new Promise((resolve, reject) => {
        readline.question("Masukkan nama untuk basis pengetahuan Anda:", (ans) => {
          ans.trim() ? resolve(ans) : reject(new Error("Nama basis pengetahuan tidak boleh kosong."));
        });
      });
      const workspaceId = process.env.WORKSPACE_ID;

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

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

C#

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

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


namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseCreate
    {
        /// <summary>
        /// Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur.
        /// </summary>
        /// <returns>Mengembalikan `true` jika semua variabel lingkungan yang diperlukan telah diatur; jika tidak, `false`.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey secret" },
                { "WORKSPACE_ID", "Alibaba Cloud Model Studio workspace ID" }
            };

            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: Silakan atur variabel lingkungan {entry.Key} ({entry.Value}).");
                }
            }

            return missingVars.Count == 0;
        }

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

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

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

        /// <summary>
        /// Meminta sewa unggah file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="categoryId">ID kategori.</param>
        /// <param name="fileName">Nama file.</param>
        /// <param name="fileMd5">Hash MD5 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 jika terjadi kesalahan selama panggilan API.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseResponse ApplyLease(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string categoryId,
            string fileName,
            string fileMd5,
            string fileSize,
            string workspaceId)
        {
            var headers = new Dictionary<string, string>() { };
            var applyFileUploadLeaseRequest = new AlibabaCloud.SDK.Bailian20231229.Models.ApplyFileUploadLeaseRequest
            {
                FileName = fileName,
                Md5 = fileMd5,
                SizeInBytes = fileSize
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.ApplyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        }

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

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

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

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

        /// <summary>
        /// Menambahkan file ke kategori.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="leaseId">ID sewa.</param>
        /// <param name="parser">Parser 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 jika terjadi kesalahan selama panggilan API.</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>
        /// Menanyakan informasi dasar 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 jika terjadi kesalahan selama panggilan API.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.DescribeFileResponse DescribeFile(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string fileId)
        {
            var headers = new Dictionary<string, string>() { };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.DescribeFileWithOptions(workspaceId, fileId, headers, runtime);
        }

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

        /// <summary>
        /// Mengirimkan tugas pengindeksan ke 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>Respons dari Alibaba Cloud Model Studio.</returns>
        /// <exception cref="Exception">Dilempar jika terjadi kesalahan selama panggilan API.</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>
        /// Menanyakan status tugas pengindeksan.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="jobId">ID tugas.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <returns>Respons dari Alibaba Cloud Model Studio.</returns>
        /// <exception cref="Exception">Dilempar jika terjadi kesalahan selama panggilan API.</exception>
        public static AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
            AlibabaCloud.SDK.Bailian20231229.Client client,
            string workspaceId,
            string jobId,
            string indexId)
        {
            var headers = new Dictionary<string, string>() { };
            var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
            {
                IndexId = indexId,
                JobId = jobId
            };
            var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
        }

        /// <summary>
        /// Membuat basis pengetahuan di Alibaba Cloud Model Studio.
        /// </summary>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="name">Nama basis pengetahuan.</param>
        /// <returns>ID basis pengetahuan yang dibuat, atau null jika operasi gagal.</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 file.");
                var fileInfo = new FileInfo(filePath);
                string fileName = fileInfo.Name;
                string fileMd5 = CalculateMD5(filePath);
                string fileSize = GetFileSize(filePath);

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

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

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

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

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

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

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

                Console.WriteLine("Langkah 9: Memeriksa status tugas pengindeksan di Alibaba Cloud Model Studio.");
                while (true)
                {
                    var getStatusResponse = GetIndexJobStatus(client, workspaceId, jobId, indexId);
                    string status = getStatusResponse.Body.Data.Status;
                    Console.WriteLine($"Status tugas pengindeksan saat ini: {status}");

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

                Console.WriteLine("Basis pengetahuan berhasil dibuat.");
                return indexId;

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

        /// <summary>
        /// Titik masuk utama untuk aplikasi.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                return;
            }

            Console.Write("Masukkan jalur lokal file yang akan diunggah (misalnya, pada Linux: /path/to/Product_Introduction_for_Model_Studio_Phone_Series.docx): ");
            string filePath = Console.ReadLine();

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

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

Go

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

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

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

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

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

	return len(missingVars) == 0
}

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

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

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

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

// CreateClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *bailian20231229.Client: 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")),
	}
	// Titik akhir berikut adalah titik akhir publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// ApplyLease meminta sewa unggah file dari layanan 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 layanan 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)
}

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

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

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

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

	if err != nil {
		return err
	}

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

	return nil
}

// AddFile menambahkan file ke kategori tertentu dalam layanan Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Respons dari layanan 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)
}

// DescribeFile mengambil informasi dasar tentang file.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: Respons dari layanan 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)
}

// CreateIndex membuat basis pengetahuan (menginisialisasi indeks) dalam layanan 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 sumber data. Mendukung tipe kategori dan file.
//   - sinkType (string): Tipe penyimpanan vektor untuk basis pengetahuan.
//
// Returns:
//   - *bailian20231229.CreateIndexResponse: Respons dari layanan 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)
}

// SubmitIndex mengirimkan tugas pengindeksan.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.SubmitIndexJobResponse: Respons dari layanan 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)
}

// GetIndexJobStatus menanyakan status tugas pengindeksan.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID tugas.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Respons dari layanan 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)
}

// CreateKnowledgeBase membuat basis pengetahuan dari file lokal.
//
// Parameters:
//   - filePath (string): Jalur lokal file.
//   - workspaceId (string): ID ruang kerja.
//   - name (string): Nama basis pengetahuan.
//
// Returns:
//   - string: ID basis pengetahuan yang dibuat.
//   - error: Pesan kesalahan.
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: Menginisialisasi klien.")
	client, err := CreateClient()
	if err != nil {
		return "", err
	}

	fmt.Println("Langkah 2: Menyiapkan 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: Meminta sewa unggah file.")
	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: Mengunggah file.")
	err = UploadFile(uploadURL, uploadHeadersMap, filePath)
	if err != nil {
		return "", err
	}

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

	fmt.Println("Langkah 6: Memeriksa status parsing file.")
	for {
		describeResponse, err := DescribeFile(client, workspaceId, fileID)
		if err != nil {
			return "", err
		}

		status := tea.StringValue(describeResponse.Body.Data.Status)
		fmt.Printf("Status file: %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("File berhasil diparsing.")
			break
		} else {
			fmt.Printf("Status file tidak dikenal: %s. Harap hubungi dukungan teknis.\n", status)
			return "", fmt.Errorf("status dokumen tidak dikenal: %s", status)
		}
		time.Sleep(5 * time.Second)
	}

	fmt.Println("Langkah 7: Membuat basis pengetahuan.")
	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: Mengirimkan tugas pengindeksan.")
	submitResponse, err := SubmitIndex(client, workspaceId, indexID)
	if err != nil {
		return "", err
	}
	jobID := tea.StringValue(submitResponse.Body.Data.Id)

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

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

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

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

func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Pemeriksaan variabel lingkungan gagal.")
		return
	}
	// Buat pembaca untuk input pengguna.
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal file yang akan diunggah (misalnya, /path/to/your/file.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 contoh ini, lengkapi prasyarat. Pengguna RAM juga harus memperoleh kebijakan AliyunBailianDataFullAccess.

  • Jika Anda menggunakan IDE atau plugin 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 dalam lingkungan produksi.
import os

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


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


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

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


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

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

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


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

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


if __name__ == '__main__':
    main()

Java

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung dalam 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 {

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

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

        return missingVars.isEmpty();
    }

    /**
     * Menginisialisasi 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"));
        // Ini adalah titik akhir cloud publik. Anda dapat mengubahnya sesuai kebutuhan.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

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

    /**
     * Menggunakan layanan 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: Membuat klien.
            System.out.println("Langkah 1: Membuat klien.");
            com.aliyun.bailian20231229.Client client = createClient();

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

            // Instal jackson-databind untuk mengonversi 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 dalam 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 {

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

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

     /**
     * Mengambil 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 Kueri pencarian.
     * @return RetrieveResponse Respons dari layanan Model Studio.
     * @throws Exception
     */
    public static function retrieveIndex($client, $workspaceId, $indexId, $query) {
        $headers = [];
        $retrieveRequest = new RetrieveRequest([
            "query" => $query,
            "indexId" => $indexId
        ]);
        $runtime = new RuntimeOptions([]);
        return $client->retrieveWithOptions($workspaceId, $retrieveRequest, $headers, $runtime);
    }

    /**
     * Menggunakan layanan 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: Membuat klien.
            echo "Langkah 1: Membuat klien.\n";
            $client = self::createClient();

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

Node.js

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung dalam 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 {

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

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

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

    /**
     * Mengambil 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 pencarian.
     * @returns {Promise<bailian20231229.RetrieveResponse>} Respons dari layanan Model Studio.
     */
    static async retrieveIndex(client, workspaceId, indexId, query) {
        const headers = {};
        const req = new bailian20231229.RetrieveRequest({
            indexId,
            query
        });
        const runtime = new Util.RuntimeOptions({});
        return await client.retrieveWithOptions(workspaceId, req, headers, runtime);
    }

    /**
     * Menggunakan layanan 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: Membuat klien.")
            const client = this.createClient();
            
            console.log("Langkah 2: Mengambil dari basis pengetahuan.")
            const indexId = await new Promise((resolve, reject) => {
                // ID basis pengetahuan adalah nilai Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat memperolehnya dari halaman basis pengetahuan di konsol Model Studio.
                readline.question("Masukkan ID basis pengetahuan: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID basis pengetahuan tidak boleh kosong."));
                });
            });
            const query = await new Promise((resolve, reject) => {
                readline.question("Masukkan kueri pencarian: ", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("Kueri pencarian tidak boleh kosong."));
                });
            });
            const workspaceId = process.env.WORKSPACE_ID;
            const resp = await this.retrieveIndex(client, workspaceId, indexId, query);
            const result = JSON.stringify(resp.body);
            console.log(result);
        } catch (err) {
            console.error(`Terjadi kesalahan: ${err.message}`);
            return;
        } finally {
            readline.close();
        }
    }
}

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

C#

// Kode contoh ini hanya untuk referensi. Jangan gunakan langsung dalam 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>
        /// Memeriksa variabel lingkungan yang diperlukan dan melaporkan yang hilang.
        /// </summary>
        /// <returns>Mengembalikan true jika semua variabel lingkungan yang diperlukan telah diatur, false jika tidak.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID Anda" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud Anda" },
                { "WORKSPACE_ID", "ID ruang kerja Model Studio Anda" }
            };

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

            return missingVars.Count == 0;
        }

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

        /// <summary>
        /// Mengambil informasi dari basis pengetahuan tertentu.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID basis pengetahuan.</param>
        /// <param name="query">Kueri pencarian.</param>
        /// <returns>Respons dari layanan Model Studio.</returns>
        /// <exception cref="Exception">Pengecualian dilempar 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>
        /// Menggunakan layanan 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: Membuat klien.
                Console.WriteLine("Langkah 1: Membuat klien.");
                AlibabaCloud.SDK.Bailian20231229.Client client = CreateClient();

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

                // Instal Newtonsoft.Json untuk mengonversi 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 dalam lingkungan produksi.
package main

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

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

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

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

	return len(missingVars) == 0
}

// createClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *bailian20231229.Client: Klien yang 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")),
	}
	// Ini adalah titik akhir cloud publik. Anda dapat mengubahnya sesuai kebutuhan.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

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

// main adalah titik masuk program.
func main() {
	if !checkEnvironmentVariables() {
		fmt.Println("Validasi variabel lingkungan gagal.")
		return
	}

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

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

Perbarui basis pengetahuan

Penting
  • Sebelum memanggil contoh ini, lengkapi prasyarat. Jika Anda menggunakan pengguna RAM, berikan kebijakan AliyunBailianDataFullAccess kepada pengguna RAM tersebut.

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

Python

# Kode contoh ini hanya untuk referensi. Jangan menggunakannya di lingkungan produksi.
import hashlib
import os
import time

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


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


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

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


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

    Args:
        file_path (str): Jalur lokal file.

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

    # Membaca file dalam mode biner.
    with open(file_path, "rb") as f:
        # Membaca file dalam chunk 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:
    """
    Mendapatkan ukuran file dalam byte.
    Args:
        file_path (str): Jalur lokal file.
    Returns:
        int: Ukuran file dalam byte.
    """
    return os.path.getsize(file_path)


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

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

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


# Mengunggah file ke penyimpanan sementara.
def upload_file(pre_signed_url, headers, file_path):
    """
    Mengunggah file ke layanan Model Studio.
    Args:
        pre_signed_url (str): URL dari sewa unggah.
        headers (dict): Header permintaan untuk 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()


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

    Args:
        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:
        Tanggapan dari layanan Model Studio.
    """
    headers = {}
    request = bailian_20231229_models.AddFileRequest(
        lease_id=lease_id,
        parser=parser,
        category_id=category_id,
    )
    runtime = util_models.RuntimeOptions()
    return client.add_file_with_options(workspace_id, request, headers, runtime)


# Menanyakan status penguraian file.
def describe_file(client, workspace_id, file_id):
    """
    Menanyakan status penguraian file.

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

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


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

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

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


# Menunggu pekerjaan penambahan dokumen selesai.
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    Menanyakan status pekerjaan indeks.

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

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


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

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

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


def update_knowledge_base(
        file_path: str,
        workspace_id: str,
        index_id: str,
        old_file_id: str
):
    """
    Memperbarui basis pengetahuan di Model Studio.
    Args:
        file_path (str): Jalur lokal file yang diperbarui.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan yang akan diperbarui.
        old_file_id (str): FileId dari file yang akan diganti.
    Returns:
        str atau None: ID basis pengetahuan jika berhasil, jika tidak maka None.
    """
    # Mengatur nilai default.
    category_id = 'default'
    parser = 'DASHSCOPE_DOCMIND'
    source_type = 'DATA_CENTER_FILE'
    try:
        # Langkah 1: Membuat klien.
        print("Langkah 1: Membuat klien.")
        client = create_client()
        # Langkah 2: Menyiapkan informasi file.
        print("Langkah 2: Menyiapkan informasi file.")
        file_name = os.path.basename(file_path)
        file_md5 = calculate_md5(file_path)
        file_size = get_file_size(file_path)
        # Langkah 3: Mengajukan sewa unggah.
        print("Langkah 3: Mengajukan sewa unggah dari 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: Mengunggah file ke penyimpanan sementara.
        print("Langkah 4: Mengunggah file ke penyimpanan sementara.")
        upload_file(upload_url, upload_headers, file_path)
        # Langkah 5: Menambahkan file ke kategori.
        print("Langkah 5: Menambahkan 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: Memeriksa status file.
        print("Langkah 6: Memeriksa status file di Model Studio.")
        while True:
            describe_response = describe_file(client, workspace_id, file_id)
            status = describe_response.body.data.status
            print(f"Status file saat ini: {status}")
            if status == 'INIT':
                print("File sedang menunggu untuk diurai. Harap tunggu...")
            elif status == 'PARSING':
                print("File sedang diurai. Harap tunggu...")
            elif status == 'PARSE_SUCCESS':
                print("Penguraian file berhasil diselesaikan.")
                break
            else:
                print(f"Status file tidak diketahui: {status}. Harap hubungi dukungan teknis.")
                return None
            time.sleep(5)
        # Langkah 7: Mengirim pekerjaan untuk menambahkan dokumen.
        print("Langkah 7: Mengirim pekerjaan untuk menambahkan dokumen.")
        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: Menunggu pekerjaan pengindeksan selesai.
        print("Langkah 8: Menunggu pekerjaan pengindeksan 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)
        # Langkah 9: Menghapus file lama.
        print("Langkah 9: Menghapus file lama.")
        delete_index_document(client, workspace_id, index_id, old_file_id)
        print("Basis pengetahuan Model Studio berhasil diperbarui.")
        return index_id
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return None


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


if __name__ == '__main__':
    main()

Java

indexId// Kode contoh ini hanya untuk referensi. Jangan menggunakannya di lingkungan produksi.
import com.aliyun.bailian20231229.models.*;
import com.aliyun.teautil.models.RuntimeOptions;
import com.fasterxml.jackson.databind.ObjectMapper;

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

public class KnowledgeBaseUpdate {

    /**
     * Memeriksa variabel lingkungan yang diperlukan dan memberikan prompt jika ada yang hilang.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah disetel, false jika tidak.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "ID AccessKey Alibaba Cloud");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Rahasia AccessKey Alibaba Cloud");
        requiredVars.put("WORKSPACE_ID", "ID ruang kerja 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();
    }

    /**
     * Membuat dan mengonfigurasi klien.
     *
     * @return 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"));
        // Berikut ini adalah titik akhir publik. Ubah agar sesuai dengan wilayah Anda.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

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

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

    /**
     * Meminta lease 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 Tanggapan yang berisi lease unggah file.
     */
    public static ApplyFileUploadLeaseResponse applyLease(com.aliyun.bailian20231229.Client client, String categoryId, String fileName, String fileMd5, String fileSize, String workspaceId) throws Exception {
        Map<String, String> headers = new HashMap<>();
        com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest applyFileUploadLeaseRequest = new com.aliyun.bailian20231229.models.ApplyFileUploadLeaseRequest();
        applyFileUploadLeaseRequest.setFileName(fileName);
        applyFileUploadLeaseRequest.setMd5(fileMd5);
        applyFileUploadLeaseRequest.setSizeInBytes(fileSize);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        ApplyFileUploadLeaseResponse applyFileUploadLeaseResponse = null;
        applyFileUploadLeaseResponse = client.applyFileUploadLeaseWithOptions(categoryId, workspaceId, applyFileUploadLeaseRequest, headers, runtime);
        return applyFileUploadLeaseResponse;
    }

    /**
     * Mengunggah file ke penyimpanan sementara.
     *
     * @param preSignedUrl URL yang ditandatangani dari lease unggah.
     * @param headers Header permintaan untuk 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);
            }
        }
    }

    /**
     * Menambahkan file ke kategori.
     *
     * @param client Objek klien.
     * @param leaseId ID lease.
     * @param parser Parser untuk file.
     * @param categoryId ID kategori.
     * @param workspaceId ID ruang kerja.
     * @return Tanggapan yang berisi ID file baru.
     */
    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);
    }

    /**
     * Mendapatkan informasi dasar file.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param fileId ID file.
     * @return Tanggapan yang berisi informasi file.
     */
    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);
    }

    /**
     * Mengirim pekerjaan untuk menambahkan dokumen ke indeks basis pengetahuan.
     *
     * @param client Klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan.
     * @param fileId ID file.
     * @param sourceType Tipe data.
     * @return Tanggapan yang berisi ID pekerjaan.
     */
    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);
    }

    /**
     * Menanyakan status pekerjaan indeks.
     *
     * @param client Objek klien.
     * @param workspaceId ID ruang kerja.
     * @param jobId ID pekerjaan.
     * @param indexId ID basis pengetahuan.
     * @return Tanggapan yang berisi status pekerjaan indeks.
     */
    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;
    }

    /**
     * Menghapus dokumen dari indeks basis pengetahuan.
     *
     * @param client Klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan.
     * @param fileId ID file.
     * @return Tanggapan dari layanan 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);
    }

    /**
     * Memperbarui basis pengetahuan dengan menggunakan layanan Alibaba Cloud Model Studio.
     *
     * @param filePath Jalur lokal file yang diperbarui.
     * @param workspaceId ID ruang kerja.
     * @param indexId ID basis pengetahuan yang akan diperbarui.
     * @param oldFileId ID file yang akan diganti.
     * @return <code data-tag="inlineCode" id="f2f7a6c754l0e">indexId

PHP

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

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

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

class KnowledgeBaseUpdate {

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

    /**
     * Menghitung hash MD5 dari file.
     *
     * @param string $filePath Jalur lokal 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);
    }

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

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

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

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

    /**
     * Menambahkan file ke kategori.
     *
     * @param Bailian $client Klien.
     * @param string $leaseId ID sewa.
     * @param string $parser Parser untuk file.
     * @param string $categoryId ID kategori.
     * @param string $workspaceId ID ruang kerja.
     * @return AddFileResponse Respons dari layanan 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);
    }

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

    /**
     * Menambahkan file yang telah diparsing ke basis pengetahuan.
     *
     * @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 Respons dari layanan 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);
    }

    /**
     * Menanyakan status tugas indeks.
     *
     * @param Bailian $client Klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $jobId ID tugas.
     * @return GetIndexJobStatusResponse Respons dari layanan 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);
    }

    /**
     * Menghapus file secara permanen dari basis pengetahuan.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @param string $indexId ID basis pengetahuan.
     * @param string $fileId ID file.
     * @return mixed Respons dari layanan 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);
    }

    /**
     * Memperbarui basis pengetahuan.
     *
     * @param string $filePath Jalur lokal 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.
     * @return string| null ID basis pengetahuan jika berhasil, atau null jika gagal.
     */
    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: Minta sewa unggah.
            echo "Langkah 3: Minta sewa unggah.\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.
            echo "Langkah 6: Periksa status file.\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 "File berhasil diparsing.\n";
                    break;
                } else {
                    echo "Status file tidak dikenal: " . $status . ". Harap hubungi dukungan teknis.\n";
                    return null;
                }
                sleep(5);
            }

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

            // Langkah 8: Tunggu hingga tugas indeks selesai.
            echo "Langkah 8: Tunggu hingga tugas indeks selesai.\n";
            while (true) {
                $jobStatusResponse = self::getIndexJobStatus($client, $workspaceId, $jobId, $indexId);
                $status = $jobStatusResponse->body->data->status;
                echo "Status tugas 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 berhasil diperbarui.\n";
            return $indexId;

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


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

        if ($result !== null) {
            echo "Basis pengetahuan berhasil diperbarui. ID: " . $result . "\n";
        } else {
            echo "Gagal memperbarui basis pengetahuan.\n";
        }
    }
}
// Skrip ini mengasumsikan autoload.php berada di direktori induk. Sesuaikan jalur untuk 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 dalam lingkungan produksi.
'use strict';

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

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

class KbUpdate {

    /**
     * Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur.
     * @returns {boolean} - Mengembalikan true jika semua variabel lingkungan yang diperlukan telah diatur; jika tidak, mengembalikan false.
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud AccessKey ID',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud AccessKey Secret',
            'WORKSPACE_ID': 'Alibaba Cloud Model Studio workspace ID'
        };

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

    /**
     * Menghitung hash MD5 dari 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);
        });
    }

    /**
     * Mendapatkan ukuran file dalam byte dan mengembalikannya 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;
        }
    }

    /**
     * Membuat dan mengonfigurasi klien.
     * @return Client
     * @throws Exception
     */
    static createClient() {
        const config = new OpenApi.Config({
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
        });
        // Titik akhir ini untuk cloud publik di wilayah Asia Pasifik SE 1 (Singapura). Ubah sesuai kebutuhan.
        config.endpoint = `bailian.ap-southeast-1.aliyuncs.com`;
        return new bailian20231229.default(config);
    }

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

    /**
     * Mengunggah file ke penyimpanan sementara.
     * @param {string} preSignedUrl - URL yang ditandatangani sebelumnya dari sewa unggah.
     * @param {Object} headers - Header permintaan untuk unggahan.
     * @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(`Unggahan gagal: ${e.message}`);
        }
    }

    /**
     * Menambahkan file ke kategori.
     * @param {Bailian20231229Client} client - Klien.
     * @param {string} leaseId - ID sewa.
     * @param {string} parser - Parser untuk file.
     * @param {string} categoryId - ID kategori.
     * @param {string} workspaceId - ID ruang kerja.
     * @returns {Promise<bailian20231229.AddFileResponse>} - Respons dari layanan 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);
    }

    /**
     * Menanyakan status parsing file.
     * @param {Bailian20231229Client} client - Klien.
     * @param {string} workspaceId - ID ruang kerja.
     * @param {string} fileId - ID file.
     * @returns {Promise<bailian20231229.DescribeFileResponse>} - Respons dari layanan 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);
    }

    /**
     * Mengirimkan tugas untuk menambahkan dokumen ke indeks.
     * @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 layanan 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);
    }

    /**
     * Menanyakan status tugas indeks.
     * @param {Bailian20231229Client} client - Klien.
     * @param {string} workspaceId - ID ruang kerja.
     * @param {string} jobId - ID tugas.
     * @param {string} indexId - ID basis pengetahuan.
     * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - Respons dari layanan 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);
    }

    /**
     * Menghapus dokumen dari indeks basis pengetahuan.
     * @param {Bailian20231229Client} client - Klien.
     * @param {string} workspaceId - ID ruang kerja.
     * @param {string} indexId - ID basis pengetahuan.
     * @param {string} fileId - ID dokumen yang akan dihapus.
     * @returns {Promise<bailian20231229.DeleteIndexDocumentResponse>} - Respons dari layanan 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);
    }

    /**
     * Memperbarui basis pengetahuan di Alibaba Cloud Model Studio.
     * @param {string} filePath - Jalur lokal ke file yang diperbarui.
     * @param {string} workspaceId - ID ruang kerja.
     * @param {string} indexId - ID basis pengetahuan yang akan diperbarui.
     * @param {string} oldFileId - ID file yang akan diganti.
     * @returns {Promise<string | null>} - ID basis pengetahuan jika berhasil; jika tidak, null.
     */
    static async updateKnowledgeBase(filePath, workspaceId, indexId, oldFileId) {
        const categoryId = 'default';
        const parser = 'DASHSCOPE_DOCMIND';
        const sourceType = 'DATA_CENTER_FILE';

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

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

            console.log("Langkah 3: Mengajukan sewa unggah file 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: Mengunggah file ke penyimpanan sementara.");
            await this.uploadFile(uploadUrl, uploadHeaders, filePath);

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

            console.log("Langkah 6: Memeriksa 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') {
                    console.log("File berhasil diparsing.");
                    break;
                } else {
                    console.error(`Status file tidak dikenal: ${status}. Harap hubungi dukungan teknis.`);
                    return null;
                }
                await this.sleep(5);
            }

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

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

            console.log("Langkah 9: Menghapus dokumen lama dari indeks.");
            await this.deleteIndexDocument(client, workspaceId, indexId, oldFileId);

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

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

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

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

        try {
            const filePath = await new Promise((resolve, reject) => {
                readline.question("Masukkan jalur lokal file yang diperbarui (misalnya, pada Linux: /home/user/Alibaba_Cloud_Model_Studio_Phone_Series_Introduction.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 operasi CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Model Studio.
                readline.question("Masukkan ID basis pengetahuan yang akan diperbarui:", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID basis pengetahuan tidak boleh kosong."));
                });
            });
            const oldFileId = await new Promise((resolve, reject) => {
                // ID file adalah FileId yang dikembalikan oleh operasi AddFile. Anda juga dapat menemukan ID file dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Model Studio.
                readline.question("Masukkan ID file yang akan diganti:", (ans) => {
                    ans.trim() ? resolve(ans) : reject(new Error("ID file tidak boleh kosong."));
                });
            });
            const workspaceId = process.env.WORKSPACE_ID;

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

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

C#

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

using Tea;
using Tea.Utils;

namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseUpdate
    {
        /// <summary>
        /// Memeriksa apakah variabel lingkungan yang diperlukan telah diatur.
        /// </summary>
        /// <returns>Mengembalikan <see langword="true"/> jika semua variabel lingkungan yang diperlukan telah diatur; jika tidak, <see langword="false"/>.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey Secret" },
                { "WORKSPACE_ID", "Alibaba Cloud Model Studio workspace ID" }
            };

            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: Silakan atur variabel lingkungan {entry.Key} ({entry.Value}).");
                }
            }

            return missingVars.Count == 0;
        }

        /// <summary>
        /// Menghitung hash MD5 dari 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>
        /// Mendapatkan ukuran file dalam byte.
        /// </summary>
        /// <param name="filePath">Jalur lokal file.</param>
        /// <returns>Ukuran file dalam byte.</returns>
        public static string GetFileSize(string filePath)
        {
            var file = new FileInfo(filePath);
            return file.Length.ToString();
        }

        /// <summary>
        /// Menginisialisasi klien.
        /// </summary>
        /// <returns>Objek klien yang telah 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 untuk wilayah Asia Pasifik SE 1 (Singapura). Anda dapat mengubahnya sesuai kebutuhan.
            config.Endpoint = "bailian.ap-southeast-1.aliyuncs.com";
            return new AlibabaCloud.SDK.Bailian20231229.Client(config);
        }

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

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

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

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

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

        /// <summary>
        /// Menambahkan 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 layanan.</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan API.</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>
        /// Mendapatkan informasi dasar file.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="fileId">ID file.</param>
        /// <returns>Respons dari layanan.</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan API.</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>
        /// Menambahkan file yang telah diparsing ke basis pengetahuan pengambilan dokumen.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID indeks.</param>
        /// <param name="fileId">ID file.</param>
        /// <param name="sourceType">Tipe sumber data.</param>
        /// <returns>Respons dari layanan.</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>
        /// Menanyakan status tugas indeks.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="jobId">ID tugas.</param>
        /// <param name="indexId">ID indeks.</param>
        /// <returns>Respons dari layanan.</returns>
        /// <exception cref="Exception">Dilempar ketika terjadi kesalahan selama panggilan API.</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>
        /// Menghapus satu atau beberapa dokumen dari indeks basis pengetahuan.
        /// </summary>
        /// <param name="client">Objek klien.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID indeks.</param>
        /// <param name="fileId">ID file.</param>
        /// <returns>Respons dari layanan.</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>
        /// Memperbarui basis pengetahuan.
        /// </summary>
        /// <param name="filePath">Jalur lokal file yang diperbarui.</param>
        /// <param name="workspaceId">ID ruang kerja.</param>
        /// <param name="indexId">ID indeks yang akan diperbarui.</param>
        /// <param name="oldFileId">ID file yang akan diganti.</param>
        /// <returns>ID indeks jika berhasil; jika tidak, <see langword="null"/>.</returns>
        public static string UpdateKnowledgeBase(string filePath, string workspaceId, string indexId, string oldFileId)
        {
            // Atur 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: Minta sewa unggah.");
                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.");
                // Pastikan paket Newtonsoft.Json telah diinstal.
                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.");
                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 menunggu parsing. Harap tunggu...");
                    }
                    else if ("PARSING".Equals(status))
                    {
                        Console.WriteLine("Parsing file sedang berlangsung. Harap tunggu...");
                    }
                    else if ("PARSE_SUCCESS".Equals(status))
                    {
                        Console.WriteLine("Parsing file selesai!");
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Status file tidak dikenal: " + status + ". Harap hubungi dukungan teknis.");
                        return null;
                    }
                    System.Threading.Thread.Sleep(5000);
                }

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

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

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

                Console.WriteLine("Basis pengetahuan berhasil diperbarui!");
                return indexId;
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
                return null;
            }
        }

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

            Console.Write("Masukkan jalur lokal file yang akan diunggah (misalnya, /path/to/YourDocument.docx): ");
            string filePath = Console.ReadLine();

            Console.Write("Masukkan ID basis pengetahuan yang akan diperbarui: "); // Ini adalah nilai `Data.Id` yang dikembalikan oleh panggilan API `CreateIndex`. Atau, Anda dapat menemukannya di halaman basis pengetahuan di konsol Alibaba Cloud Model Studio.
            string indexId = Console.ReadLine();

            Console.Write("Masukkan ID file yang akan diganti: "); // Ini adalah nilai `FileId` yang dikembalikan oleh panggilan API `AddFile`. Atau, Anda dapat menemukannya dengan mengklik ikon ID di sebelah nama file pada halaman data aplikasi di konsol Alibaba Cloud Model Studio.
            string oldFileId = Console.ReadLine();

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

Go

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

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

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

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

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

	return len(missingVars) == 0
}

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

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

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

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

// CreateClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *bailian20231229.Client: 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")),
	}
	// Contoh ini menggunakan titik akhir publik untuk wilayah Asia Pasifik SE 1 (Singapura). 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
}

// ApplyLease meminta sewa unggah file dari layanan 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 layanan 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)
}

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

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

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

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

	if err != nil {
		return err
	}

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

	return nil
}

// AddFile menambahkan file ke kategori tertentu dalam layanan Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - leaseId (string): ID sewa.
//   - parser (string): Parser untuk file.
//   - categoryId (string): ID kategori.
//   - workspaceId (string): ID ruang kerja.
//
// Returns:
//   - *bailian20231229.AddFileResponse: Respons dari layanan 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)
}

// DescribeFile mendapatkan informasi dasar file.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - fileId (string): ID file.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: Respons dari layanan 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)
}

// SubmitIndexAddDocumentsJob menambahkan file yang telah diparsing ke basis pengetahuan.
//
// 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 layanan Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func SubmitIndexAddDocumentsJob(client *bailian20231229.Client, workspaceId, indexId, fileId, sourceType string) (_result *bailian20231229.SubmitIndexAddDocumentsJobResponse, _err error) {
	headers := make(map[string]*string)
	submitIndexAddDocumentsJobRequest := &bailian20231229.SubmitIndexAddDocumentsJobRequest{
		IndexId:     tea.String(indexId),
		SourceType:  tea.String(sourceType),
		DocumentIds: []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.SubmitIndexAddDocumentsJobWithOptions(tea.String(workspaceId), submitIndexAddDocumentsJobRequest, headers, runtime)
}

// GetIndexJobStatus menanyakan status tugas indeks.
//
// Parameters:
//   - client (*bailian20231229.Client): Klien.
//   - workspaceId (string): ID ruang kerja.
//   - jobId (string): ID tugas.
//   - indexId (string): ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: Respons dari layanan 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)
}

// DeleteIndexDocument menghapus satu atau beberapa file secara permanen dari basis pengetahuan 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 layanan Alibaba Cloud Model Studio.
//   - error: Pesan kesalahan.
func DeleteIndexDocument(client *bailian20231229.Client, workspaceId, indexId, fileId string) (*bailian20231229.DeleteIndexDocumentResponse, error) {
	headers := make(map[string]*string)
	deleteIndexDocumentRequest := &bailian20231229.DeleteIndexDocumentRequest{
		IndexId:     tea.String(indexId),
		DocumentIds: []*string{tea.String(fileId)},
	}
	runtime := &util.RuntimeOptions{}
	return client.DeleteIndexDocumentWithOptions(tea.String(workspaceId), deleteIndexDocumentRequest, headers, runtime)
}

// UpdateKnowledgeBase memperbarui basis pengetahuan.
//
// Parameters:
//   - filePath (string): Jalur lokal file yang diperbarui.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan yang akan diperbarui.
//   - oldFileId (string): ID file yang akan diperbarui.
//
// Returns:
//   - string: ID basis pengetahuan jika pembaruan berhasil, atau string kosong jika tidak.
//   - error: Pesan kesalahan.
func UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId string) (_result string, _err error) {
	// Atur 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: 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 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 menunggu parsing. Harap tunggu...")
		} else if status == "PARSING" {
			fmt.Println("File sedang diparsing. Harap tunggu...")
		} else if status == "PARSE_SUCCESS" {
			fmt.Println("File berhasil diparsing.")
			break
		} else {
			fmt.Printf("Status file tidak dikenal: %s. Hubungi dukungan teknis.\n", status)
			return "", fmt.Errorf("status file tidak dikenal: %s", status)
		}
		time.Sleep(5 * time.Second)
	}

	// Kirim tugas untuk menambahkan file.
	fmt.Println("Langkah 7: Kirim tugas 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 tugas selesai.
	fmt.Println("Langkah 8: Tunggu hingga tugas 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 tugas 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 berhasil diperbarui.")
	return indexId, nil
}

func main() {
	if !CheckEnvironmentVariables() {
		fmt.Println("Pemeriksaan variabel lingkungan gagal.")
		return
	}
	// Buat pemindai untuk membaca input.
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Masukkan jalur lokal file yang diperbarui untuk diunggah (misalnya, pada sistem Linux: /path/to/product_introduction.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 operasi CreateIndex. Anda juga dapat memperoleh ID di halaman basis pengetahuan di konsol Model Studio.
	indexId, _ := reader.ReadString('\n')
	indexId = strings.TrimSpace(indexId)

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

	workspaceId := os.Getenv("WORKSPACE_ID")
	result, err := UpdateKnowledgeBase(filePath, workspaceId, indexId, oldFileId)
	if err != nil {
		fmt.Printf("Terjadi kesalahan: %v\n", err)
		return
	}

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

Kelola basis pengetahuan

Penting
  • Sebelum menjalankan contoh ini, lengkapi prasyarat. Pengguna RAM juga harus diberikan kebijakan AliyunBailianDataFullAccess.

  • Jika Anda menggunakan IDE atau plugin pengembangan lainnya, atur 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 dalam 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():
    """Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur."""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud AccessKey ID',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud AccessKey secret',
        'WORKSPACE_ID': 'Alibaba Cloud Model Studio workspace ID'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"Error: Silakan atur variabel lingkungan {var} ({description})")

    return len(missing_vars) == 0


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

    Returns:
        bailian20231229Client: Klien yang telah dikonfigurasi.
    """
    config = open_api_models.Config(
        access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
    // Titik akhir berikut untuk cloud publik di wilayah Singapura. Ubah sesuai kebutuhan.
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)


// Daftar basis pengetahuan.
def list_indices(client, workspace_id):
    """
    Menampilkan daftar basis pengetahuan dalam ruang kerja tertentu.

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

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

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

    Returns:
        Respons dari layanan 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("Pemeriksaan variabel lingkungan gagal.")
        return
    try:
        start_option = input(
            "Pilih operasi yang akan dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):")
        if start_option == '1':
            // Daftar basis pengetahuan.
            print("\nMenampilkan daftar 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 nilai `Data.Id` dari respons `CreateIndex`. Anda juga dapat memperolehnya dari halaman basis pengetahuan di konsol Model Studio.
            // Konfirmasi sebelum penghapusan.
            while True:
                confirm = input(f"Apakah Anda yakin ingin menghapus 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. Harap 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"Terjadi kesalahan: {err_info}")
        else:
            print("Opsi tidak valid. Keluar dari program.")
            return
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        return


if __name__ == '__main__':
    main()

Java

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam lingkungan 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 {

    /**
     * Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur.
     *
     * @return true jika semua variabel lingkungan yang diperlukan telah diatur, false jika tidak.
     */
    public static boolean checkEnvironmentVariables() {
        Map<String, String> requiredVars = new HashMap<>();
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID");
        requiredVars.put("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey secret");
        requiredVars.put("WORKSPACE_ID", "Alibaba Cloud Model Studio workspace ID");

        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: Silakan atur variabel lingkungan " + entry.getKey() + " (" + entry.getValue() + ")");
            }
        }

        return missingVars.isEmpty();
    }

    /**
     * Membuat dan mengonfigurasi klien.
     *
     * @return Klien yang telah 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);
        // Ini adalah titik akhir cloud publik. Ubah agar sesuai dengan wilayah Anda.
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    /**
     * Menampilkan daftar basis pengetahuan dalam ruang kerja tertentu.
     *
     * @param client      Klien.
     * @param workspaceId ID ruang kerja.
     * @return Respons dari layanan 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);
    }

    /**
     * Menghapus secara permanen basis pengetahuan yang ditentukan.
     *
     * @param client      Klien.
     * @param workspaceId ID ruang kerja.
     * @param indexId     ID basis pengetahuan.
     * @return Respons dari layanan 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);
    }

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

        try {
            Scanner scanner = new Scanner(System.in);
            System.out.print("Pilih operasi yang akan dilakukan:\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("\nMenampilkan daftar basis pengetahuan...");
                String workspaceId = System.getenv("WORKSPACE_ID");
                ListIndicesResponse response = listIndices(client, workspaceId);
                // Memerlukan library jackson-databind untuk mengonversi 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: "); // ID ini adalah nilai Data.Id yang dikembalikan oleh operasi CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Model Studio.
                String indexId = scanner.nextLine();
                // Meminta konfirmasi sebelum penghapusan.
                boolean confirm = false;
                while (!confirm) {
                    System.out.print("Apakah Anda yakin ingin menghapus 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. Harap 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("Terjadi kesalahan: " + mapper.writeValueAsString(resp.getBody()));
                }
            } else {
                System.out.println("Opsi tidak valid. Keluar dari program.");
            }
        } catch (Exception e) {
            System.out.println("Terjadi kesalahan: " + e.getMessage());
        }
    }
}

PHP

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

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

use Darabonba\OpenApi\Models\Config;

class KnowledgeBaseManage {

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

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

     /**
     * Menampilkan daftar basis pengetahuan dalam ruang kerja tertentu.
     *
     * @param Bailian $client Objek klien.
     * @param string $workspaceId ID ruang kerja.
     * @return ListIndicesResponse Respons dari layanan Model Studio.
     * @throws Exception
     */
    public static function listIndices($client, $workspaceId) {
        $headers = [];
        $listIndexDocumentsRequest = new ListIndexDocumentsRequest([]);
        $runtime = new RuntimeOptions([]);
        return $client->listIndicesWithOptions($workspaceId, $listIndexDocumentsRequest, $headers, $runtime);
    }

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

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

        try {
            echo "Pilih operasi yang akan dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nMasukkan opsi (1 atau 2):";
            $startOption = trim(fgets(STDIN));
            $client = self::createClient();
            if ($startOption === "1") {
                // Daftar basis pengetahuan.
                echo "\nDaftar basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $response = self::listIndices($client, $workspaceId);
                // Konversi respons ke string JSON.
                $result = json_encode($response->body->data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
                echo $result . "\n";
            } elseif ($startOption === "2") {
                echo "\nHapus basis pengetahuan\n";
                $workspaceId = getenv("WORKSPACE_ID");
                $indexId = readline("Masukkan ID basis pengetahuan:"); // ID dikembalikan sebagai `Data.Id` oleh operasi CreateIndex. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Model Studio.
                // Konfirmasi sebelum penghapusan.
                while (true) {
                    $confirm = strtolower(trim(readline("Apakah Anda yakin ingin menghapus 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 . " telah dihapus.\n";
                else 
                    echo "Terjadi kesalahan: " . json_encode($response->body) . "\n";
            } else {
                echo "Opsi tidak valid. Keluar.\n";
            }
        } catch (Exception $e) {
            echo "Terjadi kesalahan: " . $e->getMessage() . "\n";
        }
    }
}
// Mengasumsikan autoload.php berada di direktori induk file ini. Sesuaikan jalur sesuai struktur proyek Anda.
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
KnowledgeBaseManage::main(array_slice($argv, 1));

Node.js

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

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

class KbManage {

    /**
     * Memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur.
     * @returns {boolean} True jika semua variabel lingkungan yang diperlukan telah diatur, false jika tidak.
     */
    static checkEnvironmentVariables() {
        const requiredVars = {
            'ALIBABA_CLOUD_ACCESS_KEY_ID': 'Alibaba Cloud access key ID',
            'ALIBABA_CLOUD_ACCESS_KEY_SECRET': 'Alibaba Cloud access key secret',
            'WORKSPACE_ID': 'Alibaba Cloud Model Studio workspace ID'
        };

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

        return missing.length === 0;
    }

    /**
     * Membuat dan mengonfigurasi klien.
     * @returns {bailian20231229.default} Klien yang telah dikonfigurasi.
     * @throws {Error} Melempar kesalahan jika kredensial tidak dikonfigurasi.
     */
    static createClient() {
        const config = new OpenApi.Config({
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET
        });
        // Titik akhir berikut untuk cloud publik. Anda dapat mengubah titik akhir sesuai kebutuhan.
        config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com';
        return new bailian20231229.default(config);
    }

    /**
     * Menampilkan daftar basis pengetahuan dalam ruang kerja tertentu.
     * @param {bailian20231229.Client} client Instance klien yang digunakan untuk permintaan.
     * @param {string} workspaceId ID ruang kerja yang akan diquery.
     * @returns {Promise<bailian20231229.ListIndicesResponse>} Promise yang diselesaikan dengan respons layanan.
     */
    static async listIndices(client, workspaceId) {
        const headers = {};
        const listIndicesRequest = new bailian20231229.ListIndicesRequest();
        const runtime = new Util.RuntimeOptions({});
        return await client.listIndicesWithOptions(workspaceId, listIndicesRequest, headers, runtime);
    }

    /**
     * Menghapus secara permanen basis pengetahuan yang ditentukan.
     * @param {bailian20231229.Client} client Instance klien yang digunakan untuk permintaan.
     * @param {string} workspaceId ID ruang kerja yang berisi basis pengetahuan.
     * @param {string} indexId ID basis pengetahuan yang akan dihapus.
     * @returns {Promise<bailian20231229.DeleteIndexResponse>} Promise yang diselesaikan dengan respons layanan.
     */
    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);
    }

    /**
     * Menyediakan antarmuka baris perintah untuk mendaftar atau menghapus basis pengetahuan.
     */
    static async main(args) {
        if (!this.checkEnvironmentVariables()) {
            console.log("Pemeriksaan variabel lingkungan gagal.");
            return;
        }

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

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

            if (startOption === '1') {
                console.log("\nMenampilkan daftar 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) => { // ID ini sesuai dengan nilai `Data.Id` dari respons API `CreateIndex`. Anda juga dapat menemukannya di halaman basis pengetahuan di konsol Model Studio.
                        resolve(ans.trim());
                    });
                });
                // Konfirmasi sebelum penghapusan.
                let confirm = '';
                while (confirm !== 'y' && confirm !== 'n') {
                    confirm = (await new Promise((resolve) => {
                        readline.question(`Apakah Anda yakin ingin menghapus 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. Harap 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(`Terjadi kesalahan: ${errInfo}`)
                }
            } else {
                console.log("Opsi tidak valid. Keluar.");
            }
        } catch (err) {
            console.error(`Terjadi kesalahan: ${err.message}`);
        } finally {
            readline.close();
        }
    }
}

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

C#

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

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


namespace AlibabaCloud.SDK.KnowledgeBase
{
    public class KnowledgeBaseManage
    {
        /// <summary>
        /// Memeriksa variabel lingkungan yang diperlukan dan meminta pengaturan yang hilang.
        /// </summary>
        /// <returns>`true` jika semua variabel lingkungan yang diperlukan telah diatur; jika tidak, `false`.</returns>
        public static bool CheckEnvironmentVariables()
        {
            var requiredVars = new Dictionary<string, string>
            {
                { "ALIBABA_CLOUD_ACCESS_KEY_ID", "Alibaba Cloud AccessKey ID" },
                { "ALIBABA_CLOUD_ACCESS_KEY_SECRET", "Alibaba Cloud AccessKey secret" },
                { "WORKSPACE_ID", "Alibaba Cloud Model Studio workspace ID" }
            };

            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: Silakan atur variabel lingkungan {entry.Key} ({entry.Value})");
                }
            }

            return missingVars.Count == 0;
        }

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

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

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

        /// <summary>
        /// Fungsi utama.
        /// </summary>
        public static void Main(string[] args)
        {
            if (!CheckEnvironmentVariables())
            {
                Console.WriteLine("Pemeriksaan variabel lingkungan gagal.");
                return;
            }
            try
            {
                Console.Write("Pilih operasi yang akan dilakukan:\n1. Daftar basis pengetahuan\n2. Hapus basis pengetahuan\nHarap masukkan opsi (1 atau 2):");
                string startOption = Console.ReadLine();
                if (startOption == "1")
                {
                    Console.WriteLine("\nMenampilkan daftar basis pengetahuan...");
                    string workspaceId = Environment.GetEnvironmentVariable("WORKSPACE_ID");
                    Bailian20231229.Client client = CreateClient();
                    Bailian20231229.Models.ListIndicesResponse listIndicesResponse = ListIndices(client, workspaceId);
                    // Instal Newtonsoft.Json untuk membuat serial objek respons ke string JSON.
                    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("Harap masukkan ID basis pengetahuan: "); // ID basis pengetahuan (Data.Id) dikembalikan oleh operasi CreateIndex atau dapat ditemukan di halaman basis pengetahuan di konsol Model Studio.
                    string indexId = Console.ReadLine();
                    // Konfirmasi sebelum penghapusan.
                    while (true)
                    {
                        Console.Write($"Apakah Anda yakin ingin menghapus 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. Harap 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($"Terjadi kesalahan: {errInfo}");
                    }
                }
                else
                {
                    Console.WriteLine("Opsi tidak valid. Keluar.");
                    return;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Terjadi kesalahan: " + e.Message);
            }
        }
    }
}

Go

// Kode contoh ini hanya untuk referensi. Jangan gunakan dalam 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 memverifikasi bahwa variabel lingkungan yang diperlukan telah diatur dan melaporkan yang hilang.
func checkEnvironmentVariables() bool {
	// Variabel lingkungan yang diperlukan dan deskripsinya.
	requiredVars := map[string]string{
		"ALIBABA_CLOUD_ACCESS_KEY_ID":     "Alibaba Cloud AccessKey ID",
		"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Alibaba Cloud AccessKey secret",
		"WORKSPACE_ID":                    "Alibaba Cloud Model Studio workspace ID",
	}

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

	return len(missingVars) == 0
}

// createClient membuat dan mengonfigurasi klien.
//
// Returns:
//   - *bailian20231229.Client: Klien yang telah dikonfigurasi.
func createClient() (_result *bailian20231229.Client, _err error) {
	config := &openapi.Config{
		AccessKeyId:     tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Ini adalah titik akhir cloud publik. Ubah nilai ini ke titik akhir untuk wilayah Anda.
	config.Endpoint = tea.String("bailian.ap-southeast-1.aliyuncs.com")
	_result = &bailian20231229.Client{}
	_result, _err = bailian20231229.NewClient(config)
	return _result, _err
}

// listIndices menampilkan daftar basis pengetahuan dalam ruang kerja tertentu.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ListIndicesResponse: Respons dari layanan Alibaba Cloud Model Studio.
//   - error: Kesalahan, jika terjadi.
func listIndices(client *bailian20231229.Client, workspaceId string) (_result *bailian20231229.ListIndicesResponse, _err error) {
	headers := make(map[string]*string)
	listIndicesRequest := &bailian20231229.ListIndicesRequest{}
	runtime := &util.RuntimeOptions{}
	return client.ListIndicesWithOptions(tea.String(workspaceId), listIndicesRequest, headers, runtime)
}

// deleteIndex menghapus secara permanen basis pengetahuan yang ditentukan.
//
// Parameters:
//   - client      *bailian20231229.Client: Klien.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.DeleteIndexResponse: Respons dari layanan Alibaba Cloud Model Studio.
//   - error: Kesalahan, jika terjadi.
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)

}

func main() {
	if !checkEnvironmentVariables() {
		fmt.Println("Pemeriksaan 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): ")

	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("\nMenampilkan daftar 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("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("Apakah Anda yakin ingin menghapus secara permanen basis pengetahuan %s? (y/n): ", indexId)
			if !scanner.Scan() {
				fmt.Println("Gagal membaca konfirmasi.")
				return
			}
			confirm := strings.ToLower(strings.TrimSpace(scanner.Text()))

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

Create a knowledge base

Buat basis pengetahuan pencarian dokumen di ruang kerja yang ditentukan.

1. Initialize client

Untuk mengunggah file dan membuat basis pengetahuan, pertama-tama inisialisasi klien. Gunakan AccessKey dan AccessKey Secret Anda untuk memverifikasi identitas dan mengonfigurasi endpoint.

  • Public endpoints

    Klien Anda harus memiliki akses internet.
    • Public cloud: bailian.ap-southeast-1.aliyuncs.com

  • VPC endpoints

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

Inisialisasi klien mengembalikan objek Client untuk panggilan API selanjutnya.

Python

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

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

Java

/**
* Initialize a client.
*
* @return The configured client object.
*/
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"));
    // Contoh endpoint berikut adalah endpoint VPC untuk public cloud. Anda dapat mengubah endpoint sesuai kebutuhan.
    config.endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new com.aliyun.bailian20231229.Client(config);
}

PHP

/**
 * Initialize a client.
 *
 * @return Bailian The configured client object.
 */
public static function createClient(){
    $config = new Config([
        "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
        "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    ]);
    // Contoh endpoint berikut adalah endpoint VPC untuk public cloud. Anda dapat mengubah endpoint sesuai kebutuhan.
    $config->endpoint = 'bailian-vpc.ap-southeast-1.aliyuncs.com';
    return new Bailian($config);
}

Node.js

/**
 * Create and configure a client.
 * @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
  });
  // Contoh endpoint berikut adalah endpoint VPC untuk public cloud. Anda dapat mengubah endpoint sesuai kebutuhan.
  config.endpoint = `bailian-vpc.ap-southeast-1.aliyuncs.com`;
  return new bailian20231229.default(config);
}

C#

/// <summary>
/// Initialize a client.
/// </summary>
/// <returns>The configured client object.</returns>
/// <exception cref="Exception">Thrown when an error occurs during initialization.</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"),
    };
    // Contoh endpoint berikut adalah endpoint VPC untuk public cloud. Anda dapat mengubah endpoint sesuai kebutuhan.
    config.Endpoint = "bailian-vpc.ap-southeast-1.aliyuncs.com";
    return new AlibabaCloud.SDK.Bailian20231229.Client(config);
}

Go

// CreateClient creates and configures a client.
//
// Returns:
//   - *client.Bailian20231229Client: The configured client.
//   - error: The error message.
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")),
	}
	// Contoh endpoint berikut adalah endpoint VPC untuk public cloud. Anda dapat mengubah endpoint 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. Upload knowledge base files

2.1. Request a file upload lease

Sebelum membuat basis pengetahuan, unggah file sumbernya ke ruang kerja yang sama. Untuk melakukannya, panggil operasi ApplyFileUploadLease untuk meminta sewa unggah file. Sewa ini merupakan otorisasi sementara untuk mengunggah file dan berlaku selama beberapa menit.

  • workspace_id: Lihat Cara mendapatkan ID ruang kerja.

  • category_id: Dalam contoh ini, gunakan default. 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 ekstensinya. Nilainya harus sesuai dengan nama file sebenarnya. Misalnya, saat Anda mengunggah file seperti pada gambar, gunakan Alibaba_Cloud_Model_Studio_Mobile_Phone_Series_Introduction.docx.

    image

  • file_md5: Masukkan hash MD5 dari file yang akan diunggah. Saat ini, Alibaba Cloud tidak memverifikasi nilai ini, sehingga memudahkan pengunggahan file dari URL.

    Di Python, Anda bisa mendapatkan hash MD5 dengan menggunakan modul hashlib. Untuk bahasa lainnya, lihat kode contoh lengkap.

    Contoh kode

    import hashlib
    
    
    def calculate_md5(file_path):
        """
        Calculate the MD5 hash of a file.
    
        Args:
            file_path (str): The local path of the file.
    
        Returns:
            str: The MD5 hash of the file.
        """
        md5_hash = hashlib.md5()
    
        # Read the file in binary mode.
        with open(file_path, "rb") as f:
            # Read the file in chunks to avoid high memory usage for large files.
            for chunk in iter(lambda: f.read(4096), b""):
                md5_hash.update(chunk)
    
        return md5_hash.hexdigest()
    
    
    # Example usage
    file_path = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya /path/to/your/Alibaba Cloud Model Studio Product Overview.docx"
    md5_value = calculate_md5(file_path)
    print(f"The MD5 hash of the file is: {md5_value}")
    

    Ganti variabel file_path dalam kode dengan path lokal aktual file tersebut dan jalankan kode untuk mendapatkan hash MD5 file target. Berikut adalah contoh nilainya:

    The MD5 hash of the file is: 2ef7361ea907f3a1b91e3b9936f5643a
  • file_size: Masukkan ukuran file yang akan diunggah dalam byte.

    Di Python, Anda bisa mendapatkan nilai ini dengan menggunakan modul os. Untuk bahasa lainnya, lihat kode contoh lengkap.

    Contoh kode

    import os
    
    
    def get_file_size(file_path: str) -> int:
        """
        Get the size of a file in bytes.
    
        Args:
            file_path (str): The actual local path of the file.
    
        Returns:
            int: The file size in bytes.
        """
        return os.path.getsize(file_path)
    
    
    # Example usage
    file_path = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya /path/to/your/Alibaba Cloud Model Studio Product Overview.docx"
    file_size = get_file_size(file_path)
    print(f"The size of the file in bytes is: {file_size}")
    

    Ganti variabel file_path dengan path lokal aktual file tersebut dan jalankan kode untuk mendapatkan ukuran file target dalam byte. Berikut adalah contoh nilainya:

    The size of the file in bytes is: 14015

Permintaan sewa unggah sementara yang berhasil akan mengembalikan hal berikut:

  • Sekumpulan parameter unggah sementara:

    • Data.FileUploadLeaseId

    • Data.Param.Method

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

    • Content-Type dalam Data.Param.Headers

  • URL unggah sementara:Data.Param.Url

Penting

Python

def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    Request a file upload lease from Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): The client.
        category_id (str): The category ID.
        file_name (str): The file name.
        file_md5 (str): The MD5 hash of the file.
        file_size (int): The file size in bytes.
        workspace_id (str): The workspace ID.

    Returns:
        The response from 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

/**
 * Request a file upload lease.
 *
 * @param client      The client object.
 * @param categoryId  The category ID.
 * @param fileName    The file name.
 * @param fileMd5     The MD5 hash of the file.
 * @param fileSize    The file size in bytes.
 * @param workspaceId The workspace ID.
 * @return The response object from 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

/**
 * Request a file upload lease.
 *
 * @param Bailian $client The client.
 * @param string $categoryId The category ID.
 * @param string $fileName The file name.
 * @param string $fileMd5 The MD5 hash of the file.
 * @param int $fileSize The file size in bytes.
 * @param string $workspaceId The workspace ID.
 * @return ApplyFileUploadLeaseResponse The response from 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

/**
 * Request a file upload lease.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} categoryId - The category ID.
 * @param {string} fileName - The file name.
 * @param {string} fileMd5 - The MD5 hash of the file.
 * @param {string} fileSize - The file size in bytes.
 * @param {string} workspaceId - The workspace ID.
 * @returns {Promise<bailian20231229.ApplyFileUploadLeaseResponse>} - The response from 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>
/// Request a file upload lease.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="categoryId">The category ID.</param>
/// <param name="fileName">The file name.</param>
/// <param name="fileMd5">The MD5 hash of the file.</param>
/// <param name="fileSize">The file size in bytes.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if an error occurs during the call.</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 requests a file upload lease from Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - categoryId (string): The category ID.
//   - fileName (string): The file name.
//   - fileMD5 (string): The MD5 hash of the file.
//   - fileSize (string): The file size in bytes.
//   - workspaceId (string): The workspace ID.
//
// Returns:
//   - *bailian20231229.ApplyFileUploadLeaseResponse: The response from Alibaba Cloud Model Studio.
//   - error: The error message.
func ApplyLease(client *bailian20231229.Client, categoryId, fileName, fileMD5 string, fileSize string, workspaceId string) (_result *bailian20231229.ApplyFileUploadLeaseResponse, _err error) {
	headers := make(map[string]*string)
	applyFileUploadLeaseRequest := &bailian20231229.ApplyFileUploadLeaseRequest{
		FileName:    tea.String(fileName),
		Md5:         tea.String(fileMD5),
		SizeInBytes: tea.String(fileSize),
	}
	runtime := &util.RuntimeOptions{}
	return client.ApplyFileUploadLeaseWithOptions(tea.String(categoryId), tea.String(workspaceId), applyFileUploadLeaseRequest, headers, runtime)
}

Contoh permintaan

{
  "CategoryId": "default",
  "FileName": "Alibaba Cloud Model Studio Product Overview.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. Upload file to temporary storage

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

  • pre_signed_url: Tentukan Data.Param.Url dari respons API Request a file upload lease.

    Ini adalah URL yang ditandatangani dan tidak mendukung unggahan FormData. Anda harus mengunggah file dalam format biner. Untuk detailnya, lihat kode contoh.
Penting

Contoh ini tidak mendukung debugging online atau pembuatan kode contoh.

Local upload

Python

import requests
from urllib.parse import urlparse

def upload_file(pre_signed_url, file_path):
    """
    Upload a local file to temporary storage.

    Args:
        pre_signed_url (str): The URL from the upload lease.
        file_path (str): The local path of the file.
    
    Returns:
        The response from Alibaba Cloud Model Studio.
    """
    try:
        # Set the request headers.
        headers = {
            "X-bailian-extra": "Ganti dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
            "Content-Type": "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null."
        }

        # Read and upload the file.
        with open(file_path, 'rb') as file:
            # Metode permintaan untuk unggah file harus sama dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh operasi 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 uploaded successfully.")
        else:
            print(f"Failed to upload the file. ResponseCode: {response.status_code}")

    except Exception as e:
        print(f"An error occurred: {str(e)}")

if __name__ == "__main__":

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

    # Unggah file lokal ke penyimpanan sementara.
    file_path = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx"
    upload_file(pre_signed_url_or_http_url, file_path)

Java

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

public class UploadFile {
    public static void uploadFile(String preSignedUrl, String filePath) {
        HttpURLConnection connection = null;
        try {
            // Buat objek URL.
            URL url = new URL(preSignedUrl);
            connection = (HttpURLConnection) url.openConnection();
            // Metode permintaan untuk unggah file harus sama dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.setRequestMethod("PUT");
            // Izinkan output ke koneksi karena koneksi ini digunakan untuk mengunggah file.
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.");
            connection.setRequestProperty("Content-Type", "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null.");
            // 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 uploaded successfully.");
            } else {
                // File gagal diunggah.
                System.out.println("Failed to upload the 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 bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        // Unggah file lokal ke penyimpanan sementara.
        String filePath = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx";
        uploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

PHP

<?php

/**
 * Upload a local file to temporary storage.
 *
 * @param string $preSignedUrl The pre-signed URL or HTTP address obtained from the ApplyFileUploadLease operation.
 * @param array $headers An array of request headers containing "X-bailian-extra" and "Content-Type".
 * @param string $filePath The local file path.
 * @throws Exception If the upload fails.
 */
function uploadFile($preSignedUrl, $headers, $filePath) {
    // Baca konten file.
    $fileContent = file_get_contents($filePath);
    if ($fileContent === false) {
        throw new Exception("Cannot read the 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 ke konten file.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan respons alih-alih menampilkannya 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 status HTTP.
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

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

    // Periksa kode respons.
    if ($httpCode != 200) {
        throw new Exception("Upload failed. HTTP status code: " . $httpCode . ", error message: " . $response);
    }

    // Unggahan berhasil.
    echo "File uploaded successfully.\n";
}

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

    // Ganti 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 dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type" => "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null."
    ];

    // Unggah file lokal ke penyimpanan sementara.
    $filePath = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx";

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

// Panggil fungsi utama.
main();

?>

Node.js

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

/**
 * Upload a local file to temporary storage.
 *
 * @param {string} preSignedUrl - The URL from the upload lease.
 * @param {Object} headers - The headers for the upload request.
 * @param {string} filePath - The local path of the file.
 * @throws {Error} If the upload fails.
 */
async function uploadFile(preSignedUrl, headers, filePath) {
    // Bangun header permintaan yang diperlukan 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 {
        // Gunakan axios untuk mengirim permintaan PUT.
        const response = await axios.put(preSignedUrl, fileStream, {
            headers: uploadHeaders
        });

        // Periksa kode status respons.
        if (response.status === 200) {
            console.log("File uploaded successfully.");
        } else {
            console.error(`Failed to upload the file. ResponseCode: ${response.status}`);
            throw new Error(`Upload failed with status code: ${response.status}`);
        }
    } catch (error) {
        // Tangani error.
        console.error("Error during upload:", error.message);
        throw new Error(`Upload failed: ${error.message}`);
    }
}

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

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

    // Unggah file lokal ke penyimpanan sementara.
    const filePath = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx";

    uploadFile(preSignedUrl, headers, filePath)
        .then(() => {
            console.log("Upload completed.");
        })
        .catch((err) => {
            console.error("Upload failed:", err.message);
        });
}

// Panggil fungsi utama.
main();

C#

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

public class UploadFilExample
{
    public static void UploadFile(string preSignedUrl, string filePath)
    {
        HttpWebRequest connection = null;
        try
        {
            // Buat objek URL.
            Uri url = new Uri(preSignedUrl);
            connection = (HttpWebRequest)WebRequest.Create(url);
            // Metode permintaan untuk unggah file harus sama dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.Method = "PUT";
            // Izinkan buffering aliran tulis karena koneksi ini digunakan untuk mengunggah file.
            connection.AllowWriteStreamBuffering = false;
            connection.SendChunked = false;
            // Atur header permintaan agar sesuai dengan nilai bidang dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.Headers["X-bailian-extra"] = "Ganti dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
            connection.ContentType = "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null.";
            // 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 uploaded successfully.");
                }
                else
                {
                    // File gagal diunggah.
                    Console.WriteLine($"Failed to upload the 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 bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        // Unggah file lokal ke penyimpanan sementara.
        string filePath = "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx";
        UploadFile(preSignedUrlOrHttpUrl, filePath);
    }
}

Go

package main

import (
    "fmt"
    "io"
    "os"

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

// UploadFile uploads a local file to temporary storage.
//
// Parameters:
//   - preSignedUrl (string): The URL from the upload lease.
//   - headers (map[string]string): The headers for the upload request.
//   - filePath (string): The local path of the file.
//
// Returns:
//   - error: An error message if the upload fails, otherwise 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("failed to open file: %w", err)
    }
    defer file.Close()

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

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

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

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

    if err != nil {
        return fmt.Errorf("failed to send request: %w", err)
    }

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

    fmt.Println("File uploaded successfully.")
    return nil
}

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

    // Ganti 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 dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type":    "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null.",
    }

    // Unggah file lokal ke penyimpanan sementara.
    filePath := "Ganti dengan path lokal aktual file yang akan diunggah, misalnya di Linux: /path/to/your/Alibaba Cloud Model Studio Product Overview.docx"

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

URL upload

URL harus dapat diakses publik dan menunjuk ke file yang valid.

Python

import requests
from urllib.parse import urlparse

def upload_file_link(pre_signed_url, source_url_string):
    """
    Upload a file from a public URL to temporary storage.

    Args:
        pre_signed_url (str): The URL from the upload lease.
        source_url_string (str): The URL of the file.
    
    Returns:
        The response from Alibaba Cloud Model Studio.
    """
    try:
        // Atur header permintaan.
        headers = {
            "X-bailian-extra": "Ganti dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
            "Content-Type": "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null."
        }

        // Atur metode permintaan ke GET untuk mengakses URL file.
        source_response = requests.get(source_url_string)
        if source_response.status_code != 200:
            raise RuntimeError("Failed to get source file.")

        // Metode permintaan untuk unggah file harus sama dengan nilai bidang Method dalam 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 uploaded successfully.")
        else:
            print(f"Failed to upload the file. ResponseCode: {response.status_code}")

    except Exception as e:
        print(f"An error occurred: {str(e)}")

if __name__ == "__main__":

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

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

Java

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

public class UploadFile {
    public static void uploadFileLink(String preSignedUrl, String sourceUrlString) {
        HttpURLConnection connection = null;
        try {
            // Buat objek URL.
            URL url = new URL(preSignedUrl);
            connection = (HttpURLConnection) url.openConnection();
            // Metode permintaan untuk unggah file harus sama dengan nilai bidang Method dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
            connection.setRequestMethod("PUT");
            // Izinkan output ke koneksi karena koneksi ini digunakan untuk mengunggah file.
            connection.setDoOutput(true);
            connection.setRequestProperty("X-bailian-extra", "Ganti dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.");
            connection.setRequestProperty("Content-Type", "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null.");
            URL sourceUrl = new URL(sourceUrlString);
            HttpURLConnection sourceConnection = (HttpURLConnection) sourceUrl.openConnection();
            // Atur metode permintaan ke GET untuk mengakses URL file.
            sourceConnection.setRequestMethod("GET");
            // Dapatkan kode respons. 200 menunjukkan bahwa permintaan berhasil.
            int sourceFileResponseCode = sourceConnection.getResponseCode();
            // Baca file dari URL dan unggah melalui koneksi.
            if (sourceFileResponseCode != HttpURLConnection.HTTP_OK) {
                throw new RuntimeException("Failed to get source file.");
            }
            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) {
                // File berhasil diunggah.
                System.out.println("File uploaded successfully.");
            } else {
                // File gagal diunggah.
                System.out.println("Failed to upload the 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 bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        
        String sourceUrl = "Ganti dengan URL file yang akan diunggah.";
        uploadFileLink(preSignedUrlOrHttpUrl, sourceUrl);
    }
}

PHP

<?php

/**
 * Upload a file from a public URL to temporary storage.
 *
 * @param string $preSignedUrl The pre-signed URL or HTTP address obtained from the ApplyFileUploadLease operation.
 * @param array $headers An array of request headers containing "X-bailian-extra" and "Content-Type".
 * @param string $sourceUrl The URL of the file.
 * @throws Exception If the upload fails.
 */
function uploadFile($preSignedUrl, $headers, $sourceUrl) {

    $fileContent = file_get_contents($sourceUrl);
    if ($fileContent === false) {
        throw new Exception("Cannot download the file from the given URL: " . $sourceUrl);
    }
    // Inisialisasi sesi cURL.
    $ch = curl_init();

    // Atur opsi cURL.
    curl_setopt($ch, CURLOPT_URL, $preSignedUrl);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); // Gunakan metode PUT.
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContent); // Atur badan permintaan ke konten file.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Kembalikan respons alih-alih menampilkannya 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 status HTTP.
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

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

    // Periksa kode respons.
    if ($httpCode != 200) {
        throw new Exception("Upload failed. HTTP status code: " . $httpCode . ", error message: " . $response);
    }

    // Unggahan berhasil.
    echo "File uploaded successfully.\n";
}

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

    // Ganti 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 dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type" => "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null."
    ];

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

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

// Panggil fungsi utama.
main();

?>

Node.js

const axios = require('axios');

/**
 * Upload a file from a public URL to temporary storage.
 *
 * @param {string} preSignedUrl - The URL from the upload lease.
 * @param {Object} headers - The headers for the upload request.
 * @param {string} sourceUrl - The URL of the file.
 * @throws {Error} If the upload fails.
 */
async function uploadFileFromUrl(preSignedUrl, headers, sourceUrl) {
    // Bangun header permintaan 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'
        });

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

        // Periksa kode status respons.
        if (uploadResponse.status === 200) {
            console.log("File uploaded successfully from URL.");
        } else {
            console.error(`Failed to upload the file. ResponseCode: ${uploadResponse.status}`);
            throw new Error(`Upload failed with status code: ${uploadResponse.status}`);
        }
    } catch (error) {
        // Tangani error.
        console.error("Error during upload:", error.message);
        throw new Error(`Upload failed: ${error.message}`);
    }
}

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

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

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

    uploadFileFromUrl(preSignedUrl, headers, sourceUrl)
        .then(() => {
            console.log("Upload completed.");
        })
        .catch((err) => {
            console.error("Upload failed:", 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 client 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 permintaan untuk unggah file.
                    connection.Method = "PUT";
                    connection.AllowWriteStreamBuffering = false;
                    connection.SendChunked = false;

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

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

                    // Periksa respons.
                    using (HttpWebResponse responseResult = (HttpWebResponse)connection.GetResponse())
                    {
                        if (responseResult.StatusCode == HttpStatusCode.OK)
                        {
                            Console.WriteLine("File uploaded successfully from URL.");
                        }
                        else
                        {
                            Console.WriteLine($"Failed to upload the 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 dengan nilai bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.";
        string url = "Ganti dengan URL file yang akan diunggah.";   

        await UploadFileFromUrl(preSignedUrlOrHttpUrl, url);
    }
}

Go

package main
 
import (
    "fmt"
    "net/http"
 
    "github.com/go-resty/resty/v2"
)
 
// UploadFileFromUrl uploads a file from a public URL to temporary storage.
//
// Parameters:
//   - preSignedUrl (string): The URL from the upload lease.
//   - headers (map[string]string): The headers for the upload request.
//   - sourceUrl (string): The URL of the file.
//
// Returns:
//   - error: An error message if the upload fails, otherwise nil.
func UploadFileFromUrl(preSignedUrl string, headers map[string]string, sourceUrl string) error {
    // Unduh file dari URL yang diberikan.
    resp, err := http.Get(sourceUrl)
    if err != nil {
        return fmt.Errorf("failed to get file: %w", err)
    }
    defer resp.Body.Close()
 
    if resp.StatusCode != http.StatusOK {
        return fmt.Errorf("failed to get file, status code: %d", resp.StatusCode)
    }
 
    // Buat client REST.
    client := resty.New()
 
    // Bangun header permintaan yang diperlukan untuk unggahan.
    uploadHeaders := map[string]string{
        "X-bailian-extra": headers["X-bailian-extra"],
        "Content-Type":    headers["Content-Type"],
    }
 
    // Kirim permintaan PUT.
    response, err := client.R().
        SetHeaders(uploadHeaders).
        SetBody(resp.Body).
        Put(preSignedUrl)
 
    if err != nil {
        return fmt.Errorf("failed to send request: %w", err)
    }
 
    // Periksa kode status respons HTTP.
    if response.IsError() {
        return fmt.Errorf("HTTP error: %d", response.StatusCode())
    }
 
    fmt.Println("File uploaded successfully from URL.")
    return nil
}
 
// Fungsi utama
func main() {
    // Ganti dengan nilai bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.
    preSignedUrl := "Ganti dengan nilai bidang Url dalam Data.Param yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya."
 
    // Ganti 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 dengan nilai bidang X-bailian-extra dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya.",
        "Content-Type":    "Ganti dengan nilai bidang Content-Type dalam Data.Param.Headers yang dikembalikan oleh operasi ApplyFileUploadLease pada langkah sebelumnya. Jika dikembalikan nilai null, berikan nilai null.",
    }
 
    sourceUrl := "Ganti dengan URL file yang akan diunggah."
 
    // Panggil fungsi unggah.
    err := UploadFileFromUrl(preSignedUrl, headers, sourceUrl)
    if err != nil {
        fmt.Printf("Upload failed: %v\n", err)
    }
}

2.3. Add file to a category

Setelah mengunggah file, tambahkan file tersebut ke kategori dalam ruang kerja yang sama dengan memanggil operasi AddFile.

  • parser: Tentukan DASHSCOPE_DOCMIND.

  • lease_id: Atur parameter ini ke Data.FileUploadLeaseId yang dikembalikan saat Anda meminta sewa unggah file.

  • category_id: Dalam contoh ini, gunakan default. Jika Anda menggunakan kategori khusus untuk unggahan, Anda harus memberikan category_id yang sesuai.

    Penting

    CategoryId yang diberikan di sini harus sesuai dengan CategoryId yang digunakan dalam langkah Apply for a file upload lease. Jika tidak, Anda akan menerima error Category is mismatched.

Setelah Anda menambahkan file, Model Studio mengembalikan FileId untuk file tersebut dan secara otomatis mulai menguraikannya. lease_id segera tidak berlaku. Jangan gunakan kembali ID sewa yang sama untuk pengiriman lain.

Penting

Python

def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    Add a file to a specified category in Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): The client.
        lease_id (str): The lease ID.
        parser (str): The parser for the file.
        category_id (str): The category ID.
        workspace_id (str): The workspace ID.

    Returns:
        The response from 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

/**
 * Add a file to a category.
 *
 * @param client      The client object.
 * @param leaseId     The lease ID.
 * @param parser      The parser for the file.
 * @param categoryId  The category ID.
 * @param workspaceId The workspace ID.
 * @return The response object from 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

/**
 * Add a file to a category.
 *
 * @param Bailian $client The client.
 * @param string $leaseId The lease ID.
 * @param string $parser The parser for the file.
 * @param string $categoryId The category ID.
 * @param string $workspaceId The workspace ID.
 * @return AddFileResponse The response from 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

/**
 * Add a file to a category.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} leaseId - The lease ID.
 * @param {string} parser - The parser for the file.
 * @param {string} categoryId - The category ID.
 * @param {string} workspaceId - The workspace ID.
 * @returns {Promise<bailian20231229.AddFileResponse>} - The response from 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>
/// Add a file to a category.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="leaseId">The lease ID.</param>
/// <param name="parser">The parser for the file.</param>
/// <param name="categoryId">The category ID.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if an error occurs during the call.</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 adds a file to a specified category in Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - leaseId (string): The lease ID.
//   - parser (string): The parser for the file.
//   - categoryId (string): The category ID.
//   - workspaceId (string): The workspace ID.
//
// Returns:
//   - *bailian20231229.AddFileResponse: The response from Alibaba Cloud Model Studio.
//   - error: The error message.
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. Query file parsing status

File tidak dapat digunakan dalam basis pengetahuan sampai selesai diurai. Selama jam sibuk, proses ini dapat memakan waktu beberapa jam. Anda dapat memanggil operasi DescribeFile untuk menanyakan status penguraiannya.

Jika bidang Data.Status bernilai PARSE_SUCCESS, file telah berhasil diurai dan Anda dapat mengimpornya ke basis pengetahuan.

Penting
  • Sebelum memanggil operasi ini, RAM user harus diberikan izin API yang diperlukan (kebijakan AliyunBailianDataFullAccess atau AliyunBailianDataReadOnlyAccess).

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

Python

def describe_file(client, workspace_id, file_id):
    """
    Get the basic information of a file.

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        file_id (str): The file ID.

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

Java

/**
 * Query the basic information of a file.
 *
 * @param client      The client object.
 * @param workspaceId The workspace ID.
 * @param fileId      The file ID.
 * @return The response object from 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

/**
 * Query the basic information of a file.
 *
 * @param Bailian $client The client.
 * @param string $workspaceId The workspace ID.
 * @param string $fileId The file ID.
 * @return DescribeFileResponse The response from Alibaba Cloud Model Studio.
 */
public function describeFile($client, $workspaceId, $fileId) {
    $headers = [];
    $runtime = new RuntimeOptions([]);
    return $client->describeFileWithOptions($workspaceId, $fileId, $headers, $runtime);
}

Node.js

/**
 * Query the parsing status of a file.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} fileId - The file ID.
 * @returns {Promise<bailian20231229.DescribeFileResponse>} - The response from 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>
/// Query the basic information of a file.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="fileId">The file ID.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if an error occurs during the call.</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 gets the basic information of a file.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - fileId (string): The file ID.
//
// Returns:
//   - *bailian20231229.DescribeFileResponse: The response from Alibaba Cloud Model Studio.
//   - error: The error message.
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 Product Overview.docx",
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "SizeInBytes": "14015",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

3. Create a knowledge base

3.1. Initialize knowledge base

Setelah file diurai, Anda dapat membuat basis pengetahuan darinya di ruang kerja yang sama. Untuk memulai, panggil operasi CreateIndex untuk menginisialisasi (namun belum menyelesaikan) basis pengetahuan pengambilan dokumen.

  • workspace_id: Lihat Cara mendapatkan ID ruang kerja.

  • file_id: Tentukan FileId yang dikembalikan oleh API saat Anda menambahkan file ke kategori.

    Jika source_type diatur ke DATA_CENTER_FILE, parameter ini wajib diisi, dan API akan mengembalikan error jika tidak ditentukan.
  • structure_type: Dalam contoh ini, gunakan unstructured.

  • source_type: Dalam contoh ini, gunakan DATA_CENTER_FILE.

  • sink_type: Dalam contoh ini, tentukan BUILT_IN.

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

Simpan ID basis pengetahuan dengan aman, karena diperlukan untuk semua operasi API selanjutnya terkait basis pengetahuan ini.
Penting

Python

def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    Create (initialize) a knowledge base in Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        file_id (str): The file ID.
        name (str): The name of the knowledge base.
        structure_type (str): The data structure type of the knowledge base.
        source_type (str): The data source type. Category and file types are supported.
        sink_type (str): The vector storage type of the knowledge base.

    Returns:
        The response from 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

/**
 * Create (initialize) a knowledge base in Alibaba Cloud Model Studio.
 *
 * @param client        The client object.
 * @param workspaceId   The workspace ID.
 * @param fileId        The file ID.
 * @param name          The name of the knowledge base.
 * @param structureType The data structure type of the knowledge base.
 * @param sourceType    The data source type. Category and file types are supported.
 * @param sinkType      The vector storage type of the knowledge base.
 * @return The response object from 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

/**
 * Create (initialize) a knowledge base in Alibaba Cloud Model Studio.
 *
 * @param Bailian $client The client.
 * @param string $workspaceId The workspace ID.
 * @param string $fileId The file ID.
 * @param string $name The name of the knowledge base.
 * @param string $structureType The data structure type of the knowledge base.
 * @param string $sourceType The data source type. Category and file types are supported.
 * @param string $sinkType The vector storage type of the knowledge base.
 * @return CreateIndexResponse The response from 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

/**
 * Initialize a knowledge base (index).
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} fileId - The file ID.
 * @param {string} name - The name of the knowledge base.
 * @param {string} structureType - The data structure type of the knowledge base.
 * @param {string} sourceType - The data source type. Category and file types are supported.
 * @param {string} sinkType - The vector storage type of the knowledge base.
 * @returns {Promise<bailian20231229.CreateIndexResponse>} - The response from 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>
/// Create (initialize) a knowledge base in Alibaba Cloud Model Studio.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="fileId">The file ID.</param>
/// <param name="name">The name of the knowledge base.</param>
/// <param name="structureType">The data structure type of the knowledge base.</param>
/// <param name="sourceType">The data source type. Category and file types are supported.</param>
/// <param name="sinkType">The vector storage type of the knowledge base.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if an error occurs during the call.</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 creates (initializes) a knowledge base in Alibaba Cloud Model Studio.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - fileId (string): The file ID.
//   - name (string): The name of the knowledge base.
//   - structureType (string): The data structure type of the knowledge base.
//   - sourceType (string): The data source type. Category and file types are supported.
//   - sinkType (string): The vector storage type of the knowledge base.
//
// Returns:
//   - *bailian20231229.CreateIndexResponse: The response from Alibaba Cloud Model Studio.
//   - error: The error message.
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 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. Submit an index job

Setelah menginisialisasi basis pengetahuan, panggil operasi SubmitIndexJob untuk memulai proses pembuatan indeks.

Setelah pengiriman selesai, Model Studio segera memulai pembuatan indeks sebagai tugas asinkron. Data.Id yang dikembalikan oleh pemanggilan API ini adalah ID tugas yang sesuai. Anda akan menggunakan ID ini pada langkah berikutnya untuk menanyakan status terbaru tugas tersebut.

Penting

Python

def submit_index(client, workspace_id, index_id):
    """
    Submit an index job to Alibaba Cloud Model Studio.

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        index_id (str): The knowledge base ID.

    Returns:
        The response from 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

/**
 * Submit an index job to Alibaba Cloud Model Studio.
 *
 * @param client      The client object.
 * @param workspaceId The workspace ID.
 * @param indexId     The knowledge base ID.
 * @return The response object from 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

/**
 * Submit an index job to Alibaba Cloud Model Studio.
 *
 * @param Bailian $client The client.
 * @param string $workspaceId The workspace ID.
 * @param string $indexId The knowledge base ID.
 * @return SubmitIndexJobResponse The response from 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

/**
 * Submit an index job.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} indexId - The knowledge base ID.
 * @returns {Promise<bailian20231229.SubmitIndexJobResponse>} - The response from 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>
/// Submit an index job to Alibaba Cloud Model Studio.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="indexId">The knowledge base ID.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if an error occurs during the call.</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 submits an index job.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - indexId (string): The knowledge base ID.
//
// Returns:
//   - *bailian20231229.SubmitIndexJobResponse: The response from Alibaba Cloud Model Studio.
//   - error: The error message.
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. Query index job status

Tugas indeks memerlukan waktu untuk diselesaikan. Selama jam sibuk, proses ini dapat memakan waktu beberapa jam. Panggil operasi GetIndexJobStatus untuk menanyakan status eksekusinya.

Ketika bidang Data.Status bernilai COMPLETED, basis pengetahuan telah dibuat.

Penting

Python

def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    Query the status of an index job.

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        index_id (str): The knowledge base ID.
        job_id (str): The job ID.

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

/**
 * Query the status of an index job.
 *
 * @param client      The client object.
 * @param workspaceId The workspace ID.
 * @param jobId       The job ID.
 * @param indexId     The knowledge base ID.
 * @return The response object 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

/**
 * Query the status of an index job.
 *
 * @param Bailian $client The client.
 * @param string $workspaceId The workspace ID.
 * @param string $indexId The knowledge base ID.
 * @param string $jobId The job ID.
 * @return GetIndexJobStatusResponse The 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

/**
 * Query the status of an index job.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} jobId - The job ID.
 * @param {string} indexId - The knowledge base ID.
 * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - The response from 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>
/// Query the status of an index job.
/// </summary>
/// <param name="client">The client object.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="jobId">The job ID.</param>
/// <param name="indexId">The knowledge base ID.</param>
/// <returns>The response object from Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">An exception is thrown if 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 queries the status of an index job.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - jobId (string): The job ID.
//   - indexId (string): The knowledge base ID.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: The response from Alibaba Cloud Model Studio.
//   - error: The 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": "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": "Imported successfully.",
        "DocName": "Alibaba Cloud Model Studio Product Overview",
        "Code": "FINISH"
      }
    ],
    "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

Anda telah membuat basis pengetahuan dari file yang diunggah.

Ambil dari basis pengetahuan

Anda dapat mengambil informasi dari basis pengetahuan dengan dua cara:

  • Menggunakan aplikasi Alibaba Cloud Model Studio: Saat Anda memanggil aplikasi, gunakan parameter rag_options untuk meneruskan ID basis pengetahuan index_id. Hal ini melengkapi model Anda dengan pengetahuan privat dan menyediakan informasi terkini.

  • Menggunakan API Alibaba Cloud: Panggil Retrieve API untuk mengambil informasi dari basis pengetahuan tertentu dan mengembalikan segmen teks aslinya.

Metode pertama mengirimkan segmen teks yang diambil ke model yang telah Anda konfigurasi untuk menghasilkan jawaban akhir, sedangkan metode kedua langsung mengembalikan segmen teks tersebut.

Bagian ini menjelaskan cara menggunakan API Alibaba Cloud.

Untuk mengambil informasi dan mengembalikan segmen teks dari basis pengetahuan tertentu, panggil Retrieve API.

Jika respons berisi informasi yang terlalu banyak tidak relevan, tentukan SearchFilters dalam permintaan untuk memfilter hasil berdasarkan kriteria seperti tag.

Penting

Python

def retrieve_index(client, workspace_id, index_id, query):
    """
    Mengambil informasi dari basis pengetahuan tertentu.
        
    Args:
        client (bailian20231229Client): Objek client.
        workspace_id (str): ID ruang kerja.
        index_id (str): ID basis pengetahuan.
        query (str): Kueri pencarian.

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

Java

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

PHP

/**
 * Mengambil informasi dari basis pengetahuan 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 layanan Model Studio.
 * @throws Exception
 */
public function retrieveIndex($client, $workspaceId, $indexId, $query) {
    $headers = [];
    $retrieveRequest = new RetrieveRequest([
        "query" => $query,
        "indexId" => $indexId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->retrieveWithOptions($workspaceId, $retrieveRequest, $headers, $runtime);
}

Node.js

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

C#

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

Go

// retrieveIndex mengambil informasi dari basis pengetahuan tertentu.
//
// Args:
//   - client (bailian20231229.Client): Objek client.
//   - workspaceId (string): ID ruang kerja.
//   - indexId (string): ID basis pengetahuan.
//   - query (string): Kueri pencarian.
//
// Returns:
//   - *bailian20231229.RetrieveResponse: Respons dari layanan Model Studio.
//   - error: Error, jika ada.
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_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.7449869735535081,
          "image_url": [],
          "nid": "9ad347d9e4d7465d2c1e693a08b0077c|d6f7fbf8403e0df796258e5ada1ee1c1|4772257e93ed64ea087ff4be0d5e4620|7ce1370e4a1958842c9268144a452cc7",
          "_q_score": 1,
          "source": "0",
          "_score": 0.6294550895690918,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Phone Product Introduction\nAlibaba Cloud Model Studio X1 — Enjoy the ultimate visual experience: Features a 6.7-inch 1440 x 3200 pixel ultra-clear screen with a 120 Hz refresh rate for a smooth and vivid visual experience. The powerful combination of 256 GB of mass storage and 12 GB of RAM handles large games and multitasking with ease. A long-lasting 5000 mAh battery and an ultra-sensitive quad-camera system capture every wonderful moment of your life. Reference price: 4,599–4,999\nTongyi Vivid 7 — A new experience in smart photography: Features a 6.5-inch 1080 x 2400 pixel full screen. The AI smart photography feature ensures every photo shows professional-grade color and detail. 8 GB of RAM and 128 GB of storage ensure smooth operation, and the 4,500 mAh battery meets daily needs. Side fingerprint unlock is convenient and secure. Reference price: 2,999–3,299\nStardust S9 Pro — An innovative visual feast: A groundbreaking 6.9-inch 1440 x 3088 pixel under-screen camera design provides a borderless visual experience. Top-tier configuration with 512 GB of storage and 16 GB of RAM, combined with a 6,000 mAh battery and 100 W fast charging technology, delivers both performance and endurance, leading the tech trend. Reference price: 5,999–6,499.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05215025693178177,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_0"
        },
        "Text": "Alibaba Cloud Model Studio Phone Product Introduction\nAlibaba Cloud Model Studio X1 — Enjoy the ultimate visual experience: Features a 6.7-inch 1440 x 3200 pixel ultra-clear screen with a 120 Hz refresh rate for a smooth and vivid visual experience. The powerful combination of 256 GB of mass storage and 12 GB of RAM handles large games and multitasking with ease. A long-lasting 5000 mAh battery and an ultra-sensitive quad-camera system capture every wonderful moment of your life. Reference price: 4,599–4,999\nTongyi Vivid 7 — A new experience in smart photography: Features a 6.5-inch 1080 x 2400 pixel full screen. The AI smart photography feature ensures every photo shows professional-grade color and detail. 8 GB of RAM and 128 GB of storage ensure smooth operation, and the 4,500 mAh battery meets daily needs. Side fingerprint unlock is convenient and secure. Reference price: 2,999–3,299\nStardust S9 Pro — An innovative visual feast: A groundbreaking 6.9-inch 1440 x 3088 pixel under-screen camera design provides a borderless visual experience. Top-tier configuration with 512 GB of storage and 16 GB of RAM, combined with a 6,000 mAh battery and 100 W fast charging technology, delivers both performance and endurance, leading the tech trend. Reference price: 5,999–6,499."
      },
      {
        "Score": 0.5322970747947693,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Model_Studio_Series_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.641660213470459,
          "image_url": [],
          "nid": "00be1864c18b4c39c59f83713af80092|4f2bfb02cc9fc4e85597b2e717699207",
          "_q_score": 0.9948930557644994,
          "source": "0",
          "_score": 0.5322970747947693,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios. Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios. 512 GB of storage, 12 GB of RAM, a 4700 mAh battery, and UTG ultra-thin flexible glass open a new chapter in the era of foldable screens. In addition, this phone supports Dual SIM Dual Standby and satellite calls, helping you stay connected anywhere in the world. Reference retail price: 9,999–10,999. Each phone is a masterpiece of craftsmanship, designed to be a work of technological art in your hands. Choose your smart companion and start a new chapter of future tech life.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05188392847776413,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_2"
        },
        "Text": "Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios. Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios. 512 GB of storage, 12 GB of RAM, a 4700 mAh battery, and UTG ultra-thin flexible glass open a new chapter in the era of foldable screens. In addition, this phone supports Dual SIM Dual Standby and satellite calls, helping you stay connected anywhere in the world. Reference retail price: 9,999–10,999. Each phone is a masterpiece of craftsmanship, designed to be a work of technological art in your hands. Choose your smart companion and start a new chapter of future tech life."
      },
      {
        "Score": 0.5050643086433411,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Model_Studio_Series_Phone_Product_Introduction_1742197778230.json?Expires=1742457465&OSSAccessKeyId=TestID&Signature=ptFkSObdnBrbJNEw8CnlOSP%2FTeI%3D",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.6757396459579468,
          "image_url": [],
          "nid": "f05d1b51eb6b033b32a162d90a9da71b|5cb6b848be8d11eb168c031025415cc5|4f2bfb02cc9fc4e85597b2e717699207",
          "_q_score": 0.9890713450653327,
          "source": "0",
          "_score": 0.5050643086433411,
          "title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "Top-tier configuration with 512 GB of storage and 16 GB of RAM, combined with a 6,000 mAh battery and 100 W fast charging technology, delivers both performance and endurance, leading the tech trend. Reference price: 5,999–6,499. Alibaba Cloud Model Studio Ace Ultra — The gamer's choice: Equipped with a 6.67-inch 1080 x 2400 pixel screen, 10 GB of RAM, and 256 GB of storage to ensure silky-smooth gameplay. The 5,500 mAh battery with a liquid cooling system stays cool even during long gaming sessions. High-dynamic dual speakers upgrade the gaming experience with immersive sound effects. Reference price: 3,999–4,299. Alibaba Cloud Model Studio Zephyr Z9 — The art of being thin and portable: A lightweight 6.4-inch 1080 x 2340 pixel design, with 128 GB of storage and 6 GB of RAM, is more than enough for daily use. The 4,000 mAh battery ensures a full day of use without worry. The 30x digital zoom lens captures distant details. It is thin but powerful. Reference price: 2,499–2,799. Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios.",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "Alibaba Cloud Model Studio Phone Product Introduction",
          "_rc_t_score": 0.05158032476902008,
          "doc_name": "Alibaba Cloud Model Studio Series Phone Product Introduction",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_1"
        },
        "Text": "Top-tier configuration with 512 GB of storage and 16 GB of RAM, combined with a 6,000 mAh battery and 100 W fast charging technology, delivers both performance and endurance, leading the tech trend. Reference price: 5,999–6,499. Alibaba Cloud Model Studio Ace Ultra — The gamer's choice: Equipped with a 6.67-inch 1080 x 2400 pixel screen, 10 GB of RAM, and 256 GB of storage to ensure silky-smooth gameplay. The 5,500 mAh battery with a liquid cooling system stays cool even during long gaming sessions. High-dynamic dual speakers upgrade the gaming experience with immersive sound effects. Reference price: 3,999–4,299. Alibaba Cloud Model Studio Zephyr Z9 — The art of being thin and portable: A lightweight 6.4-inch 1080 x 2340 pixel design, with 128 GB of storage and 6 GB of RAM, is more than enough for daily use. The 4,000 mAh battery ensures a full day of use without worry. The 30x digital zoom lens captures distant details. It is thin but powerful. Reference price: 2,499–2,799. Alibaba Cloud Model Studio Flex Fold+ — A new era of foldable screens: Combining innovation and luxury, it features a 7.6-inch 1800 x 2400 pixel main screen and a 4.7-inch 1080 x 2400 pixel external screen. The multi-angle free-stop hinge design meets the needs of different scenarios."
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

Perbarui basis pengetahuan

Contoh berikut menunjukkan cara memperbarui basis pengetahuan pencarian dokumen. Aplikasi yang menggunakan basis pengetahuan tersebut mencerminkan pembaruan Anda secara real time. Konten baru menjadi tersedia untuk pengambilan, sedangkan konten yang dihapus tidak lagi dapat diakses.

Anda tidak dapat memperbarui basis pengetahuan kueri data atau tanya jawab gambar menggunakan API. Untuk informasi selengkapnya, lihat Perbarui basis pengetahuan.
  • Pembaruan inkremental: Satu-satunya metode yang didukung adalah proses tiga langkah: unggah file yang diperbarui, tambahkan file ke basis pengetahuan, lalu hapus file lama.

  • Pembaruan penuh: Untuk setiap file dalam basis pengetahuan, lakukan ketiga langkah tersebut untuk menyelesaikan pembaruan.

  • Pembaruan atau sinkronisasi otomatis: Untuk informasi selengkapnya, lihat Cara memperbarui atau menyinkronkan basis pengetahuan secara otomatis.

  • Batas file untuk satu pembaruan: Kami menyarankan untuk memperbarui tidak lebih dari 10.000 file sekaligus. Melebihi batas ini dapat mencegah basis pengetahuan diperbarui dengan benar.

1. Unggah file yang diperbarui

Ikuti prosedur dalam Buat basis pengetahuan: Langkah 2 untuk mengunggah file yang diperbarui ke ruang kerja yang berisi basis pengetahuan tersebut.

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

2. Tambahkan file ke basis pengetahuan

2.1. Kirim Tugas Append

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

Setelah Anda mengirimkan task tersebut, Model Studio membangun ulang basis pengetahuan secara asinkron. Operasi ini mengembalikan Data.Id, yaitu ID task (job_id). Gunakan ID ini pada langkah berikutnya untuk menanyakan status task.

Penting
  • Setelah Anda memanggil operasi SubmitIndexAddDocumentsJob, task memerlukan waktu tertentu untuk selesai. Anda dapat menggunakan job_id untuk menanyakan status task tersebut. Jangan mengirim ulang task sebelum task tersebut selesai.

Penting

Python

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

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        index_id (str): The knowledge base ID.
        file_id (str): The file ID.
        source_type(str): The data type.

    Returns:
        The response from the Alibaba Cloud Model Studio service.
    """
    headers = {}
    submit_index_add_documents_job_request = bailian_20231229_models.SubmitIndexAddDocumentsJobRequest(
        index_id=index_id,
        document_ids=[file_id],
        source_type=source_type
    )
    runtime = util_models.RuntimeOptions()
    return client.submit_index_add_documents_job_with_options(workspace_id, submit_index_add_documents_job_request, headers, runtime)

Java

/**
 * Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
 *
 * @param client      The client.
 * @param workspaceId The workspace ID.
 * @param indexId     The knowledge base ID.
 * @param fileId      The file ID.
 * @param sourceType  The data type.
 * @return The response from the Alibaba Cloud Model Studio service.
 */
public SubmitIndexAddDocumentsJobResponse submitIndexAddDocumentsJob(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId, String sourceType) throws Exception {
    Map<String, String> headers = new HashMap<>();
    SubmitIndexAddDocumentsJobRequest submitIndexAddDocumentsJobRequest = new SubmitIndexAddDocumentsJobRequest();
    submitIndexAddDocumentsJobRequest.setIndexId(indexId);
    submitIndexAddDocumentsJobRequest.setDocumentIds(Collections.singletonList(fileId));
    submitIndexAddDocumentsJobRequest.setSourceType(sourceType);
    RuntimeOptions runtime = new RuntimeOptions();
    return client.submitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
}

PHP

/**
 * Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
 *
 * @param Bailian $client The client object.
 * @param string $workspaceId The workspace ID.
 * @param string $indexId The knowledge base ID.
 * @param string $fileId The file ID.
 * @param string $sourceType The data type.
 * @return SubmitIndexAddDocumentsJobResponse The response from the Alibaba Cloud Model Studio service.
 * @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

/**
 * Mengirimkan task untuk menambahkan file.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} indexId - The knowledge base ID.
 * @param {string} fileId - The file ID.
 * @param {string} sourceType - The data type.
 * @returns {Promise<bailian20231229.SubmitIndexAddDocumentsJobResponse>} - The response from the Alibaba Cloud Model Studio service.
 */
async function submitIndexAddDocumentsJob(client, workspaceId, indexId, fileId, sourceType) {
    const headers = {};
    const req = new bailian20231229.SubmitIndexAddDocumentsJobRequest({
        indexId,
        documentIds: [fileId],
        sourceType,
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.submitIndexAddDocumentsJobWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
/// </summary>
/// <param name="client">The client.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="indexId">The knowledge base ID.</param>
/// <param name="fileId">The file ID.</param>
/// <param name="sourceType">The data type.</param>
/// <returns>The response from the Alibaba Cloud Model Studio service.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobResponse SubmitIndexAddDocumentsJob(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId,
    string fileId,
    string sourceType)
{
    var headers = new Dictionary<string, string>() { };
    var submitIndexAddDocumentsJobRequest = new AlibabaCloud.SDK.Bailian20231229.Models.SubmitIndexAddDocumentsJobRequest
    {
        IndexId = indexId,
        DocumentIds = new List<string> { fileId },
        SourceType = sourceType
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.SubmitIndexAddDocumentsJobWithOptions(workspaceId, submitIndexAddDocumentsJobRequest, headers, runtime);
}

Go

// SubmitIndexAddDocumentsJob menambahkan dan mengimpor file yang telah diurai ke basis pengetahuan pencarian dokumen.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - indexId (string): The knowledge base ID.
//   - fileId(string): The file ID.
//   - sourceType(string): The data type.
//
// Returns:
//   - *bailian20231229.SubmitIndexAddDocumentsJobResponse: The response from the Alibaba Cloud Model Studio service.
//   - error: The 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 task selesai

Task pengindeksan memerlukan waktu tertentu untuk selesai. Selama jam sibuk, proses ini dapat memakan waktu beberapa jam. Anda dapat memanggil operasi GetIndexJobStatus untuk menanyakan status eksekusinya.

Nilai COMPLETED pada bidang Data.Status dalam respons menunjukkan bahwa semua file yang diperbarui telah berhasil ditambahkan ke basis pengetahuan.

Daftar Documents dalam respons berisi semua file untuk task penambahan yang sesuai dengan job_id yang Anda berikan.

Penting

Python

def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    Menanyakan status task pengindeksan.

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        index_id (str): The knowledge base ID.
        job_id (str): The task ID.

    Returns:
        The response from the Alibaba Cloud Model Studio service.
    """
    headers = {}
    get_index_job_status_request = bailian_20231229_models.GetIndexJobStatusRequest(
        index_id=index_id,
        job_id=job_id
    )
    runtime = util_models.RuntimeOptions()
    return client.get_index_job_status_with_options(workspace_id, get_index_job_status_request, headers, runtime)

Java

/**
 * Menanyakan status task pengindeksan.
 *
 * @param client      The client.
 * @param workspaceId The workspace ID.
 * @param jobId       The task ID.
 * @param indexId     The knowledge base ID.
 * @return The response from the Alibaba Cloud Model Studio service.
 */
public GetIndexJobStatusResponse getIndexJobStatus(com.aliyun.bailian20231229.Client client, String workspaceId, String jobId, String indexId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    com.aliyun.bailian20231229.models.GetIndexJobStatusRequest getIndexJobStatusRequest = new com.aliyun.bailian20231229.models.GetIndexJobStatusRequest();
    getIndexJobStatusRequest.setIndexId(indexId);
    getIndexJobStatusRequest.setJobId(jobId);
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    GetIndexJobStatusResponse getIndexJobStatusResponse = null;
    getIndexJobStatusResponse = client.getIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
    return getIndexJobStatusResponse;
}

PHP

/**
 * Menanyakan status task pengindeksan.
 *
 * @param Bailian $client The client.
 * @param string $workspaceId The workspace ID.
 * @param string $indexId The knowledge base ID.
 * @param string $jobId The task ID.
 * @return GetIndexJobStatusResponse The response from the Alibaba Cloud Model Studio service.
 */
public function getIndexJobStatus($client, $workspaceId, $jobId, $indexId) {
    $headers = [];
    $getIndexJobStatusRequest = new GetIndexJobStatusRequest([
        'indexId' => $indexId,
        'jobId' => $jobId
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->getIndexJobStatusWithOptions($workspaceId, $getIndexJobStatusRequest, $headers, $runtime);
}

Node.js

/**
 * Menanyakan status task pengindeksan.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} jobId - The task ID.
 * @param {string} indexId - The knowledge base ID.
 * @returns {Promise<bailian20231229.GetIndexJobStatusResponse>} - The response from the Alibaba Cloud Model Studio service.
 */
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>
/// Menanyakan status tugas pengindeksan.
/// </summary>
/// <param name="client">Klien.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <param name="jobId">ID tugas.</param>
/// <param name="indexId">ID basis pengetahuan.</param>
/// <returns>Tanggapan dari layanan Alibaba Cloud Model Studio.</returns>
/// <exception cref="Exception">Pengecualian dilemparkan jika terjadi kesalahan selama pemanggilan.</exception>
public AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusResponse GetIndexJobStatus(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string jobId,
    string indexId)
{
    var headers = new Dictionary<string, string>() { };
    var getIndexJobStatusRequest = new AlibabaCloud.SDK.Bailian20231229.Models.GetIndexJobStatusRequest
    {
        IndexId = indexId,
        JobId = jobId
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.GetIndexJobStatusWithOptions(workspaceId, getIndexJobStatusRequest, headers, runtime);
}

Go

// GetIndexJobStatus menanyakan status task pengindeksan.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - jobId (string): The task ID.
//   - indexId (string): The knowledge base ID.
//
// Returns:
//   - *bailian20231229.GetIndexJobStatusResponse: The response from the Alibaba Cloud Model Studio service.
//   - error: The 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 Phone Product Introduction",
        "Code": "FINISH"
      }
    ],
    "JobId": "76f243b9ee534d59a61f156ff0xxxxxx"
  },
  "Code": "Success",
  "Success": true
}

3. Hapus file lama

Akhirnya, panggil operasi DeleteIndexDocument untuk menghapus permanen versi lama file dari basis pengetahuan. Hal ini mencegah informasi usang diambil secara tidak sengaja.

  • file_id: Masukkan FileId dari file lama tersebut.

Catatan

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

Penting

Python

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

    Args:
        client (bailian20231229Client): The client.
        workspace_id (str): The workspace ID.
        index_id (str): The knowledge base ID.
        file_id (str): The file ID.

    Returns:
        The response from the Alibaba Cloud Model Studio service.
    """
    headers = {}
    delete_index_document_request = bailian_20231229_models.DeleteIndexDocumentRequest(
        index_id=index_id,
        document_ids=[file_id]
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_index_document_with_options(workspace_id, delete_index_document_request, headers, runtime)

Java

/**
 * Menghapus permanen satu atau beberapa file dari basis pengetahuan pencarian dokumen yang ditentukan.
 *
 * @param client      The client.
 * @param workspaceId The workspace ID.
 * @param indexId     The knowledge base ID.
 * @param fileId      The file ID.
 * @return The response from the Alibaba Cloud Model Studio service.
 */
public DeleteIndexDocumentResponse deleteIndexDocument(com.aliyun.bailian20231229.Client client, String workspaceId, String indexId, String fileId) throws Exception {
    Map<String, String> headers = new HashMap<>();
    DeleteIndexDocumentRequest deleteIndexDocumentRequest = new DeleteIndexDocumentRequest();
    deleteIndexDocumentRequest.setIndexId(indexId);
    deleteIndexDocumentRequest.setDocumentIds(Collections.singletonList(fileId));
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    return client.deleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
}

PHP

/**
 * Menghapus permanen satu atau beberapa file dari basis pengetahuan pencarian dokumen yang ditentukan.
 *
 * @param Bailian $client The client object.
 * @param string $workspaceId The workspace ID.
 * @param string $indexId The knowledge base ID.
 * @param string $fileId The file ID.
 * @return DeleteIndexDocumentResponse The response from the Alibaba Cloud Model Studio service.
 * @throws Exception
 */
public function deleteIndexDocument($client, $workspaceId, $indexId, $fileId) {
    $headers = [];
    $deleteIndexDocumentRequest = new DeleteIndexDocumentRequest([
        "indexId" => $indexId,
        "documentIds" => [
            $fileId
        ]
    ]);
    $runtime = new RuntimeOptions([]);
    return $client->deleteIndexDocumentWithOptions($workspaceId, $deleteIndexDocumentRequest, $headers, $runtime);
}

Node.js

/**
 * Menghapus permanen satu atau beberapa file dari basis pengetahuan pencarian dokumen yang ditentukan.
 * @param {Bailian20231229Client} client - The client.
 * @param {string} workspaceId - The workspace ID.
 * @param {string} indexId - The knowledge base ID.
 * @param {string} fileId - The file ID.
 * @returns {Promise<bailian20231229.DeleteIndexDocumentResponse>} - The response from the Alibaba Cloud Model Studio service.
 */
async function deleteIndexDocument(client, workspaceId, indexId, fileId) {
    const headers = {};
    const req = new bailian20231229.DeleteIndexDocumentRequest({
        indexId,
        documentIds: [fileId],
    });
    const runtime = new Util.RuntimeOptions({});
    return await client.deleteIndexDocumentWithOptions(workspaceId, req, headers, runtime);
}

C#

/// <summary>
/// Menghapus permanen satu atau beberapa file dari basis pengetahuan pencarian dokumen yang ditentukan.
/// </summary>
/// <param name="client">The client.</param>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="indexId">The knowledge base ID.</param>
/// <param name="fileId">The file ID.</param>
/// <returns>The response from the Alibaba Cloud Model Studio service.</returns>
public AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentResponse DeleteIndexDocument(
    AlibabaCloud.SDK.Bailian20231229.Client client,
    string workspaceId,
    string indexId,
    string fileId)
{
    var headers = new Dictionary<string, string>() { };
    var deleteIndexDocumentRequest = new AlibabaCloud.SDK.Bailian20231229.Models.DeleteIndexDocumentRequest
    {
        IndexId = indexId,
        DocumentIds = new List<string> { fileId }
    };
    var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    return client.DeleteIndexDocumentWithOptions(workspaceId, deleteIndexDocumentRequest, headers, runtime);
}

Go

// DeleteIndexDocument menghapus permanen satu atau beberapa file dari basis pengetahuan pencarian dokumen yang ditentukan.
//
// Parameters:
//   - client (bailian20231229.Client): The client.
//   - workspaceId (string): The workspace ID.
//   - indexId (string): The knowledge base ID.
//   - fileId (string): The file ID.
//
// Returns:
//   - *bailian20231229.DeleteIndexDocumentResponse: The response from the Alibaba Cloud Model Studio service.
//   - error: The 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. Anda harus melakukan tugas-tugas ini di Konsol Model Studio.

Menampilkan basis pengetahuan

Untuk menampilkan basis pengetahuan dalam ruang kerja tertentu, panggil operasi ListIndices.

Penting
  • Sebelum memanggil operasi ini, pengguna RAM harus memiliki izin API yang diperlukan dengan menyambungkan kebijakan AliyunBailianDataFullAccess.

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

Python

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

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

    Returns:
        Respons dari layanan 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 basis pengetahuan dalam ruang kerja tertentu.
 *
 * @param client      Client.
 * @param workspaceId ID ruang kerja.
 * @return Respons dari layanan 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 basis pengetahuan dalam ruang kerja tertentu.
 *
 * @param Bailian $client Objek client.
 * @param string $workspaceId ID ruang kerja.
 * @return ListIndicesResponse Respons dari layanan Alibaba Cloud Model Studio.
 * @throws Exception
 */
public function listIndices($client, $workspaceId) {
    $headers = [];
    $listIndicesRequest = new ListIndicesRequest([]);
    $runtime = new RuntimeOptions([]);
    return $client->listIndicesWithOptions($workspaceId, $listIndicesRequest, $headers, $runtime);
}

Node.js

/**
 * Mendapatkan detail basis pengetahuan dalam ruang kerja tertentu.
 * @param {bailian20231229.Client} client Client.
 * @param {string} workspaceId ID ruang kerja.
 * @returns {Promise<bailian20231229.ListIndicesResponse>} Respons dari layanan 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 basis pengetahuan dalam ruang kerja tertentu.
/// </summary>
/// <param name="client">Client.</param>
/// <param name="workspaceId">ID ruang kerja.</param>
/// <returns>Respons dari layanan 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 basis pengetahuan dalam ruang kerja tertentu.
//
// Parameters:
//   - client      *bailian20231229.Client: Client.
//   - workspaceId string: ID ruang kerja.
//
// Returns:
//   - *bailian20231229.ListIndicesResponse: Respons dari layanan Alibaba Cloud Model Studio.
//   - error: Informasi error.
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 operasi DeleteIndex. Sebelum menghapus basis pengetahuan, Anda harus memutuskan kaitannya dari semua aplikasi Alibaba Cloud Model Studio yang terhubung di Konsol Model Studio. Jika tidak, penghapusan akan gagal.

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

Penting
  • Sebelum memanggil operasi ini, pengguna RAM harus memiliki izin API yang diperlukan dengan menyambungkan kebijakan AliyunBailianDataFullAccess.

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

Python

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

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

    Returns:
        Respons dari layanan 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 yang ditentukan secara permanen.
 *
 * @param client      Client.
 * @param workspaceId ID ruang kerja.
 * @param indexId     ID basis pengetahuan.
 * @return Respons dari layanan 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 yang ditentukan secara permanen.
 *
 * @param Bailian $client Objek client.
 * @param string $workspaceId ID ruang kerja.
 * @param string $indexId ID basis pengetahuan.
 * @return mixed Respons dari layanan 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 yang ditentukan 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 layanan 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 yang ditentukan 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 layanan 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 yang ditentukan secara permanen.
//
// Parameters:
//   - client      *bailian20231229.Client: Client.
//   - workspaceId string: ID ruang kerja.
//   - indexId     string: ID basis pengetahuan.
//
// Returns:
//   - *bailian20231229.DeleteIndexResponse: Respons dari layanan Alibaba Cloud Model Studio.
//   - error: Informasi error.
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"
}

API

Lihat Katalog API (Basis Pengetahuan) untuk daftar lengkap API basis pengetahuan serta parameter permintaan dan respons-nya.

FAQ

  1. Bagaimana cara mengotomatiskan pembaruan dan sinkronisasi basis pengetahuan?

    Pencarian dokumen

    Integrasikan API untuk Object Storage Service (OSS), Function Compute (FC), dan basis pengetahuan Model Studio. Ikuti langkah-langkah berikut:

    1. Buat bucket: Buka Konsol OSS untuk membuat bucket OSS guna menyimpan file sumber Anda.

    2. Buat basis pengetahuan: Buat basis pengetahuan pencarian dokumen untuk menyimpan konten pengetahuan privat Anda.

    3. Buat fungsi kustom: Buka Konsol FC dan buat fungsi untuk menangani event perubahan file, seperti operasi tambah atau hapus. Lihat Buat fungsi. Fungsi-fungsi ini menyinkronkan perubahan file dari OSS ke basis pengetahuan Anda dengan memanggil API terkait yang dijelaskan dalam Perbarui basis pengetahuan.

    4. Buat pemicu OSS: Di FC, kaitkan pemicu OSS dengan fungsi kustom yang telah Anda buat pada langkah sebelumnya. Ketika event perubahan file terdeteksi—misalnya unggahan file baru ke OSS—pemicu tersebut akan aktif dan FC menjalankan fungsi tersebut. Lihat Pemicu.

    Kueri data dan Tanya Jawab gambar

    Tidak didukung.

  1. Mengapa basis pengetahuan baru saya kosong?

    Hal ini biasanya terjadi jika langkah Kirim pekerjaan pengindeksan gagal dijalankan. Jika Anda memanggil API CreateIndex tetapi panggilan API SubmitIndexJob gagal, maka basis pengetahuan akan kosong. Untuk mengatasinya, kirim ulang pekerjaan pengindeksan dan tunggu hingga pekerjaan pengindeksan selesai.

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

    Error ini biasanya terjadi karena langkah Unggah file ke penyimpanan temporary tidak berhasil dijalankan. Pastikan langkah ini berhasil sebelum Anda memanggil operasi API AddFile.

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

    Error ini biasanya terjadi karena alasan berikut:

    • Titik akhir layanan (service endpoint) yang diminta salah: Untuk akses melalui Internet, pengguna situs China (public cloud) harus menggunakan titik akhir layanan di China (Beijing), sedangkan pengguna situs internasional harus menggunakan titik akhir layanan di Singapura. Jika Anda menggunakan fitur online debugging, pastikan Anda memilih titik akhir layanan yang benar, seperti yang ditunjukkan pada gambar berikut.

      image

    • Nilai WorkspaceId salah, atau Anda bukan anggota ruang kerja tersebut: Sebelum memanggil API, verifikasi bahwa WorkspaceId benar dan Anda merupakan anggota ruang kerja tersebut. Cara ditambahkan sebagai anggota ruang kerja tertentu

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

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

  1. Apa yang harus saya lakukan jika menerima error "Category is mismatched"?

    Error ini biasanya terjadi ketika CategoryId yang digunakan dalam panggilan API ApplyFileUploadLease berbeda dari CategoryId yang diteruskan dalam panggilan API AddFile berikutnya.

    Pastikan Anda menggunakan CategoryId yang sama sepanjang alur unggah file, mulai dari ApplyFileUploadLease hingga AddFile. Anda dapat memanggil API ListCategory untuk mengambil daftar kategori dalam ruang kerja saat ini dan memverifikasi bahwa CategoryId yang Anda gunakan benar.

Penagihan

  • Semua fitur basis pengetahuan dan panggilan API gratis. Lihat Knowledge Base: Billing.

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

Kode error

Jika panggilan ke operasi API yang dijelaskan dalam topik ini gagal, lihat Error Center.