Skip to main content
知識庫(RAG)

知識庫API指南

阿里雲百鍊知識庫提供開放的API介面,便於您快速接入現有業務系統,實現自動化操作,並應對複雜的檢索需求。

知識庫相關功能僅能在中國站華北2(北京)地區開通和使用,其他地區如新加坡、德國(法蘭克福)等均不支援知識庫功能。

前置步驟

  1. 子帳號(主帳號不需要)需擷取API許可權(AliyunBailianDataFullAccess策略),並加入一個業務空間,然後才能通過阿里雲API操作知識庫。
    子帳號只能操作已加入業務空間中的知識庫;主帳號可操作所有業務空間下的知識庫。
  2. 安裝最新版阿里雲百鍊SDK,以調用知識庫相關的阿里雲API。如何安裝請參考阿里雲SDK開發參考目錄下文檔。
    如果SDK不能滿足需求,可以通過簽名機制(較為複雜)HTTP請求知識庫的相關介面。具體對接方式請參見API概覽
  3. 擷取AccessKey和AccessKey Secret以及業務空間 ID,並將它們配置到系統內容變數,以運行範例程式碼。以Linux作業系統為例:
    如果您使用了 IDE 或其他輔助開發外掛程式,需自行將ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和WORKSPACE_ID變數配置到相應的開發環境中。
export ALIBABA_CLOUD_ACCESS_KEY_ID='您的阿里雲存取金鑰ID'
export ALIBABA_CLOUD_ACCESS_KEY_SECRET='您的阿里雲存取金鑰密碼'
export WORKSPACE_ID='您的阿里雲百鍊業務空間ID'
  1. 準備好樣本知識文檔阿里雲百鍊系列手機產品介紹.docx,用於建立知識庫。
  • 建立知識庫
  • 檢索知識庫
  • 更新知識庫
  • 管理知識庫
  • 在調用本樣本之前,請務必完成上述所有前置步驟。子帳號調用本樣本前需擷取AliyunBailianDataFullAccess策略
  • 若您使用了 IDE 或其他輔助開發外掛程式,需將ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRETWORKSPACE_ID變數配置到相應的開發環境中。
Python
# 範例程式碼僅供參考,請勿在生產環境中直接使用
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():
    """檢查並提示設定必要的環境變數"""
    required_vars = {
        'ALIBABA_CLOUD_ACCESS_KEY_ID': '阿里雲存取金鑰ID',
        'ALIBABA_CLOUD_ACCESS_KEY_SECRET': '阿里雲存取金鑰密碼',
        'WORKSPACE_ID': '阿里雲百鍊業務空間ID'
    }
    missing_vars = []
    for var, description in required_vars.items():
        if not os.environ.get(var):
            missing_vars.append(var)
            print(f"錯誤:請設定 {var} 環境變數 ({description})")

    return len(missing_vars) == 0

def calculate_md5(file_path: str) -> str:
    """
    計算檔案的MD5值。

    參數:
        file_path (str): 檔案本地路徑。

    返回:
        str: 檔案的MD5值。
    """
    md5_hash = hashlib.md5()

    # 以二進位形式讀取檔案
    with open(file_path, "rb") as f:
        # 按塊讀取檔案,避免大檔案佔用過多記憶體
        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:
    """
    擷取檔案大小(以位元組為單位)。
    參數:
        file_path (str): 檔案本地路徑。
    返回:
        int: 檔案大小(以位元組為單位)。
    """
    return os.path.getsize(file_path)

# 初始化用戶端(Client)
def create_client() -> bailian20231229Client:
    """
    建立並配置用戶端(Client)。

    返回:
        bailian20231229Client: 配置好的用戶端(Client)。
    """
    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')
    )
    # 下方接入地址以公用雲端的公網接入地址為例,可按需更換接入地址。
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)

# 申請檔案上傳租約
def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    從阿里雲百鍊服務申請檔案上傳租約。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        category_id (str): 類目ID。
        file_name (str): 檔案名稱。
        file_md5 (str): 檔案的MD5值。
        file_size (int): 檔案大小(以位元組為單位)。
        workspace_id (str): 業務空間ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)

# 上傳檔案到臨時儲存
def upload_file(pre_signed_url, headers, file_path):
    """
    將檔案上傳到阿里雲百鍊服務。
    參數:
        pre_signed_url (str): 上傳租約中的 URL。
        headers (dict): 上傳請求的頭部。
        file_path (str): 檔案本地路徑。
    """
    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()

# 添加檔案到類目中
def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    將檔案添加到阿里雲百鍊服務的指定類目中。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        lease_id (str): 租約ID。
        parser (str): 用於檔案的解析器。
        category_id (str): 類目ID。
        workspace_id (str): 業務空間ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)

# 查詢檔案的解析狀態
def describe_file(client, workspace_id, file_id):
    """
    擷取檔案的基本資料。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        file_id (str): 檔案ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    headers = {}
    runtime = util_models.RuntimeOptions()
    return client.describe_file_with_options(workspace_id, file_id, headers, runtime)

# 初始化知識庫(索引)
def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    在阿里雲百鍊服務中建立知識庫(初始化)。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        file_id (str): 檔案ID。
        name (str): 知識庫名稱。
        structure_type (str): 知識庫的資料類型。
        source_type (str): 應用資料的資料類型,支援類目類型和檔案類型。
        sink_type (str): 知識庫的向量儲存類型。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)

# 提交索引任務
def submit_index(client, workspace_id, index_id):
    """
    向阿里雲百鍊服務提交索引任務。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)

# 等待索引任務完成
def get_index_job_status(client, workspace_id, job_id, index_id):
    """
    查詢索引任務狀態。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        job_id (str): 任務ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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
):
    """
    使用阿里雲百鍊服務建立知識庫。
    參數:
        file_path (str): 檔案本地路徑。
        workspace_id (str): 業務空間ID。
        name (str): 知識庫名稱。
    返回:
        str or None: 如果成功,返回知識庫ID;否則返回None。
    """
    # 設定預設值
    category_id = 'default'
    parser = 'DASHSCOPE_DOCMIND'
    source_type = 'DATA_CENTER_FILE'
    structure_type = 'unstructured'
    sink_type = 'DEFAULT'
    try:
        # 步驟1:建立用戶端(Client)
        print("步驟1:建立Client")
        client = create_client()
        # 步驟2:準備檔案資訊
        print("步驟2:準備檔案資訊")
        file_name = os.path.basename(file_path)
        file_md5 = calculate_md5(file_path)
        file_size = get_file_size(file_path)
        # 步驟3:申請上傳租約
        print("步驟3:向阿里雲百鍊申請上傳租約")
        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
        # 步驟4:上傳檔案
        print("步驟4:上傳檔案到阿里雲百鍊")
        upload_file(upload_url, upload_headers, file_path)
        # 步驟5:將檔案添加到伺服器
        print("步驟5:將檔案添加到阿里雲百鍊伺服器")
        add_response = add_file(client, lease_id, parser, category_id, workspace_id)
        file_id = add_response.body.data.file_id
        # 步驟6:檢查檔案狀態
        print("步驟6:檢查阿里雲百鍊中的檔案狀態")
        while True:
            describe_response = describe_file(client, workspace_id, file_id)
            status = describe_response.body.data.status
            print(f"當前檔案狀態:{status}")
            if status == 'INIT':
                print("檔案待解析,請稍候...")
            elif status == 'PARSING':
                print("檔案解析中,請稍候...")
            elif status == 'PARSE_SUCCESS':
                print("檔案解析完成!")
                break
            else:
                print(f"未知的檔案狀態:{status},請聯絡支援人員。")
                return None
            time.sleep(5)
        # 步驟7:初始化知識庫
        print("步驟7:在阿里雲百鍊中建立知識庫")
        index_response = create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type)
        index_id = index_response.body.data.id
        # 步驟8:提交索引任務
        print("步驟8:向阿里雲百鍊提交索引任務")
        submit_response = submit_index(client, workspace_id, index_id)
        job_id = submit_response.body.data.id
        # 步驟9:擷取索引任務狀態
        print("步驟9:擷取阿里雲百鍊索引任務狀態")
        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}")
            if status == 'COMPLETED':
                break
            time.sleep(5)
        print("阿里雲百鍊知識庫建立成功!")
        return index_id
    except Exception as e:
        print(f"發生錯誤:{e}")
        return None

def main():
    if not check_environment_variables():
        print("環境變數校正未通過。")
        return
    file_path = input("請輸入您需要上傳檔案的實際本地路徑(以Linux為例:/xxx/xxx/阿里雲百鍊系列手機產品介紹.docx):")
    kb_name = input("請為您的知識庫輸入一個名稱:")
    workspace_id = os.environ.get('WORKSPACE_ID')
    create_knowledge_base(file_path, workspace_id, kb_name)

if __name__ == '__main__':
    main()

建立知識庫

接下來通過樣本,引導您在給定的業務空間下建立一個文檔搜尋類知識庫。

1. 初始化用戶端

在開始上傳檔案和建立知識庫之前,您需要使用配置好的AccessKey和AccessKey Secret初始化用戶端(Client),以完成身分識別驗證和存取點endpoint配置。
  • 公網接入地址:
    請確保您的用戶端可以訪問公網。
    • 公用雲端:bailian.ap-southeast-1.aliyuncs.com
  • VPC接入地址:
    若您的用戶端部署在阿里雲新加坡地區ap-southeast-1(公用雲端),且處於VPC網路環境中,可以使用以下VPC接入地址(不支援跨地區訪問)。
    • 公用雲端:bailian-vpc.ap-southeast-1.aliyuncs.com
建立完成後,您將得到一個Client對象,用於後續的 API 呼叫。
Python
def create_client() -> bailian20231229Client:
    """
    建立並配置用戶端(Client)。

    返回:
        bailian20231229Client: 配置好的用戶端(Client)。
    """
    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')
    )
    # 下方接入地址以公用雲端的公網接入地址為例,可按需更換接入地址。
    config.endpoint = 'bailian.ap-southeast-1.aliyuncs.com'
    return bailian20231229Client(config)

2. 上傳知識庫檔案

2.1. 申請檔案上傳租約

在建立知識庫前,您需先將檔案上傳至同一業務空間,作為知識庫的知識來源。上傳檔案前,需調用ApplyFileUploadLease介面申請一個檔案上傳租約。該租約是一個臨時的授權,允許您在限定時間內(有效期間為分鐘級)上傳檔案。
  • workspace_id:如何擷取業務空間ID
  • category_id:本樣本中,請傳入default。阿里雲百鍊使用類目管理您上傳的檔案,系統會自動建立一個預設類目。您亦可調用AddCategory介面建立新類目,並擷取對應的category_id
  • file_name:請傳入上傳檔案的名稱(包括尾碼)。其值必須與實際檔案名稱一致。例如,上傳圖中的檔案時,請傳入阿里雲百鍊系列手機產品介紹.docx
    image
  • file_md5:請傳入上傳檔案的MD5值(但當前阿里雲不對該值進行校正,便於您使用URL地址上傳檔案)。
    以Python為例,MD5值可使用hashlib模組擷取。其他語言請參見完整範例程式碼
    import hashlib
    
    def calculate_md5(file_path):
        """
        計算檔案的MD5值。
    
        參數:
            file_path (str): 檔案本地路徑。
    
        返回:
            str: 檔案的MD5值。
        """
        md5_hash = hashlib.md5()
    
        # 以二進位形式讀取檔案
        with open(file_path, "rb") as f:
            # 按塊讀取檔案,避免大檔案佔用過多記憶體
            for chunk in iter(lambda: f.read(4096), b""):
                md5_hash.update(chunk)
    
        return md5_hash.hexdigest()
    
    # 使用樣本
    file_path = "請替換為您需要上傳檔案的實際本地路徑,例如/xxx/xxx/xxx/阿里雲百鍊系列手機產品介紹.docx"
    md5_value = calculate_md5(file_path)
    print(f"檔案的MD5值為: {md5_value}")
    
    將代碼中的file_path變數替換為檔案的實際本地路徑後運行,即可擷取目標檔案的MD5值(下方為樣本值):
    檔案的MD5值為: 2ef7361ea907f3a1b91e3b9936f5643a
    
  • file_size:請傳入上傳檔案的位元組大小。
    以Python為例,該值可使用os模組擷取。其他語言請參見完整範例程式碼
    import os
    
    def get_file_size(file_path: str) -> int:
        """
        擷取檔案的位元組大小(以位元組為單位)。
    
        參數:
            file_path (str): 檔案的實際本地路徑。
    
        返回:
            int: 檔案大小(以位元組為單位)。
        """
        return os.path.getsize(file_path)
    
    # 使用樣本
    file_path = "請替換為您需要上傳檔案的實際本地路徑,例如/xxx/xxx/xxx/阿里雲百鍊系列手機產品介紹.docx"
    file_size = get_file_size(file_path)
    print(f"檔案的位元組大小為: {file_size}")
    
    將代碼中的file_path變數替換為檔案的實際本地路徑後運行,即可擷取目標檔案的位元組大小(下方為樣本值):
    檔案的位元組大小為: 14015
    
申請臨時上傳租約成功後,您將獲得:
  • 一組臨時上傳參數:
    • Data.FileUploadLeaseId
    • Data.Param.Method
    • Data.Param.Headers中的X-bailian-extra
    • Data.Param.Headers中的Content-Type
  • 一個臨時上傳URL:Data.Param.Url
您將在下一步中用到它們。
Python
def apply_lease(client, category_id, file_name, file_md5, file_size, workspace_id):
    """
    從阿里雲百鍊服務申請檔案上傳租約。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        category_id (str): 類目ID。
        file_name (str): 檔案名稱。
        file_md5 (str): 檔案的MD5值。
        file_size (int): 檔案大小(以位元組為單位)。
        workspace_id (str): 業務空間ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "CategoryId": "default",
  "FileName": "阿里雲百鍊系列手機產品介紹.docx",
  "Md5": "2ef7361ea907f3a1b91e3b9936f5643a",
  "SizeInBytes": "14015",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "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=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
      "Headers": "        \"X-bailian-extra\": \"MTAwNTQyNjQ5NTE2OTE3OA==\",\n        \"Content-Type\": \"application/pdf\""
    }
  }
}

2.2. 上傳檔案到臨時儲存

取得上傳租約後,您即可使用租約中的臨時上傳參數和臨時上傳URL,將本機存放區或可通過公網訪問的檔案上傳至阿里雲百鍊伺服器。請注意,每個業務空間最多支援1萬個檔案。目前支援上傳的格式包括:PDF、DOCX、DOC、TXT、Markdown、PPTX、PPT、XLSX、XLS、HTML、PNG、JPG、JPEG、BMP 和 GIF。
  • pre_signed_url:請傳入申請檔案上傳租約時介面返回的Data.Param.Url
    該 URL 為預簽名 URL,不支援 FormData 方式上傳,需使用二進位方式上傳(詳見範例程式碼)。
本樣本不支援線上調試和多語言範例程式碼產生。
  • 本地上傳
  • URL地址上傳
Python
import requests
from urllib.parse import urlparse

def upload_file(pre_signed_url, file_path):
    """
    將本地檔案上傳至臨時儲存。

    參數:
        pre_signed_url (str): 上傳租約中的URL。
        file_path (str): 檔案本地路徑。

    返回:
        阿里雲百鍊服務的響應。
    """
    try:
        # 佈建要求頭
        headers = {
            "X-bailian-extra": "請替換為您在上一步中調用ApplyFileUploadLease介面實際返回的Data.Param.Headers中X-bailian-extra欄位的值",
            "Content-Type": "請替換為您在上一步中調用ApplyFileUploadLease介面實際返回的Data.Param.Headers中Content-Type欄位的值(返回空值時,傳空值即可)"
        }

        # 讀取檔案並上傳
        with open(file_path, 'rb') as file:
            # 下方佈建要求方法用於檔案上傳,需與您在上一步中調用ApplyFileUploadLease介面實際返回的Data.Param中Method欄位的值一致
            response = requests.put(pre_signed_url, data=file, headers=headers)

        # 檢查響應狀態代碼
        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 = "請替換為您在上一步中調用ApplyFileUploadLease介面實際返回的Data.Param中Url欄位的值"

    # 將本地檔案上傳至臨時儲存
    file_path = "請替換為您需要上傳檔案的實際本地路徑(以Linux為例:/xxx/xxx/阿里雲百鍊系列手機產品介紹.docx)"
    upload_file(pre_signed_url_or_http_url, file_path)

2.3. 添加檔案到類目中

阿里雲百鍊使用類目管理您上傳的檔案。因此,接下來您需要調用AddFile介面將已上傳的檔案添加到同一業務空間下的類目中。
  • parser:請傳入DASHSCOPE_DOCMIND
  • lease_id:請傳入申請檔案上傳租約時介面返回的Data.FileUploadLeaseId
  • category_id:本樣本中,請傳入default。若您使用了自建類目上傳,則需傳入對應的category_id
    請確保此處傳入的CategoryId申請檔案上傳租約步驟中使用的CategoryId保持一致,否則會出現Category is mismatched錯誤。
完成添加後,阿里雲百鍊將返回該檔案的FileId,並自動開始解析您的檔案。同時lease_id(租約ID)隨即失效,請勿再使用相同的租約ID重複提交
Python
def add_file(client: bailian20231229Client, lease_id: str, parser: str, category_id: str, workspace_id: str):
    """
    將檔案添加到阿里雲百鍊服務的指定類目中。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        lease_id (str): 租約ID。
        parser (str): 用於檔案的解析器。
        category_id (str): 類目ID。
        workspace_id (str): 業務空間ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "CategoryId": "default",
  "LeaseId": "d92bd94fa9b54326a2547415e100c9e2.1742195250069",
  "Parser": "DASHSCOPE_DOCMIND",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": "200",
  "Message": "",
  "RequestId": "5832A1F4-AF91-5242-8B75-35BDC9XXXXXX",
  "Data": {
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

2.4. 查詢檔案的解析狀態

未解析完成的檔案無法用於知識庫,在請求高峰時段,該過程可能需要數小時。您可以調用DescribeFile介面查詢檔案的解析狀態。當本介面返回的Data.Status欄位值為PARSE_SUCCESS時,表示檔案已解析完成,可以將其匯入知識庫。
Python
def describe_file(client, workspace_id, file_id):
    """
    擷取檔案的基本資料。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        file_id (str): 檔案ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    headers = {}
    runtime = util_models.RuntimeOptions()
    return client.describe_file_with_options(workspace_id, file_id, headers, runtime)
{
  "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "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": "阿里雲百鍊系列手機產品介紹.docx",
    "FileId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
    "SizeInBytes": "14015",
    "Parser": "DASHSCOPE_DOCMIND"
  },
  "Code": "Success",
  "Success": "true"
}

3. 建立知識庫

3.1. 初始化知識庫

檔案解析完成後,您即可將其匯入同一業務空間下的知識庫。初始化(非最終提交)一個文檔搜尋類知識庫,可以調用CreateIndex介面
  • workspace_id:如何擷取業務空間ID
  • file_id:請傳入添加檔案到類目中時介面返回的FileId
    若source_type為DATA_CENTER_FILE,則該參數為必傳,否則介面將報錯。
  • structure_type:本樣本中,請傳入unstructured
  • source_type:本樣本中,請傳入DATA_CENTER_FILE
  • sink_type:本樣本中,請傳入BUILT_IN
本介面返回的Data.Id欄位值即為知識庫ID,用於後續的索引構建。
請您妥善保管知識庫ID,後續該知識庫所有相關API操作都將用到它。
Python
def create_index(client, workspace_id, file_id, name, structure_type, source_type, sink_type):
    """
    在阿里雲百鍊服務中建立知識庫(初始化)。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        file_id (str): 檔案ID。
        name (str): 知識庫名稱。
        structure_type (str): 知識庫的資料類型。
        source_type (str): 應用資料的資料類型,支援類目類型和檔案類型。
        sink_type (str): 知識庫的向量儲存類型。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "Name": "阿里雲百鍊手機知識庫",
  "SinkType": "BUILT_IN",
  "SourceType": "DATA_CENTER_FILE",
  "StructureType": "unstructured",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "DocumentIds": [
    "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
  ]
}
{
  "Status": "200",
  "Message": "success",
  "RequestId": "87CB0999-F1BB-5290-8C79-A875B2XXXXXX",
  "Data": {
    "Id": "mymxbdxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

3.2. 提交索引任務

初始化知識庫後,您需要調用SubmitIndexJob介面提交索引任務,以啟動知識庫的索引構建。完成提交後,阿里雲百鍊隨即以非同步任務方式開始構建索引。本介面返回的Data.Id為對應的任務ID。下一步中,您將用到此ID查詢任務的最新狀態。
Python
def submit_index(client, workspace_id, index_id):
    """
    向阿里雲百鍊服務提交索引任務。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": "200",
  "Message": "success",
  "RequestId": "7774575F-571D-5854-82C2-634AB8XXXXXX",
  "Data": {
    "IndexId": "mymxbdxxxx",
    "Id": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

3.3. 等待索引任務完成

索引任務的執行需要一定時間,在請求高峰時段,該過程可能需要數小時。查詢其執行狀態可以調用GetIndexJobStatus介面當本介面返回的Data.Status欄位值為COMPLETED時,表示知識庫已建立完成。
Python
def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    查詢索引任務狀態。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        job_id (str): 任務ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": "200",
  "Message": "success",
  "RequestId": "E83423B9-7D6D-5283-836B-CF7EAEXXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
        "Message": "匯入成功",
        "DocName": "阿里雲百鍊系列手機產品介紹",
        "Code": "FINISH"
      }
    ],
    "JobId": "3cd6fb57aaf44cd0b4dd2ca584xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}
通過以上步驟,您已成功建立了一個知識庫,並包含了需要上傳的檔案。

檢索知識庫

目前,檢索知識庫支援兩種方式:
  • 使用阿里雲百鍊應用:調用應用時,通過rag_options傳入知識庫IDindex_id,為您的大模型應用補充私人知識和提供最新資訊。
  • 使用阿里雲API:調用Retrieve介面在指定的知識庫中檢索資訊並返回原始文本切片。
二者的區別在於:前者先將檢索到的相關文本切片傳給您配置的大模型,模型再結合這些切片與使用者的原始查詢產生最終回答並返回;後者則是直接返迴文本切片。 接下來為您介紹使用阿里雲API的方式。
在指定的知識庫中檢索資訊,並返迴文本切片,可以通過調用Retrieve介面若本介面返回的結果包含較多幹擾資訊,您可以在請求時傳入SearchFilters設定檢索條件(比如設定標籤篩選),以排除幹擾資訊。
Python
def retrieve_index(client, workspace_id, index_id, query):
    """
    在指定的知識庫中檢索資訊。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        query (str): 原始輸入prompt。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "Query": "請介紹一下阿里雲百鍊手機X1。"
}
{
  "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/%E7%99%BE%E7%82%BC%E7%B3%BB%E5%88%97%E6%89%8B%E6%9C%BA%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D_1742197778230.json?Expires=1742457465&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "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": "阿里雲百鍊手機產品介紹",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "阿里雲百鍊手機產品介紹阿里雲百鍊 X1 ——暢享極致視界:搭載 6.7英寸 1440 x 3200像素超清螢幕,搭配 120Hz重新整理率,流暢視覺體驗躍然眼前。256GB海量儲存空間與 12GB RAM強強聯合,無論是大型遊戲還是多任務處理,都能輕鬆應對。5000mAh電池長續航,加上超感光四攝系統,記錄生活每一刻精彩。參考售價:4599- 4999千問 Vivid 7 ——智能攝影新體驗:擁有 6.5英寸 1080 x 2400像素全面屏,AI智能攝影功能讓每一張照片都能展現專業級色彩與細節。8GB RAM與 128GB儲存空間確保流暢操作,4500mAh電池滿足日常所需。側面指紋解鎖,便捷又安全。參考售價:2999- 3299星塵 S9 Pro ——創新視覺盛宴:突破性 6.9英寸 1440 x 3088像素屏下網路攝影機設計,帶來無界視覺享受。512GB儲存與 16GB RAM的頂級配置,配合 6000mAh電池與 100W快充技術,讓效能與續航並駕齊驅,引領科技潮流。參考售價:5999- 6499。",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "阿里雲百鍊手機產品介紹",
          "_rc_t_score": 0.05215025693178177,
          "doc_name": "阿里雲百鍊系列手機產品介紹",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_0"
        },
        "Text": "阿里雲百鍊手機產品介紹阿里雲百鍊 X1 ——暢享極致視界:搭載 6.7英寸 1440 x 3200像素超清螢幕,搭配 120Hz重新整理率,流暢視覺體驗躍然眼前。256GB海量儲存空間與 12GB RAM強強聯合,無論是大型遊戲還是多任務處理,都能輕鬆應對。5000mAh電池長續航,加上超感光四攝系統,記錄生活每一刻精彩。參考售價:4599- 4999千問 Vivid 7 ——智能攝影新體驗:擁有 6.5英寸 1080 x 2400像素全面屏,AI智能攝影功能讓每一張照片都能展現專業級色彩與細節。8GB RAM與 128GB儲存空間確保流暢操作,4500mAh電池滿足日常所需。側面指紋解鎖,便捷又安全。參考售價:2999- 3299星塵 S9 Pro ——創新視覺盛宴:突破性 6.9英寸 1440 x 3088像素屏下網路攝影機設計,帶來無界視覺享受。512GB儲存與 16GB RAM的頂級配置,配合 6000mAh電池與 100W快充技術,讓效能與續航並駕齊驅,引領科技潮流。參考售價:5999- 6499。"
      },
      {
        "Score": 0.5322970747947693,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E7%99%BE%E7%82%BC%E7%B3%BB%E5%88%97%E6%89%8B%E6%9C%BA%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D_1742197778230.json?Expires=1742457465&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "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": "阿里雲百鍊手機產品介紹",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。512GB儲存、12GB RAM,加之 4700mAh電池與 UTG超薄柔性玻璃,開啟摺疊屏時代新篇章。此外,這款手機還支援雙卡雙待、衛星通話,協助您在世界各地都能暢聯通話。參考零售價:9999- 10999。每一款手機都是匠心獨運,只為成就您手中的科技藝術品。選擇屬於您的智能夥伴,開啟未來科技生活的新篇章。",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "阿里雲百鍊手機產品介紹",
          "_rc_t_score": 0.05188392847776413,
          "doc_name": "阿里雲百鍊系列手機產品介紹",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_2"
        },
        "Text": "阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。512GB儲存、12GB RAM,加之 4700mAh電池與 UTG超薄柔性玻璃,開啟摺疊屏時代新篇章。此外,這款手機還支援雙卡雙待、衛星通話,協助您在世界各地都能暢聯通話。參考零售價:9999- 10999。每一款手機都是匠心獨運,只為成就您手中的科技藝術品。選擇屬於您的智能夥伴,開啟未來科技生活的新篇章。"
      },
      {
        "Score": 0.5050643086433411,
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/%E7%99%BE%E7%82%BC%E7%B3%BB%E5%88%97%E6%89%8B%E6%9C%BA%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D_1742197778230.json?Expires=1742457465&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "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": "阿里雲百鍊手機產品介紹",
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "content": "512GB儲存與 16GB RAM的頂級配置,配合 6000mAh電池與 100W快充技術,讓效能與續航並駕齊驅,引領科技潮流。參考售價:5999- 6499。阿里雲百鍊 Ace Ultra ——遊戲玩家之選:配備 6.67英寸 1080 x 2400像素螢幕,內建 10GB RAM與 256GB儲存,確保遊戲運行絲滑無阻。5500mAh電池搭配液冷散熱系統,長時間遊戲也能保持冷靜。高動態雙擴音器,沈浸式音效升級遊戲體驗。參考售價:3999- 4299。阿里雲百鍊 Zephyr Z9 ——輕薄便攜的藝術:輕巧的 6.4英寸 1080 x 2340像素設計,搭配 128GB儲存與 6GB RAM,日常使用遊刃有餘。4000mAh電池確保一天無憂,30倍數字變焦鏡頭捕捉遠處細節,輕薄而不失強大。參考售價:2499- 2799。阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "hier_title": "阿里雲百鍊手機產品介紹",
          "_rc_t_score": 0.05158032476902008,
          "doc_name": "阿里雲百鍊系列手機產品介紹",
          "pipeline_id": "mymxbdxxxx",
          "_id": "llm-4u5xpd1xdjqp8itj_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10285263_0_1"
        },
        "Text": "512GB儲存與 16GB RAM的頂級配置,配合 6000mAh電池與 100W快充技術,讓效能與續航並駕齊驅,引領科技潮流。參考售價:5999- 6499。阿里雲百鍊 Ace Ultra ——遊戲玩家之選:配備 6.67英寸 1080 x 2400像素螢幕,內建 10GB RAM與 256GB儲存,確保遊戲運行絲滑無阻。5500mAh電池搭配液冷散熱系統,長時間遊戲也能保持冷靜。高動態雙擴音器,沈浸式音效升級遊戲體驗。參考售價:3999- 4299。阿里雲百鍊 Zephyr Z9 ——輕薄便攜的藝術:輕巧的 6.4英寸 1080 x 2340像素設計,搭配 128GB儲存與 6GB RAM,日常使用遊刃有餘。4000mAh電池確保一天無憂,30倍數字變焦鏡頭捕捉遠處細節,輕薄而不失強大。參考售價:2499- 2799。阿里雲百鍊 Flex Fold+ ——摺疊屏新紀元:集創新與奢華於一身,主屏 7.6英寸 1800 x 2400像素與外屏 4.7英寸 1080 x 2400像素,多角度自由懸停設計,滿足不同情境需求。"
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

更新知識庫

接下來通過樣本,引導您更新文檔搜尋類知識庫。所有引用該知識庫的應用會即時生效您本次的更新(新增內容可用於檢索和召回,而已刪除內容將不再可用)。
資料查詢、圖片問答類知識庫不支援通過API更新。如何更新請參見知識庫:更新知識庫
  • 如何累加式更新知識庫:請您按照以下三步(先上傳更新後的檔案,再追加檔案至知識庫,最後刪除舊檔案)操作。此外暫無其他實現方式。
  • 如何全量更新知識庫:對知識庫中的所有檔案,請您逐一執行以下三步完成更新。
  • 如何?知識庫的自動更新/同步:請詳見如何?知識庫的自動更新/同步
  • 單次更新對檔案數量是否有限制:建議不超過1萬個,否則可能導致知識庫無法正常更新。

1. 上傳更新後的檔案

按照建立知識庫:第二步操作,將更新後的檔案上傳至該知識庫所在的業務空間。
您需要重新申請檔案上傳租約,為更新後的檔案產生一組新的上傳參數。

2. 追加檔案至知識庫

2.1. 提交追加檔案任務

上傳檔案解析完成後,請調用SubmitIndexAddDocumentsJob介面將新檔案追加至知識庫,並重新構建知識庫索引。完成提交後,阿里雲百鍊將以非同步任務方式開始重新構建知識庫。本介面返回的Data.Id為對應的任務ID(job_id)。下一步中,您將用到此ID查詢任務的最新狀態。
  • SubmitIndexAddDocumentsJob介面調用成功後,將執行一段時間,您可通過job_id查詢任務的最新狀態。在任務完成前,請勿重複提交。
Python
def submit_index_add_documents_job(client, workspace_id, index_id, file_id, source_type):
    """
    向一個文檔搜尋類知識庫追加匯入已解析的檔案。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        file_id (str): 檔案ID。
        source_type(str): 資料類型。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "SourceType": "DATA_CENTER_FILE",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx",
  "DocumentIds": [
    "file_247a2fd456a349ee87d071404840109b_10xxxxxx"
  ]
}
{
  "Status": "200",
  "RequestId": "F693EB60-FEFC-559A-BF56-A41F52XXXXXX",
  "Message": "success",
  "Data": {
    "Id": "d8d189a36a3248438dca23c078xxxxxx"
  },
  "Code": "Success",
  "Success": "true"
}

2.2. 等待追加任務完成

索引任務的執行需要一定時間,在請求高峰時段,該過程可能需要數小時。查詢其執行狀態可以調用GetIndexJobStatus介面當本介面返回的Data.Status欄位值為COMPLETED,表示本次更新的檔案已全部成功追加至知識庫。
本介面返回的檔案清單Documents為本次追加(由您提供的job_id唯一確定)的所有檔案。
Python
def get_index_job_status(client, workspace_id, index_id, job_id):
    """
    查詢索引任務狀態。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        job_id (str): 任務ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "JobId": "76f243b9ee534d59a61f156ff0xxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": 200,
  "Message": "success",
  "RequestId": "7F727D58-D90E-51E7-B56E-985A42XXXXXX",
  "Data": {
    "Status": "COMPLETED",
    "Documents": [
      {
        "Status": "FINISH",
        "DocId": "file_247a2fd456a349ee87d071404840109b_10xxxxxx",
        "Message": "匯入成功",
        "DocName": "阿里雲百鍊系列手機產品介紹",
        "Code": "FINISH"
      }
    ],
    "JobId": "76f243b9ee534d59a61f156ff0xxxxxx"
  },
  "Code": "Success",
  "Success": true
}

3. 刪除舊檔案

最後,從指定知識庫中永久刪除舊版本的檔案(避免舊的知識被錯誤檢索),可以調用DeleteIndexDocument介面
  • file_id:請傳入舊版本檔案的FileId
僅能刪除知識庫中狀態為匯入失敗(INSERT_ERROR)或匯入成功(FINISH)的檔案。如需查詢知識庫中的檔案狀態,可調用ListIndexDocuments介面
Python
def delete_index_document(client, workspace_id, index_id, file_id):
    """
    從指定的文檔搜尋類知識庫中永久刪除一個或多個檔案。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。
        file_id (str): 檔案ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "DocumentIds": [
    "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
  ],
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": "200",
  "RequestId": "2D8505EC-C667-5102-9154-00B6FEXXXXXX",
  "Message": "success",
  "Data": {
    "DeletedDocument": [
      "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx"
    ]
  },
  "Code": "Success",
  "Success": "true"
}

管理知識庫

建立和使用知識庫不支援通過API操作,請使用阿里雲百鍊控制台操作。

查看知識庫

要查看給定業務空間下的一個或多個知識庫的資訊,可以調用ListIndices介面
Python
def list_indices(client, workspace_id):
    """
    擷取指定業務空間下一個或多個知識庫的詳細資料。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "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": "百鍊手機知識庫",
        "ChunkSize": 500,
        "EmbeddingModelName": "text-embedding-v2",
        "RerankMinScore": 0.01,
        "Id": "mymxbdxxxx",
        "SinkType": "BUILT_IN",
        "Separator": " |,|,|。|?|!|\n|\\?|\\!"
      }
    ]
  },
  "Code": "Success",
  "Success": "true"
}

刪除知識庫

要永久性刪除某個知識庫,可以調用DeleteIndex介面。刪除前,請解除該知識庫關聯的所有阿里雲百鍊應用(僅可通過阿里雲百鍊控制台操作),否則會刪除失敗。請注意:本操作不會刪除您已添加至類目中的檔案。
Python
def delete_index(client, workspace_id, index_id):
    """
    永久性刪除指定的知識庫。

    參數:
        client (bailian20231229Client): 用戶端(Client)。
        workspace_id (str): 業務空間ID。
        index_id (str): 知識庫ID。

    返回:
        阿里雲百鍊服務的響應。
    """
    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)
{
  "IndexId": "mymxbdxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjqpxxxx"
}
{
  "Status": "200",
  "Message": "success",
  "RequestId": "118CB681-75AA-583B-8D84-25440CXXXXXX",
  "Code": "Success",
  "Success": "true"
}

API參考

請參閱API目錄(知識庫)擷取最新完整的知識庫API列表及輸入輸出參數。

常見問題

  1. 如何?知識庫的自動更新/同步?
    • 文檔搜尋類知識庫
    • 資料查詢/圖片問答類知識庫
    您可以通過整合阿里雲Object Storage Service、Function ComputeFC以及阿里雲百鍊知識庫相關的API實現。只需簡單幾步:
    1. 建立Bucket:前往OSS控制台,建立一個OSS Bucket用於儲存您的原始檔案。
    2. 建立知識庫建立一個文檔搜尋類知識庫,用於儲存您的私人知識內容。
    3. 建立自訂函數:前往FC控制台,針對檔案變更類事件(例如新增、刪除等操作)建立函數,具體操作請參見建立函數。這些函數通過調用上文中更新知識庫的相關API,將OSS上發生的檔案變更同步至已建立的知識庫中。
    4. 建立OSS觸發器:在FC中,為上一步建立的自訂函數關聯OSS觸發器。當捕獲到檔案變更類的事件後(例如有新檔案上傳至OSS時),相應的觸發器會被啟用,觸發FC執行相應的函數。具體操作請參見觸發器
  2. 為什麼我建立的知識庫裡沒有內容? 一般是由於沒有執行或未能成功執行提交索引任務這一步導致。若調用CreateIndex介面後未成功調用SubmitIndexJob介面,您將得到一個空知識庫。此時,您只需重新執行提交索引任務等待索引任務完成即可。
  3. 遇到報錯Access your uploaded file failed. Please check if your upload action was successful,應該如何處理? 一般是由於沒有執行或未能成功執行上傳檔案到臨時儲存這一步導致。請在確認該步驟成功執行後,再調用AddFile介面。
  4. 遇到報錯Access denied: Either you are not authorized to access this workspace, or the workspace does not exist,應該如何處理? 一般是由於:
    • 您請求的服務地址(服務存取點)有誤:以公網接入為例,如果您是中國站使用者,應訪問北京(公用雲端使用者)地區的接入地址;如果您是國際站使用者,應訪問新加坡地區的接入地址。如果您正在使用線上調試功能,請確認您選擇的服務地址正確無誤(如下圖所示)。
      image
    • 您傳入的WorkspaceId值不正確,或者您還不是該業務空間的成員導致:請確認WorkspaceId值無誤且您是該業務空間的成員後,再調用介面。如何被添加為指定業務空間的成員
  5. 遇到報錯Specified access key is not found or invalid,應該如何處理? 一般是由於您傳入的access_key_idaccess_key_secret值不正確,或者該access_key_id已被禁用導致。請確認access_key_id值無誤且未被禁用後,再調用介面。
  6. 遇到報錯Category is mismatched,應該如何處理? 一般是由於在調用ApplyFileUploadLease介面申請檔案上傳租約時使用的CategoryId,與後續調用AddFile介面時傳入的CategoryId不一致導致。 請確保在整個檔案上傳流程中(從ApplyFileUploadLeaseAddFile),使用同一個CategoryId。您可以通過ListCategory介面擷取當前業務空間下的類目列表,確認所使用的CategoryId正確無誤。

計費說明

  • 知識庫的所有功能及API調用均免費,詳見知識庫:計費說明
  • 檔案等資料匯入百鍊後,所需的儲存空間免費。

錯誤碼

如果調用本文中的API失敗並收到錯誤資訊,請參見錯誤中心進行解決。