乐于分享
好东西不私藏

源码实战|基于设备注册业务,讲透 DeerFlow Skill 触发逻辑与四大运行模式差异

源码实战|基于设备注册业务,讲透 DeerFlow Skill 触发逻辑与四大运行模式差异

本文基于DeerFlow 源码实战得到:设备注册 Skill 触发机制实战,并对四大运行模式进行对比 

以注册设备业务举例什么时候触发skill

技能(Skill)与工具(Tool):两套相互独立的系统

对比维度
工具体系(config.yaml 配置注册)
技能体系(SKILL.md 文件)
对应业务实例
register_device 注册设备工具

update_device 更新设备工具

list_devices 查询设备工具
device-registration 设备注册技能

(作用:提供标准化业务流程指引)
可用时机
智能体随时可调用,永久常驻
不会常驻,仅触发后才加载生效
注册 / 发现方式
在 config.yaml 配置文件中手动注册
框架自动扫描项目文件目录,自动识别发现
核心功能定位
执行底层代码、完成实际业务操作
提供标准化流程规范、补充业务上下文指引

关键结论即便未加载设备注册技能,智能体依旧可以直接调用 register_device 工具

工具常驻可用,是因为它们在 config.yaml 中完成注册;技能仅起到优化流程指引的作用(例如提示 “设备重复时使用选项弹窗让用户选择”)。

两种技能触发加载方式

方式 A:渐进式加载(隐式触发,由大模型自主驱动)

用户输入「注册设备 DEV-001 终端 T-2001」时,会走这套常规流程:

1. 智能体的系统提示词内置技能检索模块:   <skill_system><available_skills><skill><name>device-registration</name><description>用于设备注册、更新、查询的标准化流程...</description><location>skills/custom/device-registration/SKILL.md</location></skill></available_skills>   </skill_system>
2. 大模型识别到关键词「注册设备」,匹配技能描述   → 大模型自动调用 `read_file` 工具读取 `skills/custom/device-registration/SKILL.md`
3. 技能上下文中间件(SkillContextMiddleware)捕获本次文件读取操作   → 将当前技能持久记录到会话状态 `ThreadState.skill_context`
4. 完整的 SKILL.md 流程规则进入大模型上下文   → 智能体严格按照规范执行(例如调用 `ask_clarification` 工具时附带可选参数)
5. 最后智能体调用 `register_device` 工具完成业务操作

方式 B:斜杠指令激活(显式触发,由用户主动驱动)

用户输入 /device-registration 注册设备 DEV-001 终端 T-2001 时触发:

1. 斜杠技能激活中间件(SkillActivationMiddleware)识别开头的 `/device-registration` 指令
2. 中间件自动读取完整 SKILL.md,并将其作为隐藏上下文注入会话:<slash_skill_activation>     用户已显式激活 `device-registration` 设备注册技能...     <skill_content>...完整SKILL.md文档内容...</skill_content>   </slash_skill_activation>3. 运行日志(Run Journal)记录本次技能激活审计事件
4. 大模型直接读取技能规则并按流程执行
显示激活了skill

五种验证技能是否被加载的方法

方法 1:查看运行轨迹,检索 read_file 工具调用(对应渐进式加载 A)

渐进式加载场景下,智能体会调用 read_file 读取技能的 SKILL.md 文件,可在会话的工具调用记录中查看:

# 筛选会话消息中读取技能文件的工具调用curl http://localhost:8001/api/threads/{thread_id}/messages | \  python3 -c "import sys,json; msgs=json.load(sys.stdin); [print(m.get('tool_calls',[])) for m in msgs if m.get('tool_calls')]"

检索类似格式的工具调用:read_file(path="skills/custom/device-registration/SKILL.md")

方法 2:查看后端日志,检索斜杠指令激活记录(对应显式加载 B)

# 检索网关日志中技能激活相关日志grep "SkillActivationMiddleware" backend/.deer-flow/logs/gateway.log

会输出类似日志:SkillActivationMiddleware: 已激活斜杠指令技能 device-registration 分类=自定义 路径=...

方法 3:查询运行日志(Run Journal)的审计事件(对应显式加载 B)

斜杠指令激活技能时,会生成一条 skill_activation 中间件审计日志,记录内容包含技能名称、分类、文件路径、文档哈希值。

方法 4:读取会话状态 ThreadState.skill_context(对应渐进式加载 A)

渐进加载完成后,技能信息会持久保存在会话状态的 skill_context 字段中;该数据在同一会话的多轮工具循环中持续生效。

方法 5:调用网关接口,查询全部已扫描技能

# 列出系统全部可识别技能(用于确认目标技能已被框架扫描发现)curl http://localhost:8001/api/skills | python3 -m json.tool

返回结果中找到 device-registration,且状态为 enabled: true 即代表技能正常启用。

结合设备注册的业务场景实用对照表

用户输入场景
是否会加载技能
验证方式
用户输入:注册设备 DEV-001 终端 T-2001
不一定
,由大模型自主判断是否匹配技能
查看会话消息中是否存在读取 SKILL.md 的 read_file 调用
用户输入:/device-registration 注册设备...
一定会加载
,强制触发技能流程
检索日志中的 SkillActivationMiddleware 记录,前端页面也会显示斜杠指令标签
用户输入英文:register device DEV-001
不一定
,取决于大模型语义匹配结果
查看是否存在读取 SKILL.md 的 read_file 调用
智能体直接调用 register_device 工具完成注册
未加载技能
,工具可脱离技能独立运行
运行轨迹中无读取技能文件的操作

核心总结

技能(Skill)仅作为流程规范指引,并非工具调用的前置门槛;即便不加载技能,工具依旧可以正常执行业务逻辑。

如果你需要强制保证智能体加载并遵循设备注册的标准化流程,请使用斜杠指令格式:/device-registration

Flash、Standard、Pro、Ultra模式对比

模式参数对照表

运行模式
开启思考 thinking_enabled
开启规划 is_plan_mode
开启子智能体 subagent_enabled
推理强度 reasoning_effort
闪速 Flash
❌ 关闭
❌ 关闭
❌ 关闭
无 none
标准 Standard(默认)
✅ 开启
❌ 关闭
❌ 关闭
低 low
专业 Pro
✅ 开启
✅ 开启
❌ 关闭
中 medium
超强 Ultra
✅ 开启
✅ 开启
✅ 开启
高 high

各模式新增能力详解

闪速 Flash ⚡ — 响应速度最快

  • 无思考环节:大模型直接输出答案,不消耗推理思考 token
  • 无任务规划:不会生成待办任务清单
  • 无子智能体:仅单一主智能体执行
  • 适用场景:简单问答、快速信息查询、日常闲聊、纯计算题(如 2+2 等于几)

标准 Standard 💡 — 均衡通用(系统默认模式)

  • 开启思考:大模型输出回答前会先推理梳理需求
  • 无任务规划:不拆分生成步骤待办清单
  • 无子智能体:全程单一主智能体执行
  • 适用场景:绝大多数日常开发业务 —— 文案撰写、基础代码问题、单次工具调用、基础叉车设备注册

专业 Pro  — 任务规划模式

完整包含标准模式全部能力,额外新增:

  • 激活待办中间件 TodoMiddleware:智能体获得 write_todos 工具,可将复杂任务拆解为可跟踪步骤(待处理 → 进行中 → 已完成)
  • 中等推理强度:更深层次逻辑拆解与校验
  • 适用场景:三步及以上多步骤任务、多维度调研、「分析数据集并输出完整报告」「重构模块并同步更新全部单元测试」

超强 Ultra — 多智能体协同模式

完整包含 Pro 模式全部能力,额外新增:

  • 加载 task 任务分发工具:主智能体可拆分工作、委派给独立子智能体执行
  • 子智能体限流中间件 SubagentLimitMiddleware:限制并发子代理数量(默认最多 3 个并发,可自定义全局最大上限)
  • 高推理强度:四层深度思考、多层级任务拆解
  • 系统提示词自动扩容:新增调度指引,指导主智能体拆分大任务、启动并行子代理协同作业
  • 适用场景:多维度复合型复杂任务 ——「调研三家竞品并生成对比表格」「全代码库分析、编写单元测试、生成项目文档」,适合可并行拆分的大型工作量任务

底层运行原理

前端在 API 请求的上下文参数中传递上述开关配置:

{"context":{"thinking_enabled":true,"is_plan_mode":true,"subagent_enabled":true,"reasoning_effort":"high"}}

后端 build_middlewares() 函数(文件路径见下方)会根据参数条件动态加载中间件与工具:

deer-flow/backend/packages/harness/deerflow/agents/lead_agent/agent.py#L238-L418

  1. 当 is_plan_mode=true 时,加载 TodoMiddleware(代码行 330-332)
  2. 当 subagent_enabled=true 时,加载 SubagentLimitMiddleware(代码行 380-384)
  3. 当开启子智能体时,通过 get_available_tools(subagent_enabled=True) 加载任务分发 task 工具(代码行 621)

叉车设备注册业务实操推荐表

用户任务需求
推荐运行模式
选择理由
注册设备 DEV-001 终端 T-2001
Standard 标准
仅单次工具调用,逻辑简单无需规划、子代理
查询全部叉车设备,整理生成统计报表
Pro 专业
多步骤流程:数据库查询 → 数据格式化 → 生成文档,需要待办规划拆分步骤
分析全量设备数据、筛选异常设备、输出分析报告、同步更新数据库记录
Ultra 超强
可拆分为多个并行子任务,依靠子智能体分工协同处理,提升效率