Skip to main content
如需查看完整的提交历史与贡献者名单,请访问 GitHub Releases 页面

v2.0.7

发布于 2026-08-24。
Highlight:本次版本新增了
  • 终端控制台,无需启动 Web 服务即可试用与调试智能体,
  • 共享工作区内按智能体隔离的 MCP 会话与技能,
  • 钉钉渠道,同时将渠道的长连接收拢到专用 worker 中,以及
  • 让团队成员必须向 leader 汇报的团队中间件。

新增

控制台
  • 新增 agentscope.console 模块,用于在终端中驱动智能体。ConsoleRenderer 消费 Agent.reply_stream 并渲染其中的事件——实时输出文本与思考增量,将并发流式的工具调用缓冲为完整块后再打印以避免交错,渲染 hint 块、每次模型调用的 token 用量,以及确认请求中建议的权限规则——提供 quiet / default / debug 三档详细程度,并会跳过无法识别的事件类型,使其在事件协议演进后仍可工作。launch_console(agent) 在此基础上提供零代码的交互式循环,支持工具调用确认(y / N / always)与分级的 Ctrl+C 处理。rich 进入核心依赖。(#2297)
Workspace
  • 按智能体隔离 MCP 客户端会话,使多个智能体可以共享同一个工作区而不共享有状态的 MCP 客户端。list_mcps() / add_mcp() / remove_mcp() 新增 agent_id 参数,工作区中的 MCP 存储变为 {agent_id: [clients]},每个智能体的客户端在首次访问时从 default_mcps 深拷贝并独立建连。工作区目录、技能与卸载存储仍然共享,旧的 .mcp 文件格式会自动迁移。(#1951)
  • 按智能体隔离技能,并按会话选择技能。skills/ 下新增一层以智能体划分的目录,在该智能体首次调用技能相关能力时由 skill_paths 播种,因此智能体修改自己的技能不再改变其他智能体的行为,也不再为与自己无关的技能付出上下文 token。agent_id 为仅限关键字参数,未指定时使用 default 分区。(#2283)
  • 新增 WorkspacePrewarmMixinPrewarmConfig,预先构建并缓冲少量工作区,使会话可以直接拿到一个已经运行起来的工作区,而不必等待镜像拉取与沙箱初始化。在构建过程中到达的请求会等待这次已经在进行的构建,而不会另起一次;max_creating 限制并发构建数,使突发的会话排队而不是冲垮服务方。已接入 Docker 与 E2B 两个管理器,size: 0(默认值)表示关闭。(#1755)
Agent
  • on_reply 中间件现在可以否决一次回复的结束:收到 ReplyEndEvent 后不向下 yield,即可在同一次回复内强制再进行一轮推理-行动——reply_id 不变,不会额外产生 ReplyStartEventmax_iters 依然生效——任务约束校验与迟到的收件箱消息正需要这种能力。同时提供死循环保护:若事件被反复吞掉而中间没有任何推理或行动,将抛出异常。(#2322)
  • ContextConfig 新增 max_image_num,用于限制上下文中保留的图片数量。compress_context 会在 token 统计之前先执行该限制;超出限制的较早图片会通过 offloader.offload_data_block 卸载并替换为记录了路径的提示,未配置 offloader 时则直接丢弃并替换为同样的提示。默认值为 None,即不限制。(#2362)
Agent Team
  • 新增 TeamMemberLoopMiddleware,要求团队成员必须以调用 TeamSay 向 leader 汇报作为回复的结束,并在迭代次数耗尽时引导它向 leader 请求继续执行的许可。持续不汇报就结束的成员最多被追问 max_nudges 次,超出后该次回复以错误结束,而不是在会话锁下无限循环。(#2379)
  • 成员的一轮以 ERRORINTERRUPTED 结束且未汇报时,通知 leader。此前这种情况会让 leader 一直等待一个永远不会到来的答复;现在 leader 会收到一个说明成员与失败原因的 hint 块,投递路径与 TeamSay 汇报完全一致。(#2386)
Tool
  • FunctionTool 支持 input_schema 参数,可传入 JSON schema 字典,或传入 pydantic BaseModel 子类(经 model_json_schema() 转换),直接接管工具的输入 schema,而不再从函数的类型标注与 docstring 中提取。这覆盖了从其他框架迁移而来的工具定义,以及函数签名无法承载标注的场景,也让 FunctionTool 与本就直接透传外部 inputSchemaMCPTool 保持一致。(#2378)
  • Read 工具按文件扩展名分发,而不再一律按 UTF-8 解码:图片、音频与视频以 base64 DataBlock 返回,PDF 按页返回提取出的文本,页码范围由新增的 pages 参数指定。文本文件行为不变。(#2114)
渠道
  • 新增 DingTalkChannel,将智能体服务中的智能体接入钉钉。入站的机器人消息与卡片回调走官方 Stream SDK,出站一律走 OpenAPI,因此只需配置 Client ID 与 Client Secret。单聊与群聊均支持,群聊可通过 only_at_reply 只响应被 @ 的消息;智能体会获得 ListConversationsListUsersSendMessageSendFileSendImage 五个工具。流式回复与工具审批以互动卡片呈现,两者的模板 ID 都已预设为钉钉发布的公共模板,无需自行在卡片平台建模板即可使用;如需自定义外观,可通过 streaming_card_template_idapproval_card_template_id 指定自己的模板。(#2285#2409)
  • 将渠道的长连接收拢到专用 worker 中,通过 enable_channel_worker 启用。平台只会把一个机器人的事件交给一条连接,因此每个副本都去建连意味着飞书、钉钉、Slack 上多出的连接全部浪费,而 Discord 上每条消息都会被重复投递。现在与连接绑定的状态被单独拆出:ChannelClients 从渠道记录构建实例但不调用 start_listening,因此任何进程都可以发送回复、查询会话列表并为智能体挂载该渠道的平台工具。缓存的实例会在记录变更时重建,凭据轮换无需重启即可生效。(#2390)
  • 支持在 SQL 存储中保存渠道记录。此前 SQL 存储直接继承了 NotImplementedError,任何非 Redis 部署——包括桌面版——都完全无法使用渠道。新增 channels 表,以 UNIQUE(platform_bot_id) 取代 Redis 中单独维护的机器人索引键,并配套 Alembic 迁移 0003_channels。(#2388)
RAG
  • 新增 VectorStoreBase.list_chunks(),按 chunk_index 顺序返回某个文档的切片,四种向量存储均已实现。在此之上,智能体服务新增了切片浏览、原始文档预览(直接从上传时已写入的对象存储读取)与携带完整配置的知识库列表,以及三者对应的前端页面。(#2372)
  • 切片器通过 pydantic 的 Parameters 内部类声明自己的可调参数,与模型卡片、RAG 中间件的做法一致,取代原先手写的 JSON schema 字典;前端通过共用的 SchemaForm 动态渲染这些参数。(#2083)
WebUI
  • 回复因超出最大迭代次数而结束时,在对话页面展示提示。(#2381)

变更

渠道
  • 回复改由产生它的节点直接投递,不再入队等待持有入站连接的节点去消费、抢占租约、重新订阅事件流并转发。发送本身只是基于已存储凭据的 REST 调用,因此 #2390 之后已无必要的这一整条回路——enqueue_channel_outputchannel:outbound 队列及其唤醒信号、转发租约,以及 dispatcher 中的消费与转发路径——全部移除。同时消除了两个缺陷:60 秒超时会截断任何运行时长超过一分钟的回复;以及消费节点若并未托管该渠道,会无声地丢弃这条已出队的任务。(#2395)
Agent
  • 废弃 ExceedMaxItersEvent。为保持向后兼容它仍会被发出,但不再承载语义;退出原因由 ReplyEndEvent.finished_reason == EXCEED_MAX_ITERS 表达。(#2322)
RAG
  • 创建知识库时必须选择切片器,与嵌入模型的选择保持一致,同时移除隐式的 default_chunker 回退链。(#2083)
Model
  • Anthropic、DeepSeek、DashScope 与 Moonshot 在结构化输出调用中显式关闭思考模式——这些服务方在思考模式开启时会拒绝强制的 tool_choice,从而导致 generate_structured_outputcompress_context 间歇性失败。同时 _compress_context_impl 增加了截断兜底:若重试耗尽后摘要生成仍然失败,则丢弃较早的消息而不是抛出异常,让智能体在缩减的上下文下继续运行。(#2140)

修复

Agent Service
  • 为定时任务创建的会话绑定真实的工作区。此前该会话以 workspace_id="" 持久化,而各工作区管理器都把空串当作一个字面量的缓存键而非“未绑定”,导致一个部署中所有用户、所有智能体的定时会话全部解析到同一个工作区:同一个沙箱、同一批文件、同一份 .mcp 配置与已安装技能。(#2410)
  • 修复会话收件箱中的消息被搁置到用户下一次发言才被消费的问题。定时提示词、团队消息、新建 worker 的首个任务、后台工具结果都可能长时间无人消费:生产者此前依据运行锁来判断是否已有运行会消费收件箱,而一个已经完成最后一次消费、正在收尾的运行仍然持有该锁。现在运行会显式注册为收件箱的消费者,交接在一把短锁下完成,唤醒信号恰好在无人注册时才产生——既不会丢消息,也不会唤起一次无事可做的空转。(#2295)
  • 将会话状态加载、智能体组装与挂起状态检查移入分布式会话锁内,使等待中的运行不再读取并回写上一次运行遗留的陈旧状态。(#2232)
Tool
  • Bash 依据后端的操作系统而非宿主机的操作系统选择 shell,Windows 宿主机驱动 Linux 沙箱时不再把 cmd /c 发进容器。(#2366)
  • 提取工具 schema 时解析 PEP 563 惰性标注,使用了 from __future__ import annotations 的模块不再产生字符串类型的参数。(#2371)
MCP
  • 有状态的客户端可以重新连接:close() 会清除已经用尽的一次性 transport,下一次 connect() 重新创建,而不是复用失效的旧 transport 导致失败。(#2308)
RAG
  • Qdrant 与 Milvus 以确定性 id 写入切片,索引 worker 在流程中途崩溃后重试时会覆盖此前的部分写入,而不是留下两份完整的切片。(#2372)
Agent
  • 在上报的 usage 中保留 prompt cache token。(#2318)

v2.0.6

发布于 2026-08-07。
Highlight:本次版本新增了
  • 渠道能力,让智能体服务中的智能体入驻飞书与 Discord,
  • Apple Container 工作区后端,
  • 智能体服务中的 MCP 与技能市场,以及
  • on_check_permission 中间件钩子。

新增

渠道
  • 新增 channel 模块,将智能体服务中的智能体接入即时通讯平台。ChannelBase 抽象平台接入,内置 FeishuChannelDiscordChannel 两种实现;ChannelGateway 负责编排每一条入站事件,ChannelTypeRegistry 对外提供各平台的凭据表单结构,ChannelLifecycleDispatcher 负责将本节点运行中的渠道实例与存储保持一致。同时新增 /channels/* 系列接口,覆盖渠道的创建、启用与停用、状态查询、会话列表与路由规则。(#1997)
Workspace
  • 新增 AppleContainerWorkspaceAppleContainerBackendAppleContainerWorkspaceManager 类,支持将 Apple 的 container 命令行工具作为工作区后端(要求 macOS 26+ 与 Apple 芯片)。(#2068)
  • 新增 WorkspaceBase.add_skill_archive() 方法,将上传的技能压缩包解压到工作区中并完成注册。(#2197)
中间件
  • MiddlewareBase 新增 on_check_permission 钩子,在单次工具调用的入参解析与校验完成后、权限判定结果被消费之前进行拦截。中间件可以通过 next_handler(**input_kwargs) 继续向下委托、替换返回的 PermissionDecision,也可以不委托直接给出判定结果。(#2001)
消息
  • 内容块新增 created_atfinished_at 时间戳,便于消费方判断每个内容块的流式起止时间。(#2171)
Tool
  • 为工作区后端类新增 scandir()stat()read_stream()write_stream() 方法以及 DirEntry 数据类,从而以统一接口列举和流式读写工作区文件系统。(#2187)
Agent Service
  • 支持从市场安装 MCP 服务与技能:MCPHubBase / GitHubMCPHubSkillHubBase / ClawSkillHub 类通过 /hub/mcp/*/hub/skill/* 接口浏览外部市场,安装后写入用户的资源库(/mcp/skill),会话再经由 /workspace/mcp/from-library/workspace/skill/from-library 装配到工作区中。(#2197)
  • 新增 GET /workspace/directoriesGET /workspace/files 接口用于浏览会话工作区,并由 POST /workspace/files/download-token 签发短时效的下载令牌。(#2187)
  • 新增 GET /workspace/status 接口,返回会话的工作目录及其 git 状态。(#2257)
  • 新增 GET /health 接口,逐个上报组件的就绪状态。该检查只读取应用状态,不会访问存储或工作区后端。(#2237)
  • 新增 GET /embedding-model/ 接口,列出指定凭据类型下可用的全部嵌入模型。(#2234)
Model
  • 更新全部模型 API 的模型卡:新增 Claude Opus 5 / Sonnet 5 / Fable 5、GPT-5.6(luna、sol、terra)、Gemini 3.5 / 3.6 Flash 及 Flash-Lite 系列、Kimi K2.7 Code、Qwen3.8-Max 与 Qwen Flash 系列、Grok 4.5 / 4.20 / Build 0.1 的模型卡,并同步更新已有模型卡的价格与上下文长度。(#2240)
WebUI
  • 在对话页面中展示会话的工作目录及其 git 状态。(#2257)

变更

Agent Service
  • create_app()extra_agent_middlewares 工厂函数新增第四个参数,即当前会话解析出的工作区,从而可以按会话装配依赖文件系统的中间件(如 AgenticMemoryMiddleware)。此前三个参数的工厂函数继续可用。(#2263)
Model
  • 兼容 OpenAI 接口的对话模型在多次调用间复用同一个 openai.AsyncClient 实例,不再每次调用都新建客户端。(#2063)
  • 流式内容改为一次性拼接已收集的片段,替换原先 O(n²) 的字符串累加。(#2158)
WebUI
  • 基于 shadcn/ui 组件重写对话页面。(#2171)
  • 统一侧边栏、面板与表单控件的样式。(#2234)
文档
  • 重写 README,补充 SDK 与智能体服务的能力对照表。(#2262)
  • 更新 README_zh.md。(#2182)

修复

Agent
  • 推理-行动轮次只计数一次:当某一轮的工具调用停在用户确认或外部执行上时,不再在结果返回前提前消耗一次迭代次数。(#2217)
  • 对于已在等待结果的外部工具调用,不再重复产生 ToolResultStartEvent 事件。(#2167)
Tool
  • ToolResponse 在累加分片时保留 ERROR 状态,不再被后续分片覆盖为 INTERRUPTEDDENIED。(#2178)
  • 列举工具失败的 MCP 服务会被跳过并打印警告,单个不可用的服务只会撤下自己的工具,不再导致整次回复中断。(#2197)
Model
  • ChatResponse.finished_reason 保留构造时传入的结束原因,被打断的响应不再显示为 COMPLETED。(#2209)
链路追踪
  • 修复流式响应在其他任务中关闭时,OpenTelemetry 抛出的上下文 detach 错误。(#2077)
Agent Service
  • Claw 技能市场的卡片 ID 按所属者区分,不同所属者下的同名技能不再相互冲突。(#2214)
WebUI
  • 在多个待确认的工具调用之间重置确认状态。(#2243)
  • 修复渠道配置表单字段的多语言文案。(#2261)

v2.0.5

发布于 2026-07-23。
Highlight:本次版本新增了
  • 智能体的结构化输出与运行时状态注入能力,
  • 四种新的工作区后端(OpenSandbox、Daytona、Kubernetes、Bubblewrap),
  • MongoDB / Elasticsearch 向量存储,以及 Word 和 Excel 解析器,以及
  • Agent Service 中基于 SQLAlchemy 的存储后端与跨用户资源共享能力。

新增

Agent 核心(SDK)
  • 支持结构化输出:通过 Agent.reply()Agent.reply_stream()structured_schema 参数指定,智能体借助内置的结构化输出工具生成结果,校验后的字典挂载在最终消息的 structured_output 属性上。(#2150)
  • 支持运行时状态注入:在每次推理前,将当前时间、计划任务数量与上下文用量以 HintBlock 的形式注入上下文,由新增的 injection_config 参数与 InjectionConfig 类控制。(#2134)
Workspace
  • 新增 OpenSandboxWorkspaceOpenSandboxBackendOpenSandboxWorkspaceManager 类,支持将 OpenSandbox 作为工作区后端。(#1953)
  • 新增 DaytonaWorkspaceDaytonaBackendDaytonaWorkspaceManager 类,支持 Daytona 沙箱。(#1943)
  • 新增 K8sWorkspaceK8sBackendK8sWorkspaceManager 类,支持 Kubernetes Pod/PVC 生命周期管理、基于 tar 流的文件后端以及 MCP 网关。(#1933)
  • 新增 BubblewrapWorkspaceBubblewrapBackendBubblewrapWorkspaceManager 类,支持通过 bubblewrap 在 Linux 本地实现轻量级沙箱隔离。(#2051)
Tool
  • 新增内置 PowerShell 工具,使智能体能够在 Windows 工作区中执行命令。(#2132)
RAG
  • 新增 MongoDBStore 类,支持将 MongoDB Atlas Vector Search 作为向量存储。(#2008)
  • 新增 ElasticsearchStore 类,支持将 Elasticsearch 作为向量存储。(#2129)
  • 新增 WordParserExcelParser 类,支持将 Word 和 Excel 文档作为知识来源。(#2025#2026)
Agent Service
  • 新增 AsyncSQLAlchemyStorage 类,支持将任意 SQLAlchemy 兼容的数据库作为存储后端,并内置 Alembic 迁移脚本。(#2029)
  • 支持以用户组或组织为单位,在不同用户之间共享凭证、智能体与知识库,底层由新增的资源访问策略层实现。(#1998)
  • 支持将回复过程中的错误暴露给前端,避免静默失败。(#2133)
Model
  • MoonshotChatModel 类支持 Kimi K3 模型。(#2141)
  • DashScopeChatModel 类新增 qwen3.7-plusdeepseek-v4-proglm-5.2 模型卡。(#2073)
TTS
  • 新增 GeminiTTSModel 类,支持 Gemini TTS API。(#1879)
WebUI
  • 对话页面新增回到底部按钮。(#2106)

变更

提示词
  • 优化工作区、上下文压缩与 TaskCreate 工具的内置提示词,并将工作区提示词的拼装逻辑抽取为公共方法,使各类工作区后端生成的描述保持一致。(#2111)
WebUI
  • 重构文本输入组件。(#2102)
  • 重构工具调用的渲染逻辑。(#2072)
Dependencies
  • 重新整理 pyproject.toml 中的可选依赖分组,使 RAG 后端、工作区、TTS、长期记忆等功能可以按需单独安装。(#2157)
  • mcp 依赖限制在 2.0.0 以下版本。(#2091)

修复

Agent
  • 当模型仅返回思考内容时,继续执行推理-行动循环,而不是直接结束本次回复。(#2120)
  • 单次推理产生多个工具调用时,上下文压缩过程中保持工具调用与工具结果的配对关系。(#2093)
权限系统
  • 统一权限引擎中各权限模式的判定逻辑,并将批量确认的豁免结果传递给后续的工具调用。(#2117)
Model
  • OpenAI 对话模型改用 max_completion_tokens 参数,替代已废弃的 max_tokens。(#2065)
  • 通过 OpenAI Responses API 重放对话时,保留原有的推理(reasoning)内容。(#2071)
Formatter
  • 在 Anthropic 消息的往返转换中保留 redacted_thinking 块。(#2139)
  • 丢弃发送给 Anthropic 的空文本块,避免接口报错。(#2007)
  • 在 Ollama 的工具结果消息中补充 tool_name 字段。(#2006)
  • 清理 Gemini 工具 schema 中的 null 类型。(#2020)
Tool
  • 内置 Bash 工具不再将带有修改语义的 find 命令(如 -delete-exec)判定为只读操作。(#2004)
Skill
  • 加载技能目录时展开用户主目录(~)路径。(#2053)
Workspace
  • 修复 OpenSandbox 的初始化流程与状态过滤逻辑。(#2046)
  • 恢复 glob 辅助方法的默认路径。(#2056)
RAG
  • 适配 milvus-lite 3.1.0 的 COSINE 距离语义,修复 MilvusLiteStore 的检索结果。(#2089)
Agent Service
  • list_messages 改用基于游标的分页,避免并发写入导致分页边界偏移。(#2081)
WebUI
  • 修复流式输出或中断过程中 JSON 不完整导致 Read / Write / Edit 工具调用渲染报错的问题。(#2075)
  • 新加载的会话自动滚动到底部。(#2100)
文档
  • 修复 tool 模块中的 docstring 格式错误。(#2127)
  • mem0 示例中使用独立的 LLM 实例。(#2078)

v2.0.4

发布于 2026-07-07。
Highlight:本次版本新增了
  • 智能体中断能力,
  • 两个长期记忆中间件,以及
  • 在 Team 中邀请已有 Agent 的能力。

新增

Agent 核心(SDK)
  • 支持实时的智能体中断与恢复。(#1995)
Agent Service
  • 新增 POST /sessions/{session_id}/interrupt 端点。(#1995)
  • 支持在 WebUI 中中断生成过程。(#1995)
  • 支持 Team Leader 通过新增的 AgentInvite 工具邀请已存在的 Agent。(#1977)
  • 新增 Session 状态查询端点,用于轮询 Session 生命周期。(#1984)
中间件——长期记忆
  • 新增 AgenticMemoryMiddleware 类,支持基于 Markdown 的长期记忆。(#1927)
  • 新增 ReMeMiddleware 类,支持将 AgentScope ReMe 工具箱作为进程内长期记忆后端。(#1972)
RAG
  • 新增 MilvusLiteStore 类,支持 Milvus Lite 作为本地持久化向量存储。(#1969)
TTS
  • 新增 DashScopeCosyVoiceTTSModel 类,支持 DashScope CosyVoice V3 语音合成,覆盖流式与非流式两种模式。(#1866)
  • 新增 OpenAITTSModel 类,支持 OpenAI TTS API,覆盖流式与非流式两种模式。(#1878)

变更

Workspace
  • 新增 SandboxWorkspaceBase 类,抽出云端工作区的通用逻辑,作为 DockerWorkspaceE2BWorkspace 的新基类。(#1971)
Model
  • ChatModel 子类的 _call_api 方法不再需要在最后 yield 一个包含完整结果的 ChatResponse,该累积逻辑被挪到 ChatModelBase.__call__ 中自动进行。(#1995)

修复

Agent
  • Agent 中间件链:next_handler() 中被省略的 kwargs 现在会继承当前中间件状态,而不再回退到最初的链路输入。(#1966)
  • 修复 ThinkingBlockEndEventTextBlockStartEvent 两个事件的触发顺序。(#1887)
Model
  • 修复 OpenAI Response API 模型及其 Formatter。(#1950)
  • _sanitize_schema_for_gemini 会把 const: value 转换为 enum: [value],含固定值参数的工具不再触发 Gemini schema 校验失败。(#2016)
  • ChatModelBase.count_tokens 对多模态 DataBlock 输入使用保守的固定估算值,避免因 base64 长度导致的严重高估。(#1899)
Formatter
  • Anthropic、Gemini、Ollama 三个 Formatter 现在在解析 ToolCallBlock.input 时使用 _json_loads_with_repair,截断的 tool-call JSON 会退化为 {} 而不再抛出 JSONDecodeError。(#2012)
  • Gemini Formatter 会在发送前丢弃空的 thinking 块。(#2013)
Tool
  • 内置 Grep 拒绝 head_limit / tail_limit 的负值。(#1954)
Credential
  • CredentialFactory.register_credential 现在是幂等的,避免 uvicorn --reload 场景下的重复注册。(#1964)
文档
  • 修复 agentstatetool 模块中若干错位的 docstring。(#1989)

v2.0.3

发布于 2026-06-19。
Highlight:本次版本新增了
  • 全新的 rag 模块(支持分布式、多租户、多会话),
  • 基于 mem0 的长期记忆中间件,
  • Token 预算控制中间件,以及
  • ToolBase 中的工具级洋葱式中间件。

新增

Agent 核心(SDK)
  • Agent.compress_context 新增可选参数 instructions: HintBlock,允许调用方在不影响 Agent 持久上下文的前提下向压缩过程注入提示。(#1942)
Agent Service
  • 在 Team Leader 的 Session 中透出 HITL 事件。(#1918)
  • 新增内存消息总线,支持单节点部署。(#1925)
中间件
  • 新增 Mem0Middleware 类,支持基于 mem0 的长期记忆。(#1775)
  • 新增 BudgetControlMiddleware 类,支持 ReAct 循环中的 Token 预算控制。(#1738)
RAG
  • 新增 rag 模块,支持分布式、多租户、多会话的 RAG 服务。(#1926)
Tool
  • ToolBase 中支持工具级洋葱式中间件:新增 call() 作为工具执行入口,__call__ 作为中间件包装层。(#1754)
Workspace
  • e2b 与 docker 工作区支持内置工具(BashReadWriteEditGlobGrep)。(#1903)
TTS
  • 新增 DashScope CosyVoice 实时 TTS 模型。(#1855)
Model
  • 为 OpenAI Response API 新增 gpt-4ogpt-4o-minigpt-4.1-nano 模型卡。(#1750)
Embedding
  • OpenAI Embedding 模型支持 pass_dimensions 参数。(#1897)
Utils
  • 支持通过 set_id_factory() 配置自定义 ID 生成策略,覆盖默认的 uuid4。(#1839)
WebUI
  • 渲染 WriteEdit 工具的 diff。(#1856)
  • 新增右侧面板,展示详细的任务与权限上下文,以及已装载的 MCP 与 Skill。(#1945)

变更

Message Bus
  • 重构消息总线,将其与 Service 逻辑解耦。(#1923)

修复

Model
  • 修正 DashScope 中 qwen max 3.7 的模型 ID。(#1876)
  • 处理不带 id 的 Gemini function call。(#1883)
  • 新增 _sanitize_schema_for_gemini,用于剥离工具参数中 Gemini 不兼容的 JSON Schema 结构。(#1886)
Formatter
  • AnthropicChatFormatter 将并行的 tool_results 合并为单条 user 消息。(#1894)
Agent
  • 避免多个 Agent 实例之间共享默认配置。(#1906)
Tool
  • 按字节合并 base64 tool response chunk,替代原先的字符串拼接。(#1901)
中间件
  • TTS 音频块使用统一配置的 ID 工厂。(#1930)
App
  • 正确转换 AG-UI SSE 流式事件。(#1917)
Schema
  • 移除 SummarySchema 字段的 max_length 约束,并提高 tool result 的大小上限。(#1891)

v2.0.2

发布于 2026-06-16。

新增

Agent 服务与 Team
  • 自定义子智能体模板:现在可以在 Agent 服务中注册自定义的子智能体模板,团队 Leader 可以基于用户自定义的模板创建 Worker,不再局限于内置模板。(#1833)
  • 自定义 Agent 类:Agent 服务现在支持注册用户自定义的 Agent 子类,由 FastAPI 运行时实例化。(#1838)
Tool
  • Bash 工具新增 cwd 参数:智能体现在可以将 Shell 命令限定在指定的工作目录中执行,而不必每次都从工作区根目录运行。(#1822)
Model 与多模态
  • 流式音频 + 实时字幕:DashScope/OpenAI 全模态模型现在能够在单次回复内增量地输出音频块和字幕事件。(#1701)
TTS
  • 全新 tts 模块:内置 DashScope 后端与流式中间件,能够在 Token 到达时实时将智能体的文本回复转换为语音输出。(#1832)
WebUI
  • 凭据侧边栏:现在按 Provider 分组展示凭据,便于在多家厂商之间查找和管理 API Key。(#1829)
  • WebUI 的 CI:新增了格式检查和构建检查,前端回归在 PR 阶段即可被发现。(#1821)

变更

Agent 服务基础设施
  • Embedding 模型层重构:原先单文件实现的 _dashscope_embedding.py / _dashscope_multimodal_embedding.py 被替换为新的 embedding/_dashscope/ 包,每个模型都对应一份 YAML 模型卡(text-embedding-v3/v4qwen2.5-vl-embeddingqwen3-vl-embeddingmultimodal-embedding-v1tongyi-embedding-vision-flash/plus),并新增 EmbeddingModelCard 类型以及服务层 _embedding.py 端点。(#1852)
  • 后台任务管理器重构:原本基于单进程的调度器被替换为基于消息总线的架构(message_bus/_base.py + _redis_message_bus.py),并重写了 cancel/wake-up 调度器以便通过消息总线协同,支持多进程与分布式部署。(#1849)

修复

Model
  • 思考模式下的 tool_choice 回退:当 OpenAI 兼容的结构化输出调用因开启思考模式而拒绝强制 tool_choice 时,现在会自动回退到 auto 而不是直接报错。(#1830)
  • Qwen 思考开关:正确地将 thinking 开关参数透传给 DashScope。(#1774)
  • Ollama Embedding 客户端:改为每次调用都新建客户端,避免 Embedding 客户端跨事件循环复用时出现 “event loop is closed” 错误。(#1836)
Permission 与 Team
  • Workspace MCP 加载器:遇到非法的 MCP 配置项时会跳过并打印告警,而不是直接中断初始化。(#1819)
  • Workspace 根路径:被纳入到 Permission Context 中,路径规则评估时能够正确解析相对路径。(#1823)
  • Worker Agent 继承 Leader 的权限规则AgentCreate 现在改为 state-injected,Worker 会话通过深拷贝 Leader 的工作目录以及 allow/deny/ask 规则来构建。此前 Worker 总是拿到一个空的 PermissionContext,导致所有用户已确认过的目录和规则都丢失。(#1815)
Tool
  • Glob 模式:现在能够正确识别 Windows 风格的路径分隔符。(#1809)
Storage 与 Message Bus
  • Redis 会话 ID:显式传入的 Session ID 不再被自动生成的 ID 覆盖。(#1786)
  • Redis Message Bus 超时 Bug:修复后长耗时任务不会再丢失结果消息。(#1853)
WebUI
  • 修复了侧边栏 group action 中 <button> 嵌套的 HTML 结构问题。(#1769)
  • 不可预览的文件附件现在能够正常渲染,并对媒体尺寸做了约束,避免撑破聊天布局。(#1768)
  • 聊天会话侧边栏在移动端改为浮层抽屉,避免在小屏上抢占空间。(#1772)
  • 新增了路由级别的错误边界,配套友好的错误页面。(#1828)
  • 修复了聊天页面的一个渲染 Bug。(#1867)
  • 修正了中文版引导提示文案中的一处错别字。(#1766)

v2.0.1

发布于 2026-06-05。
版本亮点Agent Team 特性现已在 Agent 服务中支持,可以方便地在一个 Leader 下组合多个子 Agent。

新增

Agent 服务与 Team
  • Agent Team 内置于 Agent 服务中:重构后的服务允许由 Leader Agent 创建并协同多个子 Agent。(#1776)
  • 可插拔的工具与中间件:现在可以在服务启动时通过依赖注入向其传入额外的工具和中间件,而不必将其硬编码在默认工具包中。(#1709)
Permission
  • 权限系统的整体优化:将 EditWrite 各自的 _check_permission 钩子收敛到共享的 _engine.py 中,并扩展了 _decision.py / _types.py 中的规则模型。改动配套新增了 895 行的 permission_mode_test.py,端到端地覆盖 defaultexploreaccept_editsask 四种模式。(#1767)
Model
  • 逐次调用的 client_kwargs:可以将额外的客户端参数透传给底层 Provider Client,便于配合代理、自定义 Transport 或单次调用级别的 Tracing 使用。(#1659)
  • 15 份主流模型的 YAML 模型卡:覆盖 Anthropic(claude-opus-4-5claude-opus-4-6claude-sonnet-4-5)、DashScope(qwen-maxqwen-max-2025-01-25qwen-turboqwen-long)、OpenAI Chat(gpt-4ogpt-4o-minigpt-4.1-minigpt-4.1-nano)、OpenAI Response(gpt-4.1gpt-4.1-mini)以及 xAI(grok-3grok-3-fast)。(#1731)
RAG
  • rag 模块基础类骨架:仅包含基类,具体的 Retriever 实现将在后续版本中陆续提供。(#1746)
Event
  • EventBase 新增 metadata 字段:允许事件生产者附带任意结构化数据,下游的 Tracing、Hook、Middleware 等可以直接读取。(#1788)
WebUI
  • Fallback 模型:现在可以在 Web UI 中配置 Fallback 模型,当主模型不可用时会话会自动切换。(#1699)
Dependencies
  • ripgrep 改为可选依赖:不需要内置 grep 工具的部署可以保持更精简的依赖。(#1740)

变更

Docs
  • 更新了 README,介绍新的 Agent 服务能力。(#1789)

修复

Formatter 与 Model
  • Anthropic Formatter:现在会丢弃没有 signature 的 thinking block,避免 API 调用失败。(#1668)
  • 统一的重试逻辑:anthropic / dashscope / deepseek / gemini / moonshot / ollama / openai_chat / openai_response / xai 现在共享同一份重试辅助逻辑,瞬时失败的处理在各家 Provider 之间保持一致。(#1730)
  • Ollama 与 Gemini:会真正遵循显式传入的 thinking_enable=False,不再因为模型本身支持思考就强行开启。(#1784)
Tool
  • FunctionTool:现在接受普通返回值(而非 ToolResponse),会自动包装。(#1703)
  • 内置 Read 工具:在底层文件被修改时会失效原有的文件缓存。(#1735)
  • Bash 子进程窗口:在 Windows 平台上现在会被隐藏。(#1717)
  • Tool Group 的 Skills:在解析当前可用工具集时会被正确地包含进去。(#1732)
MCP
  • MCPTool 名称:会被规范化处理,避免出现 :/ 等字符时被部分 Provider(尤其是 OpenAI)拒绝。(#1787)
Workspace 与 Storage
  • LocalWorkspace:为 MCP 与 Skill 的操作加锁,避免并发注册/销毁时的竞态。(#1710)
  • Redis 消息列表:现在会设置过期时间,会话级的消息日志不再无限堆积。(#1734)
WebUI
  • 在当前依赖下前端能够正常构建。(#1708)
  • Button 的 tooltip 触发器使用 asChild,避免出现嵌套的 <button>。(#1770)
  • 对话框新增了用于读屏软件的 description,提升无障碍体验。(#1771)
  • 补全了 Web UI 示例中缺失的文件。(#1661)
Docs
  • 更新了 README 中的钉钉群二维码。(#1662)

v2.0.0

发布于 2026-05-25。
版本亮点:AgentScope 2.0 正式发布!本次发布是一次大规模架构重构 —— Message、Tool、Workspace、Permission、Middleware 与 Service 等核心层全部重写。请参考 新文档 了解全新的构建块。

新增

Agent 核心
  • Agent 类中内置权限检查_agent.py 进行了大规模重写(+1534/-388),集成了新的权限引擎、事件类型、异常体系以及消息块。Agent 在每次工具调用前都会咨询权限系统。(#1518)
  • Agent 类支持上下文压缩:新的 AgentConfig 暴露压缩相关配置,各 Provider 提供压缩入口,新增的 offload/storage/ 基础模块用于持久化压缩后的历史。配套 564 行的 context_compression_test.py。(#1544)
  • 工具结果压缩Agent 类支持对大体积的工具输出在回灌给模型前进行摘要压缩。(#1585)
权限系统
  • 全新 tool/_permission/:提供完整的权限基础类,包含 1026 行的 _engine.py、589 行用于静态分析 Shell 管道的 _bash_parser.py,以及 _context.py_decision.py_rule.py_types.py,并搭配约 1.6k 行的单元测试。(#1486)
Tool
  • 基于 ToolBase 重建内置工具:全新的 _bash_edit_glob_grep_read_write 实现,以及共享的 _meta_constants,全部基于新的工具基类。(#1502)
  • Task 工具:新增 TaskCreateTaskGetTaskListTaskUpdate(详见 Plan 页面)。(#1549)
  • 工具与 Workspace 集成:工具包与 Workspace 模块被打通进 Agent 类,文件/Shell 工具现在统一在智能体的 Workspace 中执行。(#1642)
Workspace
  • 全新 workspace/ 模块:包含 _base.py 接口与 789 行的 _local_workspace.py 实现,旧的 offload/_base.py 同时被移除。(#1586)
Service
  • 基于 FastAPI 的 Agent 服务:作为通过 HTTP 暴露 Agent 的标准方式被正式引入。(#1568)
Middleware 与 Tracing
  • 2.0 中间件机制:在 Agent 类中引入新的中间件机制,包含 179 行的 middleware/_base.pyAgentConfig 中的中间件注册槽位,以及 752 行的测试用例。(#1565)
  • Tracing 作为中间件:原本作为外挂逻辑存在的 Tracing 现在被打包成一个中间件,位于 middleware/_tracing/,包含 extractor + converter + setup 以及 846 行的测试。(#1633)
Model
  • ChatUsage 新增 cache_creation_input_tokenscache_input_tokens 字段,用于支撑感知 Prompt Cache 的计费与可观测性。(#1602)
  • 统一的 thinking tag 处理:在 DeepSeek、Moonshot、OpenAI Chat、OpenAI Response 与 xAI 之间统一了 <thinking> 标签的处理逻辑,下游代码不再需要按 Provider 分支。(#1622)
  • OpenAI 音频输出:端到端支持 OpenAI 模型的音频输出。(#1623)
  • DashScope 结构化输出:修复后并配套提供使用示例。(#1651)
Message 与 Event
  • 正式定义 Msg 的类型规则与约束:通过完整的测试套件明确不同位置允许出现的内容块类型。(#1454)
  • Msg 新增 usage 字段:在消息粒度暴露 Token 使用量。(#1639)
Scripts
  • 模型调用辅助脚本:在 scripts/model_examples/ 下新增了一批脚本,用于快速验证各家 Provider。(#1604)

变更

Message 与 Event
  • 核心构建块简化、Msg 结构重组:旧的 a2a/ 包(a2a_basefile_resolvernacos_resolverwell_known_resolver)以及 formatter/_a2a_formatter.py 被移除;新增了统一的 event/ 包(_event.py,421 行)。(#1440)
Tool
  • 工具模块重构:提供新的基类与工具包逻辑,移除了遗留的 MCP client_base,相关教程也同步更新。(#1493)
  • Skill Loader 重构:新增 tool/_skill/ 包(_base.py + 171 行的 _local_loader.py),替换原先内联在 Toolkit 中的 Skill 逻辑;同时新增内置 _skill.py 工具,将 Skill 暴露给智能体。(#1513)
  • tool_choice 参数重构:将各种模式(autononerequired 等)改为 tool/_types.py 中的类型化对象,从而能够支持 OpenAI Response API 的高级 Prompt Cache,所有 Provider 的实现同步更新。(#1524)
Model 与 Formatter
  • Chat 模型实现重构:新增 credential/ 包(_base_anthropic_dashscope_deepseek_gemini_kimi_ollama_openai_xai),将 API Key/鉴权从 Chat 模型类中解耦,所有 Provider 的 Formatter 也在其基础上重写。(#1564)
  • DashScope 兼容 OpenAI:DashScope 模型现在复用 OpenAI Chat 客户端的调用路径,不再维护单独的响应解析。(#1617)
  • kimi 重命名为 moonshot:与该 Provider 的官方品牌保持一致。(#1609)
MCP
  • 统一的 MCPClient_mcp_client.py(347 行)替代了原先一系列 stateful、stateless、stdio、SSE 与 streamable-HTTP 的客户端,连接配置统一收敛到 _config.py 中。(#1572)
  • MCP 工具注册时会被重命名:避免不同 MCP Server 之间的工具名冲突。(#1552)
  • MCP 单元测试:按新版 API 进行了重构。(#1505)
Tracing
  • Tracing 模块迁移至 middleware/_tracing/:原先约 360 行的 _extractor.py 被拆分为 _trace.py_converter.py 以及更精简的 _extractor.py,注册流程也得到简化。(#1579)
Workspace
  • 新增 e2b 与 Docker Workspace:与本地 Workspace 并列提供,各自配套 Manager。本次发布同时在 examples/web_ui/ 下提供了完整的 WebUI 脚手架。(#1650)
项目层面
  • 临时弃用evaluatemoduleragttsrealtime 等模块在重构期间被移除,对应的示例(a2a/a2ui 智能体等)也从代码树中删除。(#1438)
Docs
  • 为 2.0 版本更新了 README 与教程。(#1657)

修复

Model
  • DashScope KeyError:当响应体缺失预期字段时不再抛出 KeyError。(#1615)
  • _format_tools:针对 OpenAI Response 模型做了进一步打磨。(#1635)
Formatter
  • 各 Provider 的 Formatter 与单元测试:进行了系统化的打磨。(#1621)
  • Moonshot:远端图片 URL 现在会被下载后以 base64 形式上传,因为该 API 不支持直接传 URL。(#1653)
MCP
  • MCPTool 输入 Schema 保留 $defs:递归地剥除 title 字段,修复了与严格的 LLM Provider 配合时的 Schema 校验问题。(#1595)
Tool
  • 关闭 .env 绕过通道WriteEditBash 不再允许 Agent 通过正规化路径技巧读写 .env(以及其他危险路径),危险路径检测 API 同步收紧。(#1656)
Scripts
  • 辅助脚本现在会将 TextBlock 列表赋值给 content,而不是直接传一个字符串。(#1629)