8.4 KiB
AgentKit 架构完善需求文档
Created: 2026-06-05 Status: active Topic: agentkit-architecture-gap-analysis Type: feature
问题框架
当前 AgentKit 已实现 12 个核心模块、37 个源文件、6,470 行代码、535 个测试通过。但存在 4 个关键缺口,如果不补齐,框架不能称为"生产就绪的标准 Agent 开发架构"。
目标:将 AgentKit 从"功能完整但缺少生产级特性"提升为"可直接用于生产的标准 Agent 框架"。
当前架构状态
已完整实现(10 个模块)
| 模块 | 核心能力 | 测试覆盖 |
|---|---|---|
| BaseAgent | 生命周期、状态机、并发控制、钩子 | ✅ |
| ConfigDrivenAgent | 4 种任务模式(react/llm/tool/custom) | ✅ |
| ReAct Engine | Think-Act-Observe 循环、Function Calling、文本解析 | ✅ |
| LLM Gateway | Provider 注册、模型路由、Fallback 链、用量追踪 | ✅ |
| Skill System | SkillConfig、SkillRegistry、SkillLoader、向后兼容 | ✅ |
| Intent Router | 关键词匹配 + LLM 分类两级路由 | ✅ |
| Quality Gate | 4 维度检查(必填/字数/Schema/自定义)+ 自动重试 | ✅ |
| Output Standardizer | Schema 验证 + 类型归一化 + 元数据 | ✅ |
| Tool System | FunctionTool、AgentTool、MCPTool、组合模式 | ✅ |
| MCP | Server + Transport(HTTP/SSE)+ Client | ✅ |
| Orchestrator | PipelineEngine(DAG + 并行)+ HandoffManager | ✅ |
| Server | FastAPI + REST API + Python SDK + AgentPool | ✅ |
存在缺口(4 个)
| 缺口 | 当前状态 | 缺失内容 | 严重度 |
|---|---|---|---|
| A. Evolution 集成 | 代码完整,未集成 | Reflector/PromptOptimizer/ABTester 未接入 Agent 生命周期 | 中 |
| B. 服务化安全 | 无认证无限流 | API Key 认证 + 速率限制 + CORS 修复 + SSRF 防护 | 高 |
| C. 流式输出 | 不支持 | SSE streaming + ReAct 事件流 + 客户端流式消费 | 中 |
| D. 异步任务 | Placeholder | 异步执行 + 状态轮询 + WebSocket 推送 | 高 |
已知小问题
| 问题 | 位置 | 状态 |
|---|---|---|
| pgvector 向量检索未实现 | episodic.py:99 |
降级方案可用(时间衰减) |
| custom_handler 缺少白名单 | config_driven.py |
已在 Phase 1 审查中标识 |
| CORS 配置不当 | server/app.py |
allow_origins=["*"] + allow_credentials=True 冲突 |
需求
R1. API Key 认证
所有 Server API 端点(除健康检查外)必须验证 API Key。通过 X-API-Key 请求头传递,密钥从环境变量 AGENTKIT_API_KEY 读取。
R2. 速率限制
Server 必须限制请求频率,防止 LLM 成本耗尽。默认每分钟 60 次请求(可配置),超过时返回 429 Too Many Requests。
R3. CORS 修复
修复 allow_origins=["*"] + allow_credentials=True 冲突。生产环境应限制具体域名。
R4. Callback URL SSRF 防护
TaskDispatcher 的 callback URL 必须验证:只允许 http/https 协议,拒绝内网 IP。
R5. 异步任务执行
POST /api/v1/tasks 必须支持异步模式:提交后返回 task_id,后台执行任务。
R6. 任务状态追踪
GET /api/v1/tasks/{task_id} 必须返回真实状态:PENDING / RUNNING / COMPLETED / FAILED。
R7. 任务结果存储
异步任务的结果必须存储(Redis 或内存),供状态查询和结果获取。
R8. LLM 流式输出
LLM Gateway 必须支持 streaming 模式,逐 chunk 返回 LLM 响应。
R9. ReAct 事件流
ReAct Engine 必须支持 streaming 事件输出,让用户实时看到 Think/Act/Observe 进展。
R10. SSE 流式端点
Server 必须提供 SSE 端点(/api/v1/tasks/stream),支持长时间任务的实时进展推送。
R11. Evolution 集成到 Agent 生命周期
BaseAgent 必须在 on_task_complete() 后自动调用 Reflector 反思,触发 PromptOptimizer 和 ABTester。
R12. Evolution 配置化
Agent 应可通过 YAML 配置启用/禁用 Evolution 功能(evolution: { enabled: true, reflect_after_task: true })。
成功标准
- 安全:无 API Key 的请求返回 401,超过速率限制返回 429
- 异步:提交任务后 100ms 内返回 task_id,后台异步执行
- 流式:ReAct 循环的每个 step(Think/Act/Observe)实时推送给客户端
- 进化:Agent 完成任务后自动生成反思记录,可触发 Prompt 优化
- 测试:所有新增功能有对应测试,总测试数 600+
范围边界
本需求包含:
- B:服务化安全(R1-R4)
- D:异步任务(R5-R7)
- C:流式输出(R8-R10)
- A:Evolution 集成(R11-R12)
本需求不包含:
- GEO 项目的任何改动
- 新的 LLM Provider 实现(如 Anthropic SDK 原生支持)
- 前端 UI 开发
- 生产环境部署配置(K8s、Prometheus 监控等)
- pgvector 向量检索实现(已有降级方案)
关键决策
KTD1:认证采用 API Key 方案(非 JWT/OAuth)
理由:AgentKit Server 是内部服务间调用场景,API Key 足够简单有效。JWT/OAuth 增加复杂度但无明显收益。
KTD2:速率限制采用内存计数器(非 Redis)
理由:单实例部署下内存计数器足够。多实例场景后续可升级为 Redis 滑动窗口。
KTD3:异步任务使用 Redis 存储状态
理由:AgentKit 已有 Redis 依赖(WorkingMemory),复用最简单。内存模式作为降级方案。
KTD4:流式输出使用 SSE(非 WebSocket)
理由:SSE 单向推送足够(服务端 → 客户端),实现比 WebSocket 简单,HTTP 兼容性好。
KTD5:Evolution 采用可选集成
理由:不是所有场景都需要自我进化。通过 YAML 配置 evolution.enabled: false 可关闭。
实现顺序
Phase B(安全) → Phase D(异步任务) → Phase C(流式输出) → Phase A(Evolution)
Phase B:服务化安全(4 个实施单元)
U1. CORS 修复 + API Key 认证中间件
- 修改
src/agentkit/server/app.py - 新建
src/agentkit/server/middleware.py - 实现
APIKeyAuthMiddleware
U2. 速率限制中间件
- 添加到
src/agentkit/server/middleware.py - 实现
RateLimiter(固定窗口计数器) - 可配置:
rate_limit_per_minute
U3. Callback URL SSRF 防护
- 修改
src/agentkit/core/dispatcher.py - 实现
_validate_callback_url()函数
U4. custom_handler 模块前缀白名单
- 修改
src/agentkit/core/config_driven.py - 添加
_ALLOWED_HANDLER_PREFIXES白名单
Phase D:异步任务(3 个实施单元)
U5. 任务状态存储
- 新建
src/agentkit/server/task_store.py - 支持 Redis 和内存两种后端
- TaskState: PENDING / RUNNING / COMPLETED / FAILED
U6. 异步任务执行
- 修改
src/agentkit/server/routes/tasks.py POST /api/v1/tasks改为异步提交- 返回
{"task_id": "...", "status": "PENDING"}
U7. 状态查询 + 结果获取
- 修改
GET /api/v1/tasks/{task_id}返回真实状态 - 新增
GET /api/v1/tasks/{task_id}/result获取结果
Phase C:流式输出(3 个实施单元)
U8. LLM Gateway 流式支持
- 修改
src/agentkit/llm/gateway.py - 新增
stream()方法,SSE chunk-by-chunk - 修改
OpenAICompatibleProvider支持stream=True
U9. ReAct Engine 事件流
- 修改
src/agentkit/core/react.py - 新增
execute_streaming()方法 - 每个 Think/Act/Observe step 发出事件
U10. SSE 流式端点
- 新增
src/agentkit/server/routes/streaming.py POST /api/v1/tasks/streamSSE 端点- Client SDK 支持流式消费
Phase A:Evolution 集成(2 个实施单元)
U11. Evolution 生命周期钩子
- 修改
src/agentkit/core/base.py on_task_complete()后自动调用 Reflector- 通过 EvolutionMixin 集成
U12. Evolution 配置化
- 修改
AgentConfig添加evolution字段 - 修改
SkillConfig继承 evolution 配置 - YAML 配置示例
风险与缓解
| 风险 | 影响 | 缓解 |
|---|---|---|
| 流式输出改动大 | ReAct Engine 需要重构 | 保持原有同步接口不变,新增 streaming 接口 |
| 异步任务需要 Redis | 测试环境可能没有 Redis | 提供内存降级方案 |
| API Key 认证破坏现有测试 | 测试需要传递 API Key | 测试环境设置环境变量 |
| Evolution 集成后 Agent 变慢 | 反思和优化增加延迟 | 可配置关闭,异步执行 |