mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-06-15 11:56:01 +00:00
16 KiB
16 KiB
更新日志
本文件记录 DeerFlow 的所有重要变更。
格式参考 Keep a Changelog, 版本号遵循 语义化版本规范。
English | 中文
2.0.0 — 2026-06-15
DeerFlow 2.0 是围绕"超级智能体"框架的彻底重写,核心包含子智能体、持久化记忆、
沙箱执行以及可扩展的技能(Skill)/工具系统。本版本与 1.x 系列没有共享代码,
原有的 Deep Research 框架仍在
main-1.x 分支上维护。
本次发布关闭了 2.0.0 里程碑, 自首个 2.0 里程碑标签以来累计合并 102 个 Pull Request。
⚠ 不兼容变更(Breaking Changes)
- harness: 从
RunStore重新加载历史 run,并持久化"已中断(interrupted)" 状态。run 的取消 / 多任务调度语义现在要求拥有该 run 的 worker 上具备可用的 RunStore;跨 worker 的取消请求将返回409,不再静默"伪成功"。(#2932)
新增
智能体与运行时
- 智能体: 自定义智能体支持自我更新,并按用户隔离 —— 智能体可在普通对话中
持久化对自身
SOUL.md/config.yaml的修改。(#2713) - 循环检测: 支持配置开关,并可按工具维度覆盖触发频率。(#2586、#2711)
- 循环检测: 警告注入延后执行,避免与工具调用生命周期错位。(#2752)
- 运行: 将
model_name从 gateway 请求一直透传到运行时与持久化层(SQLite 存储)。(#2775) - 子智能体: 通过终态任务事件,把子智能体的 token 用量流式上报到 header。 (#2882)
模型与集成
- 模型: 新增 StepFun 推理模型适配器。(#3461)
- 社区工具: 新增 Brave Search 网络检索工具。(#3528)
- 渠道: Discord 增加"仅响应 mention"模式、话题路由(thread routing)以及 正在输入指示。(#2842)
- IM: 新增"用户自有 IM 渠道连接"——用户可以在运营方配置的 bot 之上,绑定 自己的 Slack / Telegram / Discord / 飞书 / 钉钉 / 微信 / 企业微信 账号。 (#3487)
可观测性
- 追踪: LangGraph 追踪名设置为
lead_agent(自定义智能体则使用其agent_name),让 Langfuse / LangSmith 中的 trace 更清晰。(#3101) - 前端: 优化 token 用量的展示模式。(#2329)
- 默认值: 默认开启 token 用量统计。(#2841)
- 默认值: 提高默认的上下文摘要触发阈值。(#3174)
性能优化
- harness: 把 thread 元数据过滤下推到 SQL,不再在 Python 侧后过滤。 (#2865)
- 运行时: 为 run 增加
thread_id索引,避免RunManager中的 O(n) 扫描。 (#3499) - 运行时: 为
MemoryRunEventStore中的消息建立索引,避免 O(n) 扫描。 (#3531)
安全
- 上传: 拒绝指向符号链接的上传目标。(#2623)
- 上传: 在 Windows 上支持基于符号链接保护的安全上传。(#2794)
- MCP: 在 MCP 配置接口的响应中对敏感字段进行脱敏。(#2667)
- MCP: 加固 MCP 配置接口对异常输入的处理。(#3425)
- 认证: 拒绝跨站点(cross-site)的认证 POST 请求。(#2740)
- 网关: 限制 skill artifact 预览的解压上限,避免被 zip-bomb 类构造滥用。 (#2963)
修复
运行时、网关与持久化
- 运行时: rollback 恢复的 checkpoint 现在能够覆盖更新的 checkpoint。 (#2582)
- 运行时: 持久化 run 的消息摘要。(#2850)
- 运行时: 限制
write_file执行失败时上报的观测信息长度,避免失败 trace 撑爆上下文。(#3133) - 运行时: 加锁保护同步单例的初始化与 reset 路径。(#3413)
- 运行时: 为 run events 移除 PostgreSQL 上不必要的聚合
FOR UPDATE。(#2962) - 运行: gateway 重启后从持久化存储中恢复历史 run。(#2989)
- 网关: threads 接口返回 ISO 8601 格式的时间戳。(#2599)
- 网关: 对已经处于 interrupted 状态的 run,cancel 接口幂等返回。 (#3058)
- 网关: 将
stream_existing_run拆分为按 HTTP 方法区分的多个路由,确保 OpenAPIoperationId唯一。(#3228) - 事件: 序列化结构化的 DB event 内容。(#2762)
- 持久化: SQLite 后端的存储统一返回带时区的时间戳。(#3130)
- 持久化: 复用 token 用量按模型分组的 SQL 表达式。(#2910)
- 运行: 忽略已过期的 run reconnect 冲突。(#3284)
- nginx: 把 CORS 策略下放到 gateway 的 allowlist,避免双重应用。 (#2861)
智能体、子智能体与中间件
- 子智能体: 让"子智能体超时"成为原子化的终态。(#2583)
- 子智能体: 工具与中间件按 model 覆盖(model override)来构造。(#2641)
- 子智能体: 把
system_prompt与 skills 合并到单条SystemMessage。 (#2701) - 子智能体: 子智能体与父 run 的 checkpointer 隔离。(#3559)
- 智能体:
update_agent与setup_agent一致,遵循runtime.context的user_id。(#2867) - 智能体: 解决
TodoMiddleware中todos通道的类型冲突。(#3200) - 智能体: 把自定义智能体路由中的阻塞文件 IO 移出事件循环。(#3457)
- 智能体: 新智能体的 bootstrap 流程保持在用户作用域内。(#2784)
- 循环检测: 注入 warn 时仍保持 tool-call 配对。(#2725)
- 中间件: 同步原始 tool-call 元数据。(#2757)
- 中间件: dangling 配对中间件正确处理非法 tool call。(#2891)
- 中间件: 防止 todo 完成提醒消息泄漏到 IM 渠道。(#2907)
- 中间件: 调用模型前先把 tool result 的相邻关系规范化。(#2939)
记忆与追踪
- 记忆: 用常驻事件循环替换短生命周期的
asyncio.run()。(#2627) - 记忆: 队列化的 memory 更新按智能体维度隔离。(#2941)
- 记忆: 解析被外层包裹的 memory 更新 JSON 响应。(#3252)
- 追踪: 把
session_id与user_id透传到 Langfuse trace。(#2944) - 追踪: 修复中文 memory trace 信息显示为 unicode 转义序列的问题。 (#3104)
工具、沙箱与 MCP
- MCP: 修复 MCP 配置中列表型变量的环境变量解析。(#2556)
- 模型: Codex 的 token 用量记录到
usage_metadata。(#2585) - 沙箱: 在
RemoteSandboxBackend中补上list_running。(#2716) - 沙箱: Windows / Git Bash 下关闭 MSYS 路径转换。(#2766)
- 沙箱: 沙箱就绪轮询不再阻塞事件循环。(#2822)
- 沙箱:
SandboxAPI 边界统一遵守/mnt/user-data契约。(#2881) - 沙箱: Provisioner 的 PVC 数据按用户隔离。(#2973)
- 沙箱: 合并幂等的沙箱状态更新。(#3518)
- 工具: 引入
Runtime类型别名,消除 Pydantic 序列化告警。(#2774) - 工具: 在重入式
get_available_tools调用之间保留tool_search的提升 状态。(#2885) - harness: 为同步客户端封装仅异步可用的 config 工具。(#2878)
- harness: 同步客户端可用所有原本仅异步的工具(统一封装)。(#2935)
技能与渠道
- 技能: 强制校验
allowed-tools元数据。(#2626) - 技能: 在各聊天渠道下加固
/skill斜杠激活。(#3466) - 技能: 修复自定义 skill 安装时的权限问题。(#3241)
- 渠道: Gateway 的命令请求需要鉴权。(#2742)
认证
前端
- 前端: 在 prod 模式下恢复
getGatewayConfig的localhost兜底。 (#2718) - 聊天: 修复新会话第一条用户消息被吞掉的问题。(#2731)
- 前端: header 总计 token 数采用后端线程级 token 用量。(#2800)
- 前端: 异步 chat submit 完成后再清空输入框。(#2940)
- 前端: 修复登录页闪烁与 ResizeObserver 死循环。(#2954)
- 前端: 对恢复出的会话消息去重。(#2958)
- 前端: 避免乐观渲染产生重复的用户消息。(#3002)
- 前端: 流式中的 assistant 消息不再展示复制按钮。(#3176)
- 前端: 新建 thread 后立即在侧边栏显示。(#3283)
- 前端: 新建会话的 thread 消息相互隔离。(#3508)
- 前端: 限制深层嵌套列表的缩进,避免渲染崩溃。(#3393、#3570)
- token 用量: token 用量按 message id 去重聚合。(#2770)
构建、部署、脚本与配置
- 打包: 新增
postgresextra 以支持 store / checkpointer,并完善安装 说明。(#2584) - harness: 运行时路径以项目根目录为基准解析。(#2642)
- Docker: 让 nginx 在每次请求时再解析 upstream 名称。(#2717)
- Docker: 把 Gateway 默认改为单 worker,避免多 worker 模式下出现异常。 (#3475)
- 脚本:
make dev重启时保留uvextras。(#2767、#2754) - 脚本: 停止时清理本地 nginx。(#3005)
- 部署: 没有
python3时,secret 生成回退到python/openssl。 (#3074) - 配置: 让 reload boundary 在代码层面可发现。(#3144、#3153)
- replay-e2e: 重放 fixture 按调用方与会话作为 key。(#3453)
变更
- provider(重构): 各 provider 间共享 assistant payload 的回放匹配逻辑。 (#3307)