知识库使用最佳实践
1. 背景
在某些特定领域,由于大模型不具备该领域的专业知识、或者是知识过期、模型本身固有特点等原因,模型回复结果可能出现错误、过期、幻觉等问题。这时候可以借助知识库、训练模型等手段,解决大模型“知识不准、不全、不可控”的问题。
大模型实时互动服务支持通过配置话题、意图路由等方式,将特定的用户问题使用知识库、定制化模型来回复,以提升垂类场景的回答质量。
2. 知识库种类
大模型实时互动服务,支持接入3种知识库:内置的轻量级知识库、百度千帆Agent(AppBuilder)和OpenAI规范定制化知识库(模型)。
百度千帆Agent,也称为百度千帆AppBuilder,本文中两者为同一概念。
2.1 轻量级知识库
特点:轻量,延时低,当前只支持纯文本文档,只支持小文件(建议100k以下)。
接入步骤:参考本文第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 接入流程
轻量级知识库接入流程如下:
(1)管理知识库。通过服务端API创建知识库后,为知识库导入文档。
(2)意图路由配置。在创建智能体时,可以设置意图路由,配置意图定义、例句和知识库ID,实现将特定的问题使用知识库检索+大模型总结来回复。
3.2 管理知识库
管理知识库,一般步骤为创建知识库 -> 上传文档到知识库 -> 查询知识库详情,当知识库状态正确、文档都被正确处理完成,说明知识库创建成功、文档构建索引成功,可以用于检索。
具体接口参考:知识库管理。
3.3 意图路由配置
3.3.1 配置方式和结构
创建智能体接口,支持通过在config字段中配置intentCfg字段来设置意图路由,可以为意图配置serviceType=rag来使用轻量级知识库,实现实例级别知识库。
配置了意图路由的config字段示例:
1{
2 "config": "{\"intentCfg\":{\"intents\":[...]}}"
3}
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.3.2 配置建议
配置意图路由时,可以参考如下几点建议,以实现最佳的路由识别效果。
- 意图名,应准确、清晰、简短,尽可能控制在5个字以内。
- 意图描述,应描述清楚所有使用场景,尽可能控制在200字以内。
- 意图示例,需要包含典型的用户问题示例,示例数目尽可能控制在20个以内。
- 对于需要加强识别效果的场景,可以在意图描述中增加类似如下的话术(其中关键字只是示例,应调整为实际需要识别的词汇),并且可以对特别重要的名词增加典型的同音字示例,用于在ASR识别错误时提升意图识别效果。识别
中国历史意图话术示例:
1注意,只要用户问题满足如下特征,都认为命中。
2(1)问题包含关键字'历史'、'中国理事'、'汉朝'、'皇帝'、'黄帝'、'荒地';
3(2)问题意图是咨询中国古代历史事件、历史人物。
其中中国理事、黄帝和荒地,都是为了提升同音字识别效果。
- 对于需要加强识别效果的场景,可以在意图示例中配置泛化的话术,用于匹配多样的用户问题,并且也可以配置同音字话术示例。例如:
汉朝xxx、中国历史xxx、中国理事xxx,其中中国理事xxx是为了提升同音字识别效果。
配置检索轻量级知识库的意图路由示例:
1{
2 "intentCfg": {
3 "intents": [
4 {
5 "name": "中国历史",
6 "description": "中国历史科普,汉朝历史查询,唐朝著名历史人物查询\n\n注意,只要用户问题满足如下特征,都认为命中。\n(1)问题包含关键字'历史'、'中国理事'、'汉朝'、'皇帝'、'黄帝'、'荒地';\n(2)问题意图是咨询中国古代历史事件、历史人物。\n",
7 "examples": [
8 "中国有多少朝代",
9 "汉朝有多少皇帝",
10 "介绍下唐朝李世民",
11 "汉朝xxx",
12 "中国历史xxx",
13 "中国理事xxx"
14 ],
15 "serviceType": "rag",
16 "ragCfg": {
17 "kbId": "kbxxx",
18 "recall": {
19 "type": "hybrid",
20 "topK": 5
21 }
22 }
23 },
24 {
25 "name": "百度",
26 "description": "百度公司简介,百度文化价值观、使命介绍,百度公司发展历程查询\n\n注意,只要用户问题满足如下特征,都认为命中。\n(1)问题包含关键字'百度'、'白度';\n(2)问题意图是咨询**百度**公司的信息、资讯、企业文化和创始人等。\n",
27 "examples": [
28 "百度文化价值观是什么",
29 "百度使命是什么",
30 "介绍下百度公司",
31 "百度xxx",
32 "白度xxx"
33 ],
34 "serviceType": "rag",
35 "ragCfg": {
36 "kbId": "kbxxx",
37 "recall": {
38 "type": "hybrid",
39 "topK": 5
40 },
41 "rerank": {
42 "enable": true,
43 "topK": 3
44 }
45 }
46 }
47 ]
48 }
49}
评价此篇文章
