大模型缺乏私有知识,且通用知识更新滞后。业界通常采用检索增强生成(RAG)技术来解决这些问题。RAG技术能够根据用户输入,从外部信息源检索相关信息,并将其整合到用户输入中,以提高大模型的回答准确性。知识库功能作为百炼的RAG能力,能有效补充私有知识和提供最新信息。
无专属知识库的应用 在没有专属知识库时,大模型无法准确回答“百炼手机”的问题,因为这是一个虚构的私有知识。 | 有专属知识库的应用 引入专有知识库后,大模型就能准确回答“百炼手机”方面的问题。 |
关于RAG的工作原理等详细信息,请参见阿里云大模型ACA课程的检索增强生成。
支持的数据格式
当前知识库支持导入以下格式的原始文档作为其知识来源:
非结构化数据(支持pdf、docx、doc、txt、markdown、pptx、ppt、xlsx、xls、png、jpg、jpeg、bmp、gif格式)
结构化数据(支持xlsx、xls格式)
以上类型并不完整,具体请以数据管理中的导入数据页面显示为准。
支持从本地上传(非结构化或结构化数据)、从阿里云对象存储OSS(非结构化数据)导入、从阿里云数据库RDS导入三种方式(暂不支持阿里云以外的数据源,如GitHub、Notion等)。
支持的模型
当前知识库功能支持下列预置模型(不支持自定义模型):
通义千问-Max/Plus/Turbo
通义千问2.5开源版
通义千问2开源版
上述列表并不完整且可能随时发生变化,请以百炼的我的应用-新增应用页面中模型选择下拉框显示的列表为准。
创建与引用知识库
步骤一:导入数据
在开始创建知识库之前,请先依照下方步骤说明,将您的原始文档导入至百炼的数据管理,以作为创建知识库时的初始知识来源。
如果您打算基于RDS数据表构建知识库,可直接跳至步骤二:创建知识库。
选择结构化或非结构化数据主要取决于您的原始文档格式,详情参见支持的数据格式。
API目前只支持导入非结构化数据,详情参见数据中心 - 添加文档。
导入非结构化数据
在百炼的数据管理页面,选择非结构化数据页签。
在左侧类目管理下,选择需要导入数据的类目。
单击图标创建类目或选择默认类目进行导入。百炼对类目创建数量没有限制。
每个业务空间最多上传10万个文档。
单击导入数据,进入导入数据页面。
选择文档解析器,默认为阿里云文档智能解析(暂不支持更改)。
对于文档中的插图,解析器会识别并提取图中的文本,并生成文本摘要。这些摘要将与文档中其它非图片内容一起被切分并转换为向量,参与知识库的检索。
为文档配置标签(可选)。
通过API调用应用时,可以在请求参数
tags
中指定标签。应用在检索知识库时,会先根据标签筛选相关文档,从而提高检索效率。单击确认,系统将开始解析并导入文档。整个过程需一定时间,请耐心等待。
文档解析会将上传文档转换成百炼可处理的格式。在请求高峰时段,该过程可能需要较长时间,请耐心等待。
解析和导入完成后,单击相应文档右侧的详情即可查看导入的文档。
导入结构化数据
在百炼的数据管理页面,选择结构化数据页签。
新建数据表或选择现有数据表进行导入。
每个业务空间最多创建1000张数据表,每张表累计可导入的数据上限为10000行(包括表头)。行数超过此限制将导致导入失败。请您自行提前对表格中数据进行分割。
新建数据表进行导入
单击图标新建数据表。
自定义数据表名称。
配置表结构,可选择直接上传Excel或自定义表头。
操作
说明
直接上传Excel
百炼将自动识别上传文档中的表头,并据此来创建数据表结构,并将其余内容作为数据记录导入该表。
自定义表头
列名为必填参数,描述为选填参数,类型为必填参数。
重要创建数据表后将无法再修改列名、描述以及类型。
这里定义的数据表结构,必须和待导入的数据表的结构完全相同,否则会导入失败。例如,待导入的数据表有2列,这里的表结构必须配置2个字段,且列名需一一对应。您可以通过单击新增字段或操作列的删除,来增加或删减字段。
设置字段类型为link时,请确保链接公开可访问且指向一个有效的图片文件,否则知识库无法识别该图片。
link格式示例:https://example.com/downloads/pic.jpg
创建知识库时,link类型字段用于生成图片索引。百炼会访问目标图片并提取其特征,然后通过图片Embedding转换为向量并保存。知识库检索时,会用该向量与用户上传图片的向量进行相似度比对。
上传文档以导入数据。
单击选择并上传文档(xlsx或xls格式)。
文档中必须包含表头,且与当前数据表的表头结构一致,否则会导入失败。
上传成功后,单击预览可查看导入的数据。
单击确定。在左侧数据表管理的导航树中出现新增的数据表。
选择现有数据表进行导入
从左侧的数据表管理列表中选择相应的数据表,然后单击导入数据。
导入类型选择覆盖上传或增量上传。
您可以单击页面上的下载模板,获取一个仅包含表头的空白文档。您可以在该文档中插入新数据,随后直接将其用于覆盖上传或增量上传。
单击选择并上传文档(xlsx或xls格式)。
文档中必须包含表头,且与当前数据表的表头结构一致,否则会导入失败。
上传成功后,单击预览可查看导入的数据。
步骤二:创建知识库
无论是企业认证账号还是个人认证账号,知识库创建均无数量限制。
控制台
在百炼的知识索引页面,单击创建知识库。
参数名称
参数说明
数据类型
选择非结构化数据或结构化数据。
请注意,知识库创建后将无法更改其数据类型,且单一知识库无法同时支持非结构化数据与结构化数据。
以下情况,建议选择非结构化数据:
文档为pdf、docx、doc、txt、markdown、pptx、ppt、png、jpg、jpeg、bmp、gif等格式。
文档为xlsx或xls格式,但不同文档的表结构可能不完全相同。
从阿里云对象存储OSS导入文档。
以下情况,建议选择结构化数据:
文档为xlsx或xls格式,且不同文档的表结构完全相同。
文档为xlsx或xls格式,将用于FAQ问答类场景。例如Excel文档包含两列,分别为
问题
和答案
。结构化数据允许您限定问题
列用于知识库检索,答案
列用于大模型回答参考(非结构化数据难以实现此效果)。从阿里云数据库RDS的数据表导入数据。
配置模式
建议选择推荐配置(百炼基于过往最佳实践得出)。若选择自定义,则可针对知识库的检索与召回等关键参数进行设置。
请注意,创建知识库后将无法更改配置模式中除相似度阈值之外的其它参数。
向量存储类型
选择向量数据库以存储您的文本向量。选择内置的向量数据库足以满足知识库的基本功能需求。如需高级功能,如管理、审计和监控数据库,推荐选择ADB-PG(AnalyticDB for PostgreSQL)。
单击下一步,选择要导入的文档或数据来源:
非结构化数据
若文档已在百炼的数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见导入非结构化数据),导入完成后再返回此处进行勾选。
选择类目:导入该类目下的所有文档,支持选择多个类目。
选择文件:也可以自行选择需要导入的文档。
单次最多选择50个文档,单文档最大限制100MB或1000页。
结构化数据
选择数据来源以导入您的结构化数据,可以选择数据管理或关联RDS。
如果您通过数据管理导入结构化数据,后续您需要手动将数据表的更新同步至知识库。展开更新知识库部分查看更新结构化知识库具体步骤。
如果您通过云数据库RDS导入结构化数据,则RDS表中的数据更新将自动同步至知识库(一般为秒级,但在请求高峰期可能会稍有延迟)。
数据管理
若数据表已在百炼的数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见导入结构化数据),导入完成后再返回此处进行勾选。
关联RDS
将RDS实例中特定数据表的数据同步到您的知识库中。
实例限制:RDS实例目前只支持MySQL引擎(版本无限制),暂不支持PostgreSQL等其它引擎。实例地域无限制。只支持基础系列和高可用系列(暂不支持开启数据库代理)。
数据库和表限制:知识库对关联的RDS数据库和数据表的数据量没有限制,但每一行记录的大小必须控制在10MB以内。请注意,在创建知识库后,不建议再对源表进行DDL类操作(例如:DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN),否则可能会导致RDS与知识库之间的数据同步失败。欲了解详情,请参见关于DDL操作的说明。
为了使知识库能够接收RDS的数据,您还需要设置RDS实例的白名单。在成功关联RDS数据表后,页面将展示表头和前十条数据。
单击下一步,配置知识库数据处理策略。
非结构化数据
参数名称
参数说明
metadata抽取(可选)
metadata(元数据)是与非结构化文档内容相关的一系列附加属性,这些属性以key-value键值对的形式进行存储和展示。
元数据的作用:元数据为文档提供了重要的上下文信息,可显著提升知识库检索的准确性。例如,当在知识库中检索“A产品的功能概述”时,如果所有文档中的内容都包含“功能概述”,但均没有提到“A产品”,那么知识库可能会召回大量与原始查询无关的文本切片。若将产品名称作为元数据附加到所有文档及其相关的文本切片上,知识库就能精准地过滤出与“A产品”相关的且包含“功能概述”的文本切片,从而提高检索的准确性,同时减少模型的输入Token消耗。
元数据的用法:通过API调用应用时,您可以在请求参数
metadata_filter
中指定metadata。应用在检索知识库时,会先根据metadata筛选相关文档。注意:创建知识库后将无法再配置metadata抽取。
Excel文档表头是否支持拼装(可选)
建议仅在导入文档均为xlsx、xls格式且含表头时开启,否则无需开启。
开启后,知识库会将所有xlsx、xls格式文档的首行数据视为表头并自动去除,避免大模型误将表头视为普通数据行来处理。
文档切分chunk
选择智能切分(推荐)或自定义切分。
文档切分chunk作用:知识库会将您的文档切分成文本切片,并将这些文本切片通过Embedding模型转换为向量。随后文本切片和向量将以键值对的形式存入向量数据库中。您可以查看知识库里每一个文本切片的具体内容(文字和图片),具体操作请参见查看知识库。
注意:创建知识库后将无法再更改文档切分chunk。不合适的切分策略可能会降低检索和召回效果,详情请参见如何检查文本切片质量。
智能切分:采用系统内置切分策略。经评测对于多数文档可获得最佳的检索效果。
自定义切分:如果智能切分无法正常切割,您也可以自定义文档切分策略。
结构化数据
以下索引配置在知识库创建后无法更改。
参数名称
参数说明
是否索引
仅link类型字段可见。若您希望百炼访问链接指向的图片并将其通过图片Embedding转换为向量保存,请选择图片;若您希望将链接作为普通文本处理,请选择不处理(等同于string类型)。
是否参与检索
开启后表示允许知识库在此列数据中进行搜索。
是否参与模型回复
开启后表示本列的检索结果将作为大模型生成回答时的输入信息。如下图示例的配置中,对“姓名”、“性别”、“岗位”、“年龄”开启是否参与检索,对“姓名”和“岗位”开启是否参与模型回复后, 知识库将会在所有列数据中进行检索,但只对检索到的数据中“姓名”、“岗位”两列的内容提供给大模型进行回答参考。
如下图所示,因为“年龄”没有开启参与模型回复,大模型在关联该知识库后依然无法回答“张三的年龄”的问题。
单击导入完成,完成知识库创建。
API
了解如何调用百炼API及其相关要求,请参见API概览。
要创建一个非结构化知识库(索引),请调用CreateIndex接口。
管理结构化数据的知识库暂不支持通过API进行创建,请通过控制台创建此类知识库。
请求返回中
Data.Id
的值即为知识库主键ID,请妥善保管该值,它将用于后续所有知识库相关的API操作。StructureType
字段中请指定用于创建知识库的数据结构类型。非结构化数据请传入unstructured。RerankModelName
字段中请指定排序模型名称。官方排序请传入gte-rerank-hybrid。排序模型用于对从知识库召回的知识文本结果根据语义相关性进行再排序。推荐官方排序。
SinkType
字段中请指定知识库的向量存储类型。内置的向量数据库可满足基本需求。如需高级功能,如管理、审计和监控数据库,推荐ADB-PG(AnalyticDB for PostgreSQL)。
指定内置的向量数据库,请传入DEFAULT。
指定ADB-PG(AnalyticDB for PostgreSQL)数据库,请传入ADB。
上一步CreateIndex接口只负责初始化知识库构建流程,接下来还需要再调用SubmitIndexJob接口完成知识库的创建。任务的执行需一定时间,如果需要查询任务的状态,可调用GetIndexJobStatus接口(请求返回中
Data.Status
为COMPLETED时表示知识库已创建完成)。
步骤三:测试知识库(可选)
命中测试用于评估知识库在给定的相似度阈值下语义检索的表现,例如检查文本切片是否被正确召回,从而确定是否需要进一步调整知识库的相似度阈值,以确保后续大模型能够从知识库中获得有效的知识输入。要进行命中测试,请展开命中测试(可选)并按步骤操作。
相似度阈值:该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。
步骤四:引用知识库
接下来您便可以在我的应用中将创建好的知识库与您位于相同的业务空间里的智能体应用或者工作流应用关联,以便为您的大模型应用补充私有知识和提供最新信息。两类应用均支持同时选择并检索多个知识库(多路召回策略),但目前不支持设置检索顺序。
多路召回策略:如果应用关联了A1、A2和A3三个知识库,系统会从这些库中检索与原始输入相关的文本切片,然后通过Rank模型重排序,选出最相关的前K条加入到大模型的输入Token中用于其回答时参考。
智能体应用
场景
下图是一个基于知识库的问答类智能体应用示例。此类应用有效解决了通用大模型难以处理私有知识和获取最新信息的问题。适用于个人助理、客户服务、技术支持等领域。
在智能体应用中引用知识库
访问我的应用,单击已创建智能体应用卡片的管理按钮,进入百炼应用管理界面。如下图所示开启知识检索增强,Prompt中会自动填入让大模型参考知识库的指令。单击配置知识库添加需要引用的知识库,使用默认的检索配置。应用发布后,会默认使用选中的知识库进行回答。
检索配置(可选)
工作流应用
场景
下图是一个基于知识库的问答类工作流应用示例。流程执行逻辑为:用户输入的问题首先会经过知识库检索,获取最相关的文本切片;随后这些文本切片将与问题一并输入至大模型节点,最终生成基于检索内容的回答。
在工作流应用中引用知识库
访问我的应用,单击已创建工作流应用卡片的管理按钮,进入百炼应用管理界面。
配置上游节点:新建一个知识库节点,并将它设置为开始节点的下游节点。
选择查询变量:在知识库节点的输入下拉列表中选择查询变量(用于检索知识库中的相关文本切片)。
对于问答类工作流应用,通常选择开始节点的
sys.query
作为查询变量。选择知识库:在知识库节点的选择知识库下拉列表中选择需要引用的知识库。
调整TopK(可选):即多路召回策略中K值,它决定了提供给大模型节点参考的文本切片数量。增大该值通常会提升大模型的回答准确性,但也会相应增加大模型输入Token消耗。
配置下游节点:新建一个大模型节点,并将它的设置为知识库节点的下游节点。在大模型节点的Prompt中填入让大模型参考知识库的指令。
# 知识库 请记住以下材料{{Retrieval_xxx.result}},他们可能对回答问题有帮助。 请回答{{sys.query}}
此处的{{Retrieval_xxx.result}}和{{sys.query}}需要重新填写。输入
/
插入变量。本示例需要选择知识库结果变量Retrieval_xxx.result
和系统变量sys.query
。单击测试或发布。用户提问时,若知识库节点匹配到相关的文本切片,其内容将填入系统变量
sys.query
,辅助大模型节点生成回答;若未匹配到相关文本切片,则大模型节点将直接回应系统变量sys.query
。
管理与维护知识库
查看知识库
编辑知识库
更新知识库
删除知识库
常见问题
场景教程
本文仅介绍了百炼的知识库功能,您接下来可以尝试通过百炼快速构建一个在线知识库问答应用,以便全天候(7 × 24)响应用户咨询,提升用户体验、增强业务竞争力。以下是一些场景案例: