Skip to content

FA 一键诊断 — 知识库自动沉淀 Agent 设计 v2.0

前置阅读

版本记录

  • v1.0 (2026-06-17):初稿(逐工单案例沉淀)
  • v2.0 (2026-06-17):重构为按分类聚合方案沉淀;仅 Dify 定时任务触发;去掉手动触发;日报列为规划不落地

1. 产品定位

不是逐条工单存档,而是按故障分类聚合处理方案。

同一故障类型(如「弱电智能化 > 闸机 > 无法升降」)可能对应多条工单、多种处理方案。沉淀 Agent 定期拉取闭环工单,按 system + component + symptom 归类,LLM 聚合出该故障的常见处理方案,以一份知识库文档的形式维护。

核心价值:新工单诊断时,LLM 检索到的不是碎片化工单记录,而是「这类故障通常怎么修」的结构化经验。

上线时机:P2 运营阶段,前提条件满足后通过 Dify 定时工作流开启。


2. 触发机制

通过 Dify Workflow 的定时触发(Cron Job),每周执行一次(如每周一凌晨 02:00)。

Dify 定时工作流(Cron: 0 2 * * 1)
  → 拉取上周闭环工单
  → 按分类聚合 → LLM 生成方案文档
  → Upsert 至 FA 诊断知识库

MVP 不提供手动触发和管理后台入口。后续若需要补跑历史数据,通过 Dify 手动执行该工作流即可。


3. 处理流水线


4. Locate 目标工单

工作流引擎不区分工单类型,需要通过「流程实例中是否包含一键诊断组件」来定位。

定位逻辑

1. 查询工作流引擎:
   → 拉取指定时间范围内已闭环的流程实例
   → 筛选包含「一键诊断」节点的流程

2. 获取诊断记录:
   → diagnosis_records WHERE work_order_id IN (上述流程ID)
   → 取每次诊断的 classification 和 confidence

3. 过滤:
   → confidence >= LOW_CONFIDENCE_THRESHOLD (排除分类不确定的)
   → 处理方式非空且字数 >= 10

具体查询 API 依赖工作流引擎的开放能力,需与工单产品经理确认。


5. 按分类聚合

5.1 分组键

GROUP BY system, component, symptom

同一组内所有工单共享一套分类标签。标签来自一键诊断时已打好的 classification 记录——不用重新打标。

5.2 聚合 Prompt

{# FA_沉淀Agent_方案聚合_Prompt #}

你是一个设备运维知识整理专家。以下是同一故障类型的多条闭环工单,请将其中的处理方案聚合为一份知识文档。

## 故障分类
{{system}} > {{component}} > {{symptom}}

## 工单记录(共 {{count}} 条)
{% for wo in workorders %}
---
### 工单 {{loop.index}}
- 故障描述:{{wo.description}}
- 处理方案:{{wo.resolution}}
- 处理人:{{wo.handler}}
- 结单时间:{{wo.closed_at}}
{% endfor %}

## 输出要求
将以上工单中的处理方案去重、归类、合并,输出一份知识文档:

1. **故障概述**:用 1-2 句话概括这类故障的典型表现
2. **常见原因**:归纳工单中提及的根因,按频次排序
3. **处理方案**:对每条处理方案去重合并,保留可操作的关键步骤和数据(如参数值、阈值)。同一思路的方案合并为一条,附出现次数

## 输出格式

### 故障概述
...

### 常见原因
1. ...(N 次)
2. ...(N 次)

### 处理方案
#### 方案一:...(N 次)
1. ...
2. ...

#### 方案二:...(N 次)
1. ...

5.3 知识库文档

标题故障处理方案:[component]-[symptom]

正文示例

markdown
# 故障处理方案:闸机-无法升降

## 故障概述
闸机翼臂无法正常升降,导致人员无法通行。多发于使用频繁的出入口。

## 常见原因
1. 伺服电机驱动器参数漂移,过载保护触发(6 次)
2. 红外对射感应器被灰尘遮挡或偏移(3 次)
3. 供电电压不稳,驱动器进入欠压保护(1 次)

## 处理方案

### 方案一:断电复位 + 参数校准(6 次)
1. 断开闸机电源,等待 30 秒后重新上电
2. 进入驱动器设置菜单,执行位置参数校准
3. 测试升降 3 次确认正常

### 方案二:清理红外感应器(3 次)
1. 用无尘布擦拭红外对射感应器表面
2. 确认感应器对齐指示灯常亮
3. 若偏移,松开固定螺丝重新对准后锁紧

元数据

json
{
  "document_title": "故障处理方案:闸机-无法升降",
  "system": "弱电智能化",
  "component": "闸机",
  "doc_nature": "故障处理方案",
  "keywords": ["闸机", "无法升降", "伺服电机", "过载", "参数校准", "红外感应器"],
  "access_roles": ["超级管理员", "物业经理", "运维工程师"],
  "retention_policy": "active"
}

5.4 Upsert 策略

同一 system + component 组合的知识库文档采用覆盖更新

  1. 查询知识库:是否存在 document_title = "故障处理方案:[component]-[symptom]" 的文档
  2. 若存在 → 删除旧文档,上传新文档(Dify 不支持原地更新)
  3. 若不存在 → 直接上传

分组粒度用 component + symptom 而非 system + component + symptom,因为同组件不同症状通常对应不同处理方案。


6. 上线条件

条件说明
工作流引擎支持按节点类型查询流程实例需确认 API 能力
闭环工单的处理方式字段已填写当前缺失,需改造结单流程
自动打标准确率 ≥ 85%通过 Golden Set 评测
累计沉淀分组数 ≥ 10避免知识库过于稀疏

7. 后续规划(不落地)

规划项说明
日报沉淀完成后推送到管理群:本次新增/更新 N 组,涉及 M 条工单
人工审核知识库文档标注「AI 生成」标签,管理员可编辑修正
自动归档连续 90 天无新工单的故障分组自动标记 archived

8. 已知待解决问题

以下问题当前方案未覆盖,记录于此,后续闭环设计时解决。

8.1 增量沉淀而非全量替换

当前方案是「拉上周工单 → 按分组覆盖更新」。实际是错的——应该是在已有知识库条目的基础上融合新工单。例如「故障处理方案:闸机-无法升降」已存在于知识库,本周新增 3 条同类工单时,不能直接覆盖旧文档(会丢失历史方案),而是需要读取旧文档 → 合并新工单 → 输出新版本。

涉及:知识库条目的版本管理、旧文档内容解析、增量合并 Prompt 设计。

8.2 Symptom 聚类不精准

symptom 由 LLM 打标产生,非受控词汇。「无法升降」「翼臂不动」「闸机卡住」语义相同但文本不同,简单字符串 GROUP BY 会把它们拆成三个分组。

涉及:symptom 归一化(是否需要 symptom 候选列表?是否用 LLM 做跨周 symptom 合并?)、分组粒度的工程化控制、是否需要人工确认新的 symptom 变体。

8.3 知识库条目工程化

沉淀的知识库条目不仅仅是 Markdown 文本,需要携带结构化元数据支撑后续增量合并:

json
{
  "document_title": "故障处理方案:闸机-无法升降",
  "doc_nature": "故障处理方案",
  "source_work_order_ids": ["WO-2026-0892", "WO-2026-0915", "WO-2026-1033"],
  "total_occurrences": 12,
  "last_updated": "2026-06-23",
  "symptom_variants": ["无法升降", "翼臂不动", "闸机卡住"]
}

涉及:Dify 自定义 metadata 字段扩展、source_work_order_ids 的 JSON 序列化存储、total_occurrences 的原子递增。

8.4 方案分组何时拆分

同一 component + symptom 下,当处理方案差异过大(如"断电复位"vs"更换驱动板"),是否需要拆分成多个知识条目?拆分阈值如何定义?


文档版本:v2.0创建日期:2026-06-17最后更新:2026-06-17作者:孙强

Released under the Private License.