返回
Kevin Riedl

13 分钟 阅读 · 2026年9月28日
最近审核

下一篇
图片在你的设备上生成,不连接 Instagram。文章链接会复制到剪贴板,供链接贴纸使用。

DeerFlow 2.0:Docker 部署、沙箱与记忆机制

DeerFlow 2.0 是智能体执行框架,而不是另一个模型。真正值得问的是:它能否减少自建集成代码,协调工具、文件和专业子智能体,同时保留可验证的运行边界?字节跳动官方仓库将版本 2 描述为一次从头重写,而非此前深度研究系统的小幅更新。

审阅范围:本文基于 公开的 2.x main 分支文档和实现编写。这不是发布当日新闻,也不是实际安装测试或独立复现的性能基准。后续修订与早期 2.0 代码可能不同,执行以下步骤前请记录所用 commit。

DeerFlow 实际负责哪些编排工作?

DeerFlow 基于 LangGraph 和 LangChain,将智能体运行时、工具执行、工作文件与可复用技能整合在一起。架构文档介绍了智能体中间件以及基于 SKILL.md 文件的扩展方式。它并不替代 LangGraph,而是在这些基础能力之上提供更完整的执行环境。

我们的判断是:当任务需要跨多个步骤研究资料、检查文件、执行代码并产出可验证交付物时,DeerFlow 值得评估。如果固定脚本或普通队列工作流已经能解决问题,增加这套系统的收益就未必明显。关于框架类别与选型,可参考智能体执行框架工程指南。本文则聚焦 DeerFlow 本身的配置与运行。

执行框架可以减少协调代码,但团队仍需定义成功标准、需要审批的动作、允许发送给模型的数据,以及故障处理责任人。合适的起点是一个有明确边界的工作流,而不是给通用助手接入公司的全部系统。

DeerFlow 2.0 Docker 部署:一行命令遗漏了什么?

克隆仓库后直接启动,并不等于完成首次配置。以下命令需要 Git、Make、Python 3、合适的 shell、正在运行的 Docker 引擎及 Docker Compose。本次检查的上游说明要求 Compose v2.24 或更高版本。应使用当前 checkout 自带的配置示例,不要混用旧版本文章中的片段。

1. 克隆上游仓库并生成配置

set -eu
git clone https://github.com/bytedance/deer-flow.git
cd deer-flow
git rev-parse HEAD
docker compose version
make config

将输出的 commit 哈希保存在评估记录中。配置初始化脚本会根据示例创建 config.yaml、.env 和 frontend/.env。如果项目根目录已经存在配置,它会中止。这不意味着应该删除可用配置;应先备份,再检查仓库提供的升级路径。

2. 配置真实可用的模型,并选择任务沙箱

启动前编辑生成的文件。至少配置一个受支持的模型,填入真实提供方凭据,并检查前端环境变量要求。不要将密钥提交到仓库或放入共享诊断输出。看起来完整的安装示例,只要还保留模型名称或密钥占位符,就不能当作可运行配置。

对于使用 AIO 容器的本地评估,将 config.yaml 中已有的 sandbox: 块替换为以下最小配置,不要追加第二个同名 YAML 键:

sandbox:
  use: deerflow.community.aio_sandbox:AioSandboxProvider

沙箱配置指南区分了本地提供方与 AIO 容器执行。DeerFlow 应用运行在 Docker 中,并不自动代表任务使用独立沙箱。这个示例面向本地 AIO 容器,不适用于已经配置远程供应服务的环境。修改之前应检查现有提供方设置。

3. 初始化镜像并启动开发环境

make docker-init
make docker-start

打开 http://localhost:2026。本次检查的 Makefile 将 make docker-start 归类为 Docker 开发环境启动命令,对应停止命令是 make docker-stop。独立的生产路径为 make up,配套使用 make prod-logs 和 make down。名称中带有“生产”并不意味着通过了安全认证。

查看开发环境日志:

make docker-logs

接入真实工作流前,先执行合成冒烟测试:上传一个只含数值 2 和 3 的小型 CSV,要求智能体通过代码工具计算总和,并生成内容包含 5 的结果文件。独立检查文件和工具调用记录。聊天回答“已完成”,既不能证明代码确实执行,也不能证明交付物真实存在且可访问。

先排查启动问题,不要急着扩大权限

上游安装指南要求 config.yaml 位于仓库根目录,并将运行数据默认放在 .deer-flow,也可通过 DEER_FLOW_HOME 指定其他位置。不要把所有失败都归因于模型,先检查路径与实际挂载的配置。下表是建议的排查顺序,并不表示每个安装环境都会遇到这些问题。

DeerFlow Docker 评估:按症状进行首次检查
症状首先检查不要采用的捷径
配置缺失或被拒绝根目录、实际挂载文件、YAML 语法,以及与当前 checkout 示例的兼容性。删除有效配置,或重复粘贴顶层键。
界面能打开,模型调用失败模型标识、端点、凭据、提供方访问权限和网关日志。将界面可用当成模型配置正确的证明。
Shell 执行失败实际选择的沙箱提供方、镜像是否可用,以及提供方与容器的连接。只为消除报错就启用不受限制的本地 shell。
首次代码任务似乎卡住镜像拉取进度、容器启动情况及工具超时证据。不看日志就重复提交同一项高成本任务。
重启后结果消失状态后端、持久化挂载、身份信息和交付物路径。假设所有内存中的运行组件都会持久保存。

DeerFlow 子智能体之间真的相互隔离吗?

对话上下文独立,不代表容器独立。本次检查的子智能体执行器可以将主智能体的沙箱传入委派执行。即使对话历史分开,只要多个智能体使用同一沙箱,就应按共享文件系统参与者来设计。新的模型上下文不是租户之间的安全边界。

当前 AIO 提供方实现通过用户与线程身份映射沙箱归属。配置 provisioner_url 时选择远程后端,否则使用本地容器后端。这两种机制都不保证每个专业子智能体拥有一个独立容器。

第一个工作流应给每个并行分支分配不同的输出文件名,在支持的情况下将输入文件设为只读,并让一个汇总步骤负责最终报告。测试一个分支能否覆盖另一个分支的文件。如果服务不同客户,应验证服务器推导的身份、授权与存储边界,而不是依赖提示词中的客户名称。

本地提供方是另一种选择:任务在应用自身的环境内执行,不会额外创建任务容器。如果本地 shell 已被禁用,不要轻易解除限制。OpenSandbox 评测单独讨论沙箱基础设施;沙箱提供方和完整智能体执行框架解决的是不同层面的问题。

DeerFlow 的记忆如何工作,为什么仍然消耗 token?

需要区分三个问题:当前对话、跨对话复用的记忆,以及恢复任务所需的运行状态。共享记忆配置区分启用记忆、向提示词注入记忆和选择后端。因此,“已开启记忆”不能证明新事实正在被提取,也不能证明所有未完成任务都能在重启后恢复。

在本次检查的配置示例中,DeerMem 的 max_injection_tokens 位于 memory.backend_config 下,示例值为 2000。提取模型需要单独配置;省略这些模型设置时,自动提取不可用,但不依赖 LLM 的记忆操作仍可能正常工作。应核对当前代码版本实际加载的配置。

对话压缩是另一个机制。摘要中间件负责这一层,但它不等于持久的业务记忆。摘要可能丢失细节,加入模型上下文的内容仍会占用容量。不要把“限制注入量”解释为“无限记忆且没有 token 成本”。

我们建议将记忆测试拆为三步。先保存一个无敏感信息的偏好,在同一身份下新建对话并验证能否召回;然后更正偏好,确认旧值不再持续覆盖新值;最后使用另一个测试身份查询,确认无法获取前一个用户的偏好。除了最终回答,还应检查日志与存储。

记录实际提示词及提供方总用量。如果记忆增加了成本,却没有改善验收通过的结果,就减少注入内容或收窄工作流。如果现有智能体系统只是缺少记忆层,应先参考 OpenViking 记忆评测评估这个更具体的需求,而不是默认替换整套系统。

自定义 DeerFlow 技能:描述流程,不等于授予或限制权限

第一个有用的技能应该定义可重复的输出约定,而不是要求智能体无限自主。下面使用前文介绍的文件格式,给出一个带来源引用的供应商简报 SKILL.md 示例。请按照当前 checkout 的技能发现与审批规则接入并测试;它不是经过实际运行验证的插件包。

---
name: vendor-evidence-brief
description: Prepare a source-linked vendor brief for human review.
---

Use only the approved input documents and permitted sources.
Record a source URL or input filename for each factual claim.
Mark missing evidence as unknown; never invent a reference.
Write research branches to separate output files.
Produce a draft, not an approval or a published report.
Do not send messages, change accounts, or execute payments.

这一区别很重要:“不要发送消息”是一条指令,不是技术层面的消息权限禁令。应通过本次运行实际可用的工具和凭据执行限制。第三方技能文件、附带脚本与依赖,应作为需要审核的代码或指令处理,而不是默认可信的扩展。

可复用流程放在技能中,具体任务事实放在任务输入中。这样更容易审阅、比较版本,并使用正常与恶意样例进行测试。不要把真实客户密钥或其他敏感信息写进可重复使用的指令。

有边界的工作流:从供应商研究到可追溯草稿

以下是建议的试点设计,不是已完成的 DeerFlow 客户项目。从三份经过批准的供应商文档和一个固定问题开始:哪些方案满足指定技术要求?将交付范围限制为比较草稿和证据文件,不接入采购、付款或外发邮件动作。

第一个 DeerFlow 工作流的建议验收约定
阶段预期交付物验收检查
准备输入已批准的文件和明确的比较标准。输入不含不必要的敏感信息,范围与允许来源已记录。
并行研究每家供应商一个独立证据文件。每条事实引用输入文件或允许的来源 URL;未知内容保留为未知。
汇总带有限制说明的比较草稿。陈述能够追溯到证据文件;缺乏证据不能被写成满足或不满足条件。
独立验证结构化验证结果。必需文件存在,机器可读输出可解析,抽查陈述与来源一致。
人工发布审批获批或被拒绝的草稿。由明确指定的审核人决定内容是否可以分享或用于行动。

验收样例中应加入刻意冲突的来源、缺失文档和执行中断。要求系统显露不确定性,而不是编造一个看起来完整的答案。如果简单的单智能体基线表现更好,就保留它。更多子智能体是一种实现选择,不是业务成果指标。

DeerFlow 生产检查清单:必须拿出哪些证据?

不要将早期“没有身份认证”的描述当成当前事实。本次检查的身份认证设计包含首次初始化和已认证用户处理。在其他人能访问服务前,通过本地 /setup 流程完成首个管理员设置,并使用不同账户测试授权边界。

本次检查的生产 Compose 文件默认将公开入口绑定到 127.0.0.1,并要求设置 BETTER_AUTH_SECRET。评估期间应保持环回访问。公开暴露服务必须经过明确的部署审查,而不是随手修改 BIND_HOST。

以下是建议的上线门槛,并不表示 DeerFlow 已经提供或默认启用了每一项控制。

接入生产数据或动作前应收集的证据
控制项需要验证的证据
身份与权限用户不能获取其他用户的线程、文件或记忆;特权操作必须由明确授权的身份执行。
运行时隔离审查挂载、外连网络、密钥和资源限制。如果 AIO 使用宿主机 Docker socket,应单独评估这条特权控制路径。
持久化与恢复执行期间重启,重新连接并检查状态。验证备份恢复,确认重试不会重复触发外部动作。
成本与取消通过代表性故障验证支出上限、任务截止时间、取消行为和并行工作限制。
技能与工具信任审查可执行扩展、MCP 启动器和技能变更。不可信内容不得取得管理工具的操作权。
升级责任固定应用与镜像版本,保留脱敏调用记录,重复执行验收测试,并由明确的运维责任人验证回滚。

最终发布评审可使用软件上线前 QA 检查清单作为通用交付检查,再补充上述智能体专属案例。一次正常演示通过,不足以批准账户修改、付款或其他不可逆操作。

DeerFlow 值得采用吗?

建议衡量每项验收通过任务成本 =(模型总成本 + 工具总成本 + 运行时总成本 + 人工审核成本)/ 验收通过任务数。统一成本核算单位,将失败尝试计入相应总成本,包含记忆提取和委派调用,并用相同任务与现有方案比较。同时记录完成时间、人工纠错次数、恢复成功率和被阻止的不安全动作。如果没有任何任务通过验收,应明确报告失败,而不是计算误导性的平均值。

当集成执行环境可能减少真实的编排工作时,适合开展 DeerFlow 试点。如果更小的框架或确定性工作流能以更低运维复杂度满足验收约定,就应保留更简单的方案。LangChain Deep Agents 评测有助于理解这种更聚焦的框架选择。

Wavect 的 AI 开发服务可协助定义有边界的工作流、权限与验收测试。TwinSoft AI 案例提供的是相关交付背景,不是 DeerFlow 已部署的证据。如需判断它是否适合现有系统,可与 Wavect 讨论工作流及其失败场景。

DeerFlow 2.0 常见问题

DeerFlow 2.0 是什么?
DeerFlow 2.0 是字节跳动基于 LangGraph 和 LangChain 构建的开源智能体执行框架,整合任务执行、子智能体、工具、沙箱接入、记忆和技能。它不是新的基础模型,也不保证工作流必然成功。
只执行 git clone 和 make docker-start 就够了吗?
这不是完整的首次安装流程。应先准备配置和环境文件,配置可用模型,选择沙箱提供方并初始化沙箱镜像,然后启动开发环境。
每个 DeerFlow 子智能体都有独立的 Docker 容器吗?
不能这样假设。对话隔离和沙箱隔离是不同概念。子智能体可能使用主智能体的沙箱并共享文件,必须验证实际提供方与部署方式的隔离边界。
为什么 DeerFlow 的记忆没有学到新信息?
同时检查共享记忆配置与所选后端。在本次检查的 DeerMem 示例中,自动提取需要单独配置提取模型。还应检查凭据、身份作用域、存储和日志。注入已有记忆与提取新事实是两个不同操作。
DeerFlow 记忆能消除 token 成本吗?
不能。注入的记忆、检索内容、摘要和提取调用都可能消耗 token。应衡量包含失败尝试与人工审核的每项验收通过任务总成本,而不是仅看某个提示词的长度。
DeerFlow 可以用于生产环境吗?
应先用固定代码版本验证实际工作负载。仓库提供单独的 Docker 生产启动命令和身份认证,但仍需验证权限、持久化、隔离、恢复、支出控制及运维责任。

构建产品,而不只是 backlog

如果这篇文章对应的是一个真实产品决策,Wavect 可以用高级创始人级判断帮你界定范围、构建、加固或领导软件工作。

可选服务路径:

只收重要内容

关注与你相关的内容

每当我们发布新文章,你会收到一封简短邮件。你可以关注整个博客,也可以只选感兴趣的主题。

你希望接收哪些内容?
选择主题

免费、双重确认、不使用跟踪像素。

返回
Kevin Riedl

13 分钟 阅读 · 2026年9月28日
最近审核

下一篇

获取下一篇关于AI 与智能体的一线笔记

有新文章时发送一封简短邮件,不使用跟踪像素,也不发送填充内容。

免费、双重确认、不使用跟踪像素。