# 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 }`)。 --- ## 成功标准 1. **安全**:无 API Key 的请求返回 401,超过速率限制返回 429 2. **异步**:提交任务后 100ms 内返回 task_id,后台异步执行 3. **流式**:ReAct 循环的每个 step(Think/Act/Observe)实时推送给客户端 4. **进化**:Agent 完成任务后自动生成反思记录,可触发 Prompt 优化 5. **测试**:所有新增功能有对应测试,总测试数 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/stream` SSE 端点 - 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 变慢 | 反思和优化增加延迟 | 可配置关闭,异步执行 |