知识库索引管理

更新时间:2025-03-20 07:08:42

在进行RAG应用流开发时,您需要为相关节点配置知识库索引。因此,在此之前,您需要创建知识库索引。知识库索引用于高效地组织和检索大量知识库中的相关信息,以辅助生成更准确和相关的回答。知识库索引创建完成后,您可以在不同的应用流中重复使用,从而简化集成流程,提高开发效率。

功能简介

通过知识库索引,大语言模型可以获得更多领域相关的知识,从而提高回答的准确性和相关性。当创建新的知识库索引时,系统会自动提交一个PAI工作流任务,工作流节点会通过DLC任务来执行,用于对OSS数据源中的文件进行预处理、分块和Embedding转换。处理完成后,数据将入库到向量数据库,并在PAI中注册为知识库索引,以便在应用流开发中实现高效的信息检索。

此外,知识库索引还支持更新,您可以通过手动更新知识库,从而确保知识库的实时性和准确性。

前提条件

已创建所需的Embedding模型连接和向量数据库连接(如有需要)。具体操作,请参见服务连接配置

创建知识库索引

进入LangStudio,选择工作空间后,在知识库索引页签下创建知识库索引。

image

参数

描述

参数

描述

基础配置

知识库索引名称

自定义知识库索引名称。

创建知识库索引时,系统会自动提交一个PAI工作流任务,待工作流任务执行成功后,会自动生成一个同名的数据集。

数据源OSS路径

知识库数据所在的OSS目录,知识库文件格式仅支持.html.htm.pdf.csv.xlsx.xls.txt.docx

输出OSS路径

保存文档解析生成的中间结果和索引信息,最终输出内容与所选向量数据库类型相关。

重要

当使用FAISS作为向量数据库时,应用流会将生成的索引文件保存到OSS。若使用PAI默认角色(应用流开发-启动运行时时设置的实例RAM角色),应用流可以默认访问用户工作空间的默认存储Bucket,因此建议将此参数配置为当前工作空间的默认存储路径。如果使用自定义角色,您需要为自定义角色授予OSS的访问权限(建议授予AliyunOSSFullAccess权限),详情请参见RAM角色授权

文档解析分块配置

文本分块大小

将知识库索引文件基于固定大小进行切分,每个子块的最大长度默认为1024(字符)。

文本分块重叠大小

为确保检索信息连贯性,相邻两个分块间存在的重叠大小,默认为200(字符)。通常建议重叠大小为分块大小的10%~20%。关于分块大小和重叠大小具体设置详情,请参见附录:基于分块大小(chunk_size)和分块重叠大小(chunk_overlap)调优

Embedding模型和数据库

Embedding类型

支持配置以下两种连接类型:

  • 通用Embedding模型:兼容OpenAI Embedding APIEmbedding模型服务,来源可以是PAI-EAS或第三方模型服务,详情请参见服务连接配置-通用Embedding模型服务连接

  • 百炼DashScope连接:基于阿里云百炼模型服务的Embedding模型连接。

Embedding连接

选择已创建的Embedding模型服务连接。

Embedding模型

配置Embedding模型名称:

  • 当通过Model Gallery进行模型部署时,可通过模型详情页(在Model Gallery页单击模型卡片)查看模型名称的获取方法,详情请参见创建连接-模型服务

  • 当使用百炼DashScopeEmbedding模型时,选择可调用的Embedding模型。

向量数据库类型

支持使用以下两种向量数据库类型:

  • FAISS:选择该类型时,知识库索引文件及最终结果将存放于输出OSS路径中。

  • 向量数据库Milvus:选择该类型时,需配置已创建的Milvus数据库连接和Collection。

计算资源:执行工作流节点任务所需的计算资源,支持使用通用计算资源配额或公共资源。

专有网络配置:建立知识库索引时,需要依赖模型服务、数据库资源,因此需添加VPC配置。该VPC应与连接资源的VPC保持一致,或确保网络可连通。例如,使用百炼DashScope连接时需要公网环境,您需要为该VPC开通访问公网的权限,详情请参见配置公网连接

查看工作流任务

知识库索引创建成功后,系统将自动生成PAI工作流任务。单击知识库索引列表操作列的查看任务查看相关工作流:

image

image

工作流任务包括以下两个节点,每个节点会创建一个DLC Job来执行任务。单击节点,您可以查看具体任务运行详情,包括运行信息、任务日志和输出结果。您还可以通过日志中的Job URL来查看DLC任务详情。

  • rag-parse-chunk:对知识库文档进行预处理和分块,将分块后的文档数据传递至下一个节点。

  • rag-create-index:对预处理后的文档数据进行Embedding处理,生成配置文件并注册至向量数据库。

当工作流任务执行成功后,系统会自动将输出OSS路径注册为数据集。您可以在AI资产管理-数据集中查看资产详情。image

更新知识库索引

单击知识库索引列表操作列的手动更新,修改知识库数据所在的OSS目录,从而确保知识库的实时性和准确性。

说明

在进行任何更新操作前,建议先备份当前的知识库数据和索引,以防在更新过程中出现意外问题导致数据丢失。

image

完成更新后,系统会自动创建工作流任务。更新知识库索引的工作流任务会去比对存储在向量数据库中的文档和新挂载数据源中的文档,根据文件的新增、修改和删除情况,更新知识库中存储的向量和文档。

使用知识库索引

知识库索引创建成功后,您可以在应用流开发(如RAG应用流的开发与部署-开发应用流)过程中使用,进行信息检索。

image

返回结果为List[Dict],其中DictKey包含contentscore,分别对应文档分片与输入查询的内容和相似度得分。返回结果包含得分最高的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)调优

设置原则

  1. 模型上下文限制:首先要确认所用的嵌入模型能处理的最大token数。如果模型对token数有限制,那么分块的大小就需要在这一范围内,避免过长文本导致截断或信息丢失。

  2. 信息完整性:对于各类型文本,需要能保留足够的上下文,又不会使每个块包含过多信息,从而影响相似度计算的精确性。如果文本内容是按段落组织的,可以选择让每个块包含完整的段落,而不是生硬地切割。

  3. 保持连续性:设置适当的重叠部分有助于在查询时保持上下文连续性,防止因为分块边界导致的关键信息丢失。通常建议重叠大小为分块总数的10%~20%。例如,分块大小为300tokens,则重叠部分可以设置在3060tokens之间。

  4. 避免重复干扰:虽然适当的重叠可以提高召回率,但重叠过多可能会引入重复信息,从而影响检索效率。因此需要在“信息完整性”和“冗余”之间找到平衡。

调试与实验

  • 迭代优化:例如您可以将初始分块大小设置为300,重叠大小设置为50。随后根据检索结果和问答效果不断调整这些参数。可以尝试不同的分块大小和重叠比例,以确定最适合文本特性的设置。

  • 自然语言边界:如果文本结构清晰(比如按照章节或段落划分),可以优先考虑基于自然语言的切分,这样在保持语义完整性的同时,也有利于后续问答匹配。

如何优化

问题情况

优化建议

问题情况

优化建议

检索结果不相关

增大chunk_size,减少chunk_overlap。

检索结果片段化(上下文不连贯)

增大chunk_overlap。

召回率低(找不到合适的匹配)

适当增加chunk_size。

计算开销过高(嵌入和存储占用太大)

降低chunk_size,减少chunk_overlap。

以下是基于以往经验推荐的各类文本对应的分块大小和重叠大小:

文本类型

推荐分块大小(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

  • 本页导读 (1)
  • 功能简介
  • 前提条件
  • 创建知识库索引
  • 查看工作流任务
  • 更新知识库索引
  • 使用知识库索引
  • 附录:基于分块大小(chunk_size)和分块重叠大小(chunk_overlap)调优
  • 设置原则
  • 调试与实验
  • 如何优化
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等