面向一线维修工与现场操作员的 CNC 数控车床技术顾问:把「机器不对劲」这种模糊报修,收敛成 安全先行、可执行、可验证的诊断与处置流程;高危作业方案在交付前先由独立的安全复核子智能体把关。
这是一个跑在 DeerFlow(字节跳动开源、基于 LangGraph 的 Agent 框架)之上的行业 Agent 资产包。 本仓库不包含、也不是 DeerFlow 框架本体,而是一套可一键挂载到已有 DeerFlow 实例上的「人设 + 技能 + 领域库 + 子智能体」原创配置与内容。运行时、模型调用、工具与 Web UI 均由 DeerFlow 提供。
| 能力 | 说明 |
|---|---|
| 🩺 结构化故障分诊 | 按「安全前置 → 分诊问诊 → 原因排序 → 分步排查 → 处置建议」收敛,先问清再下结论,不跳步、不臆测 |
| 🚨 报警码解读 | 区分系统品牌/系列与机床厂自定义报警,先查本地报警库;库里没有的码绝不编造,转联网或机型手册 |
| 🗓️ 预防性维护 PM | 结合台账运行小时/班次,输出日/周/月/季/半年/年分级保养项、判定标准、耗材与到期提醒 |
| 🔒 LOTO 安全规程 | 识别电、机械惯性、重力、液压、气压、电容余电等能量源,生成可打印的上锁挂牌作业票 |
| 🧾 维修工单流转 | 开单 / 过程更新 / 完工回填 / 复发查询 / 停机统计,闭环案例沉淀进故障案例库 |
| 🛡️ 安全复核子智能体 | 高危拆装/维修方案在交付前,主助手通过 task 委托 safety-reviewer 独立审查,返回三档结论 |
主诊断助手(lead agent)与一个零工具、纯安全推理的 safety-reviewer 子智能体协作:
现场提问
│
▼
machine-problems(主助手:5 技能 + machine-db + 联网)
│ 形成涉及高危能量源的拆装/维修方案时
│ 通过 task 工具委托(白名单:仅 safety-reviewer)
▼
safety-reviewer(资深 EHS 工程师,无任何外部工具)
│ 只审「能量隔离 + 资质合规」,不改判技术诊断
▼
三档结论:通过 / 补充措施后可进行 / 不建议自行处理
│
▼
主助手把补充措施或升级建议并入最终答复 / LOTO 作业票
对明确违章的请求(如「不停电、带电开柜徒手测量」),主助手会直接拒绝并给出合规做法——安全是第一道闸门,子智能体复核是第二道闸门,二者不互相替代。
通过 MCP(mcp-server-sqlite)挂载一个本地 SQLite 库,工单与案例按设备/报警码关联,支撑复发诊断与停机统计:
machines(设备台账)
│ 1
│
│ n alarms(报警码字典)
work_orders(维修工单) ────── alarm_code
│ n
│ FK fault_case_id
fault_cases(故障案例库) pm_records(PM 保养记录)
随库附带一份完全虚构的演示种子(4 台设备 / 9 条报警码 / 4 个案例 / 4 张工单 / 3 条保养记录),仅用于演示与自测,请在真实环境替换为自己的数据。
machine-problems/
├─ persona/SOUL.md # 人设:角色、行为准则、安全红线、子智能体委托规则
├─ config/agent.config.yaml # Agent 配置(工具组/技能/MCP/子代理白名单/低发散采样)
├─ skills/ # 5 个领域技能(SKILL.md + 可填写模板)
│ ├─ fault-triage/ # 故障分诊(含 diagnosis_template.md)
│ ├─ alarm-decode/ # 报警码解读(alarm_template.md)
│ ├─ pm-planner/ # 分级 PM 计划(pm_template.md)
│ ├─ loto-safety/ # LOTO 作业票(loto_template.md)
│ └─ work-order/ # 工单流转(workorder_template.md)
├─ integrations/machine-db/
│ ├─ schema.sql # 5 表结构 + 常用检索 SQL
│ ├─ seed.sql # 虚构演示数据(仅空库时灌入)
│ └─ mcp.example.json # MCP 配置片段(含 Windows UTF-8 关键设置)
├─ subagents/safety-reviewer.yaml # 安全复核子智能体(带幂等注入标记块)
├─ scripts/install.ps1 # Windows 一键安装器(6 步,幂等)
├─ examples/ # 真实本地实测对话节选
└─ docs/architecture.md # 架构、挂载点与踩坑记录
- 一个可运行的 DeerFlow 实例(本仓库在 DeerFlow 主分支后端 + Web 网关上实测)
- Python 3.12、uv/uvx(用于拉起 MCP server)
- 一个 LLM API Key(DeerFlow 支持的模型均可;实测使用 DeepSeek,不需要联网搜索专用 Key,默认走免 Key 的 DuckDuckGo)
- Windows / macOS / Linux 均可;安装脚本与排障说明主要面向 Windows + 中文系统
以普通 PowerShell 运行(脚本默认对接 d:\...\deepflow\deer-flow,可用 -DeerFlowRoot 覆盖):
.\scripts\install.ps1
# 或指定实例与用户:
.\scripts\install.ps1 -DeerFlowRoot "D:\path\to\deer-flow" -UserId "<your-user-id>"安装器幂等地完成 6 件事:
- 定位用户空间,复制 Agent(人设 + 配置)与 5 个技能;
- 合并
machine-dbMCP server 与技能开关到extensions_config.json(写入本机绝对路径、注入 UTF-8 与 uv 镜像环境变量); - 创建
machines.db、建 5 张表,仅空库时灌入演示种子; - 把
safety-reviewer子智能体以BEGIN/END managed block标记块幂等注入全局config.yaml; - 确认 Agent 的
allowed_subagents白名单; - 把免 Key 的
web_search指向 DuckDuckGo(已配置 Tavily Key 时可用-UseDuckDuckGo:$false)。
随后重启 Gateway,在新会话中选择「CNC车床诊断助手」即可。卸载只需删除 config.yaml 中两个标记之间的内容并重启。
按 mcp.example.json 注释把 mcpServers.machine-db 与 skills 段合并进 DeerFlow 的 extensions_config.json;
把 subagents/safety-reviewer.yaml 两个标记之间的顶层 subagents: 块追加到 config.yaml;技能目录复制到用户空间 skills/custom/。详见 docs/architecture.md。
使用 DeerFlow 的嵌入式客户端以 machine-problems 身份跑真实模型,验证过以下链路(节选见 examples/):
- 复发故障诊断:对「CNC-01 偶发 X 轴 414、晃动拖链可复现、上月犯过一次」,助手依次查询台账 / 报警字典 / 工单 / 案例库(9 次只读查询全部成功、0 次被拦),命中复发案例「X 轴编码器线缆随拖链弯折致芯线疲劳虚接」与在途工单 WO-20260920-04,并主动提示生成 LOTO 作业票。
- 安全复核委托:对「已断电、更换主轴皮带」的合法高危作业,助手加载 LOTO 技能后委托
safety-reviewer,得到「补充措施后可进行」,并将一人一锁一牌、电容放电、重力机械支撑等补充措施并入作业票落盘。 - 违章直接拦截:对「带电开柜徒手测量编码器线」明确拒绝,改给停机上锁的合规做法。
以上为本地功能验证;不同模型在工具调用与委托触发上可能有差异,生产使用前请按自己的机型与制度自行验收。
- 本助手输出的是通用技术与安全建议,不能替代你所在单位的作业许可制度、设备厂家维修手册和现场负责人的决定。
- 涉及电气、能量隔离、起吊、进入机械内部等作业,必须由具备相应资质的人员按制度执行 LOTO;报警码的精确定义、诊断号、放电时间、扭矩等一律以具体机型手册为准,助手对查不到的内容不会编造。
- 演示库中的设备、人员、工单均为虚构;表结构按隐私最小化设计,只记录工号/班组,不含个人敏感信息。
- 本项目以 MIT 许可发布;DeerFlow 框架遵照其各自许可。
- 现象:MCP
list_tables/describe_table正常,但read_query一旦返回中文就 60 秒超时。 原因:mcp-server-sqlite子进程在中文 Windows 默认按 GBK 写 stdout,被 MCP 客户端按 UTF-8 解码失败。 解决:MCP server 的env必须含PYTHONUTF8=1(安装器已自动配置;手工安装别漏)。 - 现象:技能加载后 MCP /
task工具报 “not allowed by the active skill policy”。 原因:技能allowed-tools是白名单,且 YAML 列表形式不会做别名归一化,要写运行时真实工具名(如machine-db_read_query、task、read_file),不能只写Read/Write/WebSearch。 - 锁定
mcp==1.2.1是因为新版 MCP SDK 移除了旧 sqlite server 使用的Server.list_resources接口。
MIT © 2026 chen1255