游乐游手机版
首页/AI热点日报/热点详情

FastGPT标签法工作流让多知识库问答准确率提升80%

类型:热点整理2026-07-19
针对多知识库问答中因知识库庞大导致的准确率下降问题,提出利用“标签法”在知识库搜索插件中通过元数据过滤筛选文档。通过为文档打标签并结合问题分类,工作流可精准召回相关内容。实际案例验证,该方式显著提升问答准确率。

在企业实际应用场景中,一个问答助手往往需要面面俱到,既懂财务、法务,也通人资,甚至还要整合具体的业务知识。这问题该怎么解?

有人可能会想,把所有知识一股脑儿塞进一个知识库里,不就万事大吉了?当知识量不大的时候,这种做法确实简单高效,召回率和准确率都说得过去。可一旦文档数量上去了,你就会发现,召回性能明显下降,“答非所问”的情况也成了家常便饭。

这就好比,我们电脑里的各种文件,如果不做分类,全堆在一个文件夹里,想找份资料简直是大海捞针,更别提什么知识的沉淀和梳理了。

那么,今天我们就来聊聊多知识库召回时的两种常见做法,并动手实践一个真实案例。

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

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

第一种做法,是为每一类问题或领域分别建立一个知识库,然后在工作流里,并行地放置多个「知识库搜索」插件,最后再通过一个「知识库搜索引用合并」插件,把所有结果汇总起来。

具体来说,可以这么操作:

1. **创建知识库**:根据你的分类体系,分别创建不同的知识库。比如,建立一个“财务知识库”,专门存放与财务相关的文档。

2. **建立工作流**:在工作流中,将「问题分类」插件的每一个分类,都与一个独立的「知识库搜索」插件连接起来,并做好配置。

3. **合并引用**:新建一个「知识库搜索引用合并」插件,与刚才创建的所有「知识库搜索」插件相连。核心是在这个合并插件的配置中,将每一个搜索插件的结果作为引用源。它的作用就是把多个知识库的召回结果整合到一块。

当分类数量较少时,这种编排方式看起来清晰明了。但它的缺点也很突出:

  • **管理困难**:一旦分类数量增多,工作流界面就会变得拥挤、杂乱,难以维护。
  • **扩展性差**:如果查询需要跨知识库进行,这种方式就很难实现了。

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

在「知识库搜索」插件中,有一个名为“集合元数据过滤”的配置项。它支持 JSON 格式,能让我们根据文档的标签以及创建时间,灵活地筛选知识库中的文件。

代码模板如下:

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

那么,这个功能怎么用呢?在创建知识库时,我们可以给库里的每一份文档打上标签。这里提到的“标签”和“知识创建时间”,正好对应了上面模板中的 tagscreateTime

创建时间很好理解,不多解释。关于“标签”,有几个要点需要注意:

  • 一份文档可以被赋予多个标签。
  • $and 后面的标签代表“与”的关系,意味着只有同时满足所有这些标签的文档才能被命中。
  • $or 后面的标签代表“或”的关系,FastGPT 会遍历所有拥有这些标签的文档。
  • 当同时使用 $and$or 时,$and 逻辑优先生效,$or 此时不再起作用。
  • 标签值可以是具体的字符串标签名,也可以是 null,而 null 代表的是未设置标签的数据集合。

来看几个例子,会更直观:

  • 举例一:匹配所有“未打标签”的文档:
{
    "tags": {
        "$and": [null],
        "$or": []
    }
}
  • 举例二:匹配标签包含“业务 1”的文档:
{
    "tags": {
        "$and": ["业务 1"],
        "$or": []
    }
}
  • 举例三:匹配标签同时包含“业务 1”和“业务 2”的文档。如果文档只有其中一个标签,则无法命中。
{
    "tags": {
        "$and": ["业务 1","业务 2"],
        "$or": []
    }
}
  • 举例四:匹配标签包含“业务 1”或者“业务 2”的文档。FastGPT 会遍历带这些标签的所有文档。
{
    "tags": {
        "$or": ["业务 1","业务 2"]
    }
}

接下来,我们就用“标签法”实际搭建一个多知识库问答助手,看看效果。

电网故障问答助手

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

整体工作流如下图所示:

FastGPT工作流实战:我用

知识库搭建

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

Step 1:上传知识文档

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

Step 2:建立标签

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

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

打好标签后,效果如下图所示。可以看到,根据业务需要,一份文档是可以被打上多份标签的。

工作流搭建

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

添加一个「问题分类」插件,分出5个类别:配电诊断、输电诊断、配电处理、输电处理、其他问题。

相应的提示词如下:

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

Step 2:生成分类标签

这一步需要用大模型来生成 JSON 格式的分类标签。

1. 增加一个「AI 对话」插件,与上一步「问题插件」的四类问题分别相连。

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

3. 提示词如下:

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

 JSON 代码模板:

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

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

这里需要确保大模型输出纯 JSON 内容,不含任何多余信息或符号。当然,我们完全可以增加一个步骤,对输出结果进行格式化,确保万无一失。

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

1. 增加一个「知识库搜索」插件,与上一步的「AI 对话」插件相连。

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

3. 增加一个「代码运行」插件,输入以下 JS 代码:

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

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

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

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:处理“其他问题”

对于「问题分类」里的最后一个分类“其他问题”,我们添加一个「指定回复」插件与它相连。回复内容为:“很抱歉,我的知识库没有该答案,请您核实您的问题,或者请联系技术部门。”

测试一下

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

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

1. **问题分类**:分类结果为“配电诊断”,正确。

2. **AI 对话-生成分类标签**:生成的 JSON 准确无误。

3. **知识库召回结果**:确实从带有“配电诊断”标签的文档中召回了结果,正确。

从过程和结果来看,工作流运行完全符合预期。这种用“标签法”搭建知识库的方式,效果确实不错。

今天,我们一起讨论了多知识库编排的常用方法,并动手实践了“标签法”搭建问答助手的完整案例。这又一次证明了“AI 赋能业务”的巨大潜力。

在实践中,核心始终是知识、数据源和工作流。至于具体用 FastGPT、Dify、n8n 还是扣子,其实并不重要。平台只是地基,知识库是砖石钢筋,工作流则是框架。如何把知识库用好,实现精准的知识召回,才是最核心、也最见功力的一步。

来源:https://www.53ai.com/news/LargeLanguageModel/2025072164750.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。