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

8.4 KiB
Raw Blame History

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 变慢 反思和优化增加延迟 可配置关闭,异步执行