Agent Service 是基于 FastAPI 的托管层,把 AgentScope 的 agent 转化为多租户、多会话的 HTTP 服务。它接管 agent 外围的全部职责 —— 请求路由、按用户的资源生命周期、会话状态、持久化、调度,以及工具调用的卸载,让基于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.
Agent 编写的代码无需重写即可承接生产流量。
它的特点:
- 生产级在线 agent 骨架 —— agent 运行、后台任务、调度,以及 tool / MCP / skill / workspace 生命周期端到端纳管,会话事件流可扇出给多个订阅者,重连时还能从缓冲区中重放历史。
- Schema 驱动的前端 —— credential 公开 JSON schema,model 暴露声明式卡片(输入 / 输出类型、上下文长度、参数 schema),前端无需绑死特定 provider 的代码即可渲染表单与能力标签。
- 天然多租户 —— credential、agent、session、schedule、message 都归属于请求的
user_id,所有权在路由层强制;一份部署即可服务多用户,无需为每个租户单独编写代码路径。 - 模块化、可扩展 —— 鉴权、聊天协议、workspace 隔离策略、存储后端,以及 model provider 与 credential 类型集合,全部在边界处开放,可在不动框架代码的前提下替换。
能力概览
| 能力 | 说明 |
|---|---|
| 流式聊天 | 通过 SSE 实时推送 AgentEvent 对象 |
| 会话管理 | 持久化会话,跨请求序列化状态 |
| 会话回放 | 后接入的客户端可通过缓冲重放接收完整事件历史 |
| 后台任务卸载 | 长耗时工具调用切到后台执行,结果自动回注 |
| Cron 调度 | 按时间触发 agent 执行,支持有状态或无状态 session |
| Credential 管理 | 安全存储与读取 model provider 的 API key |
| 协议适配 | 通过 middleware 转换为外部协议(AG-UI、A2A 等) |
| Workspace 管理 | 可插拔的 workspace 隔离策略(内置:按 agent;可扩展为按 session 或按用户) |
Service 不自带用户鉴权系统。它提供
X-User-ID header 占位依赖,由开发者替换为自己的鉴权 middleware(JWT、OAuth、session token 等)。资源模型
Agent Service 中的每次操作都归属于从请求中解析出的user_id。在该边界之下,service 管理六类资源,它们之间的关系决定了 REST API 的形态与运行时行为:
先理解这张图,REST API 就基本无需额外解释 —— 多数端点只是为已认证用户对其中一种资源做创建、列表或修改。
User
Agent Service 自身不建模用户系统。user_id 是通过 get_current_user_id 依赖解析出的不透明租户标识 —— 替换该依赖即可对接任何身份系统(JWT、OAuth2、session cookie、SSO、API token)。详见扩展鉴权。
Credential
Credential 是某个 model provider(DashScope、OpenAI、Anthropic、Ollama 等)的连接配置 —— 一个 API key 加上 provider 特有的设置。同一用户可以为同一 provider 注册多份 credential —— LLM、TTS、Realtime 服务各用一份,或个人 key 与团队 key 并存 —— 并在多个 agent 与 session 之间复用同一份 credential,让 key 轮换只在一个地方发生。 新增 provider 的方式是继承CredentialBase 并通过 create_app(extra_credentials=[...]) 注册;客户端无需额外代码即可使用。
Agent
Agent 记录描述 agent 是谁 —— 展示名、定义角色的 system prompt,以及上下文管理与 ReAct 循环的运行时配置。同一个 agent 可以在多个 session 中由不同 LLM 驱动:身份属于 agent,模型与运行时状态属于 session。Workspace
Workspace 是 agent 的运行时环境 —— 一个类文件系统的工作区,统一聚合可用的 tool、MCP、skill,并提供存放压缩上下文以支持 agentic search 的位置。实现可以是本地文件系统(LocalWorkspace),也可以是沙箱(DockerWorkspace、E2BWorkspace);WorkspaceManager 决定 workspace 如何映射到 user、agent 与 session —— 按 user、按 agent(内置默认)、按 session 隔离都是合法策略。
Session
Session 是用户与 agent 之间一次正在进行的会话。它承载:- Agent state —— 工作记忆、未完成的 reply、permission context;每轮结束后持久化。
- 消息记录 —— 持久化的用户 / 助手往来,前端基于此渲染;与每轮重新组装的模型上下文窗口不同。
- LLM 配置 —— provider、model、参数及调用所用的 credential。由于该配置随 session 走,同一 agent 可以在不同 session 中跑不同模型。
- Permission level —— 限定 agent 可调用的 tool 范围。
Schedule
Schedule 按 cron 表达式触发 agent。每次触发都在一个 session 内运行 —— 可以每次新建(无状态),也可以复用以让上下文跨次累积(有状态)。Schedule 持久化保存,可在服务重启后恢复。快速上手
跑起一个 service 至少需要一个 storage 后端与一个 workspace manager。下面的示例在 8000 端口启动一个由 Redis 支撑的 service —— 选择匹配 agent 工具执行位置的 workspace 后端即可。create_app 参数
持久化 agent、session、credential、message、schedule 的 storage 后端。其生命周期(
__aenter__ / __aexit__)由应用 lifespan 管理。以 TTL 缓存方式管理 workspace(文件存储、MCP server、skill)。内置
LocalWorkspaceManager 按 agent 隔离;其他策略见 Workspace 实现与隔离。额外注册的 credential 类型。每个类在应用启动前被注入
CredentialFactory。额外的 ASGI middleware(例如协议适配器、CORS、鉴权)。
OpenAPI 文档界面中显示的标题。
OpenAPI 文档界面中显示的 API 版本号。
典型操作流程
服务启动后,按资源模型中定义的资源驱动它即可。下面是一次聊天会话通常走过的路径 —— 每一步是一两次 REST 调用。创建并配置 credential
通过
GET /credential/schemas 发现各 provider 的表单字段,再保存 API key。一份 credential 可以在多个 session 与 agent 中复用。创建 session 并选择 model
创建一个绑定到该 agent 的 session,并附上 model 配置 —— provider、model 名称、参数,以及调用所用的 credential。从此之后由 session 拥有运行时状态。
X-User-ID header 与单条用户消息的最小 chat 调用:
/chat;cron 触发时 agent 自动运行。
API 概览
Service 把资源模型中的资源暴露为 REST 端点,外加流式聊天端点。下表按类别分组;完整请求与响应结构由 service 的 OpenAPI 规格描述。| 类别 | 端点 | 说明 |
|---|---|---|
| Chat | POST /chat | 通过 SSE 流式推送某 session 的 agent 事件;支持回放与多订阅者扇出。 |
| Sessions | GET/POST/PATCH/DELETE /sessions | 创建与管理聊天 session,包括 model 绑定与 permission level。 |
| Messages | GET /sessions/{id}/messages | 分页拉取某 session 的消息记录。 |
| Agents | GET/POST/PATCH/DELETE /agent | 管理 agent 记录 —— 展示名、system prompt、运行时配置。 |
| Credentials | GET/POST/PATCH/DELETE /credential | 各 provider 的 API key 与连接配置 CRUD。 |
| Credential schemas | GET /credential/schemas | 发现已注册的全部 credential 类型及其 JSON 参数 schema,用于表单渲染。 |
| Models | GET /model?provider=<name> | 列出某 provider 下的候选模型,附带声明式 ModelCard(能力与参数 schema)。 |
| Schedules | GET/POST/PATCH/DELETE /schedule | 管理 cron 触发的 agent 执行,有状态或无状态。 |
| Background tasks | GET /background-tasks | 查看被卸载到后台的工具执行。 |
| Workspace MCPs | GET/POST /workspace/mcp、DELETE /workspace/mcp/{mcp_name} | 管理挂在 session workspace 上的 MCP client。 |
| Workspace skills | GET/POST /workspace/skill、DELETE /workspace/skill/{skill_name} | 管理 session workspace 中可用的 skill。 |
自定义
Service 在每个基础设施边界上都开放扩展。下面分节说明哪些是内置的,以及如何插入自己的实现。Agent 聊天协议
Chat 端点通过 SSE 输出 AgentScope 原生的AgentEvent 流。要让同一 agent 服务于不同前端协议,安装协议 middleware 拦截 SSE 流并改写每帧。
AgentScope 内置 AGUIProtocolMiddleware 适配 AG-UI 协议。通过 extra_middlewares 装载:
ProtocolMiddlewareBase 并实现 _convert_to_protocol:
StreamingResponse,把每条 SSE 帧反序列化回 AgentEvent,调用 _convert_to_protocol() 生成目标格式后重新序列化。
用户鉴权
内置的get_current_user_id 依赖从请求 header X-User-ID 中读取调用者身份 —— 这是占位实现,不是真正的鉴权。用自己的依赖覆盖即可对接任何身份系统。
JWT bearer token:
Workspace 实现与隔离
可独立配置两条正交维度:- Workspace 后端 —— agent 实际运行所在的运行时环境。内置实现包括
LocalWorkspace、DockerWorkspace、E2BWorkspace。新增后端实现 workspace 接口即可,可包装容器镜像、沙箱或远端虚拟机。 - 隔离策略 —— workspace 如何映射到 user、agent、session。内置
LocalWorkspaceManager以agent_id为键:同一 agent 的所有 session 共享一个 workspace。要切换为按 user 或按 session 隔离,继承WorkspaceManagerBase并按自己的键策略覆写get_workspace。
API credential
新增 credential 类型由两类组成:一个CredentialBase 子类负责描述连接配置(并发布 JSON schema 用于表单渲染),一个 ChatModelBase 子类实现针对该 provider API 的流式聊天协议。Credential 类是入口 —— 它告诉 service 该实例化哪个 chat model 类。
GET /credential/schemas 暴露该 credential 的 JSON schema,GET /model?provider=<name> 路由到 get_chat_model_class() 返回的 chat model 类。
Provider 模型
GET /model?provider=<name> 返回的模型列表由 ModelCard 实例构成 —— 这是声明式元数据记录,告诉前端如何展示每个模型、哪些请求参数合法。每个 chat model 通过 list_models() 暴露自己的目录,默认从 provider 模型目录下的 YAML 文件中读取 ModelCard 项;ModelCard.from_yaml() 解析每份 YAML,并把其中的 overrides 合并进 chat model 参数类提供的基础参数 schema。
ModelCard 包含以下字段:
| 字段 | 说明 |
|---|---|
name | provider 侧的模型标识。 |
label | UI 中显示的名称。 |
status | active、deprecated、sunset 之一。 |
deprecated_at | 弃用时间戳,如有。 |
input_types | 模型接收的 MIME 类型(例如 text/plain、image/png、video/mp4)。 |
output_types | 模型输出的 MIME 类型(例如 text/plain、application/x-thinking)。 |
context_size | 上下文窗口的最大 token 数。 |
output_size | 最大输出 token 数。 |
parameter_schema | 请求参数的 JSON schema,自动与各模型 overrides 合并。 |
parameters_overrides | 叠加在基础参数 schema 之上的各模型差异。 |
qwen3.6-plus.yaml
GET /model?provider=<name> 中。
存储后端
StorageBase 抽象类定义了 agent、session、credential、message、schedule 的持久化契约。AgentScope 内置 RedisStorage 实现:
| 记录 | 说明 |
|---|---|
AgentRecord | Agent 配置(name、system prompt、context config、react config)。 |
SessionRecord | Session 状态,包含 AgentState、model 配置与 workspace 绑定。 |
CredentialRecord | 加密保存的 model provider API key。 |
ScheduleRecord | Cron schedule 定义及执行历史。 |
Msg | 按 session 持久化的消息,支持分页。 |
Service 内部结构
如果开发者需要在 AgentScope 中扩展或嵌入 Agent Service 的实际实现,本节描述 FastAPI 应用是如何拼装起来的 —— 启动时跑哪些逻辑、由哪些 manager 持有运行时状态、middleware 在请求路径中的位置,以及 router 如何拿到这些资源。Lifespan
Lifespan context manager 每个进程仅运行一次。启动阶段打开 storage 连接池、实例化内存中的 manager、恢复持久化的 schedule 让其在重启后继续工作。关闭阶段取消进行中的 session 与后台任务、等待 scheduler 排空、关闭 storage 池。Manager
四个 manager 在 lifespan 期间被绑定到 FastAPI 应用状态上,所有请求共享:| Manager | 职责 |
|---|---|
SessionManager | 按 session 串行化(同一 session_id 同时只允许一次活动 run)、SSE 缓冲重放、多订阅者扇出。 |
BackgroundTaskManager | ToolOffloadMiddleware 卸载到后台的工具调用注册表;执行完成后把结果回注 agent 上下文。 |
SchedulerManager | 基于 APScheduler 的 cron 执行;解析目标 session(有状态或无状态)并通过 ChatService 驱动运行。 |
WorkspaceManager | Workspace 生命周期与 TTL 缓存;隔离键(按 agent、按 user、按 session)由子类决定。 |
Middleware
ASGI middleware 包裹每次请求。实际场景中常见两类 ——协议 middleware(例如AGUIProtocolMiddleware)拦截 chat 端点的 SSE 响应并把每帧改写为目标协议;可观测性 middleware(例如 OpenTelemetry tracing)通过 extra_middlewares 不加修改地装入。
依赖
Router 通过 FastAPI 的Depends() 拿到应用状态。标准注入项如下:
| 依赖 | 返回 |
|---|---|
get_current_user_id | 调用者的 user id —— 可被覆盖以对接任意鉴权系统。 |
get_storage | 绑定在 app 上的 StorageBase 实例。 |
get_session_manager | 由 lifespan 绑定的 SessionManager。 |
get_workspace_manager | 由 lifespan 绑定的 WorkspaceManager。 |
get_background_task_manager | 由 lifespan 绑定的 BackgroundTaskManager。 |
get_scheduler_manager | 由 lifespan 绑定的 SchedulerManager。 |
延伸阅读
Agent
Agent 抽象与 ReAct 循环
Message & Event
事件流与消息重建
Tool
内置与自定义 tool,包括外部执行
Context
上下文压缩与 workspace offloading