
# 使用知识检索流增强知识库检索能力
#### 场景介绍
知识检索流是一种特殊的工作流，在工作流的基础上，添加了检索规划、召回及重排序三个节点，用于优化知识检索过程并提高结果质量。
例如在医疗领域，知识的高度专业性和复杂性导致用户很难快速准确地检索出所需知识，本实践介绍如何通过知识检索流增强医疗知识检索能力，提高医疗知识问答的准确性和相关性，主要实现过程如下：
1. 在起始节点中引入用户输入的原始查询问题。
2. 使用检索规划_意图识别节点，对用户原始问题进行分类，使用大模型区分用户原始问题属于儿科医疗问题还是消化科医疗问题（当前案例仅提供两种医疗分支，用户可根据实际需要扩展）。
3. 根据不同的意图类别，选择并执行不同的检索流程，在相应的知识库中进行检索召回。
   - 儿科医疗问题
     1. 使用检索规划_Query拆解节点，将原始问题拆解为多个子问题。
     
     2. 针对子问题，使用召回节点，在儿科知识库中逐一进行检索召回。
     
     3. 返回召回结果，用于重排序。
      
   
   - 消化科医疗问题
     1. 使用检索规划_Query改写节点，改写原始问题，让问题更具专业性。
     
     2. 使用召回节点，在消化科知识库中进行检索召回。
     
     3. 返回召回结果，用于重排序。
      
    
4. 使用重排序节点，对召回结果进行重排序。
5. 返回重排序结果。
 
#### 医疗知识检索流全景图
图1医疗知识检索流   
![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002215453069.png "点击放大")
#### 准备工作
- 本实践需要对儿科知识库和消化科知识库进行检索召回，请参考[构建儿科知识库](https://support.huaweicloud.com/bestpractice-appstage/appstage_09_0204.html)完成知识库创建。
- 本实践选用平台预置的chatglm3-6b作为检索规划模型，首次使用该模型服务API需要订购免费的"ChatGLM3-6B大模型服务API在线调用"资源，订购操作请参见[购买AppStage](https://support.huaweicloud.com/usermanual-appstage/appstage_04_0005.html)。
 
#### 创建知识检索流
1. 在AI原生应用引擎的左侧导航栏选择"知识中心 \> 知识检索流"，单击"创建知识检索流"。
2. 在"基本信息"弹窗，设置检索流名称、描述，单击"确认"。 
   - 名称：医疗知识检索。
   
   - 描述：为用户提供精准、高效的医疗知识检索体验。
   
   
   
   
 
#### 编排知识检索流
在知识检索流构建页面，添加节点和执行动作，并配置各节点输入、输出参数。
1. 引入用户对话作为起始节点输入。 
   知识检索流默认在起始节点的请求体中引入了WISEAGENT_USER_INPUT参数，表示在Agent调用知识检索流时，以用户在问答对话中输入的内容作为知识检索流的请求参数。
   图2起始节点配置   
   ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182644169.png "点击放大")
   
   
2. 定义变量。
   
   添加"变量定义"节点，定义如下变量：
   - 定义数组变量queryResults，用于存储从知识库检索召回的结果。
   
   - 将意图识别节点中定义的意图类别，定义为数组变量intention，值为\["儿科医疗问题","消化科医疗问题"\]。
   
   - 将检索规划类节点使用的模型服务调用ID，定义为字符串变量model_service_id，以便后续调用。本实践选用平台预置的chatglm3-6b模型，模型服务调用ID为platform:chatglm3-6b。
   
   
   图3变量定义节点配置   
   ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182962577.png "点击放大")
   
   
3. 对原始查询内容进行意图识别。 
   添加"意图识别"节点，利用模型能力根据定义的意图类别对用户输入的内容进行意图判断。
   1. 在"变量定义"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147483302.png) \> 添加执行动作"，选择"检索规划"基础节点，执行动作选择为"意图识别"。
   
   2. 配置输入参数，如[图4]所示。
      图4配置意图识别节点   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002320552164.png "点击放大")
      表1意图识别节点输入参数说明 
      | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      |:---|:---|
      | 模型服务调用ID | - 对于平台预置的模型服务，可以在资产中心选择"大模型"页签，单击模型卡片进入模型详情页面，查看模型服务调用ID。  - 对于租户自接入的模型服务，可以在左侧导航栏选择"模型中心 \> 我的模型服务"，选择"我接入的"页签，在模型服务列表中复制模型服务调用ID。   本实践选用的chatglm3-6b，模型服务调用ID为platform:chatglm3-6b，已在[2]中定义，此处直接选择变量定义节点中定义的model_service_id。 |
      | 原始文本内容   | 将用户输入内容传递给大模型进行意图识别，即选择起始节点的WISEAGENT_USER_INPUT变量。                                                                                                                                                                                                                                                                                                                                                                                                  |
      | 意图类别     | 定义意图类别，大模型会按照定义的意图类别对用户问题进行归类。 支持自定义数组或选择数组类型的节点输出，本实践中意图类别为：\["儿科医疗问题","消化科医疗问题"\]，此处选择变量定义节点中定义的intention。                                                                                                                                                                                                                                                                                                     |
         
      
   
   3. 在节点实例区域，单击"新增实例"，填写实例名称、描述及API Key。 实例是节点的鉴权方式，如果未新增实例，节点就无法调通。
      您可以单击"获取API key"跳转至"我的凭证"页面获取API Key，具体介绍请参见[新增平台API Key](https://support.huaweicloud.com/usermanual-wiseagent/appstage_04_0704.html)。
      图5新增实例   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147325246.png "点击放大") 
    
   
   
4. 添加"多条件分支(switch)"节点，匹配不同意图类别。 
   1. 在"意图识别"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182703957.png) \> 添加执行动作"，选择"控制"基础节点，执行动作选择为"多分支条件(switch)"。
   
   2. 单击一条"分支条件"节点，单击名称后的![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182862309.png)，将名称改为"儿科知识库"，匹配值填写为"儿科医疗问题"。
      图6儿科知识库分支   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147385042.png "点击放大") 
   
   3. 单击"分支默认条件"节点，单击名称后的![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147543102.png)，将名称改为"消化科知识库"。没有匹配到儿科知识库分支的问题，默认会按照分支默认条件去执行。
   
   
   
   
5. 配置儿科知识库检索召回。 
   1. 添加"Query拆解"节点。 利用模型能力将复杂的原始查询内容拆解为多个更简单的子问题。
      1. 在"儿科知识库"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182703969.png) \> 添加执行动作"，选择"检索规划"基础节点，执行动作选择为"Query拆解"。
      
      2. 配置输入参数，如[图7]所示。
         图7配置儿科问题拆解节点   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002320712012.png "点击放大")
         表2儿科问题拆解节点输入参数说明 
         | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
         |:---|:---|
         | 模型服务调用ID | - 对于平台预置的模型服务，可以在资产中心选择"大模型"页签，单击模型卡片进入模型详情页面，查看模型服务调用ID。  - 对于租户自接入的模型服务，可以在左侧导航栏选择"模型中心 \> 我的模型服务"，选择"我接入的"页签，在模型服务列表中复制模型服务调用ID。   本实践选用的chatglm3-6b，模型服务调用ID为platform:chatglm3-6b，已在[2]中定义，此处直接选择变量定义节点中定义的model_service_id。 |
         | 原始查询内容   | 将用户输入内容传递给大模型进行拆解，即选择起始节点的WISEAGENT_USER_INPUT变量。                                                                                                                                                                                                                                                                                                                                                                                                          |
            
         
       
   
   2. 添加"遍历集合元素"节点。
      此节点用于对Query拆解输出的子查询列表进行遍历。
      1. 在"儿科问题拆解"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147385058.png) \> 添加执行动作"，选择"控制"基础节点，执行动作选择为"遍历集合元素"。
      
      2. 配置输入参数，选择"儿科问题拆解.子查询列表"，如[图8]所示。
         图8遍历集合元素节点配置   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147543118.png "点击放大") 
        
   
   3. 添加"召回"节点。
      对遍历到的每个子问题，在知识库中进行向量化检索召回。
      1. 在"遍历查询子问题"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182703981.png) \> 添加执行动作"，选择"召回"基础节点，执行动作选择为"召回"。
      
      2. 配置输入参数，如[图9]所示。
         图9儿科知识检索召回节点配置   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002412675881.png "点击放大")
         表3检索召回节点输入参数说明 
         | 参数      | 说明                                                                                                                                   |
         |:---|:---|
         | 向量化检索内容 | 选择"遍历查询子问题.循环内容"。                                                                                                                    |
         | 知识库ID   | 单击"获取知识库ID"，进入"我的知识库"列表，单击"儿科知识库"知识库ID列的![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002412691753.png)。 |
         | 相似度阈值   | 搜索的关键字和返回内容的相似度阈值，默认为0.5，返回相似度大于等于0.5的结果。                                                                                            |
         | 召回数量    | 检索返回切片限制数量，默认为10条。                                                                                                                   |
            
         
      
      3. 在节点实例区域，单击"新增实例"，填写实例名称、描述及API Key。
        
   
   4. 添加"遍历集合元素"节点。
      此节点用于对儿科知识检索召回的命中内容进行遍历。
      1. 在"儿科知识检索召回"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147543130.png) \> 添加执行动作"，选择"控制"基础节点，执行动作选择为"遍历集合元素"。
      
      2. 配置输入参数，选择"儿科知识检索召回.结果"，如[图10]所示。
         图10遍历召回知识节点配置   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002379165026.png "点击放大") 
        
   
   5. 添加"追加到数组变量"节点。
      将遍历的内容存储在一个数组变量中，用于重排序。
      1. 在"遍历召回知识"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182862353.png) \> 添加执行动作"，选择"变量V2"基础节点，执行动作选择为"追加到数组变量"。
      
      2. 配置相关参数，如[图11]所示。
         图11召回结果追加到返回结果   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002354670685.png "点击放大")
         表4追加到数组变量节点参数说明 
         | 参数  | 说明                         |
         |:---|:---|
         | 变量名 | 此处选择提前定义的数组变量queryResults。 |
         | 值   | 选择"遍历召回知识.循环内容"。           |
            
         
        
   
   
   
   
6. 配置消化科知识库检索召回。 
   1. 添加"Query改写"节点。 利用模型能力对原始查询内容进行改写、优化，使得原始请求更准确。
      1. 在"消化科知识库"默认分支节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147543146.png) \> 添加执行动作"，选择"检索规划"基础节点，执行动作选择为"Query改写"。
      
      2. 配置输入参数，如[图12]所示。
         图12配置消化科问题改写节点   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002320552172.png "点击放大")
         表5消化科问题改写节点输入参数说明 
         | 参数       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                           |
         |:---|:---|
         | 模型服务调用ID | - 对于平台预置的模型服务，可以在资产中心选择"大模型"页签，单击模型卡片进入模型详情页面，查看模型服务调用ID。  - 对于租户自接入的模型服务，可以在左侧导航栏选择"模型中心 \> 我的模型服务"，选择"我接入的"页签，在模型服务列表中复制模型服务调用ID。   本实践选用的chatglm3-6b，模型服务调用ID为platform:chatglm3-6b，已在[2]中定义，此处直接选择变量定义节点中定义的model_service_id。 |
         | 原始查询内容   | 将用户输入内容传递给大模型进行改写，即选择起始节点的WISEAGENT_USER_INPUT变量。                                                                                                                                                                                                                                                                                                                                                                                            |
            
         
       
   
   2. 添加"召回"节点。
      对经过Query改写后的问题，在知识库中进行向量化检索召回。
      1. 在"消化科问题改写"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182862365.png) \> 添加执行动作"，选择"召回"基础节点，执行动作选择为"召回"。
      
      2. 配置输入参数，如[图13]所示。
         图13消化科知识检索召回配置   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002412675169.png "点击放大")
         表6消化科知识召回节点参数说明 
         | 参数      | 说明                                                                                                                                    |
         |:---|:---|
         | 向量化检索内容 | 选择"消化科问题改写.改写后的表述"作为向量化检索内容。                                                                                                          |
         | 知识库ID   | 单击"获取知识库ID"，进入"我的知识库"列表，单击"消化科知识库"知识库ID列的![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002412571925.png)。 |
         | 相似度阈值   | 搜索的关键字和返回内容的相似度阈值，默认为0.5，返回相似度大于等于0.5的结果。                                                                                             |
         | 召回数量    | 检索返回切片限制数量，默认为10条。                                                                                                                    |
            
         
      
      3. 在节点实例区域，单击"新增实例"，填写实例名称、描述及API Key。
        
   
   3. 添加"变量赋值"节点。
      将召回结果存储在一个数组变量中，用于重排序。
      1. 在"消化科知识检索召回"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182704021.png) \> 添加执行动作"，选择"变量V2"基础节点，执行动作选择为"变量赋值"。
      
      2. 配置相关参数，如[图14]所示。
         图14召回结果返回配置   
         ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002412685657.png "点击放大")
         表7检索召回节点参数说明 
         | 参数  | 说明                         |
         |:---|:---|
         | 变量名 | 此处选择提前定义的数组变量queryResults。 |
         | 值   | 选择"消化科知识检索召回.结果"。          |
            
         
        
   
   
   
   
7. 对召回结果进行重排序。 
   添加"重排序"节点，利用重排序模型能力对召回结果进行重排序。
   1. 在"多分支条件"区域下方，单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182644225.png) \> 添加执行动作"，选择"重排序"基础节点，执行动作选择为"重排序"。
   
   2. 配置输入参数，如[图15]所示。
      图15重排序节点配置   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002354670693.png "点击放大")
      表8检索召回节点输入参数说明 
      | 参数       | 说明                                                                                                                                                      |
      |:---|:---|
      | 模型服务调用ID | 对于平台预置的模型服务，可以在资产中心选择"大模型"页签，单击模型卡片进入模型详情页面，查看模型服务调用ID。 本实践选用的bge-reranker-large，模型调用ID为platform:bge-reranker-large。 |
      | 原始查询内容   | 将原始查询内容传递给大模型作为重排序参考依据，即选择起始节点的WISEAGENT_USER_INPUT变量                                                                                                   |
      | 排序返回数量   | 重排序后返回的召回结果数量，本实践配置为10。                                                                                                                                 |
      | 召回结果     | 将变量queryResults存储的召回结果，传递给模型进行重排序。                                                                                                                      |
         
      
   
   3. 在节点实例区域，单击"新增实例"，填写实例名称、描述及API Key。
    
   
   
8. 返回重排序结果。 
   添加"结束节点"，将重排序结果作为整条工作流的输出返回。
   1. 在"重排序"节点下单击"![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002182802605.png) \> 添加执行动作"，选择"结束"基础节点，执行动作选择为"结束节点"。
   
   2. 配置输入参数，召回结果选择为"重排序.重排序结果"，如[图16]所示。
      图16结束节点配置   
      ![](https://support.huaweicloud.com/bestpractice-appstage/zh-cn_image_0000002147483354.png "点击放大") 
    
   
   
9. 配置完成后，单击"保存"。
10. 在"流保存成功"弹框中单击"确定"，立即开启流，启用后的知识检索流才能在创建Agent时调用。
 
#### 测试知识检索流
1. 在知识检索流列表中，单击检索流名称，进入知识检索流查看页面。
2. 单击"测试"，在测试面板，输入查询问题，单击"提交测试"。
3. 查看测试结果。
4. 单击"查看运行历史详情"，在运行详情页面，查看本次测试过程中工作流的运行总次数、成功次数、失败次数，以及各节点的执行时长、输入参数及输出参数等，方便定位问题。
 
