大模型缺乏私有知识,且通用知识更新滞后。业界通常采用检索增强生成(RAG)技术来解决这些问题。RAG技术能够根据用户输入,从外部信息源检索相关信息,并将其整合到用户输入中,以提高大模型的回答准确性。知识库功能作为百炼的RAG能力,能有效补充私有知识和提供最新信息。
无专属知识库的应用 在没有专属知识库时,大模型无法准确回答“百炼手机”的问题,因为这是一个虚构的私有知识。 | 有专属知识库的应用 引入专有知识库后,大模型就能准确回答“百炼手机”方面的问题。 |
关于RAG的工作原理等详细信息,请参见阿里云大模型ACA课程的检索增强生成。
支持的数据格式
当前知识库支持导入以下格式的原始文档作为其知识来源:
非结构化数据(pdf、docx、doc、txt、markdown、pptx、ppt等)
结构化数据(xlsx、xls等)
以上类型并不完整,具体请以数据管理中的导入数据页面显示为准。
原始文档支持从本地上传和从阿里云对象存储OSS导入两种方式(暂不支持阿里云以外的数据源,如GitHub、Notion等)。
支持的模型
当前知识库功能支持下列预置模型(不支持自定义模型):
通义千问-Max/Plus/Turbo
通义千问2开源版
上述列表并不完整且可能随时发生变化,请以百炼的我的应用-新增应用页面中模型选择下拉框显示的列表为准。
创建与引用知识库
步骤一:导入数据
在开始创建知识库之前,请先依照下方步骤说明,将您的原始文档导入至百炼的数据管理,以作为创建知识库时的初始知识来源。支持导入的数据类型分为结构化数据和非结构化数据两种。
选择结构化或非结构化数据主要取决于您的原始文档格式,详情请参见支持的数据格式。
支持通过控制台和API两种方式导入数据。API目前只支持导入非结构化数据。
通过API导入数据的具体操作,请参见数据中心 - 添加文档。
导入非结构化数据
在百炼的数据管理页面,选择非结构化数据页签。
在左侧类目管理下,选择需要导入数据的类目。
单击
图标创建类目或选择默认类目进行导入。百炼对类目创建数量没有限制,每个类目最多上传1万个文档。
单击导入数据,进入导入数据页面。
单击确认,系统将开始解析并导入文档。整个过程需一定时间,请耐心等待。
文档解析会将上传文档转换成百炼可处理的格式。在请求高峰时段,该过程可能需要较长时间,请耐心等待。
解析和导入完成后,单击相应文档右侧的详情即可查看导入的文档。
导入结构化数据
在左侧的数据表管理下,选择需要导入数据的数据表。
新增一张数据表,并配置表结构用于存储您上传的结构化数据。
单击
图标创建数据表或选择数据表进行导入。百炼支持创建最多1000张数据表,每张表导入的数据量无限制。
自定义数据表名称。
配置表结构,可选择直接上传excel或自定义表头。
操作
说明
直接上传excel
百炼将自动识别上传文件中的表头,并据此来创建数据表结构,并将其余内容作为数据记录导入该表。
自定义表头
列名为必填参数,描述为选填参数。
重要这里定义的数据表结构,必须和待导入的数据表的结构完全相同,否则会导入失败。例如,待导入的数据表有2列,这里的表结构必须配置2个字段,且列名需一一对应。您可以通过单击新增字段或操作列的删除,来增加或删减字段。
单击确定。在左侧数据表管理的导航树中出现新增的数据表。
向数据表导入数据。
在数据表管理的导航树中,单击新增的数据表。
单击导入数据。
导入类型选择覆盖上传或增量上传。
将xlsx或xls格式的文档拖拽至虚线框内,或单击
选择并上传文档。
文档必须包含表头。
上传成功后,单击预览可查看导入的数据。
步骤二:创建知识库
无论是企业认证账号还是个人认证账号,知识库创建均无数量限制。
控制台
在百炼的知识索引页面,单击创建知识库。
参数名称
参数说明
数据类型
选择非结构化数据或结构化数据。
选择结构化或非结构化数据主要取决于您的原始文档格式。如果您要上传的原始文档是pdf、docx、doc、txt、markdown、pptx、ppt等格式,数据类型请选择非结构化数据;如果您要上传的原始文档是xlsx,xls格式,此处请选择结构化数据。请注意,知识库创建后将无法更改其数据类型,且单一知识库无法同时支持非结构化数据与结构化数据。
配置模式
建议选择推荐配置(百炼基于过往最佳实践得出)。若选择自定义,则可针对知识库的检索与召回等关键参数进行设置。
多轮会话改写:开启后百炼将基于会话上下文自动调整原始输入prompt(用户问题)以提升检索效果。
Embedding模型:用于将原始输入prompt和知识文本转化为数值化向量,以便对二者进行相似度比较。默认的DashScope text-embedding-v2模型(暂不支持更改)除了支持中英文双语外,还支持多种语言,并对向量结果进行归一化处理。
Rank模型:位于知识库外部的评分系统,它会计算用户问题与知识库中每个文本切片的相似度分数并按此降序排列,并返回分数最高的前K个文本切片。如果您只需语义排序,请选择GTE-ReRank排序;若您同时需要语义排序和文本匹配特征以确保相关性,请选择官方排序(推荐)。
相似度阈值:该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。
向量存储类型
选择向量数据库以存储您的文本向量。选择内置的向量数据库(基于ElasticSearch)足以满足知识库的基本功能需求。如需高级功能,如管理、审计和监控数据库,推荐选择ADB-PG(AnalyticDB for PostgreSQL)。
单击下一步,初始化知识库数据并配置切分策略(非结构化数据)或索引(结构化数据)。
非结构化数据
参数名称
参数说明
选择数据
选择需要导入到知识库中的文档。
选择类目:导入已选类目下的所有文档,支持选择多个类目。
选择文件:也可以自行选择需要导入的文档。
单次最多选择50个文档,单文档最大限制100MB或1000页。
文档切分chunk
知识库会将您的文档切分成文本切片,并将这些文本切片通过Embedding模型转换为向量。随后文本切片和向量将以键值对的形式存入向量数据库中。您可以查看知识库里每一个文本切片的内容,具体操作请参见查看知识库。
智能切分:采用系统内置切分策略。经评测对于多数文档可获得最佳的检索效果,推荐选择。
自定义切分:如果智能切分无法正常切割,您也可以自定义文档切分策略。
分句标识符:将文档按照指定的标点符号(支持多选)分割成小的文本切片。
分段预估长度:即文本切片的字符数上限。超过该长度时,文本将被强制切割。
分段重叠长度:即当前文本切片与上一个文本切片的重叠字符数。建议设置为文本切片预估长度的10%到25%,以保留文本切片之间语义的相关性,有利于提高多文本切片召回的召回质量。
文档切分chunk在知识库创建后无法更改。不合适的切分策略可能会降低检索和召回效果,详情请参见如何检查文本切片质量。
结构化数据
参数名称
参数说明
选择数据
选择已经创建的数据表。
索引配置
是否参与检索:开启后表示在此列数据中进行搜索。
是否参与模型回复:开启后表示本列的检索结果将作为大模型生成回答时的输入信息。如下图示例的配置中,对“姓名”、“性别”、“岗位”、“年龄”开启是否参与检索,对“姓名”和“岗位”开启是否参与模型回复后, 知识库将会在所有列数据中进行检索,但只对检索到的数据中“姓名”、“岗位”两列的内容提供给大模型进行回答参考。
索引配置在知识库创建后无法更改。
如下图所示,因为“年龄”没有开启参与模型回复,大模型在关联该知识库后依然无法回答“张三的年龄”的问题。
单击导入完成,完成知识库创建。
API
了解如何调用百炼API及其相关要求,请参见API概览。
要创建一个知识库(索引),请调用创建索引接口。
管理结构化数据的知识库暂不支持通过API进行创建,请通过控制台创建此类知识库。
请求返回中
Data.Id
的值即为索引ID,请妥善保管该值,它将用于后续所有索引相关的API操作。StructureType
字段中请指定用于创建索引的数据结构类型。非结构化数据请传入unstructured。RerankModelName
字段中请指定排序模型名称。官方排序请传入gte-rerank-hybrid。排序模型用于对从知识库召回的知识文本结果根据语义相关性进行再排序。推荐官方排序。
SinkType
字段中请指定索引存储类型。内置的向量数据库(基于ElasticSearch)可满足基本需求。对于海量数据及企业级性能和可用性要求,推荐ADB-PG(AnalyticDB for PostgreSQL)。
指定内置的向量数据库(基于ElasticSearch),请传入DEFAULT。
指定ADB-PG(AnalyticDB for PostgreSQL)数据库,请传入ADB。
上一步创建索引接口只负责初始化索引构建流程,接下来还需要再调用提交索引创建任务接口完成索引创建。任务的执行需一定时间,如果需要查询任务的状态,可调用查询索引创建任务状态接口(请求返回中
Data.Status
为COMPLETED时表示索引已创建完成)。
步骤三:测试知识库(可选)
命中测试用于评估知识库在给定的相似度阈值下语义检索的表现,例如检查文本切片是否被正确召回,从而确定是否需要进一步调整知识库的相似度阈值,以确保后续大模型能够从知识库中获得有效的知识输入。
相似度阈值:该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。
命中测试建议步骤
设计能够覆盖客户常见问题的测试用例;
根据知识库的具体应用场景和前期导入文档的质量,选择一个合适的相似度阈值;
执行命中测试,查看知识库召回结果;
基于召回结果,重新调整您的知识库的相似度阈值,具体操作请参见编辑知识库。
控制台
API
步骤四:引用知识库
接下来您便可以在我的应用中将创建好的知识库与您的智能体应用或者工作流应用关联,以便为您的大模型应用补充私有知识和提供最新信息。两类应用均支持同时选择并检索多个知识库(多路召回策略)。
多路召回策略:如果应用关联了A1、A2和A3三个知识库,系统会从这些库中检索与原始输入相关的文本切片,然后通过Rank模型重排序,选出最相关的前K条加入到大模型的输入Token中用于其回答时参考。
智能体应用
场景
下图是一个基于知识库的问答类智能体应用示例。此类应用有效解决了通用大模型难以处理私有知识和获取最新信息的问题。适用于个人助理、客户服务、技术支持等领域。
在智能体应用中引用知识库
访问我的应用,单击已创建智能体应用卡片的管理按钮,进入百炼应用管理界面。如下图所示开启知识检索增强,Prompt中会自动填入让大模型参考知识库的指令。在选择知识库下拉列表中选择需要引用的知识库,使用默认的检索配置。应用发布后,会默认使用选中的知识库进行回答。
检索配置(可选)
修改后仅对当前应用生效。
召回参数:用于平衡知识库的性能和召回结果的全面性。
参数名称
参数说明
召回片段数
即多路召回策略中K值。它决定了Rank模型提供给大模型参考的文本切片数量,小于或等于召回最大长度。增大该值可提高大模型的回答准确性,但也会相应增加大模型输入Token消耗。
召回最大长度
是知识库单次检索返回的文本切片数量上限。增大该值通常会提高知识库的覆盖率,召回更多和用户查询可能相关的文本切片(例如设置最大召回长度为100,则知识库最多只会返回100个文本切片给Rank模型进行TopK),但也会增加每次问答的响应时延。
回答范围:用于控制应用回答时参考知识来源,可引入或排除大模型自身通用知识的影响。
知识库 + 大模型知识
应用的回答将综合知识库中检索到的知识和大模型自身的通用知识。
仅知识库范围
应用的回答将严格基于知识库中检索到的知识。
知识范围判定:选择搜索阈值或搜索阈值+大模型判断。
当用户输入的关键词从语义维度与文本切片无法精确匹配时,使用单一搜索阈值(即相似度阈值)检索的局限就会显现。而采用搜索阈值+大模型判断的方式,会先通过相似度阈值筛选潜在文本切片,再由大模型深入分析关联度,进一步提高了判定的准确性。
设置判断Prompt:大模型用于判断用户输入和检索结果的关联程度的规则。
未在知识库处理:选择大模型回复或固定回复。
大模型回复:与回答范围设定为知识库 + 大模型知识时无差别。
设定展示回答来源:开启后将在回答中展示参考的全部来源,但会增加大模型输出Token消耗。
例如,应用同时引用了多个不同的知识库。
开启展示回答来源功能后,应用回答时就会提供生成答案时参考的全部来源。
工作流应用
场景
下图是一个基于知识库的问答类工作流应用示例。流程执行逻辑为:用户输入的问题首先会经过知识库检索,获取最相关的文本切片;随后这些文本切片将与问题一并输入至大模型节点,最终生成基于检索内容的回答。
在工作流应用中引用知识库
访问我的应用,单击已创建工作流应用卡片的管理按钮,进入百炼应用管理界面。
配置上游节点:新建一个知识库节点,并将它设置为开始节点的下游节点。
选择查询变量:在知识库节点的输入下拉列表中选择查询变量(用于检索知识库中的相关文本切片)。
对于问答类工作流应用,通常选择开始节点的
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
。
管理与维护知识库
查看知识库
编辑知识库
更新知识库
删除知识库
常见问题
长文本大模型(Long-Context LLM)和RAG怎么选?
长文本大模型(如Qwen-Long)和RAG均能通过喂入外部信息来优化输出,但它们各有所长。长文本大模型会全面审视输入文本的每个Token,因此通常在深度理解和总结长篇文本方面表现更佳,但这同时也带来了更高的计算和推理成本;RAG则通过快速跨源检索,只专注于最相关的Token,因此更适合那些无需全局理解,只靠整合最新信息片段即可迅速回答的事实性问题场景。
百炼是否支持自动更新知识库?
您可以通过整合阿里云对象存储OSS、函数计算FC和百炼知识索引API轻松实现对非结构化知识库(管理结构化数据的知识库暂不支持通过API进行更新)的自动更新,只需简单几步:
创建Bucket:前往OSS控制台创建Bucket用于存储您的原始文档。
创建知识库:在百炼上创建一个管理非结构化知识的知识库,用于存储您的私有知识内容。
创建自定义函数:在FC上针对文档变更类事件(例如新增、删除等操作)创建函数,具体操作请参见创建函数。这些函数通过调用百炼的更新知识库API,将OSS上发生的文档变更同步至创建好的知识库中。您在使用更新知识库API时,可能遇到下表所示的问题。
问题
说明
更新知识库时,是否需要按照特定顺序调用上述API接口?
是否需要按顺序调用API取决于您的业务需求和更新策略。以下是更新知识库时可能采用的一个API调用顺序示例:
首先使用添加文档接口导入文档到百炼的数据管理。
接着调用提交索引追加任务接口创建追加文档任务,将文档同步到知识库中。
然后使用查询索引创建任务状态进行轮询,以确认追加文档任务执行完成。
最后调用删除知识库索引文档删除旧的索引条目。
更新知识库时,是否必须调用删除知识库索引文档接口删除旧的知识索引文档?
是否需要调用该接口来删除旧的文档,这取决于您具体的更新策略。如果您需要确保知识库中的文档始终是最新的,并且旧知识不再适用,那么推荐执行删除操作,以避免旧的知识被错误地检索。
百炼是否支持上述追加和删除等API操作日志的记录和查看?
百炼知识库功能暂未集成API日志记录和查询功能。鉴于此,需要在您的应用程序中自行集成日志机制和校验逻辑,以确保知识的完整性。
创建OSS触发器:在FC上为上一步创建的自定义函数关联OSS触发器。当捕获到文档变更类的事件后(例如有新文档上传至OSS时),相应的触发器会被激活,触发FC执行相应的函数。具体操作请参见触发器。
我的知识库是否私有?其他公司或用户能否访问它?
您的知识库仅供您当前的账号使用,不会对外公开。此外,子业务空间无法访问默认业务空间的知识库,但默认业务空间可以查看和使用所有子业务空间的知识库。
百炼是否会使用我账号下的知识库来回答其他用户的问题?
百炼不会使用您账号下的知识库来回答其他用户的问题。
如果只能上传非结构化文档,如何组织文档内容有助于知识库检索?
建议使用易于文本解析的文件格式(如txt、md格式)进行导入;文档内容上建议明确标题和段落,并利用列表和编号整理信息突出关键词和概念。
百炼是否支持将知识库下载到本地?
暂不支持将知识库下载到本地。
数据管理中已导入知识库的文档/数据表是否可以删除?
对于非结构化数据,可以删除,因为数据管理和知识库两边是独立的数据副本;对于结构化数据,不可以删除,否则将导致查看知识库相关功能异常。
知识库是否会按照文档中文本Token数量计费?
步骤
计费情况
导入数据
不计费。
创建知识库
不计费。
测试知识库
不计费。
引用知识库
调用应用时,从知识库召回的文本切片会增加大模型输入Token数量,从而产生费用。
管理与维护知识库
不计费。
如何检查文本切片质量?
在关联知识库至您的应用前,建议人工检查库中的文本切片的质量,如何查看文本切片请参见查看知识库。检查文本切片质量时,需要重点关注以下三种情况:
文本切片过短
文本切片过长
明显的语义截断
切分chunk过短导致语义缺失,无法匹配。
切分chunk过长导致引入语义噪音,降低匹配精度。
切分chunk出现了强制性的语义截断,导致召回时缺失内容。
场景教程
本文仅介绍了百炼的知识库功能,您接下来可以尝试通过百炼快速构建一个在线知识库问答应用,以便全天候(7x24)响应用户咨询,提升用户体验、增强业务竞争力。以下是一些场景案例: