在进行RAG应用流开发时,您需要为相关节点配置知识库。因此,在此之前,您必须先创建知识库。知识库用于高效地组织和检索大量知识库中的相关信息,以辅助生成更准确和相关的回答。知识库创建完成后,您可以在不同的应用流中重复使用,从而简化集成流程,提高开发效率。
功能简介
通过知识库,大语言模型可以获得更多领域相关的知识,从而提高回答的准确性和相关性。当新的知识库创建完成并更新索引后,系统会自动提交一个PAI工作流任务,工作流节点会通过DLC任务来执行,用于对OSS数据源中的文件进行预处理、分块和Embedding转换。处理完成后,数据将入库到向量数据库,并在PAI中注册为知识库索引,以便在应用流开发中实现高效的信息检索。
此外,知识库还支持手动更新和定时调度更新知识库,从而确保知识库的实时性和准确性。
前提条件
已创建所需的Embedding模型连接和向量数据库连接(如有需要)。具体操作,请参见连接配置。
创建知识库
进入LangStudio,选择工作空间后,在知识库页签下创建知识库。
参数
描述
基础配置
知识库名称
自定义知识库名称。
数据源OSS路径
知识库数据所在的OSS目录,知识库文件格式仅支持
.html
、.htm
、.pdf
、.csv
、.xlsx
、.xls
、.txt
和.docx
。输出OSS路径
保存文档解析生成的中间结果和索引信息,最终输出内容与所选向量数据库类型相关。
重要当使用FAISS作为向量数据库时,应用流会将生成的索引文件保存到OSS。若使用PAI默认角色(应用流开发-启动运行时时设置的实例RAM角色),应用流可以默认访问用户工作空间的默认存储Bucket,因此建议将此参数配置为当前工作空间默认存储路径所在的OSS Bucket下的任一目录。如果使用自定义角色,您需要为自定义角色授予OSS的访问权限(建议授予AliyunOSSFullAccess权限),详情请参见为RAM角色授权。
文档解析分块配置
文本分块大小
将知识库文件基于固定大小进行切分,每个子块的最大长度默认为1024(字符)。
文本分块重叠大小
为确保检索信息连贯性,相邻两个分块间存在的重叠大小,默认为200(字符)。通常建议重叠大小为分块大小的10%~20%。关于分块大小和重叠大小具体设置详情,请参见附录:基于分块大小(chunk_size)和分块重叠大小(chunk_overlap)调优。
Embedding模型和数据库
Embedding类型
支持配置以下两种连接类型:
通用Embedding模型:兼容OpenAI Embedding API的Embedding模型服务,来源可以是PAI-EAS或第三方模型服务,详情请参见连接配置-通用Embedding模型服务连接。
百炼DashScope连接:基于阿里云百炼模型服务的Embedding模型连接。
Embedding连接
选择已创建的Embedding模型服务连接。
Embedding模型
配置Embedding模型名称:
当通过Model Gallery进行模型部署时,可通过模型详情页(在Model Gallery页单击模型卡片)查看模型名称的获取方法,详情请参见创建连接-模型服务。
当使用阿里云百炼DashScope的Embedding模型时,选择可调用的Embedding模型。
向量数据库类型
支持使用以下两种向量数据库类型:
向量数据库Milvus:Milvus通常用于生产环境,支持处理大规模的向量数据。选择该类型时,需配置已创建的Milvus数据库连接和Collection。
FAISS:Faiss通常用于测试环境,无需额外创建数据库即可使用。选择该类型时,知识库文件及最终结果将存放于输出OSS路径中。
运行时:选择一个运行时,用于访问向量数据库和Embedding服务,以实现知识库的文档分块预览和召回测试等功能。请确保运行时的VPC网络与向量数据库和Embedding服务的VPC网络一致或者可连通。
重要如果您的运行时创建时间较早,请确认其镜像版本不低于2.1.4,或者重新创建运行时,以避免无法选择的问题。
单击已创建的知识库名称。
单击右上角更新索引,配置计算资源,用于对知识库文件进行预处理、分块和Embedding转换。
参数
描述
计算资源
执行工作流节点任务所需的计算资源,支持使用灵骏智算资源和通用计算资源。
专有网络配置
请确保选择的VPC网络与知识库的Embedding服务和向量数据库服务的VPC网络连通,建议使用相同的VPC以简化配置。
管理知识库
知识库创建完成后,您还可以对知识库进行更新、查看文档分块、召回测试等操作,以便于更好的满足您的实际需求。
功能 | 操作入口 | 备注 |
更新知识库 | 上传完知识库文件后,还需单击右上角更新索引,从而完成对新增文件的预处理、分块和Embedding转换。 | |
查看文档分块(chunk) | 更新索引之后,单击指定知识库文档,查看文档分块。 | 只有当向量数据库类型为Milvus,才支持启用/关闭文档分块。 |
召回测试 | 更新索引之后,可进行召回测试。您可通过配置检索设置测试召回效果是否满足实际需求。 | Top K和Score阈值含义:
|
元数据检索 |
|
|
配置定时调度 |
|
|
查看工作流任务 | 更新索引之后,单击右上角操作记录,单击指定任务操作列的查看任务查看相关工作流: | 更新索引后,系统会自动提交一个PAI工作流任务,工作流任务包括以下三个节点,除read-oss-file节点外,每个节点会创建一个DLC Job来执行任务,单击节点,您可以查看具体任务运行详情,包括运行信息、任务日志和输出结果。您还可以通过日志中的Job URL来查看DLC任务详情。
|
查看数据集 | 更新索引之后,系统会自动将输出OSS路径注册为数据集。您可以在AI资产管理-数据集中查看资产详情。 | 更新索引后,系统会自动提交一个PAI工作流任务,待工作流任务执行成功后,会自动生成一个同名的数据集。 |
使用知识库
知识库创建成功后,您可以在应用流开发(如RAG应用流的开发与部署-开发应用流)过程中使用,进行信息检索。
返回结果为List[Dict],其中Dict的Key包含content
和score
,分别对应文档分片与输入查询的内容和相似度得分。返回结果包含得分最高的top_k条记录,示例如下:
[
{
"score": 0.8057173490524292,
"content": "受疫情带来的不确定性影响,xx银行根据经济走势及中国或中国内地环境预判,主动\n加大了贷款和垫款、非信贷资产减值损失的计提力度,加大\n不良资产核销处置力度,提升拨备覆盖率,2020 年实现净利\n润289.28亿元,同比增长 2.6%,盈利能力逐步改善。\n(人民币百万元) 2020年 2019年 变动(%)\n经营成果与盈利\n营业收入 153,542 137,958 11.3\n减值损失前营业利润 107,327 95,816 12.0\n净利润 28,928 28,195 2.6\n成本收入比(1)(%) 29.11 29.61下降 0.50个\n百分点\n平均总资产收益率 (%) 0.69 0.77下降 0.08个\n百分点\n加权平均净资产收益率 (%) 9.58 11.30下降 1.72个\n百分点\n净息差(2)(%) 2.53 2.62下降 0.09个\n百分点\n注: (1) 成本收入比 =业务及管理费/营业收入。",
"id": "49f04c4cb1d48cbad130647bd0d75f***1cf07c4aeb7a5d9a1f3bda950a6b86e",
"metadata": {
"page_label": "40",
"file_name": "2021-02-04_中国xx保险集团股份有限公司_xx_中国xx_2020年__年度报告.pdf",
"file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf",
"file_type": "application/pdf",
"file_size": 7982999,
"creation_date": "2024-10-10",
"last_modified_date": "2024-10-10"
}
},
{
"score": 0.7708036303520203,
"content": "72亿元,同比增长 5.2%。\n2020年\n(人民币百万元)寿险及\n健康险业务财产保险\n业务 银行业务 信托业务 证券业务其他资产\n管理业务 科技业务其他业务\n及合并抵消 集团合并\n归属于母公司股东的净利润 95,018 16,083 16,766 2,476 2,959 5,737 7,936 (3,876) 143,099\n少数股东损益 1,054 76 12,162 3 143 974 1,567 281 16,260\n净利润 (A) 96,072 16,159 28,928 2,479 3,102 6,711 9,503 (3,595) 159,359\n剔除项目 :\n 短期投资波动(1)(B) 10,308 – – – – – – – 10,308\n 折现率变动影响 (C) (7,902) – – – – – – – (7,902)\n 管 理层认为不属于 \n日常营运收支而剔除的 \n一次性重大项目及其他 (D) – – – – – – 1,282 – 1,282\n营运利润 (E=A-B-C-D) 93,666 16,159 28,928 2,479 3,102 6,711 8,221 (3,595) 155,670\n归属于母公司股东的营运利润 92,672 16,",
"id": "8066c16048bd722d030a85ee8b1***36d5f31624b28f1c0c15943855c5ae5c9f",
"metadata": {
"page_label": "19",
"file_name": "2021-02-04_中国xx保险集团股份有限公司_xxx_中国xx__2020年__年度报告.pdf",
"file_path": "oss://my-bucket-name/datasets/chatglm-fintech/2021-02-04__中国xx保险集团股份有限公司__601318__中国xx__2020年__年度报告.pdf",
"file_type": "application/pdf",
"file_size": 7982999,
"creation_date": "2024-10-10",
"last_modified_date": "2024-10-10"
}
}
]
附录:基于分块大小(chunk_size)和分块重叠大小(chunk_overlap)调优
设置原则
模型上下文限制:首先要确认所用的嵌入模型能处理的最大token数。如果模型对token数有限制,那么分块的大小就需要在这一范围内,避免过长文本导致截断或信息丢失。
信息完整性:对于各类型文本,需要能保留足够的上下文,又不会使每个块包含过多信息,从而影响相似度计算的精确性。如果文本内容是按段落组织的,可以选择让每个块包含完整的段落,而不是生硬地切割。
保持连续性:设置适当的重叠部分有助于在查询时保持上下文连续性,防止因为分块边界导致的关键信息丢失。通常建议重叠大小为分块总数的10%~20%。例如,分块大小为300个tokens,则重叠部分可以设置在30到60个tokens之间。
避免重复干扰:虽然适当的重叠可以提高召回率,但重叠过多可能会引入重复信息,从而影响检索效率。因此需要在“信息完整性”和“冗余”之间找到平衡。
调试与实验
迭代优化:例如您可以将初始分块大小设置为300,重叠大小设置为50。随后根据检索结果和问答效果不断调整这些参数。可以尝试不同的分块大小和重叠比例,以确定最适合文本特性的设置。
自然语言边界:如果文本结构清晰(比如按照章节或段落划分),可以优先考虑基于自然语言的切分,这样在保持语义完整性的同时,也有利于后续问答匹配。
如何优化
问题情况 | 优化建议 |
检索结果不相关 | 增大chunk_size,减少chunk_overlap。 |
检索结果片段化(上下文不连贯) | 增大chunk_overlap。 |
召回率低(找不到合适的匹配) | 适当增加chunk_size。 |
计算开销过高(嵌入和存储占用太大) | 降低chunk_size,减少chunk_overlap。 |
以下是基于以往经验推荐的各类文本对应的分块大小和重叠大小:
文本类型 | 推荐分块大小(chunk_size) | 推荐重叠大小(chunk_overlap) |
短文本(FAQ、摘要) | 100~300 | 20~50 |
普通文本(新闻、博客) | 300~600 | 50~100 |
技术文档(API、论文) | 600~1024 | 100~200 |
长篇文档(法律、书籍) | 1024~2048 | 200~400 |