Skip to main content

概述

Workspace 是 agent 的执行环境,向 agent 提供三类资源 —— 工具(内置 tool 与 MCP)、skill,以及面向压缩消息与超大工具结果的上下文 offload —— 同时管理其中资源(MCP server 进程、动态加入的 skill、offload 文件)的生命周期。 AgentScope 提供三种 workspace 实现 —— 本地文件系统、Docker 容器、E2B 云沙箱 —— 以及一个 workspace manager,在 Agent Service 中负责分配和追踪 workspace,让多租户部署可以把 workspace 按 user、agent 或 session 维度映射,无需改写 agent 代码。 对 Docker 与 E2B 而言,MCP server 跑在隔离环境内部;宿主侧通过 workspace 内的 gateway 访问它们,详见后文 MCP Gateway

使用 Workspace

创建 Workspace

AgentScope 针对三种执行后端提供了对应的 workspace 实现: 每种后端的持久化方式与目录结构各不相同 —— 选择对应的 tab 查看:
LocalWorkspace 直接把状态持久化在宿主文件系统的 workdir 下,重启时只需重新打开同一目录。目录结构如下:
default_mcpsskill_paths 是 seed-time 输入 —— 仅在全新 workspace 首次 initialize() 时生效。重启时 workspace 从持久化的 .mcp 文件中恢复 MCP 列表,重复传入这些 seed 不会产生影响。 三种实现共享同一份 WorkspaceBase 接口,因此同一份 agent 代码可以在任意后端上无差别运行。接口按使用角色分为四组:
生命周期 (developer)
分配 / 释放 workspace,在归还到池前清空 per-session 状态;同时驱动 async with 协议。
资源发现 (agent)
列出内置 tool、活跃的 MCPClient、可用 skill,以及一段 workspace 专属的 system prompt 片段。
Offload (agent)
将压缩后的上下文或超大工具结果持久化到 sessions/<session_id>/,返回引用路径供 agent 替换原始负载。
动态管理 (user)
运行时注册或移除 MCP server 与 skill,变更会写入 .mcpskills/,跨重启保留。

与 Agent 集成

Workspace 从两个角度接入 Agent —— 作为 tool / MCP / skill 的来源,以及作为上下文压缩的 offloader:
Agent 仅依赖 Offloader 协议(offload_context / offload_tool_result),任何满足该协议的对象都可以承担此角色 —— workspace 是典型实现。
Workspace 把资源以扁平列表的方式暴露出来,因此当 agent 工具数量过多、不便全部常驻激活时,可以按主题切分到不同的 ToolGroup,作为 Toolkit(tool_groups=[...]) 传入;agent 通过内置 meta-tool ResetTools 按需激活,只有保留名 basic 组始终在线。

Workspace Manager

Workspace manager 是多租户服务中 workspace 的分配器与生命周期持有者,由 Agent Service 使用,负责把请求路由到正确的 workspace 实例并在关闭时回收。 Manager 的职责:
  • 分配 —— create_workspace(user_id, agent_id, session_id) 构造新 workspace 并纳入追踪;get_workspace(..., workspace_id) 返回已存在的 workspace,缓存未命中时按需重建。
  • 缓存与 TTL —— 以 workspace_id 为键在内存中缓存 workspace;空闲超过 ttl 秒后淘汰,并销毁底层资源(容器、沙箱、MCP 进程)。
  • 隔离策略 —— manager 决定两次请求是否共享同一 workspace;内置 manager 都按 agent_id 隔离,而 WorkspaceManagerBase 是个极小的抽象类,可继承后改写为按 user 或按 session 隔离。
  • 回收 —— close(workspace_id) 淘汰单个条目,close_all() 在应用关闭时清空缓存。
AgentScope 提供三种 manager,分别配合一种 workspace 后端,全部按 agent 隔离: 构造 manager 后即可像 workspace 分配器一样使用:
要换用其他隔离策略(按 user、按 session 或混合),继承 WorkspaceManagerBase 并按自己的键重写 get_workspace / create_workspace —— 关于 manager 如何接入服务请求生命周期,详见 Agent Service · Workspace 实现与隔离
Agent Service 在 lifespan 期间把 workspace manager 绑定到 FastAPI 应用状态上,所有请求共享;router 通过 get_workspace_manager 依赖注入获取 workspace。完整集成方式见 Agent Service

MCP Gateway

DockerWorkspaceE2BWorkspace 无法直接在宿主侧注册 MCP client —— MCP server 跑在容器或沙箱内部,stdio 会话也无法跨越该边界。AgentScope 用一套 MCP gateway 抽象解决此问题:在 workspace 内部运行一个轻量 FastAPI 进程,它持有上游 MCP 会话,并通过单一带鉴权的 HTTP 端点对宿主暴露这些会话。 Gateway 暴露一组小型 REST 接口 —— GET /healthGET/POST/DELETE /mcpsGET /mcps/{name}/toolsPOST /mcps/{name}/tools/{tool} —— 通过每次 initialize() 重新生成的 per-workspace bearer token 鉴权。宿主侧两个适配器保持标准接口不变:
  • GatewayMCPClient —— MCPClient 子类,把 connect / close / list_tools 等调用替换为对 gateway 的 HTTP 请求,其它 toolkit 代码无法将它与本地 MCP client 区分开。
  • GatewayMCPTool —— ToolBase 子类,__call__ 直接 POST 到 /mcps/{name}/tools/{tool} 并重建返回的 ToolChunk
正因这层抽象,agent 侧代码在三种 workspace 后端上完全一致 —— 无论上游 MCP 会话在宿主侧(LocalWorkspace)还是在隔离环境内(DockerWorkspace / E2BWorkspace),workspace 的 list_mcps() 都返回 MCPClient 实例。

延伸阅读

Agent

Agent 抽象、ReAct 循环与 offloader 集成

Tool

内置 tool、MCP 集成与 toolkit 组装

Agent Service

驱动 workspace manager 的多租户服务

Context

上下文压缩与 offload 触发条件