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. 如何实现知识库的自动更新/同步?
    • 文档搜索类知识库
    • 数据查询/图片问答类知识库
    您可以通过整合阿里云对象存储OSS、函数计算FC以及阿里云百炼知识库相关的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失败并收到错误信息,请参见错误中心进行解决。