fischer-agentkit/docs/brainstorms/2026-06-05-agentkit-archite...

223 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 + TransportHTTP/SSE+ Client | ✅ |
| **Orchestrator** | PipelineEngineDAG + 并行)+ 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 循环的每个 stepThink/Act/Observe实时推送给客户端
4. **进化**Agent 完成任务后自动生成反思记录,可触发 Prompt 优化
5. **测试**:所有新增功能有对应测试,总测试数 600+
---
## 范围边界
**本需求包含**
- B服务化安全R1-R4
- D异步任务R5-R7
- C流式输出R8-R10
- AEvolution 集成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 兼容性好。
### KTD5Evolution 采用可选集成
**理由**:不是所有场景都需要自我进化。通过 YAML 配置 `evolution.enabled: false` 可关闭。
---
## 实现顺序
```
Phase B安全 → Phase D异步任务 → Phase C流式输出 → Phase AEvolution
```
### 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 AEvolution 集成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 变慢 | 反思和优化增加延迟 | 可配置关闭,异步执行 |