大模型缺乏私有知识,且通用知识更新滞后。业界通常采用检索增强生成(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开源版
上述列表并不完整且可能随时发生变化,请以百炼的我的应用-新增应用页面中选择模型下拉框显示的列表为准。
自定义模型
知识库功能支持基于下列模型调优后的自定义模型:
通义千问-Plus/Turbo
上述列表并不完整且可能随时发生变化,请以百炼的我的应用-新增应用页面中选择模型下拉框显示的列表为准。
创建与引用知识库
步骤一:导入数据
在开始创建知识库之前,请先依照下方步骤说明,将您的原始文档导入至百炼的数据管理,以作为创建知识库时的初始知识来源。
如果您打算基于RDS数据表构建知识库,可直接跳至步骤二:创建知识库。
选择结构化或非结构化数据主要取决于您的原始文档格式,详情参见支持的数据格式。
API目前只支持导入非结构化数据,详情参见数据中心 - 添加文档。
非结构化数据
在百炼的数据管理页面,选择非结构化数据页签。
在左侧类目管理下,选择需要导入数据的类目。
单击图标创建类目或选择默认类目进行导入。每个业务空间最多创建1000个类目。
每个业务空间最多上传10万个文档。
单击导入数据,进入导入数据页面。
选择文档解析器,默认为阿里云文档智能解析(暂不支持更改)。
对于文档中的插图,解析器会识别并提取图中的文本,并生成文本摘要。这些摘要将与文档中其它非图片内容一起被切分并转换为向量,参与知识库的检索。
为文档配置标签(可选)。
通过API调用应用时,可以在请求参数
tags
中指定标签。应用在检索知识库时,会先根据标签筛选相关文档,从而提高检索效率。对于智能体应用,您还可以在控制台编辑应用时直接设置标签(开启 )。单击确认,系统将开始解析并导入文档。整个过程需一定时间,请耐心等待。
文档解析会将上传文档转换成百炼可处理的格式。在请求高峰时段,该过程可能需要较长时间,请耐心等待。
解析和导入完成后,单击相应文档右侧的详情即可查看导入的文档。
结构化数据
在百炼的数据管理页面,选择结构化数据页签。
新建数据表或选择现有数据表进行导入。
每个业务空间最多创建1000张数据表,每张表累计可导入的数据上限为50000行(包括表头)。行数超过此限制将导致导入失败。请您自行提前对表格中数据进行分割。
新建数据表进行导入
单击图标新建数据表。
自定义数据表名称。
配置表结构,选择可直接上传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导入数据。
非结构化数据
设置知识库配置。
参数名称
参数说明
配置模式
建议选择推荐配置(百炼基于过往最佳实践得出)。若选择自定义,则可针对知识库的检索与召回等关键参数进行设置。
请注意,创建知识库后将无法更改配置模式中除相似度阈值之外的其它参数。
单击下一步,选择要导入知识库的文档。
若文档已在百炼的数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见非结构化数据),导入完成后再返回此处进行勾选。
选择类目:导入该类目下的所有文档,支持选择多个类目。
选择文件:也可以自行选择需要导入的文档。
单次最多选择50个文档,单文档最大限制100MB或1000页。
单击下一步,配置知识库数据处理策略。
参数名称
参数说明
metadata抽取(可选)
metadata(元数据)是与非结构化文档内容相关的一系列附加属性,这些属性以key-value键值对的形式进行存储和展示。
元数据的作用:元数据为文档提供了重要的上下文信息,可显著提升知识库检索的准确性。例如,当在知识库中检索“A产品的功能概述”时,如果所有文档中的内容都包含“功能概述”,但均没有提到“A产品”,那么知识库可能会召回大量与原始查询无关的文本切片。若将产品名称作为元数据附加到所有文档及其相关的文本切片上,知识库就能精准地过滤出与“A产品”相关的且包含“功能概述”的文本切片,从而提高检索的准确性,同时减少模型的输入Token消耗。
元数据的用法:通过API调用应用时,您可以在请求参数
metadata_filter
中指定metadata。应用在检索知识库时,会先根据metadata筛选相关文档。注意:创建知识库后将无法再配置metadata抽取。
文档切分chunk
选择智能切分(推荐)或自定义切分。
文档切分chunk作用:知识库会将您的文档切分成文本切片,并将这些文本切片通过Embedding模型转换为向量。随后文本切片和向量将以键值对的形式存入向量数据库中。您可以查看知识库里每一个文本切片的具体内容(文字和图片),具体操作请参见查看知识库。
注意:创建知识库后将无法再更改文档切分chunk。不合适的切分策略可能会降低检索和召回效果,详情请参见如何检查文本切片质量。
智能切分:采用系统内置切分策略。经评测对于多数文档可获得最佳的检索效果。
自定义切分:如果智能切分无法正常切割,您也可以对智能切分的部分策略进行调整。
结构化数据
设置知识库配置。
参数名称
参数说明
配置模式
建议选择推荐配置(百炼基于过往最佳实践得出)。若选择自定义,则可针对知识库的检索与召回等关键参数进行设置。
请注意,创建知识库后将无法更改配置模式中除相似度阈值之外的其它参数。
单击下一步,选择数据来源以导入结构化数据。
如果您通过数据管理导入结构化数据,后续您需要手动将数据表的更新同步至知识库。展开更新知识库部分查看更新结构化知识库具体步骤。
如果您通过云数据库RDS导入结构化数据,则RDS表中的数据更新将自动同步至知识库(一般为秒级,但在请求高峰期可能会稍有延迟)。
数据来源
说明
数据管理
若数据表已在百炼数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见导入结构化数据),导入完成后再返回此处进行勾选。
关联RDS
将RDS实例中特定数据表的数据同步到您的知识库中。
实例限制:RDS实例目前只支持MySQL引擎(版本无限制),暂不支持PostgreSQL等其它引擎。实例地域无限制。只支持基础系列和高可用系列(暂不支持开启数据库代理)。
数据库和表限制:知识库只能关联单个数据库中的一张表,不支持多表关联。知识库对关联的表中的数据量没有限制,但每一行记录的大小必须控制在10MB以内。请注意,在创建知识库后,不建议再对源表进行DDL类操作(例如:DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN),否则可能会导致RDS与知识库之间的数据同步失败。欲了解详情,请参见关于DDL操作的说明。
为了使知识库能够接收RDS的数据,您还需要设置RDS实例的白名单。
单击下一步,设置知识库索引。请注意,索引配置在知识库创建后无法更改。
参数名称
参数说明
是否参与检索
开启后表示允许知识库在此列数据中进行搜索。
是否参与模型回复
开启后表示本列的检索结果将作为大模型生成回答时的输入信息。如下图示例的配置中,对“姓名”、“性别”、“岗位”、“年龄”开启是否参与检索,对“姓名”和“岗位”开启是否参与模型回复后, 知识库将会在所有列数据中进行检索,但只对检索到的数据中“姓名”、“岗位”两列的内容提供给大模型进行回答参考。
如下图所示,因为“年龄”没有开启参与模型回复,大模型在关联该知识库后依然无法回答“张三的年龄”的问题。
单击导入完成,完成知识库创建。
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模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。
步骤四:引用知识库
接下来您便可以在我的应用中将创建好的知识库与您位于相同的业务空间里的智能体应用关联,以便为您的大模型应用补充私有知识和提供最新信息。支持同时选择并检索多个知识库(最多5个,采用多路召回策略)。目前尚不支持设置检索顺序。
多路召回策略:如果应用关联了A1、A2和A3三个知识库,系统会从这些库中检索与原始输入相关的文本切片,然后通过Rank模型重排序,选出最相关的前K条加入到大模型的输入Token中用于其回答时参考。
智能体应用
场景
下图是一个基于知识库的问答类智能体应用示例。此类应用有效解决了通用大模型难以处理私有知识和获取最新信息的问题。适用于个人助理、客户服务、技术支持等领域。
在智能体应用中引用知识库
访问我的应用,单击已创建智能体应用卡片的管理按钮,进入百炼应用管理界面。如下图所示开启知识检索增强,Prompt中会自动填入让大模型参考知识库的指令。单击配置知识库添加需要引用的知识库,使用默认的检索配置。应用发布后,会默认使用选中的知识库进行回答。