阿里云百炼知识库提供开放的API接口,便于您快速接入现有业务系统,实现自动化操作,并应对复杂的检索需求。
前置步骤
-
子账号(主账号不需要)需获取API权限(AliyunBailianDataFullAccess策略),并加入一个业务空间,然后才能通过阿里云API操作知识库。
子账号只能操作已加入业务空间中的知识库;主账号可操作所有业务空间下的知识库。
-
安装最新版阿里云百炼SDK,以调用知识库相关的阿里云API。如何安装请参考阿里云SDK开发参考目录下文档。
如果SDK不能满足需求,可以通过签名机制(较为复杂)HTTP请求知识库的相关接口。具体对接方式请参见API概览。
-
获取AccessKey和AccessKey Secret以及业务空间 ID,并将它们配置到系统环境变量,以运行示例代码。以Linux操作系统为例:
如果您使用了 IDE 或其他辅助开发插件,需自行将ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET和WORKSPACE_ID变量配置到相应的开发环境中。
- 准备好示例知识文档阿里云百炼系列手机产品介绍.docx,用于创建知识库。
完整示例代码
完整示例代码
- 创建知识库
- 检索知识库
- 更新知识库
- 管理知识库
- 切片管理
Python
创建知识库
接下来通过示例,引导您在给定的业务空间下创建一个文档搜索类知识库。
1. 初始化客户端在开始上传文件和创建知识库之前,您需要使用配置好的AccessKey和AccessKey Secret初始化客户端(Client),以完成身份验证和接入点endpoint配置。
| Python |
2. 上传知识库文件 | |
2.1. 申请文件上传租约在创建知识库前,您需先将文件上传至同一业务空间,作为知识库的知识来源。上传文件前,需调用ApplyFileUploadLease接口申请一个文件上传租约。该租约是一个临时的授权,允许您在限定时间内(有效期为分钟级)上传文件。
| Python
请求示例
响应示例 |
2.2. 上传文件到临时存储取得上传租约后,您即可使用租约中的临时上传参数和临时上传URL,将本地存储或可通过公网访问的文件上传至阿里云百炼服务器。请注意,每个业务空间最多支持10万个文件。目前支持上传的格式包括:PDF、DOCX、DOC、TXT、Markdown、PPTX、PPT、XLSX、XLS、HTML、PNG、JPG、JPEG、BMP 和 GIF。
|
Python |
2.3. 添加文件到类目中阿里云百炼使用类目管理您上传的文件。因此,接下来您需要调用AddFile接口将已上传的文件添加到同一业务空间下的类目中。
FileId,并自动开始解析您的文件。同时lease_id(租约ID)随即失效,请勿再使用相同的租约ID重复提交。 | Python
请求示例
响应示例 |
2.4. 查询文件的解析状态未解析完成的文件无法用于知识库,在请求高峰时段,该过程可能需要数小时。您可以调用DescribeFile接口查询文件的解析状态。
Data.Status字段值为PARSE_SUCCESS时,表示文件已解析完成,可以将其导入知识库。 | Python
请求示例
响应示例 |
3. 创建知识库 | |
3.1. 初始化知识库文件解析完成后,您即可将其导入同一业务空间下的知识库。初始化(非最终提交)一个文档搜索类知识库,可以调用CreateIndex接口。
Data.Id字段值即为知识库ID,用于后续的索引构建。请您妥善保管知识库ID,后续该知识库所有相关API操作都将用到它。 | Python
请求示例
响应示例 |
3.2. 提交索引任务初始化知识库后,您需要调用SubmitIndexJob接口提交索引任务,以启动知识库的索引构建。
Data.Id为对应的任务ID。下一步中,您将用到此ID查询任务的最新状态。 | Python
请求示例
响应示例 |
3.3. 等待索引任务完成索引任务的执行需要一定时间,在请求高峰时段,该过程可能需要数小时。查询其执行状态可以调用GetIndexJobStatus接口。
Data.Status字段值为COMPLETED时,表示知识库已创建完成。 | Python
请求示例
响应示例 |
检索知识库
目前,检索知识库支持以下方式:
- 使用阿里云百炼应用:调用应用时,通过
rag_options传入知识库IDindex_id,为您的大模型应用补充私有知识和提供最新信息。 - 使用阿里云API:调用Retrieve接口在指定的知识库中检索信息并返回原始文本切片。
- 使用知识检索服务(推荐):调用Search接口跨多个知识库执行联合语义检索,返回按相关性排序的文本切片。检索策略预先在控制台配置并发布,调用方只需传入检索意图(
query/images)与agent_id。
跨多个知识库执行联合语义检索,返回按相关性排序的文本切片,可以通过调用Search接口。
query/images)与agent_id,无需在请求中维护检索策略参数。 | cURL
请求示例
响应示例 |
结构化输出
知识库检索 API 不支持 response_format 参数。如需 JSON 格式输出,需在模型调用层设置 response_format。
以 Python SDK alibabacloud_bailian20231229 2.14.3 为例,RetrieveRequest 共 15 个字段:index_id、query、dense_similarity_top_k、enable_reranking、enable_rewrite、extra、images、query_history、rerank、rerank_min_score、rerank_top_n、rewrite、save_retriever_history、search_filters、sparse_similarity_top_k,其中不含 response_format。
Agent API 的 instructions 字段可通过提示词指定 JSON 输出格式,即创建应用时将“请以 JSON 格式输出”写入 instructions。
阿里云百炼不直接生成 JSON 文件,返回的 JSON 内容需由调用方自行写入文件。
知识库检索 + JSON 输出
先调用检索接口获取知识库文本切片,再将切片作为上下文调用 DashScope 模型接口,并设置 response_format={"type": "json_object"},即可得到结构化输出。
更新知识库
接下来通过示例,引导您更新文档搜索类知识库。所有引用该知识库的应用会实时生效您本次的更新(新增内容可用于检索和召回,而已删除内容将不再可用)。
数据查询、图片问答类知识库不支持通过API更新。如何更新请参见知识库:更新知识库。
- 如何增量更新知识库:请您按照以下三步(先上传更新后的文件,再追加文件至知识库,最后删除旧文件)操作。此外暂无其他实现方式。
- 如何全量更新知识库:对知识库中的所有文件,请您逐一执行以下三步完成更新。
- 如何实现知识库的自动更新/同步:请详见如何实现知识库的自动更新/同步。
- 单次更新对文件数量是否有限制:建议不超过10万个,否则可能导致知识库无法正常更新。
1. 上传更新后的文件按照创建知识库:第二步操作,将更新后的文件上传至该知识库所在的业务空间。您需要重新申请文件上传租约,为更新后的文件生成一组新的上传参数。 | |
2. 追加文件至知识库 | |
2.1. 提交追加文件任务上传文件解析完成后,请调用SubmitIndexAddDocumentsJob接口将新文件追加至知识库,并重新构建知识库索引。
Data.Id为对应的任务ID(job_id)。下一步中,您将用到此ID查询任务的最新状态。 | Python
请求示例
响应示例 |
2.2. 等待追加任务完成索引任务的执行需要一定时间,在请求高峰时段,该过程可能需要数小时。查询其执行状态可以调用GetIndexJobStatus接口。
Data.Status字段值为COMPLETED,表示本次更新的文件已全部成功追加至知识库。本接口返回的文件列表 | Python
请求示例
响应示例 |
3. 删除旧文件最后,从指定知识库中永久删除旧版本的文件(避免旧的知识被错误检索),可以调用DeleteIndexDocument接口。
仅能删除知识库中状态为导入失败(INSERT_ERROR)或导入成功(FINISH)的文件。如需查询知识库中的文件状态,可调用ListIndexDocuments接口。 | Python
请求示例
响应示例 |
管理知识库
创建和使用知识库不支持通过API操作,请使用阿里云百炼控制台操作。
查看知识库要查看给定业务空间下的一个或多个知识库的信息,可以调用ListIndices接口。
| Python
请求示例
响应示例 |
删除知识库要永久性删除某个知识库,可以调用DeleteIndex接口。删除前,请解除该知识库关联的所有阿里云百炼应用(仅可通过阿里云百炼控制台操作),否则会删除失败。
| Python
请求示例
响应示例 |
管理切片
对知识库中的切片进行查询、编辑和删除操作。编辑切片所有类型知识库均支持;新增和删除方面,文档搜索类、数据查询类、图片问答类知识库均支持,音视频搜索类知识库仅支持删除。
查询切片列表调用ListChunks接口查询知识库的切片列表。
| Python |
编辑切片调用UpdateChunk接口修改指定切片的内容。所有类型的知识库均支持此操作。
| Python |
删除切片调用DeleteChunk接口删除一个或多个切片。单次最多删除10个。
| Python |
API参考
请参阅API目录(知识库)获取最新完整的知识库API列表及输入输出参数。
常见问题
-
如何实现知识库的自动更新/同步?
- 文档搜索类知识库
- 数据查询/图片问答类知识库
- 音视频搜索类知识库
使用对象存储OSS管理文件,通过函数计算FC监听文件变更事件,自动同步更新至知识库,实现知识的实时更新。详见告别手动操作,让AI知识库自动更新。 - 为什么我新建的知识库里没有内容? 一般是由于没有执行或未能成功执行提交索引任务这一步导致。若调用CreateIndex接口后未成功调用SubmitIndexJob接口,您将得到一个空知识库。此时,您只需重新执行提交索引任务并等待索引任务完成即可。
- 遇到报错Access your uploaded file failed. Please check if your upload action was successful,应该如何处理? 一般是由于没有执行或未能成功执行上传文件到临时存储这一步导致。请在确认该步骤成功执行后,再调用AddFile接口。
-
遇到报错Access denied: Either you are not authorized to access this workspace, or the workspace does not exist,应该如何处理?
一般是由于:
-
您请求的服务地址(服务接入点)有误:以公网接入为例,如果您是中国站用户,应访问北京(公有云用户)地域的接入地址;如果您是国际站用户,应访问新加坡地域的接入地址。如果您正在使用在线调试功能,请确认您选择的服务地址正确无误(如下图所示)。

-
您传入的WorkspaceId值不正确,或者您还不是该业务空间的成员导致:请确认
WorkspaceId值无误且您是该业务空间的成员后,再调用接口。如何被添加为指定业务空间的成员
-
您请求的服务地址(服务接入点)有误:以公网接入为例,如果您是中国站用户,应访问北京(公有云用户)地域的接入地址;如果您是国际站用户,应访问新加坡地域的接入地址。如果您正在使用在线调试功能,请确认您选择的服务地址正确无误(如下图所示)。
-
遇到报错Specified access key is not found or invalid,应该如何处理?
一般是由于您传入的
access_key_id或access_key_secret值不正确,或者该access_key_id已被禁用导致。请确认access_key_id值无误且未被禁用后,再调用接口。 -
遇到报错Category is mismatched,应该如何处理?
一般是由于在调用
ApplyFileUploadLease接口申请文件上传租约时使用的CategoryId,与后续调用AddFile接口时传入的CategoryId不一致导致。 请确保在整个文件上传流程中(从ApplyFileUploadLease到AddFile),使用同一个CategoryId。您可以通过ListCategory接口获取当前业务空间下的类目列表,确认所使用的CategoryId正确无误。 -
调用知识库应用时,为什么 API 返回结果与控制台调试窗口不一致?
按以下维度排查:
- 多轮对话上下文:控制台调试窗口默认保留多轮对话历史;API 调用若不传
session_id,每次都是无上下文的单次调用,依赖上文指代的追问会丢失指代对象,可能返回与调试窗口完全不同的答案。需要多轮对话能力时,从首次调用的响应中取回session_id,并在后续调用中传入同一个session_id,以保持会话连续性。 - 应用发布状态:应用配置修改后需单击发布才会生效,API 调用的始终是已发布版本。若调试窗口中验证的是尚未发布的改动,API 返回不会体现这些改动。请先确认应用状态为已发布。
- 参数对齐:通过应用调用(App API)时使用应用中配置的默认参数(如
temperature、top_p等),与调试窗口一致;若直接调用模型服务 DashScope 的 API,这些参数需自行显式指定,取值可能与调试环境不同,从而导致回答风格与内容差异。 - 知识库关联方式:通过应用调用(App API)时会自动关联应用中已配置的知识库,无需手动指定;若直接调用知识库检索 API,则必须显式传入
knowledgebase_id,遗漏或传错会导致检索不到预期知识。
- 多轮对话上下文:控制台调试窗口默认保留多轮对话历史;API 调用若不传
计费说明
知识库采用按量付费(后付费)模式,按小时统计各计费项用量并自动扣费。请保持阿里云账户余额充足(可前往费用与成本充值),避免因欠费导致服务中断。
计费项 | 说明 |
|---|---|
规格费用 | |
向量、排序模型调用费用 | 创建、更新或检索知识库时会调用向量(embedding)和排序(rerank)模型,按输入 Token 用量计费,价格以模型调用计费页为准。 |
