build(deps): bump next from 16.2.6 to 16.2.11 in /frontend (#4463)
Bumps next from 16.2.6 to 16.2.11.
updated-dependencies:
- dependency-name: next dependency-version: 16.2.11 dependency-type: direct:production …
Signed-off-by: dependabot[bot] support@github.com Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
🦌 DeerFlow - 2.0
English | 中文 | 日本語 | Français | Русский
DeerFlow(Deep Exploration and Efficient Research Flow)是一个开源的 super agent harness。它把 sub-agents、memory 和 sandbox 组织在一起,再配合可扩展的 skills,让 agent 可以完成几乎任何事情。
https://github.com/user-attachments/assets/a8bcadc4-e040-4cf2-8fda-dd768b999c18
官网
想了解更多,或者直接看真实演示,可以访问官网。
字节跳动火山引擎方舟 Coding Plan
InfoQuest
DeerFlow 新近集成了 BytePlus 自研的智能搜索与抓取工具集——InfoQuest(支持免费在线体验)
目录
一句话交给 Coding Agent 安装
如果你在用 Claude Code、Codex、Cursor、Windsurf 或其他 coding agent,可以直接把下面这句话发给它:
这条提示词是给 coding agent 用的。它会在需要时先 clone 仓库,优先选择 Docker,完成初始化,并在结束时告诉你下一条启动命令,以及还缺哪些配置需要你补充。
快速开始
配置
克隆 DeerFlow 仓库
运行安装向导(推荐)
在项目根目录(
deer-flow/)执行:这会启动一个交互式向导,引导你选择 LLM provider、可选的 web 搜索工具,以及 sandbox 模式、bash 权限、文件写入等执行/安全偏好。它会生成一份最小化的
config.yaml,并把 API key 写入.env,大约 2 分钟完成。随时可以运行
make doctor检查配置和系统环境,并获得可执行的修复建议。 如果你要提交本地安装、配置或运行问题,可以执行make support-bundle。 命令会直接打印 reporter 下一步建议,并在.deer-flow/support-bundles/下生成*-issue-summary.md、面向 AI 辅助提 issue 的*-issue-draft.md,以及可选证据 zip。提交 GitHub issue 时,先把*-issue-summary.md粘贴到 issue 正文;如果由 AI 助手代填 issue,就从*-issue-draft.md开始,并先替换所有 REQUIRED 占位符, 不要编造未知事实。只有维护者要求证据包,或摘要不足以诊断时,再附上 zip。维护者 或 AI 辅助 triage 可以优先读取triage.json;bundle 只包含脱敏后的诊断信息和 文件 manifest,不包含.env、原始对话消息或用户文件内容;提交前仍建议自己快速 检查一遍。手动模型配置示例
OpenRouter 以及类似的 OpenAI 兼容网关,建议通过
langchain_openai:ChatOpenAI配合base_url来配置。如果你更想用 provider 自己的环境变量名,也可以直接把api_key指向对应变量,例如api_key: $OPENROUTER_API_KEY。如果要让 OpenAI 模型走
/v1/responses,继续使用langchain_openai:ChatOpenAI,并设置use_responses_api: true和output_version: responses/v1。对于 vLLM 0.19.0,请使用
deerflow.models.vllm_provider:VllmChatModel。对于 Qwen 风格的推理模型,DeerFlow 通过extra_body.chat_template_kwargs.enable_thinking开关推理,并在多轮 tool-call 对话中保留 vLLM 非标准的reasoning字段。旧版thinking配置会自动规范化以保持向后兼容。推理模型可能还需要在启动 vLLM 服务时加上--reasoning-parser ...参数。如果你的本地 vLLM 部署接受任意非空 API key,可以把VLLM_API_KEY设为一个占位值。CLI-backed provider 配置示例:
~/.codex/auth.jsonCLAUDE_CODE_OAUTH_TOKEN、ANTHROPIC_AUTH_TOKEN、CLAUDE_CODE_CREDENTIALS_PATH,或~/.claude/.credentials.jsonacp_agents.codex,请把它指向一个 Codex ACP 适配器,例如npx -y @zed-industries/codex-acpAPI key 也可以手动写入
.env文件(推荐)或在 shell 中导出:运行应用
部署建议与资源规划
可以先按下面的资源档位来选择 DeerFlow 的运行方式:
make dev2 核 / 4 GB通常跑不稳。make docker-startmake up方式一:Docker(推荐)
开发模式(支持热更新,挂载源码):
如果
config.yaml使用的是 provisioner 模式(sandbox.use: deerflow.community.aio_sandbox:AioSandboxProvider且配置了provisioner_url),make docker-start才会启动provisioner。生产模式(本地构建镜像,并挂载运行期配置与数据):
访问地址:http://localhost:2026
更完整的 Docker 开发说明见 CONTRIBUTING.md。
方式二:本地开发
如果你更希望直接在本地启动各个服务:
前提:先完成上面的“配置”步骤(
make setup)。make dev需要有效配置文件,默认读取项目根目录下的config.yaml。可以用DEER_FLOW_PROJECT_ROOT显式指定项目根目录,也可以用DEER_FLOW_CONFIG_PATH指向某个具体配置文件。运行期状态默认写到项目根目录下的.deer-flow,可用DEER_FLOW_HOME覆盖;skills 默认读取项目根目录下的skills/,可用DEER_FLOW_SKILLS_PATH覆盖。启动前先运行make doctor校验配置。 在 Windows 上,请使用 Git Bash 运行本地开发流程。基于 bash 的服务脚本不支持直接在原生cmd.exe或 PowerShell 中执行,且 WSL 也不保证可用,因为部分脚本依赖 Git for Windows 的cygpath等工具。检查依赖环境:
安装依赖:
(可选)预拉取 sandbox 镜像:
启动服务:
访问地址:http://localhost:2026
进阶配置
Sandbox 模式
DeerFlow 支持多种 sandbox 执行方式:
Docker 开发时,服务启动行为会遵循
config.yaml里的 sandbox 模式。在 Local / Docker 模式下,不会启动provisioner。如果要配置你自己的模式,参见 Sandbox 配置指南。
MCP Server
DeerFlow 支持可配置的 MCP Server 和 skills,用来扩展能力。 对于 HTTP/SSE MCP Server,还支持 OAuth token 流程(
client_credentials、refresh_token)。 详细说明见 MCP Server 指南。IM 渠道
DeerFlow 支持从即时通讯应用接收任务。只要配置完成,对应渠道会自动启动,而且都不需要公网 IP。
DeerFlow 还可以在 workspace UI 里暴露用户自有的 IM 渠道连接。启用
channel_connections后,已登录用户可以从侧边栏 / Settings > Channels 绑定 Telegram、Slack、Discord、Feishu/Lark、DingTalk、WeChat 或 WeCom。它复用现有的channels.*出站传输,因此不需要公网 IP 或 provider 回调地址。入站 IM 消息会以所连接的 DeerFlow 用户身份运行。设置和安全注意事项参见 IM Channel Connections。config.yaml中的配置示例:说明:
assistant_id: lead_agent会直接调用默认的 LangGraph assistant。assistant_id填的是自定义 agent 名,DeerFlow 仍然会走lead_agent,同时把该值注入为agent_name,这样 IM 渠道也会生效对应 agent 的 SOUL 和配置。在
.env里设置对应的 API key:Telegram 配置
/newbot,复制生成的 HTTP API token。.env中设置TELEGRAM_BOT_TOKEN,并在config.yaml里启用该渠道。Slack 配置
app_mentions:read、chat:write、im:history、im:read、im:write、files:write。connections:write权限的 App-Level Token(xapp-...)。app_mention、message.im。.env中设置SLACK_BOT_TOKEN和SLACK_APP_TOKEN,并在config.yaml中启用该渠道。Feishu / Lark 配置
im:message、im:message.p2p_msg:readonly、im:resource。im.message.receive_v1,连接方式选择 长连接。.env中设置FEISHU_APP_ID和FEISHU_APP_SECRET,并在config.yaml中启用该渠道。WeChat 配置
config.yaml中启用wechat渠道。.env中设置WECHAT_BOT_TOKEN,或者把qrcode_login_enabled设为true以便首次扫码登录引导。bot_token缺失且启用了扫码引导时,留意后端日志里 iLink 返回的二维码内容,并完成绑定流程。state_dir,便于后续重启复用。state_dir放在持久化卷上,这样get_updates_buf游标和已保存的登录状态才能在重启后保留。企业微信智能机器人配置
bot_id和bot_secret。config.yaml中启用channels.wecom,并填入bot_id/bot_secret。.env中设置WECOM_BOT_ID和WECOM_BOT_SECRET。wecom-aibot-python-sdk,渠道会通过 WebSocket 长连接接收消息,无需公网回调地址。钉钉配置
Client ID和Client Secret,在.env中设置DINGTALK_CLIENT_ID和DINGTALK_CLIENT_SECRET,并在config.yaml中启用该渠道。config.yaml中将card_template_id设为该模板 ID。同时需要申请Card.Streaming.Write和Card.Instance.Write权限。命令
渠道连接完成后,你可以直接在聊天窗口里和 DeerFlow 交互:
/new/status/models/memory/helpLangSmith 链路追踪
DeerFlow 内置了 LangSmith 集成,用于可观测性。启用后,所有 LLM 调用、agent 运行和工具执行都会被追踪,并在 LangSmith 仪表盘中展示。
在
.env文件中添加以下配置:Langfuse 链路追踪
DeerFlow 同样支持 Langfuse 可观测性,适用于兼容 LangChain 的运行。
在
.env文件中添加以下配置:如果你使用自托管的 Langfuse 实例,请将
LANGFUSE_BASE_URL设置为你的部署地址。链路关联字段。 每次 agent 运行都会标注 Langfuse 的保留追踪属性,这样 Sessions 和 Users 页面就能自动填充数据:
session_id= LangGraph 的thread_id——将同一会话的所有 trace 归为一组user_id= 来自get_effective_user_id()的有效用户(在无鉴权模式下回退为default)trace_name= assistant id(默认为lead-agent)tags=[env:<DEER_FLOW_ENV>, model:<model_name>](未设置时省略)metadata.deerflow_trace_id= DeerFlow 的请求关联 id,当启用请求链路关联(request trace correlation)时与X-Trace-Id一致这些字段会在图(graph)调用的根部注入到
RunnableConfig.metadata,同时覆盖 gateway 路径(runtime/runs/worker.py::run_agent)和内嵌路径(client.py::DeerFlowClient.stream),因此任何兼容 LangChain 的 callback 都能读取到它们。设置DEER_FLOW_ENV(或ENVIRONMENT)可按部署环境为 trace 打标签。同时使用两种追踪服务
如果同时启用 LangSmith 和 Langfuse,DeerFlow 会挂载两个追踪 callback,并将相同的模型活动上报到两个系统。
如果某个 provider 被显式启用但缺少必要的凭据,或其 callback 初始化失败,DeerFlow 会在创建模型、初始化追踪时快速失败(fail fast),错误信息会指明导致失败的 provider。
Docker 部署时,追踪默认关闭。在
.env中设置LANGSMITH_TRACING=true和LANGSMITH_API_KEY即可启用。从 Deep Research 到 Super Agent Harness
DeerFlow 最初是一个 Deep Research 框架,后来社区把它一路推到了更远的地方。上线之后,开发者拿它去做的事情早就不止研究:搭数据流水线、生成演示文稿、快速起 dashboard、自动化内容流程,很多方向一开始连我们自己都没想到。
这让我们意识到一件事:DeerFlow 不只是一个研究工具。它更像一个 harness,一个真正让 agents 把事情做完的运行时基础设施。
所以我们把它从头重做了一遍。
DeerFlow 2.0 不再是一个需要你自己拼装的 framework。它是一个开箱即用、同时又足够可扩展的 super agent harness。基于 LangGraph 和 LangChain 构建,默认就带上了 agent 真正会用到的关键能力:文件系统、memory、skills、sandbox 执行环境,以及为复杂多步骤任务做规划、拉起 sub-agents 的能力。
你可以直接拿来用,也可以拆开重组,改成你自己的样子。
核心特性
Skills 与 Tools
Skills 是 DeerFlow 能做“几乎任何事”的关键。
标准的 Agent Skill 是一种结构化能力模块,通常就是一个 Markdown 文件,里面定义了工作流、最佳实践,以及相关的参考资源。DeerFlow 自带一批内置 skills,覆盖研究、报告生成、演示文稿制作、网页生成、图像和视频生成等场景。真正有意思的地方在于它的扩展性:你可以加自己的 skills,替换内置 skills,或者把多个 skills 组合成复合工作流。
Skills 采用按需渐进加载,不会一次性把所有内容都塞进上下文。只有任务确实需要时才加载,这样能把上下文窗口控制得更干净,也更适合对 token 比较敏感的模型。
通过 Gateway 安装
.skill压缩包时,DeerFlow 会接受标准的可选 frontmatter 元数据,比如version、author、compatibility,不会把本来合法的外部 skill 拒之门外。Tools 也是同样的思路。DeerFlow 自带一组核心工具:网页搜索、网页抓取、网页渲染截图、文件操作、bash 执行;同时也支持通过 MCP Server 和 Python 函数扩展自定义工具。你可以替换任何一项,也可以继续往里加。
Gateway 生成后续建议时,现在会先把普通字符串输出和 block/list 风格的富文本内容统一归一化,再去解析 JSON 数组响应,因此不同 provider 的内容包装方式不会再悄悄把建议吞掉。
Web UI 支持从已完成的 assistant 回复分叉出一个新的主对话。新 thread 会保留该轮回复的 checkpoint 以及用户消息之前的重放 checkpoint,因此分叉后可以立即重新生成该回复。对于缺少 checkpoint 父链接的旧历史或导入历史,Gateway 会进行有界的时间顺序查找;如果不存在更早的重放 checkpoint,分叉仍会按旧版单-checkpoint 形态成功创建,但无法重新生成继承的回复。已有的单-checkpoint 分叉会保持不变,不会通过不安全的 checkpoint 复制尝试修复。只有从最新回合分叉时才会尽力复制当前 thread 的工作区文件;从历史回合分叉不会带入后续时间线创建的文件。
Claude Code 集成
借助
claude-to-deerflowskill,你可以直接在 Claude Code 里和正在运行的 DeerFlow 实例交互。不用离开终端,就能下发研究任务、查看状态、管理 threads。安装这个 skill:
然后确认 DeerFlow 已经启动(默认地址是
http://localhost:2026),在 Claude Code 里使用/claude-to-deerflow命令即可。你可以做的事情包括:
环境变量(可选,用于自定义端点):
完整 API 说明见
skills/public/claude-to-deerflow/SKILL.md。Web UI 输入框支持浏览器侧语音听写。浏览器提供 Web Speech API 时,麦克风按钮会把语音转写为本地草稿;DeerFlow 只接收转写后的文本,音频处理交由浏览器或操作系统语音识别服务按其环境策略完成。用户可以在发送前继续检查和编辑文本。
Session Goals
用
/goal <完成条件>为当前 thread 绑定一个激活态的完成条件。这个 goal 是 thread 维度的状态,而不是技能激活,所以它会跨轮次持续生效,直到 DeerFlow 判定它已被满足、或者你手动清除它。支持的命令:
每次 Gateway 驱动的 run 结束后,DeerFlow 会用一个 non-thinking 的评估模型,把可见的对话内容拿去和激活的 goal 比对。评估模型必须返回一个带类型的 blocker(
missing_evidence、needs_user_input、run_failed、external_wait或goal_not_met_yet),并附上可见证据。只有在最近一轮 assistant 回复已被持久化 checkpoint、blocker 是goal_not_met_yet、评估期间 thread 没有变化、且无进展熔断器没有触发时,DeerFlow 才会注入一次 hidden continuation。安全上限默认是 8 次 hidden continuation;连续两次相同的无进展评估后就会停止。/goal clear以及任何用户手动输入的新内容,优先级都高于排队中的 continuation。当 goal 被满足时,DeerFlow 会自动清除它,并发布更新后的 thread 状态。Web UI 会在输入框上方展示当前激活的 goal。同样的命令在 TUI 和受支持的 IM 渠道里也可用。在 Web UI 和受支持的 IM 渠道里,设置
/goal <完成条件>还会以该条件作为任务启动一次 run;状态查询和清除命令则只管理 goal 状态本身。手动上下文压缩
在 Web UI 输入框中使用
/compact,可以把当前 thread 的早期上下文压缩成摘要。完整聊天记录仍会保留在界面上,但后续模型调用会基于压缩摘要和最近消息继续。当前历史不足时不会压缩;thread 正在运行任务时会阻止压缩。Sub-Agents
复杂任务通常不可能一次完成,DeerFlow 会先拆解,再执行。
lead agent 可以按需动态拉起 sub-agents。每个 sub-agent 都有自己独立的上下文、工具和终止条件。只要条件允许,它们就会并行运行,返回结构化结果,最后再由 lead agent 汇总成一份完整输出。
这也是 DeerFlow 能处理从几分钟到几小时任务的原因。比如一个研究任务,可以拆成十几个 sub-agents,分别探索不同方向,最后合并成一份报告,或者一个网站,或者一套带生成视觉内容的演示文稿。一个 harness,多路并行。
Sandbox 与文件系统
DeerFlow 不只是“会说它能做”,它是真的有一台自己的“电脑”。
每个任务都运行在隔离的 Docker 容器里,里面有完整的文件系统,包括 skills、workspace、uploads、outputs。agent 可以读写和编辑文件,可以执行 bash 命令和代码,也可以查看图片。整个过程都在 sandbox 内完成,可审计、会隔离,不会在不同 session 之间互相污染。
这就是“带工具的聊天机器人”和“真正有执行环境的 agent”之间的差别。
Context Engineering
隔离的 Sub-Agent Context:每个 sub-agent 都在自己独立的上下文里运行。它看不到主 agent 的上下文,也看不到其他 sub-agents 的上下文。这样做的目的很直接,就是让它只聚焦当前任务,不被无关信息干扰。
摘要压缩:在单个 session 内,DeerFlow 会比较积极地管理上下文,包括总结已完成的子任务、把中间结果转存到文件系统、压缩暂时不重要的信息。这样在长链路、多步骤任务里,它也能保持聚焦,而不会轻易把上下文窗口打爆。
长期记忆
大多数 agents 会在对话结束后把一切都忘掉,DeerFlow 不一样。
跨 session 使用时,DeerFlow 会逐步积累关于你的持久 memory,包括你的个人偏好、知识背景,以及长期沉淀下来的工作习惯。你用得越多,它越了解你的写作风格、技术栈和重复出现的工作流。memory 保存在本地,控制权也始终在你手里。
推荐模型
DeerFlow 对模型没有强绑定,只要实现了 OpenAI 兼容 API 的 LLM,理论上都可以接入。不过在下面这些能力上表现更强的模型,通常会更适合 DeerFlow:
内嵌 Python Client
DeerFlow 也可以作为内嵌的 Python 库使用,不必启动完整的 HTTP 服务。
DeerFlowClient提供了进程内的直接访问方式,覆盖所有 agent 和 Gateway 能力,返回的数据结构与 HTTP Gateway API 保持一致。HTTP Gateway 还提供DELETE /api/threads/{thread_id},用于在 LangGraph thread 本身被删除之后,清理 DeerFlow 托管的本地 thread 数据:所有返回 dict 的方法都会在 CI 中通过 Gateway 的 Pydantic 响应模型校验(
TestGatewayConformance),以确保内嵌 client 始终和 HTTP API schema 保持同步。完整 API 说明见backend/packages/harness/deerflow/client.py。定时任务 (Scheduled Tasks)
DeerFlow 现在在 workspace 里内置了一个一等的定时任务(scheduled-task)MVP。
当前 MVP 能力:
/workspace/scheduled-tasks管理任务once和cron两种调度方式ask_clarification)skip的重叠处理策略当前 MVP 限制:
schedule_task工具interval调度类型通过
config.yaml -> scheduler.enabled开启后台轮询。手动触发使用同样的 scheduled-task 资源和执行路径。终端工作台 (TUI)
deerflow是一个面向终端用户的工作台,内嵌运行在DeerFlowClient之上——无需启动 Gateway、前端、nginx 或 Docker,同时沿用与 DeerFlow 其它部分相同的config.yaml、checkpointer、技能、记忆、MCP 和沙箱配置。键盘驱动的对话界面:流式渲染的对话区(回答按 Markdown 渲染)、紧凑的工具活动卡片、
/斜杠命令面板、/model与/threads选择器、输入历史,以及Esc/Ctrl+C打断。在 TUI 里开启的会话也会出现在 Web UI 侧边栏——它会以本地默认用户身份写入共享的会话存储,因此终端与网页保持同步,无需运行 Gateway。完整说明见 backend/docs/TUI.md。
文档
⚠️ 安全使用
不恰当的部署可能导致安全风险
DeerFlow 具备系统指令执行、资源操作、业务逻辑调用等关键高权限能力,默认设计为部署在本地可信环境(仅本机 127.0.0.1 回环访问)。若您将 agent 部署至不可信局域网、公网云服务器等可被多终端访问的网络环境,且未采取严格的安全防护措施,可能导致安全风险,例如:
安全使用建议
注意:建议您将 DeerFlow 部署在本地可信的网络环境下。 若您有跨设备、跨网络的部署需求,必须加入严格的安全措施。例如,采取如下手段:
iptables,或部署硬件防火墙 / 带访问控制(ACL)功能的交换机等,配置规则设置 IP 白名单,拒绝其他所有 IP 进行访问。参与贡献
欢迎参与贡献。开发环境、工作流和相关规范见 CONTRIBUTING.md。
目前回归测试已经覆盖 Docker sandbox 模式识别,以及
backend/tests/中 provisioner kubeconfig-path 处理相关测试。许可证
本项目采用 MIT License 开源发布。
致谢
DeerFlow 建立在开源社区大量优秀工作的基础上。所有让 DeerFlow 成为可能的项目和贡献者,我们都心怀感谢。毫不夸张地说,我们是站在巨人的肩膀上继续往前走。
特别感谢以下项目带来的关键支持:
这些项目体现了开源协作真正的力量,我们也很高兴能继续建立在这些基础之上。
核心贡献者
感谢
DeerFlow的核心作者,是他们的判断、投入和持续推进,才让这个项目真正落地:Star History