本文基于DeerFlow 源码实战得到:设备注册 Skill 触发机制实战,并对四大运行模式进行对比
以注册设备业务举例什么时候触发skill
技能(Skill)与工具(Tool):两套相互独立的系统
update_device 更新设备工具 list_devices 查询设备工具 | (作用:提供标准化业务流程指引) | |
关键结论:即便未加载设备注册技能,智能体依旧可以直接调用 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. 大模型直接读取技能规则并按流程执行

五种验证技能是否被加载的方法
方法 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 即代表技能正常启用。
结合设备注册的业务场景实用对照表
| 不一定 | ||
| 一定会加载 | ||
| 不一定 | ||
| 未加载技能 |
核心总结
技能(Skill)仅作为流程规范指引,并非工具调用的前置门槛;即便不加载技能,工具依旧可以正常执行业务逻辑。
如果你需要强制保证智能体加载并遵循设备注册的标准化流程,请使用斜杠指令格式:/device-registration。
Flash、Standard、Pro、Ultra模式对比
模式参数对照表
thinking_enabled | is_plan_mode | subagent_enabled | reasoning_effort | |
|---|---|---|---|---|
| 闪速 Flash | ||||
| 标准 Standard(默认) | ||||
| 专业 Pro | ||||
| 超强 Ultra |

各模式新增能力详解
闪速 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
当 is_plan_mode=true时,加载 TodoMiddleware(代码行 330-332)当 subagent_enabled=true时,加载 SubagentLimitMiddleware(代码行 380-384)当开启子智能体时,通过 get_available_tools(subagent_enabled=True)加载任务分发task工具(代码行 621)
叉车设备注册业务实操推荐表
| Standard 标准 | ||
| Pro 专业 | ||
| Ultra 超强 |
夜雨聆风