支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


FastGPT工作流实战:我用"标签法"让多知识库问答准确率提升80%

发布日期:2025-07-21 15:34:23 浏览次数: 1568
作者:启迪Prompter

微信搜一搜,关注“启迪Prompter”

推荐语

FastGPT多知识库问答准确率提升80%的秘诀:标签法实战解析,告别答非所问的困扰!

核心内容:
1. 多知识库问答的常见问题与单一知识库的局限性
2. 两种多知识库召回编排方法对比与实践演示
3. 标签法的具体实现步骤与代码模板详解

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家


在企业实际应用场景中,一个问答助手是要懂得很多事情的,比如财务的、法务的、人资的,甚至集成了业务方面的知识。


那要怎么做呢?


有人建议:把所有知识放在一个知识库里就解决了,什么知识都能召回。


如果知识库中的内容比较少的时候,这么做是可以的,准确性和召回效率也都还不错。一旦知识库中上传的文档多了起来,召回性能会降低很多,而且经常会出现“答非所问”的情况。


就像我们电脑上,如果各种文档不做分类,放在同一个文件夹中,查找一份知识是多么无力,也不利于知识的沉淀梳理。


今天呢,我们先聊一下知识库召回时的两种常见做法,再实践一个例子。Let's go!



一、多个知识库的召回编排

实践一:利用「知识库搜索」插件并列编排


第一种实践,可以为每一类问题/领域分别建立一个知识库,并在工作流中,建立多个「知识库搜索」插件,最后汇总给「知识库搜索引用合并」插件。如下图所示。


1、按照你设计的分类,分别创建知识库。比如下图中的财务知识库,可以存放与财务相关的文档、知识等。


Image


2、建立工作流时,「问题分类」插件的每一个分类,都与一个「知识库搜索」插件相连,做好配置。


Image


3、新建「知识库搜索引用合并」知识库,与所有的「知识库搜索」插件相连。「知识库搜索引用合并」插件的配置如上图所示,“知识库引用”要配置好每一个「知识库搜索」的结果。


「知识库搜索引用合并」插件的作用,相当于把多个知识库召回的结果做了合并处理。


当分类比较少时,这种编排方法清晰简洁。但是它也有缺点:

  • 不利于管理。当分类多了之后,满屏的「知识库搜索」插件,非常乱
  • 不利于扩展。如果所查的知识需要跨知识库,就很难实现了。


实践二:利用标签来选择知识(标签法)


在「知识库搜索」的选项中,有一项“集合元数据过滤”,如下图所示。这个选项支持 JSON 格式,能够根据标签以及知识文档的创建实践来灵活选择知识库中的文件。


Image


代码模板如下:

{
  "tags": {
    "$and": ["标签 1""标签 2"],
    "$or": ["有 $and 标签时,and 生效,or 不生效"]
  },
  "createTime": {
    "$gte""YYYY-MM-DD HH:mm 格式即可,集合的创建时间大于该时间",
    "$lte""YYYY-MM-DD HH:mm 格式即可,集合的创建时间小于该时间,可和 $gte 共同使用"
  }
}


那么,如何使用这项功能呢?在创建知识库时,我们可以为一个知识库内的多份文档打上标签。这个“标签”和“知识创建时间”就对应着上面代码模板中tags和createTime。


Image


创建时间很好理解,不做解释了。对于“标签”,需要注意一下:

  • 在知识库中,一份文档可以打多个标签。
  • "$and"后面的标签代表“与”的关系,代表同时满足这些标签的文件,才满足条件。
  • "$or"后面的标签代表“或”的关系,FastGPT 会自动遍历这些标签对应的文件。
  • 有 $and 标签时,and 生效,or 不生效。
  • 标签值可以为 string 类型的标签名,也可以为 null,而 null 代表着未设置标签的数据集合。


我们举几个例子:

举例一:匹配所有“未打标签”的文档

{
        "tags": {
            "$and": [null],
            "$or": []
        }
    }


举例二:匹配标签包含“业务 1”的文档

{
        "tags": {
            "$and": ["业务 1"],
            "$or": []
        }
    }


举例三:匹配标签同时包含“业务 1”和“业务 2”的文档。如果文档的标签只有“业务 1”或者只有“业务 2”,则无法命中。

{
        "tags": {
            "$and": ["业务 1","业务 2"],
            "$or": []
        }
    }


举例四:匹配标签包含“业务 1”或者“业务 2”的文档。FastGPT 会对带有这些标签的文档进行遍历。

{
        "tags": {
            "$or": ["业务 1","业务 2"]
        }
    }


下面我们利用标签法实践一个多知识库的问答助手。

电网故障问答助手


今天搭建的这个助手,负责回答四个方面的问题:输电线路的故障诊断、输电线路的故障解决、配电线路的故障诊断和配电线路的故障解决。


Image


整个工作流如下图所示:


Image


知识库搭建


在之前的文章中,知识库搭建的步骤描述很细,在这里我就不赘述了,列出关键点。


Step 1:上传知识文档。

建立一个通用知识库,上传本案例需要使用的 4 份文档。


Image


Step 2:建立标签

1、在“标签”选项中,点击“标签管理”,新建 4 个标签:配电处理、输电处理、配电诊断、输电诊断。


Image

2、在每一个标签后面,点击“+”,选择需要打上标签的文档,保存。


Image


打好标签后,如下图所示:


Image


在这里,根据业务需要可以为一份文档打上多份标签。


工作流搭建


Step 1:新建「问题分类」插件

增加「问题分类」插件,分出 5 类:配电诊断、输电诊断、配电处理、输电处理、其他问题。如下图所示。


Image


提示词如下:

- Role: 电网故障分类专家
- Background: 用户在电网运行过程中遇到问题,需要专业的帮助来判断问题的性质和归属。用户可能不清楚问题的具体原因,或者已经知道原因但需要解决方案。因此,需要一个能够精准分析用户问题并进行分类的专家。
- Profile: 你是一位资深的电网故障分类专家,拥有丰富的电网运行和维护经验,对输电和配电系统的故障类型和处理方法有着深刻的理解。你擅长通过用户描述的问题,精准判断问题的性质和归属,为用户提供针对性的建议。
- Skills: 你具备深厚的电网专业知识,能够快速分析用户问题的细节,准确判断故障类型。你熟悉输电和配电系统的常见故障及其解决方案,能够根据用户描述的问题,判断是故障诊断还是故障处理,并进一步确定问题属于输电还是配电。
- Goals: 根据用户描述的问题,精准判断问题的性质和归属,为用户提供明确的分类结果和建议。
- Constrains: 你必须根据用户描述的问题,严格按照故障诊断和故障处理的分类标准进行判断,确保分类的准确性。对于不属于电网故障的问题,应明确归类为“其他问题”。
- OutputFormat: 输出应包括问题分类结果和简要说明,例如:“输电故障诊断:根据用户描述,问题可能与输电线路的绝缘老化有关。”
- Workflow:
  1. 分析用户描述的问题,判断用户是否清楚问题原因。
  2. 根据用户是否清楚问题原因,判断问题属于“故障诊断”还是“故障处理”。
  3. 进一步分析问题涉及的电网部分,判断是输电问题还是配电问题。
  4. 综合以上分析,确定问题的最终归属类型。
- Examples:
  - 输电故障诊断:用户描述“输电线路附近有异物悬挂,导致线路放电”。分析后判断为输电故障诊断,因为用户未明确故障原因,需要进一步排查。
  - 输电故障处理:用户描述“输电线路因雷击导致绝缘子损坏,需要更换”。分析后判断为输电故障处理,因为用户已知故障原因,需要解决方案。
  - 配电故障诊断:用户描述“小区内部分用户停电,原因不明”。分析后判断为配电故障诊断,因为问题涉及配电系统且原因未明。
  - 配电故障处理:用户描述“配电变压器因过载烧毁,需要维修”。分析后判断为配电故障处理,因为用户已知故障原因,需要解决方案。
  - 其他问题:用户描述“电费过高,需要查询原因”。分析后判断为其他问题,因为该问题与电网故障无关。
- Initialization: 在第一次对话中,请直接输出以下:您好,我是电网故障分类专家。请详细描述您遇到的问题,我会根据您的描述,精准判断问题的性质和归属。您是需要寻找故障原因,还是已经知道原因需要解决方案?


Step 2:生成分类标签

分类标签是 JSON 格式,我们用大模型来生成。


1、增加「AI 对话」插件,与上一步「问题插件」的四类问题相连,如下图所示。


Image


2、“用户问题”选择上一步「问题分类」插件的分类结果。

3、提示词编写为:

你是一位资深的标签代码生成大师,精通 JSON 语法,非常擅长按照需求生成 JSON 代码。
请将「问题分类-用户问题分类-分类结果」填充到下面的 JSON 代码模板中的“填充内容”中,并且输出填充后的 JSON 代码。

 JSON 代码模板:

{
        "tags": {
            "$and": ["填充内容"],
            "$or": []
        }
    }


注意:不要输出'''json'''的格式,只输出 JSON 代码,不输出额外的任何信息。


这一步需要确保大模型输出纯 JSON 内容,不要包含多余的信息或者符号。当然,我们完全可以增加一个步骤,对大模型输出的内容进行格式化,让它稳稳的输出纯 JSON 内容。


Step 3:添加「知识库搜索」插件,输出最优解

1、增加「知识库搜索」插件,与上一步「AI 对话」插件相连。如下图所示。

2、“集合元数据过滤”选择上一步「AI 对话」插件的 AI 回复内容。


Image


3、增加「代码运行」插件,代码框中输入JS代码:

function main({data1}){
    
  return {
      result: data1[0]
  }
}


Step 4:添加「AI 对话」插件,组织回复文案。

1、用户问题:包含用户原始问题,以及上一步知识库召回的内容。


Image


2、提示词如下:

- Role: 电网故障诊断及处理专家
- Background: 用户在电力系统运行过程中遇到了故障,需要专业的帮助来诊断和解决。用户可能对电力系统的技术细节不太熟悉,因此需要通俗易懂的解答和具体的排查指导。
- Profile: 你是一位经验丰富的电网故障诊断及处理专家,拥有深厚的电力系统知识和丰富的现场经验。你擅长结合知识库中的信息,精准解答各类电力系统故障相关问题,能够通俗易懂地向用户解释故障原因和解决方法。
- Skills: 你具备电力系统故障诊断、故障处理、知识库检索和信息整合的能力,能够快速识别用户问题的核心,提供具体可行的排查指导,并在必要时追问用户以获取更多信息。
- Goals: 
  1. 深度理解用户问题和需求,识别用户意图。
  2. 充分结合用户问题和知识库的返回内容,严谨、客观、友好地回复用户。
  3. 在知识库返回内容无法覆盖用户问题时,准备“知识库缺失”话术。
  4. 在用户问题不明确时,进一步追问以获取真实现象和根本原因。
- Constrains: 
  1. 所有回复必须基于知识库中的专业内容,不得臆测。
  2. 故障原因必须明确告知,不含糊其辞。
  3. 排查指导必须具体可行,按步骤提供。
  4. 在信息不足时,必须提出追问而非强行给出结论。
  5. 避免过于技术化的专业术语解释,保持通俗易懂。
  6. 当多种故障可能性并存时,应说明各种可能性。
  7. 当知识库中没有相关答案时,必须诚实告知用户,使用标准话术“很抱歉,我的知识库没有该答案,请联系技术部门”。
  8. 不得在知识库没有内容的情况下编造或推测答案。
- OutputFormat: 通俗易懂的文字描述,结合具体排查步骤和可能的故障原因。
- Workflow:
  1. 深度理解用户问题,识别用户意图和问题的核心。
  2. 判断问题描述是否清晰,是否能协助定位问题。如果不清晰,则做好问题追问准备。
  3. 结合知识库内容,分析可能的故障原因。
  4. 提供具体可行的排查指导,按步骤说明。
  5. 在信息不足时,结合用户问题进一步追问,追查可能存在的问题,用于协助进一步明确现象和定位原因。
  6. 当知识库中没有相关答案时,使用标准话术告知用户。
- Examples:
  - 例子1:用户问题:“我家的电突然停了,怎么办?”
    回答:“您好,停电可能是由多种原因引起的。首先,请检查您家的电表是否有足够的余额。如果余额充足,可能是内部线路故障。您可以按照以下步骤排查:1. 检查家中的总开关是否跳闸,如果跳闸,请尝试重新合闸;2. 如果总开关正常,检查各个房间的分开关是否跳闸;3. 如果开关都正常,可能是外部线路故障,建议您联系当地的电力公司。如果还有其他问题,可以告诉我更多细节,我会尽力帮您。”
  - 例子2:用户问题:“变电站的变压器发出异常声音,是什么原因?”
    回答:“变压器发出异常声音可能是由多种原因引起的。根据知识库中的信息,常见的原因包括:1. 过载运行,导致变压器内部电磁场变化;2. 内部绝缘老化或损坏;3. 外部异物接触变压器。您可以按照以下步骤排查:1. 检查变压器的负载情况,确保没有过载;2. 检查变压器的油温是否异常升高;3. 检查变压器周围是否有异物。如果这些排查后问题仍未解决,建议您联系专业的维修人员进行检查。如果还有其他问题,可以告诉我更多细节,我会尽力帮您。”
  - 例子3:用户问题:“我家的灯闪烁不停,是怎么回事?”
    回答:“您好,灯闪烁可能是由电压不稳定或线路接触不良引起的。您可以按照以下步骤排查:1. 检查灯泡是否松动,拧紧灯泡;2. 检查插座或开关是否有松动,确保连接牢固;3. 如果问题仍然存在,可能是线路老化或接触不良,建议您联系专业的电工进行检查。如果还有其他问题,可以告诉我更多细节,我会尽力帮您。”
- Initialization: 在第一次对话中,请直接输出以下:您好,我是电网故障诊断及处理专家。请详细描述您遇到的问题,我会根据知识库中的专业内容,为您提供通俗易懂的解答和具体的排查指导。如果您能提供更多的现象和细节,我会更准确地帮助您。


Step 5:对于「问题分类」的最后一个分类“其他问题”,增加一个「指定回复」插件相连。

回复内容为:“很抱歉,我的知识库没有该答案,请您核实您的问题,或者请联系技术部门。”


Image


测试一下


提问:“城市小区内10kV电缆分接箱周围有烟雾报警,该分接箱供电六台配电变压器。这可能是什么问题呢?”


通过查看工作流运行详情,看一下每一步执行是否准确。


1、问题分类

分类结果为“配电诊断”,正确。


Image


2、AI 对话-生成分类标签

生成的 JSON 准确。


Image


3、知识库召回结果

确实从“配电诊断”标签的文档中召回结果,正确。


Image


这样,从过程和结果看,工作流运行符合预期,多标签方式搭建的知识库效果还挺好的!


今天,我们一起讨论了多知识库编排的常用做法,一起实践了“标签法”搭建问答助手的真实案例,包括最近一直和大家分享的 FastGPT 工作流案例,让我们看到了 ”AI 赋能业务”的诸多可能性。


在实践时,我觉得知识/数据源、工作流是核心,至于使用 FastGPT、dify、n8n 还是扣子并不是重点。平台是地基,知识库是瓦砾钢石,工作流是框架。能够用好知识库,把知识准确的召回,是很有难度也很核心的一步。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询