知识库

大模型缺乏私有知识,且通用知识更新滞后。业界通常采用检索增强生成(RAG)技术来解决这些问题。RAG技术能够根据用户输入,从外部信息源检索相关信息,并将其整合到用户输入中,以提高大模型的回答准确性。知识库功能作为百炼的RAG能力,能有效补充私有知识和提供最新信息。

无专属知识库的应用

在没有专属知识库时,大模型无法准确回答“百炼手机”的问题,因为这是一个虚构的私有知识。

有专属知识库的应用

引入专有知识库后,大模型就能准确回答“百炼手机”方面的问题。

image

image

关于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目前只支持导入非结构化数据,详情参见数据中心 - 添加文档

导入非结构化数据

  1. 在百炼的数据管理页面,选择非结构化数据页签。

  2. 在左侧类目管理下,选择需要导入数据的类目。

    单击image图标创建类目或选择默认类目进行导入。百炼对类目创建数量没有限制。
    每个业务空间最多上传10万个文档。

    image

  3. 单击导入数据,进入导入数据页面

  4. 导入方式选择本地上传OSS

    百炼支持的OSS Bucket存储类型不包括归档、冷归档或深度冷归档。支持内容加密的Bucket。支持私有的Bucket。
    OSS Bucket需添加bailian-datahub-access标签以供百炼访问,具体操作请参见OSS数据导入授权操作说明
  5. 选择文档解析器,默认为阿里云文档智能解析(暂不支持更改)。

    对于文档中的插图,解析器会识别并提取图中的文本,并生成文本摘要。这些摘要将与文档中其它非图片内容一起被切分并转换为向量,参与知识库的检索。
  6. 为文档配置标签(可选)。

    通过API调用应用时,可以在请求参数tags中指定标签。应用在检索知识库时,会先根据标签筛选相关文档,从而提高检索效率。
  7. 单击确认,系统将开始解析并导入文档。整个过程需一定时间,请耐心等待。

    文档解析会将上传文档转换成百炼可处理的格式。在请求高峰时段,该过程可能需要较长时间,请耐心等待。

    image

  8. 解析和导入完成后,单击相应文档右侧的详情即可查看导入的文档。

导入结构化数据

  1. 在百炼的数据管理页面,选择结构化数据页签。

  2. 新建数据表或选择现有数据表进行导入。

    每个业务空间最多创建1000张数据表,每张表累计可导入的数据上限为10000行(包括表头)。行数超过此限制将导致导入失败。请您自行提前对表格中数据进行分割。

    新建数据表进行导入

    单击image图标新建数据表

    image

    1. 自定义数据表名称

    2. 配置表结构,可选择直接上传Excel自定义表头

      操作

      说明

      直接上传Excel

      百炼将自动识别上传文档中的表头,并据此来创建数据表结构,并将其余内容作为数据记录导入该表。

      自定义表头

      列名为必填参数,描述为选填参数,类型为必填参数。

      重要
      • 创建数据表后将无法再修改列名、描述以及类型

      • 这里定义的数据表结构,必须和待导入的数据表的结构完全相同,否则会导入失败。例如,待导入的数据表有2列,这里的表结构必须配置2个字段,且列名需一一对应。您可以通过单击新增字段操作列的删除,来增加或删减字段。

      • 设置字段类型link时,请确保链接公开可访问且指向一个有效的图片文件,否则知识库无法识别该图片。

        link格式示例:https://example.com/downloads/pic.jpg
        创建知识库时,link类型字段用于生成图片索引。百炼会访问目标图片并提取其特征,然后通过图片Embedding转换为向量并保存。知识库检索时,会用该向量与用户上传图片的向量进行相似度比对。

      image

    3. 上传文档以导入数据。

      1. 单击image选择并上传文档(xlsxxls格式)。

        文档中必须包含表头,且与当前数据表的表头结构一致,否则会导入失败。
      2. 上传成功后,单击预览可查看导入的数据。

    4. 单击确定。在左侧数据表管理的导航树中出现新增的数据表。

      image

    选择现有数据表进行导入

    从左侧的数据表管理列表中选择相应的数据表,然后单击导入数据

    1. 导入类型选择覆盖上传增量上传

      您可以单击页面上的下载模板,获取一个仅包含表头的空白文档。您可以在该文档中插入新数据,随后直接将其用于覆盖上传或增量上传。
    2. 单击image选择并上传文档(xlsxxls格式)。

      文档中必须包含表头,且与当前数据表的表头结构一致,否则会导入失败。
    3. 上传成功后,单击预览可查看导入的数据。

步骤二:创建知识库

无论是企业认证账号还是个人认证账号,知识库创建均无数量限制。

控制台

  1. 在百炼的知识索引页面,单击创建知识库

    参数名称

    参数说明

    数据类型

    选择非结构化数据结构化数据

    请注意,知识库创建后将无法更改其数据类型,且单一知识库无法同时支持非结构化数据与结构化数据。

    以下情况,建议选择非结构化数据

    • 文档为pdf、docx、doc、txt、markdown、pptx、ppt、png、jpg、jpeg、bmp、gif等格式。

    • 文档为xlsxxls格式,但不同文档的表结构可能不完全相同。

    • 从阿里云对象存储OSS导入文档。

    以下情况,建议选择结构化数据

    • 文档为xlsxxls格式,且不同文档的表结构完全相同。

    • 文档为xlsxxls格式,将用于FAQ问答类场景。例如Excel文档包含两列,分别为问题答案。结构化数据允许您限定问题列用于知识库检索,答案列用于大模型回答参考(非结构化数据难以实现此效果)。

    • 从阿里云数据库RDS的数据表导入数据。

    配置模式

    建议选择推荐配置(百炼基于过往最佳实践得出)。若选择自定义,则可针对知识库的检索与召回等关键参数进行设置。

    请注意,创建知识库后将无法更改配置模式中除相似度阈值之外的其它参数

    自定义参数设置

    image

    多轮会话改写:开启后百炼将基于会话上下文自动调整原始输入Prompt(用户问题)以提升检索效果。

    Embedding模型:用于将原始输入Prompt和知识文本转化为数值化向量,以便对二者进行相似度比较。默认的DashScope text-embedding-v2模型(暂不支持更改)除了支持中英文双语外,还支持多种语言,并对向量结果进行归一化处理。

    Rank模型:位于知识库外部的评分系统,它会计算用户问题与知识库中每个文本切片的相似度分数并按此降序排列,并返回分数最高的前K个文本切片。如果您只需语义排序,请选择GTE-ReRank排序;若您同时需要语义排序和文本匹配特征以确保相关性,请选择官方排序(推荐)。

    相似度阈值:该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。

    向量存储类型

    选择向量数据库以存储您的文本向量。选择内置的向量数据库足以满足知识库的基本功能需求。如需高级功能,如管理、审计和监控数据库,推荐选择ADB-PG(AnalyticDB for PostgreSQL)。

  2. 下一步,选择要导入的文档或数据来源:

    非结构化数据

    若文档已在百炼的数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见导入非结构化数据),导入完成后再返回此处进行勾选。

    • 选择类目:导入该类目下的所有文档,支持选择多个类目。

    • 选择文件:也可以自行选择需要导入的文档。

      单次最多选择50个文档,单文档最大限制100MB1000页。

    结构化数据

    选择数据来源以导入您的结构化数据,可以选择数据管理关联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数据表后,页面将展示表头和前十条数据。

  3. 下一步,配置知识库数据处理策略。

    非结构化数据

    参数名称

    参数说明

    metadata抽取(可选)

    metadata(元数据)是与非结构化文档内容相关的一系列附加属性,这些属性以key-value键值对的形式进行存储和展示。

    元数据的作用:元数据为文档提供了重要的上下文信息,可显著提升知识库检索的准确性。例如,当在知识库中检索“A产品的功能概述”时,如果所有文档中的内容都包含“功能概述”,但均没有提到“A产品”,那么知识库可能会召回大量与原始查询无关的文本切片。若将产品名称作为元数据附加到所有文档及其相关的文本切片上,知识库就能精准地过滤出与“A产品”相关的且包含“功能概述”的文本切片,从而提高检索的准确性,同时减少模型的输入Token消耗。
    元数据的用法:通过API调用应用时,您可以在请求参数metadata_filter中指定metadata。应用在检索知识库时,会先根据metadata筛选相关文档。
    注意:创建知识库后将无法再配置metadata抽取

    配置metadata抽取

    下方示例图中该文档的元数据包含5个自定义属性:date(文档中出现的所有年份)、reference(文档中出现的所有参考文献)、filename(文档的名称)、keywords(文档中出现的关键词)以及author(文档的作者信息)。

    image

    开启metadata抽取,然后单击meta信息设置知识库中的所有文档附加统一或个性化的元数据。下图是上方示例使用的meta信息模板:

    image

    新建Meta信息模板说明

    取值方法说明:

    • 常量:用于为知识库中的所有文档附加一个固定的属性。

      如上方示例所示,如果知识库中所有文档的作者相同,您可以统一设置一个字段名为author的常量。
    • 变量:为知识库中的每个文档附加一个可变属性。目前支持的属性包括file_namecat_name。选择file_name时,百炼会将文档的名称附加到其元数据中,如上方示例所示。选择cat_name时,百炼会把文档所在类目的名称附加到文档的元数据中。

    • 大模型:系统将依据设定的实体描述规则,对知识库中每个文档的文本内容进行匹配。系统会自动识别并提取文档中的相关信息,然后将这些信息作为属性附加到文档的元数据中。

      如上方示例的meta信息模板所示,如果您希望提取每个文档中所有出现过的年份信息作为文档的属性,可以设置一个名为date的大模型字段,实体描述配置如下:

      image

    • 正则:系统将根据设置的正则表达式,对知识库中每个文档的文本内容进行匹配。符合该表达式的内容将被提取,并作为属性添加到文档的元数据中。

      如上方示例的meta信息模板所示,如果您希望提取每个文档中所有出现过的参考资料,并且假设参考资料规律为:以“《”开头、以“》”结尾,则可以设置一个名为reference的正则字段,正则表达式配置如下:

      image

    • 关键词搜索:系统会在每个文档中查找预设的关键词,并将找到的关键词作为属性添加至该文档的元数据中。

      例如,在上述示例的meta信息模板中,我们预设的关键词为:

      image

      但由于该文档中仅出现了“融资、产业、绿色、资本”这四个关键词,因此系统只提取了这四个关键词作为该文档keywords属性的值。

    是否参与检索:开启后表示该属性将附加到所有文档及其相关文本切片上,和文本切片内容共同参与知识库检索。

    是否参与模型回复:开启后表示该属性将附加到所有文档及其相关的文本切片上,和知识库召回的文本切片内容共同参与回复生成过程。

    Excel文档表头是否支持拼装(可选)

    建议仅在导入文档均为xlsx、xls格式且含表头时开启,否则无需开启

    开启后,知识库会将所有xlsx、xls格式文档的首行数据视为表头并自动去除,避免大模型误将表头视为普通数据行来处理。

    文档切分chunk

    选择智能切分(推荐)自定义切分

    文档切分chunk作用:知识库会将您的文档切分成文本切片,并将这些文本切片通过Embedding模型转换为向量。随后文本切片和向量将以键值对的形式存入向量数据库中。您可以查看知识库里每一个文本切片的具体内容(文字和图片),具体操作请参见查看知识库
    注意:创建知识库后将无法再更改文档切分chunk。不合适的切分策略可能会降低检索和召回效果,详情请参见如何检查文本切片质量
    • 智能切分:采用系统内置切分策略。经评测对于多数文档可获得最佳的检索效果。

    • 自定义切分:如果智能切分无法正常切割,您也可以自定义文档切分策略。

      自定义切分参数设置

      分句标识符:将文档按照指定的标点符号(支持多选)分割成小的文本切片。

      分段预估长度:即文本切片的字符数上限。超过该长度时,文本将被强制切割。

      分段重叠长度:即当前文本切片与上一个文本切片的重叠字符数。建议设置为文本切片预估长度的10%到25%,以保留文本切片之间语义的相关性,有利于提高多文本切片召回的召回质量。

    结构化数据

    以下索引配置在知识库创建后无法更改。

    参数名称

    参数说明

    是否索引

    link类型字段可见。若您希望百炼访问链接指向的图片并将其通过图片Embedding转换为向量保存,请选择图片;若您希望将链接作为普通文本处理,请选择不处理(等同于string类型)。

    是否参与检索

    开启后表示允许知识库在此列数据中进行搜索。

    是否参与模型回复

    开启后表示本列的检索结果将作为大模型生成回答时的输入信息。如下图示例的配置中,对“姓名”、“性别”、“岗位”、“年龄”开启是否参与检索,对“姓名”和“岗位”开启是否参与模型回复后, 知识库将会在所有列数据中进行检索,但只对检索到的数据中“姓名”、“岗位”两列的内容提供给大模型进行回答参考。

    image如下图所示,因为“年龄”没有开启参与模型回复,大模型在关联该知识库后依然无法回答“张三的年龄”的问题。

    image

  4. 单击导入完成,完成知识库创建

API

  1. 了解如何调用百炼API及其相关要求,请参见API概览

  2. 要创建一个非结构化知识库(索引),请调用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。

  3. 上一步CreateIndex接口只负责初始化知识库构建流程,接下来还需要再调用SubmitIndexJob接口完成知识库的创建。任务的执行需一定时间,如果需要查询任务的状态,可调用GetIndexJobStatus接口(请求返回中Data.StatusCOMPLETED时表示知识库已创建完成)。

步骤三:测试知识库(可选)

命中测试用于评估知识库在给定的相似度阈值下语义检索的表现,例如检查文本切片是否被正确召回,从而确定是否需要进一步调整知识库的相似度阈值,以确保后续大模型能够从知识库中获得有效的知识输入。要进行命中测试,请展开命中测试(可选)并按步骤操作。

相似度阈值:该阈值表示允许召回的文本切片的最低相似度分数,用于筛选Rank模型返回的文本切片,即只有分数超过此数值的文本切片才会被召回。调低此阈值预期会召回更多文本切片,但可能导致召回一些相关度较低的文本切片;相反,提高此阈值会减少召回的文本切片。若设置得过高,则可能导致知识库丢弃相关的文本切片。

命中测试(可选)

命中测试建议步骤

  1. 设计能够覆盖客户常见问题的测试用例;

  2. 根据知识库的具体应用场景和前期导入文档的质量,选择一个合适的相似度阈值;

  3. 执行命中测试,查看知识库召回结果;

  4. 基于召回结果,重新调整您的知识库的相似度阈值,具体操作请参见编辑知识库

image

控制台

  1. 在百炼的知识索引页面,单击知识库右侧命中测试

    image

  2. 命中测试界面,您可以修改相似度阈值,然后在右侧文本框中输入关键词进行命中测试。

    您还可以单击页面上的image上传附加图片进行命中测试。此时,如果知识库中存在图片索引,系统会先将输入图片转为向量并检索到相关记录,然后将这些记录与提问一起提供给大模型;如果不存在图片索引,百炼会识别并提取图中的文本,并生成文本摘要。这些摘要将与Prompt一起参与知识库的检索。
  3. 召回结果中,您可以查看本次测试关键词的命中情况(已按相似值降序排列)。单击每个文本切片,可查看相应文本切片内容。

  4. 单击查看历史召回记录,可查看关键词的历史命中结果。

API

在指定的知识库(索引)中检索信息,请调用Retrieve接口。

调用该接口前,请确保您的知识库已经创建且未被删除。
如果需较大规模数据的检索,请合理设置查询的超时和重试策略。

RerankMinScore字段指定相似度阈值。该值用于筛选召回的文本切片,即只有和用户问题相似度超过此数值(默认为0.2)的文本切片才会被召回。增加此数值会降低召回的文本切片数量。

步骤四:引用知识库

接下来您便可以在我的应用中将创建好的知识库与您位于相同的业务空间里的智能体应用或者工作流应用关联,以便为您的大模型应用补充私有知识和提供最新信息。两类应用均支持同时选择并检索多个知识库(多路召回策略),但目前不支持设置检索顺序

多路召回策略:如果应用关联了A1、A2A3三个知识库,系统会从这些库中检索与原始输入相关的文本切片,然后通过Rank模型重排序,选出最相关的前K条加入到大模型的输入Token中用于其回答时参考。

智能体应用

场景

下图是一个基于知识库的问答类智能体应用示例。此类应用有效解决了通用大模型难以处理私有知识和获取最新信息的问题。适用于个人助理、客户服务、技术支持等领域。

image

在智能体应用中引用知识库

访问我的应用,单击已创建智能体应用卡片的管理按钮,进入百炼应用管理界面。如下图所示开启知识检索增强Prompt中会自动填入让大模型参考知识库的指令。单击配置知识库添加需要引用的知识库,使用默认的检索配置。应用发布后,会默认使用选中的知识库进行回答。

image

检索配置(可选)

检索配置修改后仅对当前应用生效。

  1. 拼装策略:用于平衡知识库召回结果的全面性和性能,可选择按召回数量智能拼装

    按召回数量可以满足对输入信息量有明确要求的场景。智能拼装则能最大限度地利用输入空间。
    • 按召回数量:支持同时设置召回片段数知识库拼装最大长度。系统会首先根据设定的召回片段数对召回的文本切片进行拼接,然后检测整体长度。如果超出知识库拼装最大长度限制,则会进行截断处理。

    • 智能拼装:仅支持设置知识库拼装最大长度。在保证召回的文本切片整体长度不超过知识库拼装最大长度的前提下,系统将尽可能多地召回相关的文本切片。

    参数名称

    参数说明

    召回片段数

    多路召回策略K值。它决定了Rank模型提供给大模型参考的文本切片数量。增大该值可提高大模型的回答准确性,但也会相应增加大模型输入Token消耗。

    知识库拼装最大长度

    从知识库召回的文本切片会被拼装成连贯的文本供大模型参考,但存在字符数上限。超过该长度时,文本将被强制切割,超出部分将被丢弃。增大该值通常会提高知识库的覆盖率,召回更多和用户查询可能相关的文本切片内容,但也会增加每次问答的响应时延。

  2. 回答范围:用于控制应用回答时参考知识来源,可引入或排除大模型自身通用知识的影响。

    知识库 + 大模型知识

    应用的回答将综合知识库中检索到的知识和大模型自身的通用知识。

    仅知识库范围

    应用的回答将严格基于知识库中检索到的知识。

    image

    image

    image

    image

    1. 知识范围判定:选择搜索阈值搜索阈值+大模型判断

      当用户输入的关键词从语义维度与文本切片无法精确匹配时,使用单一搜索阈值(即相似度阈值)检索的局限就会显现。而采用搜索阈值+大模型判断的方式,会先通过相似度阈值筛选潜在文本切片,再由大模型深入分析关联度,进一步提高了判定的准确性。
      • 设置判断Prompt:大模型用于判断用户输入和检索结果的关联程度的规则。

    2. 未在知识库处理:选择大模型回复固定回复

      大模型回复:与回答范围设定为知识库 + 大模型知识时无差别。
  3. 展示回答来源:开启后将在回答中展示参考的全部来源,但会增加大模型输出Token消耗。

    例如,应用同时引用了多个不同的知识库。

    image

    开启展示回答来源功能后,应用回答时就会提供生成答案时参考的全部来源(具体到文档名称或数据表名称)。

    image

工作流应用

场景

下图是一个基于知识库的问答类工作流应用示例。流程执行逻辑为:用户输入的问题首先会经过知识库检索,获取最相关的文本切片;随后这些文本切片将与问题一并输入至大模型节点,最终生成基于检索内容的回答。

image

在工作流应用中引用知识库

访问我的应用,单击已创建工作流应用卡片的管理按钮,进入百炼应用管理界面。

  1. 配置上游节点:新建一个知识库节点,并将它设置为开始节点的下游节点。

    image

  2. 选择查询变量:在知识库节点的输入下拉列表中选择查询变量(用于检索知识库中的相关文本切片)。

    对于问答类工作流应用,通常选择开始节点的sys.query作为查询变量。
  3. 选择知识库:在知识库节点的选择知识库下拉列表中选择需要引用的知识库。

  4. 调整TopK(可选):即多路召回策略K值,它决定了提供给大模型节点参考的文本切片数量。增大该值通常会提升大模型的回答准确性,但也会相应增加大模型输入Token消耗。

  5. 配置下游节点:新建一个大模型节点,并将它的设置为知识库节点的下游节点。在大模型节点的Prompt中填入让大模型参考知识库的指令。

    # 知识库
    请记住以下材料{{Retrieval_xxx.result}},他们可能对回答问题有帮助。
    请回答{{sys.query}}
    此处的{{Retrieval_xxx.result}}和{{sys.query}}需要重新填写。输入/插入变量。本示例需要选择知识库结果变量Retrieval_xxx.result和系统变量sys.query
  6. 单击测试发布。用户提问时,若知识库节点匹配到相关的文本切片,其内容将填入系统变量sys.query,辅助大模型节点生成回答;若未匹配到相关文本切片,则大模型节点将直接回应系统变量sys.query

管理与维护知识库

查看知识库

控制台

查看业务空间下的知识库列表,搜索某个知识库,以及查看指定知识库的基本信息、配置和内容。

  1. 进入百炼的知识索引页面。在此页面上您可以:

    • 查看知识库列表:查看当前业务空间下的完整知识库列表及概况,包括每个知识库所含知识数量和最近一次内容更新时间等信息。

    • 查找知识库:搜索框中输入知识库名称后,单击image图标查找知识库,支持模糊搜索。image

    • 查看知识库ID:将鼠标悬浮于知识库旁image图标上即可显示当前知识库ID。单击image图标可复制知识库ID。image

  2. 单击知识库右侧的查看,进入查看知识库页面

    image

    • 如果此知识库导入的是非结构化数据,在此页面上您可以:

      • 查看知识列表:页面将展示当前知识库中已导入的全量文档列表,以及它们各自的大小、状态、导入时间等概要信息。

      • 搜索文档:按输入的文档名称精确查找(须完全匹配),支持按状态筛选结果。

      • 查看文档的文本切片知识库内已上传的每篇文档都会以文本切片的形式进行存储。单击文档右侧的查看按钮,您可以:

        • 查看该文档的所有文本切片。

          暂不支持查看文本切片的历史版本。
        • 编辑文本切片的内容。

          单击保存后,文本切片的原有内容将失效,新的内容将用于知识库检索,并作为大模型回答的参考。
        • 启用或禁用特定文本切片。

          禁用文本切片后,知识库将无法在该文本切片中进行检索,因此也无法将文本切片提供给大模型进行回答参考。

          image

      • 管理标签:增添或删除标签。

      • 展示metadata:展示文档的metadata。

        在知识库创建后,metadata暂不支持修改。
    • 如果此知识库导入的是结构化数据,在此页面上您可以:

      • 查看数据表的结构和数据:页面将展示当前知识库的数据表结构,包括所有列名,并完整呈现已导入的结构化数据。

      • 查看数据表的索引配置单击数据表右上方的查看索引。索引配置不支持修改。

        image

API

  • 查看知识库(索引)列表

    如需要获取指定业务空间下的知识库列表,请调用ListIndices接口,通过此接口可以获得所有知识库的信息和知识库配置情况。

  • 查看指定知识库的文本切片列表

    对于非结构化知识库,调用ListChunks接口可获取指定文档的所有文本切片的详细信息;对于结构化知识库,调用此接口可获取所有文本切片的详细信息。

    调用该接口前,请确保您的知识库已经创建且未被删除。

编辑知识库

创建知识库后,您可自定义修改其基本信息和部分配置。编辑知识库暂不支持API操作。

  1. 进入百炼的知识索引页面。

  2. 单击知识库右侧的编辑按钮,进入编辑知识库页面,修改知识库名称知识库描述以及相似度阈值

更新知识库

更新知识库包括向知识库补充私有知识、引入最新信息和移除过时信息。定期更新有利于维持知识库的准确性和时效性。当知识库内容不再反映最新情况或存在错误时,应尽快进行更新。

控制台

更新非结构化知识库

  1. 更新文档

    如果是新增/删除文档,您可以参考下方说明直接导入/删除此文档;如果您是对知识库的现有文档进行内容修改,更新时请先删除旧版本文档(否则它的内容也会被知识库检索和召回),然后再导入新版本文档。

    • 导入文档:访问知识索引页面,单击需要更新的知识库右侧的查看。在查看知识库页面,单击导入数据,为知识库导入新的文档。若文档已在百炼的数据管理中且为目标版本,此处可直接勾选它;否则需先前往数据管理导入(具体操作请参见导入非结构化数据),导入完成后再返回此处进行勾选。

    • 删除文档:如果您无需保留某文档(比如其内容已过时),在查看知识库页面,单击该文档右侧的删除即可。本操作不会删除数据管理中已导入的数据。

      批量管理:单击批量管理,选择一个或多个文档进行批量删除。
    • 管理文本切片(可选):如果您需要禁用、启用或修改已导入文档的文本切片,您可以单击该文档右侧的查看,对文本切片进行管理。

      image

      • 新增文本切片,目前暂不支持。

      • 查看该文档的所有文本切片。

        暂不支持查看文本切片的历史版本。
      • 编辑文本切片的内容。

        单击保存后,文本切片的原有内容将失效,新的内容将用于知识库检索,并作为大模型回答的参考。
      • 启用禁用特定文本切片。

        禁用文本切片后,知识库将无法在该文本切片中进行检索,因此也无法将文本切片提供给大模型进行回答参考。
    • 更新文档标签(可选):您可以单击该文档右侧的标签,增加或删除文档标签。

  2. 变更同步知识库

    系统自动执行。您对知识库的文档更新和内容修改将实时生效。

  3. 引用知识库

    系统自动执行。所有引用该知识库的应用将实时生效您本次的更新(新增的内容将可供检索和召回,而已删除的过时内容将不再可用)。

更新结构化知识库

如果您通过云数据库RDS导入结构化数据,请跳过以下内容。RDS表中的数据更新将自动同步至知识库(一般为秒级,但在请求高峰期可能会稍有延迟)。
  1. 更新数据表

    一个结构化知识库只能与数据管理中的一张数据表进行关联。如果您需要在表中插入新数据,请在导入数据时上传一个仅包含表头和新数据的文档;如果您需要更新/删除表中某些数据,请在导入数据时上传一个包含表头和当前数据表完整数据的文档,并确保文档中已包含相应的修改。请注意,每张数据表的行数上限是10000行(包括表头),超出此限制将导致导入失败。因此,请提前自行对文档中的数据进行必要分割。

    若您本地没有完整的数据副本,您可以先将数据表中的全量数据下载至本地,再进行相应修改。请访问数据管理页面,选择结构化数据页签。在左侧的数据表管理下,选择需要下载的数据表,再单击页面上imagexlsx格式下载此表的全量数据到本地。
    • 导入数据

      1. 访问数据管理页面,选择结构化数据页签。在左侧的数据表管理下,选择需要导入数据的数据表,再单击导入数据。导入类型选择增量上传(此模式会在现有数据基础上新增数据)或覆盖上传(该模式会用新上传的文档数据覆盖当前数据表中的所有数据)。

      2. 单击image选择并上传文档。

        文档中必须包含表头,且与当前数据表的表头结构一致,否则会导入失败。
        您可以单击页面上的下载模板,获取一个仅包含表头的空白文档。您可以在该文档中插入新数据,随后直接将其用于增量上传。
      3. 上传成功后,单击预览可查看导入的数据。确认无误后,单击确认完成导入。

    • 管理文本切片(暂不支持)

  2. 变更同步知识库

    访问知识索引页面,单击需要更新的知识库右侧的查看。单击数据表左上方image图标,再单击确定将刚才导入数据表中的最新数据同步到知识库。

    如果您未来在数据管理结构化数据页面中对该知识库关联的数据表里的数据进行了更新,请重复以上步骤进行同步(目前控制台不支持自动同步)。

    image

  3. 引用知识库

    系统自动执行。所有引用该知识库的应用将实时生效您本次的更新(新增的内容将可供检索和召回,而已删除的过时内容将不再可用)。

API

  • 向知识库(索引)追加文档

    管理结构化数据的知识库暂不支持通过API进行更新。请通过控制台更新此类知识库。

    如需向一个已创建完成的知识库导入新文档,请调用SubmitIndexAddDocumentsJob接口。

    调用该接口前,请确保您的知识库已经创建完成且未被删除(即知识库主键IDIndexId有效)。
    调用该接口前,请先调用AddFile接口将您需要追加的文档上传至百炼。如需要查询指定知识库下的文档IDFileId可以调用ListIndexDocuments接口。
    • 追加任务的执行需一定时间,如果需要查询任务的执行状态,接下来您可调用GetIndexJobStatus接口(追加任务完成后,该请求返回中的Data.Status值为COMPLETED)。

    • 请求返回中的文档列表(Documents)包含了您此次追加全部文档,您可以查看每个文档是否导入成功。

    • 您也可以调用ListIndexDocuments接口来查询指定知识库下的文档列表及文档导入的状态。

  • 从知识库(索引)中删除文档

    如需要从知识库中移除指定文档,请调用DeleteIndexDocument接口。

    只能删除状态是插入失败(INSERT_ERROR)或导入成功(FINISH)的文档。
    执行删除操作时,请提供现有文档的文档IDFileId

您在使用上述API更新知识库时,可能遇到下表所示的问题。

问题

说明

更新知识库时,是否需要按照特定顺序调用上述API接口?

是否需要按顺序调用API取决于您的业务需求和更新策略。以下是更新知识库时可能采用的一个API调用顺序示例:

  1. 首先使用AddFile接口导入文档到百炼的数据管理

  2. 接着调用SubmitIndexAddDocumentsJob接口创建追加文档任务,将新版本的文档同步到知识库中。

  3. 然后调用GetIndexJobStatus接口进行轮询,以确认追加文档任务执行完成。

  4. 最后调用DeleteIndexDocument接口删除旧版本的文档。

更新知识库时,是否必须调用DeleteIndexDocument接口从知识库中删除旧版本的文档?

是否需要调用该接口来删除旧的文档,这取决于您具体的更新策略。如果您需要确保知识库中的文档始终是最新的,并且旧知识不再适用,那么推荐执行删除操作,以避免旧的知识被错误地检索。

百炼是否支持上述追加和删除等API操作日志的记录和查看?

百炼知识库功能暂未集成API日志记录和查询功能。鉴于此,需要在您的应用程序中自行集成日志机制和校验逻辑,以确保知识的完整性。

删除知识库

如果您不再需要某个知识库,可将其删除。本操作不会删除数据管理中已导入的数据。

控制台

  1. 在百炼的知识索引页面,单击知识库右侧的删除

    image

  2. 如果知识库正在被应用调用,需要先解除关联后才可删除。

    1. 您可以前往我的应用找到需解除关联的应用,单击管理

    2. 取消选择该知识库。并再次尝试重新删除知识库。

API

删除知识库(索引),请调用DeleteIndex接口。

如果知识库正在被应用调用,需要先解除关联后才可删除。此操作当前只能通过控制台完成。具体操作请参考控制台标签页。

常见问题

如何设置RDS实例的白名单?

设置RDS实例的白名单,具体操作步骤如下:

  1. 访问RDS控制台,左侧菜单中单击实例列表,然后单击包含数据表的RDS实例。接着,左侧菜单中单击数据库连接,单击外网地址旁的设置白名单(如果您的RDS实例尚未开启外网访问,请按照页面指引开通)。image

  2. 单击添加白名单分组,请务必将以下DTS和百炼知识库的公网IP地址全部添加至白名单分组中,否则将导致RDS与知识库之间的数据同步失败:

    • DTS华北2(北京)区域的所有公网IP地址,具体IP地址段列表请参见:DTS服务器的IP地址段

    • 百炼知识库的公网IP地址:47.94.250.95。

  3. 单击确定,白名单生效。

长文本大模型(Long-Context LLM)和RAG怎么选?

长文本大模型(如Qwen-Long)和RAG均能通过喂入外部信息来优化输出,但它们各有所长。长文本大模型会全面审视输入文本的每个Token,因此通常在深度理解和总结长篇文本方面表现更佳,但这同时也带来了更高的计算和推理成本;RAG则通过快速跨源检索,只专注于最相关的Token,因此更适合那些无需全局理解,只靠整合最新信息片段即可迅速回答的事实性问题场景。

百炼是否支持自动更新知识库?

对于结构化数据,您可以将知识库的数据来源与云数据库RDS关联,从而实现知识库的自动更新,详情请参见步骤二:创建知识库中关于数据来源的相关说明;对于非结构化数据,您可以通过整合阿里云对象存储OSS、函数计算FC以及百炼知识索引API,从而实现知识库的自动更新,只需简单几步:

  1. 创建Bucket:前往OSS控制台创建Bucket用于存储您的原始文档。

  2. 创建知识库:在百炼上创建一个管理非结构化知识的知识库,用于存储您的私有知识内容。

  3. 创建自定义函数:在FC上针对文档变更类事件(例如新增、删除等操作)创建函数,具体操作请参见创建函数。这些函数通过调用百炼的更新知识库API,将OSS上发生的文档变更同步至创建好的知识库中。您在使用更新知识库API时,可能遇到下表所示的问题。

    问题

    说明

    更新知识库时,是否需要按照特定顺序调用上述API接口?

    是否需要按顺序调用API取决于您的业务需求和更新策略。以下是更新知识库时可能采用的一个API调用顺序示例:

    1. 首先使用AddFile接口导入文档到百炼的数据管理

    2. 接着调用SubmitIndexAddDocumentsJob接口创建追加文档任务,将新版本的文档同步到知识库中。

    3. 然后调用GetIndexJobStatus接口进行轮询,以确认追加文档任务执行完成。

    4. 最后调用DeleteIndexDocument接口删除旧版本的文档。

    更新知识库时,是否必须调用DeleteIndexDocument接口从知识库中删除旧版本的文档?

    是否需要调用该接口来删除旧的文档,这取决于您具体的更新策略。如果您需要确保知识库中的文档始终是最新的,并且旧知识不再适用,那么推荐执行删除操作,以避免旧的知识被错误地检索。

    百炼是否支持上述追加和删除等API操作日志的记录和查看?

    百炼知识库功能暂未集成API日志记录和查询功能。鉴于此,需要在您的应用程序中自行集成日志机制和校验逻辑,以确保知识的完整性。

  4. 创建OSS触发器:在FC上为上一步创建的自定义函数关联OSS触发器。当捕获到文档变更类的事件后(例如有新文档上传至OSS时),相应的触发器会被激活,触发FC执行相应的函数。具体操作请参见触发器

如何构建图片索引?

构建图片索引需两步:

  1. 新建结构化数据表时,需要将图片索引所在列的字段类型设置为link。详见步骤一:导入数据中关于新建数据表的相关说明。

    注意:新建数据表后,无法再新增或修改字段类型为link

    image

  2. 创建结构化知识库时,对于需要建立图片索引的link类型字段,在旁边的下拉列表中选择图片。详见步骤二:创建知识库中关于配置数据处理策略的相关说明。

    注意:创建知识库后,无法再新建或修改图片索引。

    image

我的知识库是否私有?其他公司或用户能否访问它?

您的知识库仅供您当前的业务空间使用,不会对外公开。

百炼是否会使用我账号下的知识库来回答其他用户的问题?

百炼不会使用您账号下的知识库来回答其他用户的问题。

如果只能上传非结构化文档,如何组织文档内容有助于知识库检索?

建议使用易于文本解析的文档格式(如txt、md格式)进行导入;文档内容上建议明确标题和段落,并利用列表和编号整理信息突出关键词和概念。

百炼是否支持将知识库下载到本地?

暂不支持将知识库下载到本地。

数据管理中已导入知识库的文档/数据表是否可以删除?

对于非结构化数据,可以删除,因为数据管理和知识库两边是独立的数据副本;对于结构化数据,不可以删除,否则将导致查看知识库相关功能异常。

知识库是否计费?

步骤

计费情况

导入数据

不计费。

创建知识库

不计费。

测试知识库

不计费。

引用知识库

调用应用时,从知识库召回的文本切片会增加大模型输入Token数量,从而产生费用。

管理与维护知识库

不计费。

如何检查文本切片质量?

在关联知识库至您的应用前,建议人工检查库中的文本切片的质量,如何查看文本切片请参见查看知识库。检查文本切片质量时,需要重点关注以下三种情况:

文本切片过短

文本切片过长

明显的语义截断

image

image

image

切分chunk过短导致语义缺失,无法匹配。

切分chunk过长导致引入语义噪音,降低匹配精度。

切分chunk出现了强制性的语义截断,导致召回时缺失内容。

当用户对RDS源表进行DDL操作时,比如DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN,百炼会如何处理?

  • DROP TABLE:删除源表后,知识库中的数据不会自动删除。如需删除知识库,请手动进行删除,具体操作请参见删除知识库;若之后添加同名表,知识库中的数据将继续自动同步,但仅会进行增量同步(即仅同步新的数据变更)。

  • RENAME TABLE、ADD COLUMN、DROP COLUMN:一旦源表的名称被修改,后续的数据变更将不再同步到知识库。如果表名恢复,数据同步也会重新启动,但只会进行增量同步(即仅同步新的数据变更)。在此期间,所有的数据变更将不会被同步到知识库。需注意,源表的字段变动不会同步更新至知识库,因此源表新增的字段将无法被知识库检索和召回。为了避免这些问题,如果您需要对源表进行变更,建议创建一个新的知识库。

  • TRUNCATE TABLE:清除源表数据不会同步删除知识库中的数据。

场景教程

本文仅介绍了百炼的知识库功能,您接下来可以尝试通过百炼快速构建一个在线知识库问答应用,以便全天候(7 × 24)响应用户咨询,提升用户体验、增强业务竞争力。以下是一些场景案例: