乐于分享
好东西不私藏

AI Agent平台CoPaw源码学习——系统层级概览:02 API路由层

AI Agent平台CoPaw源码学习——系统层级概览:02 API路由层

API 路由层基于 FastAPI 框架,提供 RESTful API 接口,是前端 Console、CLI 和外部调用方与后端业务逻辑之间的桥梁。负责请求路由分发、参数校验、响应格式化。

这是 CoPaw 系统的门面层,所有外部请求都通过这里进入后端。


核心职责

  1. 请求路由分发:将 URL 路径映射到具体的处理函数
  2. 参数校验:使用 Pydantic 定义请求/响应体,自动验证
  3. 响应格式化:统一返回格式
  4. 生命周期管理:启动/关闭时协调各管理器

路由文件结构

所有子路由在 app/routers/__init__.py 中聚合为一个统一的 APIRouter,挂载到 FastAPI 应用的 /api 前缀下:

路由文件
前缀
标签
功能说明
agent.py
/agent
agent
Agent 工作文件管理
config.py
/config
config
渠道配置管理
console.py
/console
console
Console 推送/下载管理
crons/api.py
定时任务 CRUD
local_models.py
本地模型管理
mcp.py
MCP 客户端管理
ollama_models.py
Ollama 模型管理
providers.py
LLM 供应商管理
runner/api.py
聊天/会话 CRUD
skills.py
/skills
skills
技能管理
workspace.py
工作区文件管理
envs.py
环境变量管理

此外,_app.py 中还挂载了 AgentScope Runtime 的 agent_app.router 到 /api/agent 前缀。


核心 API 端点

Agent 管理 (/api/agent)

方法
路径
功能
GET
/agent/md-files
获取 Agent 工作 MD 文件列表
GET
/agent/md-files/{name}
获取 MD 文件内容
PUT
/agent/md-files/{name}
更新 MD 文件内容

配置管理 (/api/config)

方法
路径
功能
GET
/config/channels
获取可用渠道列表
GET
/config/channels/{channel}
获取渠道配置
PUT
/config/channels/{channel}
更新渠道配置

技能管理 (/api/skills)

方法
路径
功能
GET
/skills/
获取技能列表
POST
/skills/
创建自定义技能
PUT
/skills/{name}/enable
启用技能
PUT
/skills/{name}/disable
禁用技能
GET
/skills/hub/search
搜索技能市场
POST
/skills/hub/install
安装市场技能

其他端点

路径前缀
功能
/api/cron
定时任务增删改查
/api/runner
聊天会话管理
/api/providers
LLM 供应商管理
/api/envs
环境变量管理
/api/local-models
本地模型下载/管理
/api/ollama
Ollama 模型管理
/api/mcp
MCP 客户端配置
/api/workspace
工作区文件操作
/api/version
获取版本号

请求/响应模式

所有路由遵循统一模式:

  1. 路由函数为 async def
  2. 使用 Pydantic 定义 BaseModel 请求/响应体
  3. 通过 request.app.state.* 访问全局管理器(Runner、ChannelManager、CronManager 等)
  4. 配置类操作使用 load_config() / save_config()

关键代码路径

copaw/app/├─ _app.py                    # FastAPI 应用主入口,路由挂载├─ routers/│ ├─ __init__.py              # 路由聚合│ ├─ agent.py                 # Agent 配置 API│ ├─ config.py                # 渠道配置 API│ ├─ console.py               # Console 推送 API│ ├─ crons/                   # 定时任务 API│ ├─ envs.py                  # 环境变量 API│ ├─ local_models.py          # 本地模型 API│ ├─ mcp.py                   # MCP API│ ├─ ollama_models.py         # Ollama API│ ├─ providers.py             # 供应商 API│ ├─ runner/                  # Runner API│ ├─ skills.py                # 技能 API│ ├─ workspace.py             # 工作区 API│ └─ ...

技术实现

核心依赖

  • FastAPI:异步 Web 框架
  • Pydantic:请求/响应数据验证
  • CORS:当前开发模式允许所有来源

中间件

  • CORSMiddleware:跨域资源共享
  • 静态文件服务:Console 前端静态文件

生命周期管理

应用使用 lifespan 上下文管理器在启动/关闭时:

启动顺序

  1. runner.start() — 初始化 sessions + MemoryManager
  2. MCPClientManager.init_from_config() — 连接 MCP 工具服务器
  3. runner.set_mcp_manager(mcp_manager) — 注入 MCP 到 runner
  4. ChannelManager.from_config() — 从 config.json 创建渠道实例
  5. channel_manager.start_all() — 启动每个渠道的消费循环
  6. CronManager — 启动定时任务
  7. ChatManager — 聊天持久化,注入到 runner
  8. ConfigWatcher / MCPConfigWatcher — 文件监听热重载

关闭顺序: watchers → cron → channels → MCP → runner


与其他层的交互

上层依赖(被调用)

  • 前端 Console:通过 HTTP 调用所有 API 端点
  • CLI 层:部分 CLI 命令通过 HTTP 与 API 交互

下层调用

  • Agent 运行层:通过 app.state.runner 管理聊天和查询
  • 渠道通信层:通过 app.state.channel_manager 管理渠道
  • 定时任务系统:通过 app.state.cron_manager 管理定时任务
  • 配置层:通过 load_config() / save_config() 读写配置
  • 技能系统:通过 SkillService 和 SkillsHub 管理技能

重要设计细节

1. 管理器共享机制所有管理器通过 app.state 共享,路由函数通过 request.app.state.* 访问。这是一种经典的依赖注入模式。

2. OpenAPI 文档OpenAPI 文档默认关闭(COPAW_OPENAPI_DOCS=false),开发时设为 true 可启用。

3. 版本端点版本端点直接在 _app.py 中定义,不在 routers 中。


总结

API 路由层是 CoPaw 系统的中枢神经:

  • FastAPI + Pydantic:类型安全、自动化验证
  • 统一路由聚合:所有子路由集中管理
  • 生命周期管理:启动/关闭时协调各组件
  • 状态共享:通过 app.state 访问全局管理器
  • 热重载支持:配合 ConfigWatcher 实现配置变更自动生效

作为前后端分离的桥梁,API 路由层把底层的复杂能力封装成简洁的 HTTP 接口,上层(Console UI、CLI)不需要关心实现细节。