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)
- 按智能体隔离 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) - 新增
WorkspacePrewarmMixin与PrewarmConfig,预先构建并缓冲少量工作区,使会话可以直接拿到一个已经运行起来的工作区,而不必等待镜像拉取与沙箱初始化。在构建过程中到达的请求会等待这次已经在进行的构建,而不会另起一次;max_creating限制并发构建数,使突发的会话排队而不是冲垮服务方。已接入 Docker 与 E2B 两个管理器,size: 0(默认值)表示关闭。(#1755)
on_reply中间件现在可以否决一次回复的结束:收到ReplyEndEvent后不向下 yield,即可在同一次回复内强制再进行一轮推理-行动——reply_id不变,不会额外产生ReplyStartEvent,max_iters依然生效——任务约束校验与迟到的收件箱消息正需要这种能力。同时提供死循环保护:若事件被反复吞掉而中间没有任何推理或行动,将抛出异常。(#2322)ContextConfig新增max_image_num,用于限制上下文中保留的图片数量。compress_context会在 token 统计之前先执行该限制;超出限制的较早图片会通过offloader.offload_data_block卸载并替换为记录了路径的提示,未配置 offloader 时则直接丢弃并替换为同样的提示。默认值为None,即不限制。(#2362)
- 新增
TeamMemberLoopMiddleware,要求团队成员必须以调用TeamSay向 leader 汇报作为回复的结束,并在迭代次数耗尽时引导它向 leader 请求继续执行的许可。持续不汇报就结束的成员最多被追问max_nudges次,超出后该次回复以错误结束,而不是在会话锁下无限循环。(#2379) - 成员的一轮以
ERROR或INTERRUPTED结束且未汇报时,通知 leader。此前这种情况会让 leader 一直等待一个永远不会到来的答复;现在 leader 会收到一个说明成员与失败原因的 hint 块,投递路径与TeamSay汇报完全一致。(#2386)
FunctionTool支持input_schema参数,可传入 JSON schema 字典,或传入 pydanticBaseModel子类(经model_json_schema()转换),直接接管工具的输入 schema,而不再从函数的类型标注与 docstring 中提取。这覆盖了从其他框架迁移而来的工具定义,以及函数签名无法承载标注的场景,也让FunctionTool与本就直接透传外部inputSchema的MCPTool保持一致。(#2378)Read工具按文件扩展名分发,而不再一律按 UTF-8 解码:图片、音频与视频以 base64DataBlock返回,PDF 按页返回提取出的文本,页码范围由新增的pages参数指定。文本文件行为不变。(#2114)
- 新增
DingTalkChannel,将智能体服务中的智能体接入钉钉。入站的机器人消息与卡片回调走官方 Stream SDK,出站一律走 OpenAPI,因此只需配置 Client ID 与 Client Secret。单聊与群聊均支持,群聊可通过only_at_reply只响应被 @ 的消息;智能体会获得ListConversations、ListUsers、SendMessage、SendFile与SendImage五个工具。流式回复与工具审批以互动卡片呈现,两者的模板 ID 都已预设为钉钉发布的公共模板,无需自行在卡片平台建模板即可使用;如需自定义外观,可通过streaming_card_template_id与approval_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)
- 新增
VectorStoreBase.list_chunks(),按chunk_index顺序返回某个文档的切片,四种向量存储均已实现。在此之上,智能体服务新增了切片浏览、原始文档预览(直接从上传时已写入的对象存储读取)与携带完整配置的知识库列表,以及三者对应的前端页面。(#2372) - 切片器通过 pydantic 的
Parameters内部类声明自己的可调参数,与模型卡片、RAG 中间件的做法一致,取代原先手写的 JSON schema 字典;前端通过共用的SchemaForm动态渲染这些参数。(#2083)
- 回复因超出最大迭代次数而结束时,在对话页面展示提示。(#2381)
变更
渠道- 回复改由产生它的节点直接投递,不再入队等待持有入站连接的节点去消费、抢占租约、重新订阅事件流并转发。发送本身只是基于已存储凭据的 REST 调用,因此 #2390 之后已无必要的这一整条回路——
enqueue_channel_output、channel:outbound队列及其唤醒信号、转发租约,以及 dispatcher 中的消费与转发路径——全部移除。同时消除了两个缺陷:60 秒超时会截断任何运行时长超过一分钟的回复;以及消费节点若并未托管该渠道,会无声地丢弃这条已出队的任务。(#2395)
- 废弃
ExceedMaxItersEvent。为保持向后兼容它仍会被发出,但不再承载语义;退出原因由ReplyEndEvent.finished_reason == EXCEED_MAX_ITERS表达。(#2322)
- 创建知识库时必须选择切片器,与嵌入模型的选择保持一致,同时移除隐式的
default_chunker回退链。(#2083)
- Anthropic、DeepSeek、DashScope 与 Moonshot 在结构化输出调用中显式关闭思考模式——这些服务方在思考模式开启时会拒绝强制的
tool_choice,从而导致generate_structured_output与compress_context间歇性失败。同时_compress_context_impl增加了截断兜底:若重试耗尽后摘要生成仍然失败,则丢弃较早的消息而不是抛出异常,让智能体在缩减的上下文下继续运行。(#2140)
修复
Agent Service- 为定时任务创建的会话绑定真实的工作区。此前该会话以
workspace_id=""持久化,而各工作区管理器都把空串当作一个字面量的缓存键而非“未绑定”,导致一个部署中所有用户、所有智能体的定时会话全部解析到同一个工作区:同一个沙箱、同一批文件、同一份.mcp配置与已安装技能。(#2410) - 修复会话收件箱中的消息被搁置到用户下一次发言才被消费的问题。定时提示词、团队消息、新建 worker 的首个任务、后台工具结果都可能长时间无人消费:生产者此前依据运行锁来判断是否已有运行会消费收件箱,而一个已经完成最后一次消费、正在收尾的运行仍然持有该锁。现在运行会显式注册为收件箱的消费者,交接在一把短锁下完成,唤醒信号恰好在无人注册时才产生——既不会丢消息,也不会唤起一次无事可做的空转。(#2295)
- 将会话状态加载、智能体组装与挂起状态检查移入分布式会话锁内,使等待中的运行不再读取并回写上一次运行遗留的陈旧状态。(#2232)
Bash依据后端的操作系统而非宿主机的操作系统选择 shell,Windows 宿主机驱动 Linux 沙箱时不再把cmd /c发进容器。(#2366)- 提取工具 schema 时解析 PEP 563 惰性标注,使用了
from __future__ import annotations的模块不再产生字符串类型的参数。(#2371)
- 有状态的客户端可以重新连接:
close()会清除已经用尽的一次性 transport,下一次connect()重新创建,而不是复用失效的旧 transport 导致失败。(#2308)
- Qdrant 与 Milvus 以确定性 id 写入切片,索引 worker 在流程中途崩溃后重试时会覆盖此前的部分写入,而不是留下两份完整的切片。(#2372)
- 在上报的 usage 中保留 prompt cache token。(#2318)
v2.0.6
发布于 2026-08-07。Highlight:本次版本新增了
- 渠道能力,让智能体服务中的智能体入驻飞书与 Discord,
- Apple Container 工作区后端,
- 智能体服务中的 MCP 与技能市场,以及
on_check_permission中间件钩子。
新增
渠道- 新增
channel模块,将智能体服务中的智能体接入即时通讯平台。ChannelBase抽象平台接入,内置FeishuChannel与DiscordChannel两种实现;ChannelGateway负责编排每一条入站事件,ChannelTypeRegistry对外提供各平台的凭据表单结构,ChannelLifecycleDispatcher负责将本节点运行中的渠道实例与存储保持一致。同时新增/channels/*系列接口,覆盖渠道的创建、启用与停用、状态查询、会话列表与路由规则。(#1997)
- 新增
AppleContainerWorkspace、AppleContainerBackend与AppleContainerWorkspaceManager类,支持将 Apple 的container命令行工具作为工作区后端(要求 macOS 26+ 与 Apple 芯片)。(#2068) - 新增
WorkspaceBase.add_skill_archive()方法,将上传的技能压缩包解压到工作区中并完成注册。(#2197)
- 为
MiddlewareBase新增on_check_permission钩子,在单次工具调用的入参解析与校验完成后、权限判定结果被消费之前进行拦截。中间件可以通过next_handler(**input_kwargs)继续向下委托、替换返回的PermissionDecision,也可以不委托直接给出判定结果。(#2001)
- 内容块新增
created_at与finished_at时间戳,便于消费方判断每个内容块的流式起止时间。(#2171)
- 为工作区后端类新增
scandir()、stat()、read_stream()与write_stream()方法以及DirEntry数据类,从而以统一接口列举和流式读写工作区文件系统。(#2187)
- 支持从市场安装 MCP 服务与技能:
MCPHubBase/GitHubMCPHub与SkillHubBase/ClawSkillHub类通过/hub/mcp/*与/hub/skill/*接口浏览外部市场,安装后写入用户的资源库(/mcp、/skill),会话再经由/workspace/mcp/from-library或/workspace/skill/from-library装配到工作区中。(#2197) - 新增
GET /workspace/directories与GET /workspace/files接口用于浏览会话工作区,并由POST /workspace/files/download-token签发短时效的下载令牌。(#2187) - 新增
GET /workspace/status接口,返回会话的工作目录及其 git 状态。(#2257) - 新增
GET /health接口,逐个上报组件的就绪状态。该检查只读取应用状态,不会访问存储或工作区后端。(#2237) - 新增
GET /embedding-model/接口,列出指定凭据类型下可用的全部嵌入模型。(#2234)
- 更新全部模型 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)
- 在对话页面中展示会话的工作目录及其 git 状态。(#2257)
变更
Agent Servicecreate_app()的extra_agent_middlewares工厂函数新增第四个参数,即当前会话解析出的工作区,从而可以按会话装配依赖文件系统的中间件(如AgenticMemoryMiddleware)。此前三个参数的工厂函数继续可用。(#2263)
- 兼容 OpenAI 接口的对话模型在多次调用间复用同一个
openai.AsyncClient实例,不再每次调用都新建客户端。(#2063) - 流式内容改为一次性拼接已收集的片段,替换原先 O(n²) 的字符串累加。(#2158)
修复
Agent- 推理-行动轮次只计数一次:当某一轮的工具调用停在用户确认或外部执行上时,不再在结果返回前提前消耗一次迭代次数。(#2217)
- 对于已在等待结果的外部工具调用,不再重复产生
ToolResultStartEvent事件。(#2167)
ToolResponse在累加分片时保留ERROR状态,不再被后续分片覆盖为INTERRUPTED或DENIED。(#2178)- 列举工具失败的 MCP 服务会被跳过并打印警告,单个不可用的服务只会撤下自己的工具,不再导致整次回复中断。(#2197)
ChatResponse.finished_reason保留构造时传入的结束原因,被打断的响应不再显示为COMPLETED。(#2209)
- 修复流式响应在其他任务中关闭时,OpenTelemetry 抛出的上下文 detach 错误。(#2077)
- Claw 技能市场的卡片 ID 按所属者区分,不同所属者下的同名技能不再相互冲突。(#2214)
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)
- 新增
OpenSandboxWorkspace、OpenSandboxBackend与OpenSandboxWorkspaceManager类,支持将 OpenSandbox 作为工作区后端。(#1953) - 新增
DaytonaWorkspace、DaytonaBackend与DaytonaWorkspaceManager类,支持 Daytona 沙箱。(#1943) - 新增
K8sWorkspace、K8sBackend与K8sWorkspaceManager类,支持 Kubernetes Pod/PVC 生命周期管理、基于 tar 流的文件后端以及 MCP 网关。(#1933) - 新增
BubblewrapWorkspace、BubblewrapBackend与BubblewrapWorkspaceManager类,支持通过 bubblewrap 在 Linux 本地实现轻量级沙箱隔离。(#2051)
- 新增内置
PowerShell工具,使智能体能够在 Windows 工作区中执行命令。(#2132)
- 新增
MongoDBStore类,支持将 MongoDB Atlas Vector Search 作为向量存储。(#2008) - 新增
ElasticsearchStore类,支持将 Elasticsearch 作为向量存储。(#2129) - 新增
WordParser与ExcelParser类,支持将 Word 和 Excel 文档作为知识来源。(#2025、#2026)
- 新增
AsyncSQLAlchemyStorage类,支持将任意 SQLAlchemy 兼容的数据库作为存储后端,并内置 Alembic 迁移脚本。(#2029) - 支持以用户组或组织为单位,在不同用户之间共享凭证、智能体与知识库,底层由新增的资源访问策略层实现。(#1998)
- 支持将回复过程中的错误暴露给前端,避免静默失败。(#2133)
MoonshotChatModel类支持 Kimi K3 模型。(#2141)- 为
DashScopeChatModel类新增qwen3.7-plus、deepseek-v4-pro与glm-5.2模型卡。(#2073)
- 新增
GeminiTTSModel类,支持 Gemini TTS API。(#1879)
- 对话页面新增回到底部按钮。(#2106)
变更
提示词- 优化工作区、上下文压缩与
TaskCreate工具的内置提示词,并将工作区提示词的拼装逻辑抽取为公共方法,使各类工作区后端生成的描述保持一致。(#2111)
- 重新整理
pyproject.toml中的可选依赖分组,使 RAG 后端、工作区、TTS、长期记忆等功能可以按需单独安装。(#2157) - 将
mcp依赖限制在 2.0.0 以下版本。(#2091)
修复
Agent 权限系统- 统一权限引擎中各权限模式的判定逻辑,并将批量确认的豁免结果传递给后续的工具调用。(#2117)
- OpenAI 对话模型改用
max_completion_tokens参数,替代已废弃的max_tokens。(#2065) - 通过 OpenAI Responses API 重放对话时,保留原有的推理(reasoning)内容。(#2071)
- 在 Anthropic 消息的往返转换中保留
redacted_thinking块。(#2139) - 丢弃发送给 Anthropic 的空文本块,避免接口报错。(#2007)
- 在 Ollama 的工具结果消息中补充
tool_name字段。(#2006) - 清理 Gemini 工具 schema 中的
null类型。(#2020)
- 内置
Bash工具不再将带有修改语义的find命令(如-delete、-exec)判定为只读操作。(#2004)
- 加载技能目录时展开用户主目录(
~)路径。(#2053)
- 适配 milvus-lite 3.1.0 的 COSINE 距离语义,修复
MilvusLiteStore的检索结果。(#2089)
list_messages改用基于游标的分页,避免并发写入导致分页边界偏移。(#2081)
v2.0.4
发布于 2026-07-07。Highlight:本次版本新增了
- 智能体中断能力,
- 两个长期记忆中间件,以及
- 在 Team 中邀请已有 Agent 的能力。
新增
Agent 核心(SDK)- 支持实时的智能体中断与恢复。(#1995)
- 新增
POST /sessions/{session_id}/interrupt端点。(#1995) - 支持在 WebUI 中中断生成过程。(#1995)
- 支持 Team Leader 通过新增的
AgentInvite工具邀请已存在的 Agent。(#1977) - 新增 Session 状态查询端点,用于轮询 Session 生命周期。(#1984)
- 新增
AgenticMemoryMiddleware类,支持基于 Markdown 的长期记忆。(#1927) - 新增
ReMeMiddleware类,支持将 AgentScope ReMe 工具箱作为进程内长期记忆后端。(#1972)
- 新增
MilvusLiteStore类,支持 Milvus Lite 作为本地持久化向量存储。(#1969)
- 新增
DashScopeCosyVoiceTTSModel类,支持 DashScope CosyVoice V3 语音合成,覆盖流式与非流式两种模式。(#1866) - 新增
OpenAITTSModel类,支持 OpenAI TTS API,覆盖流式与非流式两种模式。(#1878)
变更
Workspace- 新增
SandboxWorkspaceBase类,抽出云端工作区的通用逻辑,作为DockerWorkspace与E2BWorkspace的新基类。(#1971)
ChatModel子类的_call_api方法不再需要在最后 yield 一个包含完整结果的ChatResponse,该累积逻辑被挪到ChatModelBase.__call__中自动进行。(#1995)
修复
AgentAgent中间件链:next_handler()中被省略的 kwargs 现在会继承当前中间件状态,而不再回退到最初的链路输入。(#1966)- 修复
ThinkingBlockEndEvent与TextBlockStartEvent两个事件的触发顺序。(#1887)
- 修复 OpenAI Response API 模型及其 Formatter。(#1950)
_sanitize_schema_for_gemini会把const: value转换为enum: [value],含固定值参数的工具不再触发 Gemini schema 校验失败。(#2016)ChatModelBase.count_tokens对多模态DataBlock输入使用保守的固定估算值,避免因 base64 长度导致的严重高估。(#1899)
- Anthropic、Gemini、Ollama 三个 Formatter 现在在解析
ToolCallBlock.input时使用_json_loads_with_repair,截断的 tool-call JSON 会退化为{}而不再抛出JSONDecodeError。(#2012) - Gemini Formatter 会在发送前丢弃空的 thinking 块。(#2013)
- 内置
Grep拒绝head_limit/tail_limit的负值。(#1954)
CredentialFactory.register_credential现在是幂等的,避免uvicorn --reload场景下的重复注册。(#1964)
- 修复
agent、state、tool模块中若干错位的 docstring。(#1989)
v2.0.3
发布于 2026-06-19。Highlight:本次版本新增了
- 全新的
rag模块(支持分布式、多租户、多会话), - 基于 mem0 的长期记忆中间件,
- Token 预算控制中间件,以及
ToolBase中的工具级洋葱式中间件。
新增
Agent 核心(SDK)Agent.compress_context新增可选参数instructions: HintBlock,允许调用方在不影响 Agent 持久上下文的前提下向压缩过程注入提示。(#1942)
- 新增
Mem0Middleware类,支持基于 mem0 的长期记忆。(#1775) - 新增
BudgetControlMiddleware类,支持 ReAct 循环中的 Token 预算控制。(#1738)
- 新增
rag模块,支持分布式、多租户、多会话的 RAG 服务。(#1926)
- 在
ToolBase中支持工具级洋葱式中间件:新增call()作为工具执行入口,__call__作为中间件包装层。(#1754)
- e2b 与 docker 工作区支持内置工具(
Bash、Read、Write、Edit、Glob、Grep)。(#1903)
- 新增 DashScope CosyVoice 实时 TTS 模型。(#1855)
- 为 OpenAI Response API 新增
gpt-4o、gpt-4o-mini、gpt-4.1-nano模型卡。(#1750)
- OpenAI Embedding 模型支持
pass_dimensions参数。(#1897)
- 支持通过
set_id_factory()配置自定义 ID 生成策略,覆盖默认的uuid4。(#1839)
变更
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)
AnthropicChatFormatter将并行的 tool_results 合并为单条 user 消息。(#1894)
- 避免多个
Agent实例之间共享默认配置。(#1906)
- 按字节合并 base64 tool response chunk,替代原先的字符串拼接。(#1901)
- TTS 音频块使用统一配置的 ID 工厂。(#1930)
- 正确转换 AG-UI SSE 流式事件。(#1917)
- 移除
SummarySchema字段的max_length约束,并提高 tool result 的大小上限。(#1891)
v2.0.2
发布于 2026-06-16。新增
Agent 服务与 Team- 自定义子智能体模板:现在可以在 Agent 服务中注册自定义的子智能体模板,团队 Leader 可以基于用户自定义的模板创建 Worker,不再局限于内置模板。(#1833)
- 自定义 Agent 类:Agent 服务现在支持注册用户自定义的
Agent子类,由 FastAPI 运行时实例化。(#1838)
Bash工具新增cwd参数:智能体现在可以将 Shell 命令限定在指定的工作目录中执行,而不必每次都从工作区根目录运行。(#1822)
- 流式音频 + 实时字幕:DashScope/OpenAI 全模态模型现在能够在单次回复内增量地输出音频块和字幕事件。(#1701)
- 全新
tts模块:内置 DashScope 后端与流式中间件,能够在 Token 到达时实时将智能体的文本回复转换为语音输出。(#1832)
- 凭据侧边栏:现在按 Provider 分组展示凭据,便于在多家厂商之间查找和管理 API Key。(#1829)
- WebUI 的 CI:新增了格式检查和构建检查,前端回归在 PR 阶段即可被发现。(#1821)
变更
Agent 服务基础设施- Embedding 模型层重构:原先单文件实现的
_dashscope_embedding.py/_dashscope_multimodal_embedding.py被替换为新的embedding/_dashscope/包,每个模型都对应一份 YAML 模型卡(text-embedding-v3/v4、qwen2.5-vl-embedding、qwen3-vl-embedding、multimodal-embedding-v1、tongyi-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)
- Workspace MCP 加载器:遇到非法的 MCP 配置项时会跳过并打印告警,而不是直接中断初始化。(#1819)
- Workspace 根路径:被纳入到 Permission Context 中,路径规则评估时能够正确解析相对路径。(#1823)
- Worker Agent 继承 Leader 的权限规则:
AgentCreate现在改为 state-injected,Worker 会话通过深拷贝 Leader 的工作目录以及 allow/deny/ask 规则来构建。此前 Worker 总是拿到一个空的PermissionContext,导致所有用户已确认过的目录和规则都丢失。(#1815)
- Glob 模式:现在能够正确识别 Windows 风格的路径分隔符。(#1809)
- Redis 会话 ID:显式传入的 Session ID 不再被自动生成的 ID 覆盖。(#1786)
- Redis Message Bus 超时 Bug:修复后长耗时任务不会再丢失结果消息。(#1853)
- 修复了侧边栏 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)
- 权限系统的整体优化:将
Edit与Write各自的_check_permission钩子收敛到共享的_engine.py中,并扩展了_decision.py/_types.py中的规则模型。改动配套新增了 895 行的permission_mode_test.py,端到端地覆盖default、explore、accept_edits、ask四种模式。(#1767)
- 逐次调用的
client_kwargs:可以将额外的客户端参数透传给底层 Provider Client,便于配合代理、自定义 Transport 或单次调用级别的 Tracing 使用。(#1659) - 15 份主流模型的 YAML 模型卡:覆盖 Anthropic(
claude-opus-4-5、claude-opus-4-6、claude-sonnet-4-5)、DashScope(qwen-max、qwen-max-2025-01-25、qwen-turbo、qwen-long)、OpenAI Chat(gpt-4o、gpt-4o-mini、gpt-4.1-mini、gpt-4.1-nano)、OpenAI Response(gpt-4.1、gpt-4.1-mini)以及 xAI(grok-3、grok-3-fast)。(#1731)
rag模块基础类骨架:仅包含基类,具体的 Retriever 实现将在后续版本中陆续提供。(#1746)
EventBase新增metadata字段:允许事件生产者附带任意结构化数据,下游的 Tracing、Hook、Middleware 等可以直接读取。(#1788)
- Fallback 模型:现在可以在 Web UI 中配置 Fallback 模型,当主模型不可用时会话会自动切换。(#1699)
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)
FunctionTool:现在接受普通返回值(而非ToolResponse),会自动包装。(#1703)- 内置
Read工具:在底层文件被修改时会失效原有的文件缓存。(#1735) - Bash 子进程窗口:在 Windows 平台上现在会被隐藏。(#1717)
- Tool Group 的 Skills:在解析当前可用工具集时会被正确地包含进去。(#1732)
- MCPTool 名称:会被规范化处理,避免出现
:、/等字符时被部分 Provider(尤其是 OpenAI)拒绝。(#1787)
LocalWorkspace:为 MCP 与 Skill 的操作加锁,避免并发注册/销毁时的竞态。(#1710)- Redis 消息列表:现在会设置过期时间,会话级的消息日志不再无限堆积。(#1734)
- 在当前依赖下前端能够正常构建。(#1708)
Button的 tooltip 触发器使用asChild,避免出现嵌套的<button>。(#1770)- 对话框新增了用于读屏软件的 description,提升无障碍体验。(#1771)
- 补全了 Web UI 示例中缺失的文件。(#1661)
- 更新了 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)
- 基于
ToolBase重建内置工具:全新的_bash、_edit、_glob、_grep、_read、_write实现,以及共享的_meta与_constants,全部基于新的工具基类。(#1502) - Task 工具:新增
TaskCreate、TaskGet、TaskList、TaskUpdate(详见 Plan 页面)。(#1549) - 工具与 Workspace 集成:工具包与 Workspace 模块被打通进
Agent类,文件/Shell 工具现在统一在智能体的 Workspace 中执行。(#1642)
- 全新
workspace/模块:包含_base.py接口与 789 行的_local_workspace.py实现,旧的offload/_base.py同时被移除。(#1586)
- 基于 FastAPI 的 Agent 服务:作为通过 HTTP 暴露 Agent 的标准方式被正式引入。(#1568)
- 2.0 中间件机制:在
Agent类中引入新的中间件机制,包含 179 行的middleware/_base.py、AgentConfig中的中间件注册槽位,以及 752 行的测试用例。(#1565) - Tracing 作为中间件:原本作为外挂逻辑存在的 Tracing 现在被打包成一个中间件,位于
middleware/_tracing/,包含 extractor + converter + setup 以及 846 行的测试。(#1633)
ChatUsage新增cache_creation_input_tokens与cache_input_tokens字段,用于支撑感知 Prompt Cache 的计费与可观测性。(#1602)- 统一的 thinking tag 处理:在 DeepSeek、Moonshot、OpenAI Chat、OpenAI Response 与 xAI 之间统一了
<thinking>标签的处理逻辑,下游代码不再需要按 Provider 分支。(#1622) - OpenAI 音频输出:端到端支持 OpenAI 模型的音频输出。(#1623)
- DashScope 结构化输出:修复后并配套提供使用示例。(#1651)
- 模型调用辅助脚本:在
scripts/model_examples/下新增了一批脚本,用于快速验证各家 Provider。(#1604)
变更
Message 与 Event- 核心构建块简化、
Msg结构重组:旧的a2a/包(a2a_base、file_resolver、nacos_resolver、well_known_resolver)以及formatter/_a2a_formatter.py被移除;新增了统一的event/包(_event.py,421 行)。(#1440)
- 工具模块重构:提供新的基类与工具包逻辑,移除了遗留的 MCP
client_base,相关教程也同步更新。(#1493) - Skill Loader 重构:新增
tool/_skill/包(_base.py+ 171 行的_local_loader.py),替换原先内联在 Toolkit 中的 Skill 逻辑;同时新增内置_skill.py工具,将 Skill 暴露给智能体。(#1513) tool_choice参数重构:将各种模式(auto、none、required等)改为tool/_types.py中的类型化对象,从而能够支持 OpenAI Response API 的高级 Prompt Cache,所有 Provider 的实现同步更新。(#1524)
- 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)
- 统一的
MCPClient类:_mcp_client.py(347 行)替代了原先一系列 stateful、stateless、stdio、SSE 与 streamable-HTTP 的客户端,连接配置统一收敛到_config.py中。(#1572) - MCP 工具注册时会被重命名:避免不同 MCP Server 之间的工具名冲突。(#1552)
- MCP 单元测试:按新版 API 进行了重构。(#1505)
- Tracing 模块迁移至
middleware/_tracing/:原先约 360 行的_extractor.py被拆分为_trace.py、_converter.py以及更精简的_extractor.py,注册流程也得到简化。(#1579)
- 新增 e2b 与 Docker Workspace:与本地 Workspace 并列提供,各自配套 Manager。本次发布同时在
examples/web_ui/下提供了完整的 WebUI 脚手架。(#1650)
- 临时弃用:
evaluate、module、rag、tts、realtime等模块在重构期间被移除,对应的示例(a2a/a2ui 智能体等)也从代码树中删除。(#1438)
- 为 2.0 版本更新了 README 与教程。(#1657)
修复
Model- DashScope
KeyError:当响应体缺失预期字段时不再抛出KeyError。(#1615) _format_tools:针对 OpenAI Response 模型做了进一步打磨。(#1635)
- 各 Provider 的 Formatter 与单元测试:进行了系统化的打磨。(#1621)
- Moonshot:远端图片 URL 现在会被下载后以 base64 形式上传,因为该 API 不支持直接传 URL。(#1653)
- MCPTool 输入 Schema 保留
$defs:递归地剥除title字段,修复了与严格的 LLM Provider 配合时的 Schema 校验问题。(#1595)
- 关闭
.env绕过通道:Write、Edit、Bash不再允许 Agent 通过正规化路径技巧读写.env(以及其他危险路径),危险路径检测 API 同步收紧。(#1656)
- 辅助脚本现在会将
TextBlock列表赋值给content,而不是直接传一个字符串。(#1629)