首页 > 教程攻略 > ai资讯 >4000字长文:使用dify搭建SOP检索问答Agent

4000字长文:使用dify搭建SOP检索问答Agent

来源:互联网 时间:2026-07-23 14:45:38

SOP检索问答Agent正在让企业知识管理这件事变得真正"智能"起来——员工问一句就能拿到准确答案,操作中的各种错误率也随之大幅下降。这背后,其实是把静态文档变成可交互的智能引擎。

为什么需要SOP检索问答Agent?

标准化作业程序(SOP)是企业规范操作流程的核心资产,但传统管理方式一直有三个老大难:

  • 检索太慢:员工得自己翻文档库,找一条关键步骤往往要花好几分钟,还容易漏;
  • 上手太难:新员工面对复杂的SOP一脸懵,培训成本居高不下;
  • 更新滞后:SOP修订了,执行端看到的还是旧版本,操作偏差就这么来的。

而SOP检索问答Agent通过智能语义理解加即时知识检索,能带来这些改变:

  • 精准秒级响应

    :像"设备故障代码102如何处理?"这样的自然语言问题,自动匹配最新版SOP条款;
  • 降低人为错误

    :结构化输出操作步骤、安全规范以及关联案例,把疏漏风险压到最低;
  • 动态知识同步

    :对接企业知识库,Agent回答的内容永远和实时更新后的SOP版本保持一致。

说到底,这个Agent不只是效率工具,它把静态文档变成了可以问答的智能知识库,让操作合规性和团队协作效率都上了一个台阶。

效果演示

:用户通过下拉框选取文档之后,可以点击"获取全部步骤",也可以选择某个具体步骤进行问答。同时,Agent会根据本轮对话的上下文信息,主动推理用户的"下一步问题"。

实现的具体流程

前期用户需求收集(这一步非常重要

大模型落地是为人服务的,一切工作都要从用户需求出发。所以首先要搞清楚:用户希望怎么交互?输出长什么样?底线要求是什么?

以我们构建的这个Agent为例,经过与用户沟通,确定了三点核心要求:

  • 交互方便

    :省略一切不必要的操作(通过问题预测减少用户的输入动作);
  • 回复准确

    :避免因为错误指导而提高次品率(初期数据处理需要选对OCR工具);
  • 响应快速

    :降低整体流程的耗时(不能盲目上超大参数模型)。

整体架构搭建

下面分三个部分来讲:

一、原始文件处理

以生产工艺SOP为例。所有文件都是PDF格式,每个步骤以表格形式展示,有跨页表格和单页表格两种,如图1、图2所示。

图1 (a)跨页表格
图1 (b)跨页表格-续
图2 单页完整表格

针对原始文件特点,我们把PDF的每页转为PNG图片,然后使用多模态模型进行文字提取。这部分参考了开源项目 gptpdf——思路很相似:先把PDF转成单张PNG,再借助多模态模型提取文字。

但我们的PDF存在跨页表格的情况,所以转图片时增加了判断:如果当前页表格不包含表头,就视为"续表",与前一页合并,最终得到图3。

图3 拼接之后的图片

至此,原始PDF被处理成了图片和对应的步骤内容。每个机器的SOP存为一个Word文档,方便后续构建知识库。

(思考:我们真的需要把步骤的完整文字描述存到知识库中吗?)

同时,为了实现用户查询整体SOP步骤,我们用LLM抽取每个步骤,构建成一个txt文件,也上传到知识库中。

二、知识库的构建

Chunk

:Dify知识库提供了两种分块方法。通用方法按标识符分块,限制字符长度,为保证语义连贯,每个chunk设置重叠字符数;父子分块的设置参考图4。

图4 分块设置

Embedding和reranker选择

:因为SOP检索问答对语义检索的需求并不强,所以使用bge-reranker-large和bge-large-v1.5-zh就能满足需求,如图5。

图5 Embedding的选择

检索设置上用了图6的配置。由于聚焦到具体SOP文档,且每个步骤各不相同,召回的top_k不宜过多,以免干扰后续生成。检索权重设为语义0.7、关键字0.3,召回阈值0.6。当然,迁移到不同项目时,权重和阈值还是需要一番调试才能找到最佳值。

图6 检索设置

元数据设置

:为了精确锁定具体SOP文件,在知识库中设置了一个元数据model_name,如图7;同时在知识库的每个文件中给元数据赋值,如图8。

图7 新建元数据
图8 元数据赋值

三、Workflow的搭建

整体workflow思路参照RAG流程,包括:

用户查询内容处理

知识库检索

大模型整理检索内容和用户问题

用户查询内容处理

:在开始节点增加了一个下拉框选项(如图9),包含全部SOP文件名称,目的是提高后续知识库检索的精准度。

图9 开始节点文件名参数设置

当前存在两种问答方式——全部流程步骤输出和单步骤输出,所以需要用if-else节点做判断,如图10。

图10 判断节点

从图中可以看到,dialogue_count作为判断条件:当dialogue_count==0(即第一轮问答)时,先检索该SOP的全部流程并存储到会话变量sop_total中。这用于将用户问题和SOP步骤匹配,并给出下一步骤。从演示视频中看到,回答具体步骤时会同时给出当前步骤名称和下一步骤。

图11 会话变量

后续将用户的问题和SOP文件名拼接起来,作为知识库检索的输入。

知识库检索

:把拼接后的问题作为query传给知识库节点,同时设置元数据过滤条件,实现精确检索。

图12 知识库节点

大模型处理

:将检索到的内容和用户问题作为prompt输入到大模型中。注意,我们在prompt中要求模型只输出图片,不输出文字——这也回答了前面留的思考题:不需要把完整的步骤文字上传到知识库,因为输出的图片本身就包含了完整步骤,只输出图片还能省去用户阅读文字的时间。

使用的模型是qwen3-30B-A3B。大模型主要做检索内容的整理输出,不需要太强的能力,所以30B是最具性价比的选择。

图13 LLM节点