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.cn-beijing.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.cn-beijing.aliyuncs.com
  • VPC接入地址:
    若您的客户端部署在阿里云北京地域cn-beijing(公有云),且处于VPC网络环境中,可以使用以下VPC接入地址(不支持跨地域访问)。
    • 公有云:bailian-vpc.cn-beijing.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.cn-beijing.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,将本地存储或可通过公网访问的文件上传至阿里云百炼服务器。请注意,每个业务空间最多支持10万个文件。目前支持上传的格式包括: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接口在指定的知识库中检索信息并返回原始文本切片。
  • 使用知识检索服务(推荐):调用Search接口跨多个知识库执行联合语义检索,返回按相关性排序的文本切片。检索策略预先在控制台配置并发布,调用方只需传入检索意图(query/images)与agent_id
三者的区别在于:第一种方式先将检索到的相关文本切片传给您配置的大模型,模型再结合这些切片与用户的原始查询生成最终回答并返回;后两种方式则是直接返回文本切片。其中知识检索服务(Search接口)为推荐方式,支持跨多库联合检索与多模态检索,且检索策略在控制台统一配置管理,无需在请求中维护。 接下来为您介绍使用知识检索服务(Search接口)的方式。
跨多个知识库执行联合语义检索,返回按相关性排序的文本切片,可以通过调用Search接口
  • agent_id:知识检索服务(agent)实例 ID。在控制台知识检索服务页面创建并发布后获取。
  • API Key:阿里云百炼 API Key。在控制台API Key 页面获取。
  • workspace_id:知识库所在的业务空间,用于拼接 Base URL(https://{workspaceId}.cn-beijing.maas.aliyuncs.com)。在控制台业务空间管理获取。
    子账号只能检索自己已加入的业务空间中的知识库。
检索策略(多库权重、知识路由、混排模型等)预先在控制台配置进服务实例并发布,调用方只需传入检索意图(query/images)与agent_id,无需在请求中维护检索策略参数。
  • 调用前须在百炼控制台知识检索服务页面创建并发布知识检索服务(agent),获取服务 ID(agent_id)。未发布时返回 Agent 未发布错误。
  • 默认用户维度 25 QPS。如遇限流,请稍后重试。
cURL
curl -X POST "https://{workspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/indices/knowledge/search" \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "aid-xxxxxxxxxxxxxxxx",
    "query": "请介绍一下阿里云百炼手机X1。",
    "images": []
  }'
{
  "agent_id": "aid-xxxxxxxxxxxxxxxx",
  "query": "请介绍一下阿里云百炼手机X1。",
  "images": []
}
{
  "code": "Success",
  "status_code": 200,
  "status": "SUCCESS",
  "success": true,
  "message": "success",
  "request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "data": {
    "total": 3,
    "nodes": [
      {
        "score": 0.9201,
        "text": "阿里云百炼手机产品介绍阿里云百炼 X1 ——畅享极致视界:搭载 6.7英寸 1440 x 3200像素超清屏幕,搭配 120Hz刷新率,流畅视觉体验跃然眼前。256GB海量存储空间与 12GB RAM强强联合,无论是大型游戏还是多任务处理,都能轻松应对。5000mAh电池长续航,加上超感光四摄系统,记录生活每一刻精彩。参考售价:4599- 4999",
        "metadata": {
          "doc_id": "file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx",
          "doc_name": "阿里云百炼系列手机产品介绍",
          "title": "阿里云百炼手机产品介绍",
          "content": "阿里云百炼手机产品介绍阿里云百炼 X1 ——畅享极致视界:搭载 6.7英寸 1440 x 3200像素超清屏幕,搭配 120Hz刷新率,流畅视觉体验跃然眼前。256GB海量存储空间与 12GB RAM强强联合,无论是大型游戏还是多任务处理,都能轻松应对。5000mAh电池长续航,加上超感光四摄系统,记录生活每一刻精彩。参考售价:4599- 4999",
          "pipeline_id": "mymxbdxxxx",
          "workspace_id": "llm-4u5xpd1xdjqpxxxx",
          "_id": "llm-4u5xpd1xdjqpxxxx_mymxbd6172_file_0b21e0a852cd40cd9741c54fefbb61cd_10xxxxxx_0_0",
          "_knowledge_type": "document",
          "_knowledge_scene": "basic_document_qa"
        }
      }
    ],
    "cost_time": 2629
  }
}

结构化输出

知识库检索 API 不支持 response_format 参数。如需 JSON 格式输出,需在模型调用层设置 response_format 以 Python SDK alibabacloud_bailian20231229 2.14.3 为例,RetrieveRequest 共 15 个字段:index_idquerydense_similarity_top_kenable_rerankingenable_rewriteextraimagesquery_historyrerankrerank_min_scorererank_top_nrewritesave_retriever_historysearch_filterssparse_similarity_top_k,其中不含 response_format Agent API 的 instructions 字段可通过提示词指定 JSON 输出格式,即创建应用时将“请以 JSON 格式输出”写入 instructions 阿里云百炼不直接生成 JSON 文件,返回的 JSON 内容需由调用方自行写入文件。

知识库检索 + JSON 输出

先调用检索接口获取知识库文本切片,再将切片作为上下文调用 DashScope 模型接口,并设置 response_format={"type": "json_object"},即可得到结构化输出。
import dashscope
from alibabacloud_bailian20231229.client import Client
from alibabacloud_bailian20231229 import models

# 1. 检索知识库
retrieve_req = models.RetrieveRequest(index_id="xxx", query="产品信息")
retrieve_resp = client.retrieve_with_options(workspace_id, retrieve_req, {}, runtime)
context = "\n".join([n.content for n in retrieve_resp.body.data.nodes])

# 2. 调用模型设置 JSON 输出
resp = dashscope.Generation.call(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": f"根据以下知识库内容回答,输出JSON格式:\n{context}"},
        {"role": "user", "content": "列出所有产品型号及价格"}
    ],
    response_format={"type": "json_object"}
)
print(resp.output.text)
模型调用接口的更多参数说明,参见DashScope API 参考

更新知识库

接下来通过示例,引导您更新文档搜索类知识库。所有引用该知识库的应用会实时生效您本次的更新(新增内容可用于检索和召回,而已删除内容将不再可用)。
数据查询、图片问答类知识库不支持通过API更新。如何更新请参见知识库:更新知识库
  • 如何增量更新知识库:请您按照以下三步(先上传更新后的文件,再追加文件至知识库,最后删除旧文件)操作。此外暂无其他实现方式。
  • 如何全量更新知识库:对知识库中的所有文件,请您逐一执行以下三步完成更新。
  • 如何实现知识库的自动更新/同步:请详见如何实现知识库的自动更新/同步
  • 单次更新对文件数量是否有限制:建议不超过10万个,否则可能导致知识库无法正常更新。

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"
}

管理切片

对知识库中的切片进行查询、编辑和删除操作。编辑切片所有类型知识库均支持;新增和删除方面,文档搜索类、数据查询类、图片问答类知识库均支持,音视频搜索类知识库仅支持删除。

查询切片列表

调用ListChunks接口查询知识库的切片列表。
  • client:如何获取client
  • workspace_id:如何获取业务空间ID
  • index_id:知识库ID,即创建知识库时返回的Data.Id
  • page_num:页码,从1开始(可选,默认1)。
  • page_size:每页数量(可选,默认10)。
  • file_id:文档ID(可选,不传时返回整个知识库的切片)。
Python
def list_chunks(client, workspace_id, index_id, page_num=1, page_size=10, file_id=None):
    """查询切片列表"""
    headers = {}
    request = bailian_20231229_models.ListChunksRequest(
        index_id=index_id,
        page_num=page_num,
        page_size=page_size,
        file_id=file_id
    )
    runtime = util_models.RuntimeOptions()
    return client.list_chunks_with_options(workspace_id, request, headers, runtime)

编辑切片

调用UpdateChunk接口修改指定切片的内容。所有类型的知识库均支持此操作。
  • client:如何获取client
  • workspace_id:如何获取业务空间ID
  • pipeline_id:知识库ID,即创建知识库时返回的Data.Id
  • data_id:文档ID(切片所属文档,可从ListChunks响应的metadata.doc_id获取)。
  • chunk_id:切片的完整_id值(可从ListChunks响应的metadata._id获取)。
  • content:新的切片内容(10-6000字符)。
  • is_displayed_chunk_content:是否展示切片内容(设为true)。
Python
def update_chunk(client, workspace_id, pipeline_id, data_id, chunk_id, content):
    """编辑切片"""
    headers = {}
    request = bailian_20231229_models.UpdateChunkRequest(
        pipeline_id=pipeline_id,
        data_id=data_id,
        chunk_id=chunk_id,
        is_displayed_chunk_content=True,
        content=content
    )
    runtime = util_models.RuntimeOptions()
    return client.update_chunk_with_options(workspace_id, request, headers, runtime)

删除切片

调用DeleteChunk接口删除一个或多个切片。单次最多删除10个。
  • client:如何获取client
  • workspace_id:如何获取业务空间ID
  • pipeline_id:知识库ID,即创建知识库时返回的Data.Id
  • chunk_ids:要删除的切片_id列表(从ListChunks响应的metadata._id获取)。
Python
def delete_chunk(client, workspace_id, pipeline_id, chunk_ids):
    """删除切片"""
    headers = {}
    request = bailian_20231229_models.DeleteChunkRequest(
        pipeline_id=pipeline_id,
        chunk_ids=chunk_ids
    )
    runtime = util_models.RuntimeOptions()
    return client.delete_chunk_with_options(workspace_id, request, headers, runtime)

API参考

请参阅API目录(知识库)获取最新完整的知识库API列表及输入输出参数。

常见问题

  1. 如何实现知识库的自动更新/同步?
    • 文档搜索类知识库
    • 数据查询/图片问答类知识库
    • 音视频搜索类知识库
    使用对象存储OSS管理文件,通过函数计算FC监听文件变更事件,自动同步更新至知识库,实现知识的实时更新。详见告别手动操作,让AI知识库自动更新
  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正确无误。
  7. 调用知识库应用时,为什么 API 返回结果与控制台调试窗口不一致? 按以下维度排查:
    • 多轮对话上下文控制台调试窗口默认保留多轮对话历史;API 调用若不传session_id,每次都是无上下文的单次调用,依赖上文指代的追问会丢失指代对象,可能返回与调试窗口完全不同的答案。需要多轮对话能力时,从首次调用的响应中取回session_id,并在后续调用中传入同一个session_id,以保持会话连续性。
    • 应用发布状态:应用配置修改后需单击发布才会生效,API 调用的始终是已发布版本。若调试窗口中验证的是尚未发布的改动,API 返回不会体现这些改动。请先确认应用状态为已发布
    • 参数对齐:通过应用调用(App API)时使用应用中配置的默认参数(如temperaturetop_p等),与调试窗口一致;若直接调用模型服务 DashScope 的 API,这些参数需自行显式指定,取值可能与调试环境不同,从而导致回答风格与内容差异。
    • 知识库关联方式:通过应用调用(App API)时会自动关联应用中已配置的知识库,无需手动指定;若直接调用知识库检索 API,则必须显式传入knowledgebase_id,遗漏或传错会导致检索不到预期知识。

计费说明

知识库采用按量付费(后付费)模式,按小时统计各计费项用量并自动扣费。请保持阿里云账户余额充足(可前往费用与成本充值),避免因欠费导致服务中断。

计费项

说明

规格费用

标准版旗舰版 知识库的实际运行时长费用,价格详见知识库计费说明。变更配置时,按变更时间点分段计费

向量、排序模型调用费用

创建、更新或检索知识库时会调用向量(embedding)和排序(rerank)模型,按输入 Token 用量计费,价格以模型调用计费页为准。

账单查询:账单详情

错误码

如果调用本文中的API失败并收到错误信息,请参见错误中心进行解决。
Managed Agents
数据连接
Skill
应用评测
应用广场
权限管理