DeerFlow
DeerFlow 中间件架构:顺序、上下文与执行策略
沿主智能体构建器追踪真实装配过程,理解为什么中间件顺序和能力分支比固定组件数量更重要。
你将学会
- 沿构建器阅读,不要背固定数量
- 工具可见性不是执行授权
- 本地沙箱是映射层,不是宿主机隔离边界
开始前需要
- 基础 Python、HTTP 和容器知识
- 拥有明确验收条件的自有任务
解释本章实现边界,并应用检查清单或隔离辅助函数练习。
先看结论
- 检查有效顺序和能力分支。
- 工具可见性与执行策略分开。
- 本地路径映射不是宿主进程隔离。
沿构建器阅读,不要背固定数量
build_middlewares 先创建主运行栈,再添加动态上下文、显式技能激活、技能工具策略和持久上下文。摘要、计划、令牌追踪、视觉及延迟 MCP 处理依配置或模型能力决定。较旧的执行流程文档给出固定数量,但无法概括当前构建器的所有分支。
实现注释说明,动态上下文放在用户侧提醒中,以保持系统提示稳定,便于前缀复用。持久上下文则在摘要之前注册,在压缩前捕获已经完成的委派和已加载技能。关键工程问题是信息应在哪个边界保留,而不是中间件类越多越好。
工具可见性不是执行授权
源码区分可发现的技能元数据、显式斜杠激活和运行时允许工具策略。延迟 MCP 模式可以在工具搜索提升之前隐藏结构定义;另一层策略还会过滤活动技能的可见工具、搜索结果和实际执行。因此,对模型隐藏工具结构只是控制链条的一部分。
顺序断言要求 MCP 路由位于延迟过滤器之前,而提升审计包裹内部策略转换。构建器随后合并系统消息并安装运行防护,自定义及扩展中间件还可改变最终组成。排查部署问题时应检查有效栈,而不能只从公开架构图推断执行顺序。
本地沙箱是映射层,不是宿主机隔离边界
LocalSandboxProvider 为用户和任务创建工作区、上传及输出路径映射,通过受锁保护的有界 LRU 缓存保存沙箱对象。对象被淘汰后,下次获取会重建,并丢失一个反向路径解析提示;代码描述的是内存对象淘汰,不是删除持久化任务文件。
提供方明确把受管技能视图称为逻辑边界。宿主机 Shell 可以直接访问规范宿主路径,因此开启 host bash 或读取配置失败时,supports_agent_skill_isolation 返回 false。租户标识、路径映射和缓存对象都不能被写成等价于操作系统隔离。
实施步骤
- 1
追踪技能从发现、激活到实际调用的链路。
- 2
找到摘要之前的上下文捕获位置。
- 3
写清所选沙箱真正能够执行的隔离边界。
可复制示例
{"conceptualFlow":["发现技能","激活技能","应用工具策略","捕获持久上下文","生成摘要","检查终止"],"fixedMiddlewareCount":null,"localPathMappingIsOsIsolation":false}常见问题
DeerFlow 到底有几个中间件?
有效数量随配置、模型能力和扩展而变,应检查固定版本构建器,不照搬旧图中的数量。
本地沙箱缓存淘汰会删除文件吗?
所查实现描述的是内存对象淘汰与后续重建,而不是删除持久化任务数据。
资料来源
- README.md来源核查 2026-09-08
- LICENSE来源核查 2026-09-08
- backend/README.md来源核查 2026-09-08
- backend/pyproject.toml来源核查 2026-09-08
- backend/docs/middleware-execution-flow.md来源核查 2026-09-08
- backend/packages/harness/deerflow/agents/lead_agent/agent.py来源核查 2026-09-08
- backend/packages/harness/deerflow/agents/middlewares/loop_detection_middleware.py来源核查 2026-09-08
- backend/packages/harness/deerflow/agents/middlewares/_bounded_dict.py来源核查 2026-09-08
- backend/packages/harness/deerflow/config/loop_detection_config.py来源核查 2026-09-08
- backend/packages/harness/deerflow/sandbox/local/local_sandbox_provider.py来源核查 2026-09-08
- backend/app/gateway/auth_middleware.py来源核查 2026-09-08
- backend/app/gateway/csrf_middleware.py来源核查 2026-09-08
- docker/docker-compose.yaml来源核查 2026-09-08