Documentation Index
Fetch the complete documentation index at: https://docs.agentscope.io/llms.txt
Use this file to discover all available pages before exploring further.
概述
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 实现:| 类 | 后端 |
|---|---|
LocalWorkspace | 宿主文件系统(内置 tool 直接在宿主侧运行) |
DockerWorkspace | 基于 aiodocker 的 Docker 容器 |
E2BWorkspace | 基于 AsyncSandbox 的 E2B 云沙箱 |
- LocalWorkspace
- DockerWorkspace
- E2BWorkspace
LocalWorkspace 直接把状态持久化在宿主文件系统的 workdir 下,重启时只需重新打开同一目录。目录结构如下:default_mcps 与 skill_paths 是 seed-time 输入 —— 仅在全新 workspace 首次 initialize() 时生效。重启时 workspace 从持久化的 .mcp 文件中恢复 MCP 列表,重复传入这些 seed 不会产生影响。
三种实现共享同一份 WorkspaceBase 接口,因此同一份 agent 代码可以在任意后端上无差别运行。接口按使用角色分为四组:
分配 / 释放 workspace,在归还到池前清空 per-session 状态;同时驱动
async with 协议。列出内置 tool、活跃的
MCPClient、可用 skill,以及一段 workspace 专属的 system prompt 片段。将压缩后的上下文或超大工具结果持久化到
sessions/<session_id>/,返回引用路径供 agent 替换原始负载。运行时注册或移除 MCP server 与 skill,变更会写入
.mcp 与 skills/,跨重启保留。与 Agent 集成
Workspace 从两个角度接入Agent —— 作为 tool / MCP / skill 的来源,以及作为上下文压缩的 offloader:
| 角度 | 装配 | Agent 拿到什么 |
|---|---|---|
| 资源 | Toolkit(tools=..., mcps=..., skills_or_loaders=...) | workspace 中可用的内置 tool、MCP 提供的 tool 与 skill |
| Offload | Agent(offloader=workspace) | 上下文压缩触发或工具结果超过大小阈值时,agent 调用 workspace.offload_context() / offload_tool_result(),并用返回的引用路径替换原始负载 |
Agent 仅依赖 Offloader 协议(offload_context / offload_tool_result),任何满足该协议的对象都可以承担此角色 —— workspace 是典型实现。
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()在应用关闭时清空缓存。
| 类 | 配套 workspace | 隔离键 | 缓存键 |
|---|---|---|---|
LocalWorkspaceManager | LocalWorkspace | agent_id(workdir = <basedir>/<agent_id>) | workspace_id |
DockerWorkspaceManager | DockerWorkspace | (user_id, agent_id)(workdir = <basedir>/<user_id>/<agent_id>) | workspace_id |
E2BWorkspaceManager | E2BWorkspace | agent_id(沙箱 metadata,无宿主 workdir) | workspace_id |
WorkspaceManagerBase 并按自己的键重写 get_workspace / create_workspace —— 关于 manager 如何接入服务请求生命周期,详见 Agent Service · Workspace 实现与隔离。
MCP Gateway
DockerWorkspace 与 E2BWorkspace 无法直接在宿主侧注册 MCP client —— MCP server 跑在容器或沙箱内部,stdio 会话也无法跨越该边界。AgentScope 用一套 MCP gateway 抽象解决此问题:在 workspace 内部运行一个轻量 FastAPI 进程,它持有上游 MCP 会话,并通过单一带鉴权的 HTTP 端点对宿主暴露这些会话。
Gateway 暴露一组小型 REST 接口 —— GET /health、GET/POST/DELETE /mcps、GET /mcps/{name}/tools、POST /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。
LocalWorkspace)还是在隔离环境内(DockerWorkspace / E2BWorkspace),workspace 的 list_mcps() 都返回 MCPClient 实例。
延伸阅读
Agent
Agent 抽象、ReAct 循环与 offloader 集成
Tool
内置 tool、MCP 集成与 toolkit 组装
Agent Service
驱动 workspace manager 的多租户服务
Context
上下文压缩与 offload 触发条件