知识库使用最佳实践
1. 背景
在某些特定领域,由于大模型不具备该领域的专业知识、或者是知识过期、模型本身固有特点等原因,模型回复结果可能出现错误、过期、幻觉等问题。这时候可以借助知识库、训练模型等手段,解决大模型“知识不准、不全、不可控”的问题。
大模型实时互动服务支持通过配置话题、意图路由等方式,将特定的用户问题使用知识库、定制化模型来回复,以提升垂类场景的回答质量。
2. 知识库种类
大模型实时互动服务,支持接入3种知识库:内置的轻量级知识库、百度千帆Agent(AppBuilder)和OpenAI规范定制化知识库(模型)。
百度千帆Agent,也称为百度千帆AppBuilder,本文中两者为同一概念。
2.1 轻量级知识库
特点:轻量,延时低,支持简单文档,对文档内容质量要求较高。
详细说明见本文第3节。
2.2 百度千帆Agent
特点:支持文本/表格/PDF/网页/音频等多种格式的文件源,支持输入大文件,能力丰富、可高度自定义,支持自定义向量模型和存储资源。
接入步骤:
- 使用百度千帆Agent开发平台创建知识库(Agent开发 -> Agent资产 -> 知识库),并导入文档。
- 使用百度千帆Agent开发平台创建Agent(Agent开发 -> Agent),可以在Agent中配置使用知识库,以自主规划Agent为例,可以在如下路径:配置 -> 知识库,添加知识库。
- 使用百度千帆Agent开发平台,为Agent配置角色指令,控制使用知识库检索结果来总结回复的风格和要求。
- 在大模型实时互动控制台,配置话题模板(意图设置 -> 话题),创建话题配置千帆AppBuilder的应用ID、API Key等信息,再为互动应用绑定话题模板(互动应用 -> 大模型配置 -> 话题),实现应用级别的知识库配置。
2.3 OpenAI规范定制化知识库
特点:训练/微调模型,定制化程度高,满足OpenAI模型规范。
接入步骤:
- 客户通过训练/微调模型等手段,实现定制化的知识库。
- 在大模型实时互动控制台,通过如下路径(意图设置 -> 话题)配置话题模板,创建话题配置Model ID、API Key等信息,再为互动应用绑定话题模板(互动应用 -> 大模型配置 -> 话题),实现应用级别的知识库配置。
3. 轻量级知识库
3.1 功能说明
大模型实时互动服务,内置了轻量级知识库,其拥有低延时、与大模型实时互动高契合的特点。
3.1.1 文档要求
轻量级知识库,对文档有如下要求和建议:
- 目前支持纯文本、word、pdf、markdown文档,要求文档大小不超过10MB。
- 为提升知识库提取、检索效果和回复效果,推荐使用纯文本文档,且文档内容建议使用QA对。
- 文档中单个知识点长度不应该过大,尽量不超过500字。单个知识点过大会导致该知识点被切片,无法构成完整的知识点。
- 支持pdf文档的图片文字识别功能,但应尽可能保证图片中文字清晰,并且文字布局遵循从左至右、从上至下的阅读顺序,否则文字识别效果、文字顺序可能错误。
- 暂不支持word文档的图片文字识别功能。
知识库文档内容示例:
1Part1 中国历史
2Q1:秦朝有多少位皇帝?
3A:秦朝正式的皇帝共有2位:秦始皇嬴政(前221年-前210年在位)和秦二世胡亥(前210年-前207年在位)。如果把末代统治者子婴也算进去,则可以说秦朝有3位最高统治者。
4
5Q2:汉朝之后是哪个朝代?
6A:如果按历史时期来说,汉朝之后是三国时期。如果按统一王朝来说,汉朝之后第一个重新统一全国的朝代是西晋。
7
8Part2 唐朝历史
9Q1:唐朝是哪一年建立的?
10A:唐朝建立于公元618年。
11
12Q2:介绍下李世民
13A:李世民是一位杰出的军事统帅,更是一位善于用人、勇于纳谏、治国有方的皇帝,常被认为是中国历史上最优秀的帝王之一。
3.1.2 接入方式
系统为轻量级知识库提供了两种接入方式:控制台方式和纯接口方式,推荐使用控制台接入方式。
3.1.3 意图路由
当前系统的轻量级知识库功能,不论是通过控制台方式、还是纯接口方式接入,都需要配置意图路由。
用户query在意图匹配后,才会触发知识库检索,然后系统会使用大模型总结知识检索结果进行回复。
意图路由配置的质量,会影响能否触发知识库检索。如果无法触发知识库检索,也就无法使用知识库中知识来回答问题。
3.1.3.1 意图路由配置建议
配置意图路由时,可以参考如下几点建议,以实现最佳的意图识别效果。
意图名,应准确、清晰、简短,尽可能控制在5个字以内。意图描述,应描述清楚所有使用场景,尽可能控制在500字以内。意图示例,需要包含典型的用户问题示例,示例数目尽可能控制在20个以内。- 对于需要加强识别效果的场景,可以在
意图描述中增加类似如下的话术“只要问题包含关键字'xxx'、'xxx',就认为命中”(其中xxx需要调整为实际需要识别的词汇),并且可以对特别重要的名词增加典型的同音字示例,用于在ASR识别错误时提升意图识别效果。 - 对于需要加强识别效果的场景,可以在
意图示例中配置泛化的话术,用于匹配多样的用户问题,并且也可以配置同音字话术示例。例如:汉朝xxx、中国历史xxx、中国理事xxx,其中中国理事xxx是为了提升同音字识别效果。
识别中国历史的意图描述示例如下:
1中国古代历史科普咨询,涵盖以下场景:
21.朝代历史:各朝代(如汉朝、唐朝、宋朝、明朝等)的兴衰更替、重大事件、制度变革
32.历史人物:帝王将相、文人墨客、名臣名将等著名历史人物的生平事迹与历史贡献
43.历史事件:重大战役、政治变革、文化运动等历史事件的背景与影响
54.文化制度:科举制度、土地制度、官制等古代制度与文化常识
6
7注意,只要用户问题满足如下特征,都认为命中:
8(1)问题包含关键字**'历史'、'中国历史'、'中国理事'、'汉朝'、'唐朝'、'宋朝'、'明朝'、'清朝'、'皇帝'、'黄帝'、'荒地'、'朝代'、'古代'、'王朝'、'帝王'、'太宗'、'太祖'**;
9(2)问题意图是咨询**中国古代历史事件、历史人物、朝代更替、文化制度**等问题。
其中中国理事、黄帝和荒地,都是为了提升同音字识别效果。
3.1.3.2 意图路由数据结构
在控制台和纯接口两种接入方式中,都支持在创建智能体接口中配置intentCfg字段来设置意图路由。
IntentCfg结构如下
| 参数名 | 参数类型 | 必要性 | 参数描述 |
|---|---|---|---|
| ragIntentTemplateId | Long | 否 | 控制台创建的知识库意图模板ID |
| intents | Intent数组 | 否 | 意图项数组,适用于纯接口接入方式 |
Intent结构如下:
| 参数名 | 参数类型 | 必要性 | 参数描述 |
|---|---|---|---|
| name | String | 是 | 意图名称 |
| description | String | 是 | 意图描述 |
| examples | List |
是 | 调用例句 |
| serviceType | String | 是 | 取值rag时表示使用轻量级知识库 |
| ragCfg | Object | 是 | 知识库配置 |
| +kbId | String | 是 | 要检索的知识库ID |
| +recall | Object | 否 | 召回配置 |
| ++type | String | 否 | 检索类型,取值hybrid表示混合检索 |
| ++topK | Integer | 否 | 控制召回阶段输出得分最高的k个元素 |
| +rerank | Object | 否 | 重排序配置 |
| ++enable | Boolean | 否 | 是否开启重排序 |
| ++topK | Integer | 否 | 控制重排序阶段输出得分最高的k个元素,需要小于recall.topK |
3.2 控制台方式接入
3.2.1 接入流程
轻量级知识库,控制台方式接入流程如下:
(1)管理知识库。通过路径“大模型实时互动->知识库”,可以进行创建知识库、为知识库上传文档等操作。
(2)意图路由配置。通过路径“大模型实时互动->意图设置->知识库意图路由”,可以创建知识库意图路由模板、配置意图描述和例句,并绑定知识库。
(3)使用意图路由。通过“大模型实时互动->互动应用->大模型配置->知识库意图模板”,可以为互动应用绑定知识库意图模板;除此之外,还支持在创建智能体接口中指定使用的意图模板ID,来实现实例级别知识库意图路由配置。
3.2.2 管理知识库
控制台路径“大模型实时互动->知识库”,可以创建知识库、上传文档、查看知识库/文档详情等操作。
以下是创建知识库并上传文档的示例:

3.2.3 意图路由配置
控制台方式接入的意图路由配置,即知识库意图模板配置。通过控制台路径“大模型实时互动->意图设置->知识库意图”,可以创建知识库意图模板,并为意图绑定知识库ID。
需要注意的是,一个知识库意图模板中可以配置多个意图路由,单个意图路由和单个知识库是一对一绑定关系。所以当需要在多个知识库文件中检索时,有如下两种方式:
(1)同一类多个文件,建议放在一个知识库中,检索单个知识库时会对内部的每个文件都进行检索。
(2)不同类多个文件,可以放在多个知识库中,同时在意图模板中配置多个意图路由,实现不同意图检索不同的知识库。
以下是配置知识库意图模板示例:

3.2.4 使用意图路由
控制台知识库意图模板,有两种使用方式:App级别和实例级别。
3.2.4.1 App级别
控制台路径“大模型实时互动->互动应用->大模型配置->知识库意图模板”,可以为互动应用绑定知识库知识库意图模板。
绑定后,App下所有实例都会使用该意图模板,对话时会判断意图是否匹配知识库,匹配时触发知识库检索。
3.2.4.2 实例级别
创建智能体接口,支持通过在config字段中配置intentCfg字段来设置意图路由,并设置ragIntentTemplateId字段,使用控制台创建的知识库意图模板,只对当前实例生效。
- 注意,这里使用的
ragIntentTemplateId是知识库意图模板的ID(整型),而不是知识库的Id(字符串)。
指定了知识库意图模板ID的config字段示例:
1{
2 "config": "{\"intentCfg\":{\"ragIntentTemplateId\":12345678}}"
3}
3.3 纯接口方式接入
3.3.1 接入流程
轻量级知识库,纯接口方式接入流程如下:
(1)管理知识库。通过服务端API创建知识库后,为知识库导入文档。
(2)意图路由配置。通过创建智能体接口,配置意图项数组。
3.3.2 管理知识库
管理知识库,一般步骤为创建知识库 -> 上传文档到知识库 -> 查询知识库详情,当知识库状态正确、文档都被正确处理完成,说明知识库创建成功、文档构建索引成功,可以用于检索。
具体接口参考:知识库管理。
3.3.3 意图路由配置
3.3.3.1 配置方式和结构
创建智能体接口,支持通过在config字段中配置intentCfg字段来设置意图路由,可以为意图项配置serviceType=rag来使用轻量级知识库,实现实例级别知识库。
配置了意图路由的config字段示例:
1{
2 "config": "{\"intentCfg\":{\"intents\":[...]}}"
3}
3.3.3.2 配置示例
意图路由配置和调优,参考3.1.3.1 意图路由配置建议。
配置意图项数组示例:
1{
2 "intentCfg": {
3 "intents": [
4 {
5 "name": "中国历史",
6 "description": "中国古代历史科普咨询,涵盖以下场景:\n 1.朝代历史:各朝代(如汉朝、唐朝、宋朝、明朝等)的兴衰更替、重大事件、制度变革\n 2.历史人物:帝王将相、文人墨客、名臣名将等著名历史人物的生平事迹与历史贡献\n 3.历史事件:重大战役、政治变革、文化运动等历史事件的背景与影响\n 4.文化制度:科举制度、土地制度、官制等古代制度与文化常识\n\n 注意,只要用户问题满足如下特征,都认为命中:\n (1)问题包含关键字**'历史'、'中国历史'、'中国理事'、'汉朝'、'唐朝'、'宋朝'、'明朝'、'清朝'、'皇帝'、'黄帝'、'荒帝'、'朝代'、'古代'、'王朝'、'帝王'、'太宗'、'太祖'**;\n (2)问题意图是咨询**中国古代历史事件、历史人物、朝代更替、文化制度**等问题。\n",
7 "examples": [
8 "中国有多少朝代",
9 "汉朝有多少皇帝",
10 "介绍下唐朝李世民",
11 "汉武帝做了什么",
12 "唐朝有哪些著名诗人",
13 "玄武门之变是怎么回事",
14 "中国历史上最强盛的朝代是哪个",
15 "刘邦是怎么建立汉朝的",
16 "汉朝xxx",
17 "唐朝xxx",
18 "中国历史xxx",
19 "中国理事xxx",
20 "皇帝xxx",
21 "朝代xxx",
22 "古代xxx"
23 ],
24 "serviceType": "rag",
25 "ragCfg": {
26 "kbId": "kbxxx"
27 }
28 },
29 {
30 "name": "百度",
31 "description": "百度公司全业务咨询,涵盖以下场景:\n1. 公司简介:百度公司基本信息、业务范围、行业地位\n2. 企业文化:百度文化价值观、使命愿景、企业精神\n3. 发展历程:百度公司创立、上市、重要里程碑事件\n4. 创始人与管理层:创始人背景、核心管理团队介绍\n5. 核心业务:搜索、AI、自动驾驶、云计算等业务板块\n\n注意,只要用户问题满足如下特征,都认为命中。\n(1)问题包含关键字**'百度'、'白度'、'baidu'**;\n(2)问题意图是咨询**百度公司的基本信息、企业文化、发展历程、创始人、核心业务**等问题。\n",
32 "examples": [
33 "百度文化价值观是什么",
34 "百度使命是什么",
35 "介绍下百度公司",
36 "百度是什么时候成立的",
37 "百度有哪些核心业务",
38 "百度的发展历程",
39 "百度xxx",
40 "baiduxxx"
41 ],
42 "serviceType": "rag",
43 "ragCfg": {
44 "kbId": "kbxxx"
45 }
46 }
47 ]
48 }
49}
评价此篇文章
