--- title: "feat: AgentKit 劣势项改进" status: active created: 2026-06-10 plan_type: feat --- # feat: AgentKit 劣势项改进 ## Summary 针对代码审查后识别的 6 个延后劣势项进行改进:Soul演变多维度触发、中文分词增强、端到端可观测性、测试覆盖补充、ReWOO渐进回退、Agent间通信协议。 ## Problem Frame 当前 AgentKit 的多Agent架构已基本成型,但存在 6 个影响生产就绪度的劣势项。这些项不阻塞核心功能,但会随使用规模扩大而暴露问题。 ## Scope Boundaries ### In Scope - Soul演变多维度触发(时间衰减+质量梯度+场景权重) - 中文分词增强(2-gram+停用词,零依赖) - 端到端可观测性(OpenTelemetry埋点) - 集成测试补充(多模块交互测试) - ReWOO渐进回退链 - Agent间通信协议(消息总线) ### Out of Scope - jieba分词集成(可选依赖,后续按需) - 分布式消息总线(Redis实现,后续按需) - Live测试(需要真实API Key,CI中标记跳过) - UI可视化trace(Jaeger/Zipkin前端,运维配置) --- ## Key Technical Decisions ### KTD1: 中文分词采用2-gram+停用词方案(零依赖) jieba虽精准但是额外依赖,2-gram方案对"数据分析""代码生成"等复合词已有足够捕获率。后续可按需引入jieba作为可选依赖。 ### KTD2: 可观测性基于OpenTelemetry标准 各引擎已有 `trace_recorder` 参数,只需实现 OTel 导出器。配置通过 `telemetry.otlp_endpoint` 启用。 ### KTD3: Agent间通信采用请求-响应+广播+协商三模式 基于 `AgentMessage` 数据类和 `MessageBus` 接口。先实现 `InMemoryMessageBus`,后续扩展 `RedisMessageBus`。 ### KTD4: ReWOO回退链为 ReWOO简化→PlanExec→ReAct→Direct 渐进式降级,每一步保留更多结构化能力。 --- ## Implementation Units ### U1. Soul演变多维度触发 **Goal:** 扩展Soul演变触发条件,支持时间衰减、质量梯度、场景权重 **Dependencies:** None **Files:** - Modify: `src/agentkit/evolution/lifecycle.py` - Modify: `src/agentkit/evolution/config.py` (新增 SoulEvolutionConfig) - Test: `tests/unit/test_soul_evolution.py` **Approach:** 1. 新增 `SoulEvolutionConfig` dataclass,包含 `reflection_window_seconds`、`time_decay_factor`、`task_type_weights`、`quality_gradient_threshold` 2. 修改 `evolve_soul` 方法:时间衰减计算 `effective_count = sum(factor^age_hours)` 替代 `len(reflections)` 3. 新增质量梯度检测:追踪最近N次评分趋势,连续下降超过阈值时提前触发 4. 场景权重:高风险任务降低触发阈值 **Test scenarios:** - 时间衰减:1小时内的3次反思触发,超过窗口的不计入 - 质量梯度:连续3次评分下降0.15触发,即使总反思次数<3 - 场景权重:code_generation任务2次即触发(权重1.5),chat任务需4次(权重0.5) - 兼容性:无config时行为与现有一致 **Verification:** 新增测试全部通过,现有Soul演变测试不受影响 --- ### U2. 中文分词增强 **Goal:** 替换空格分词为2-gram+停用词方案,提升中文能力关键词提取 **Dependencies:** None **Files:** - Modify: `src/agentkit/chat/skill_routing.py` - Test: `tests/unit/test_cost_aware_router.py` **Approach:** 1. 提取 `_tokenize_content()` 为独立方法 2. 标点分割 → 对长中文段补充2-gram → 停用词过滤 3. Layer 2 路由调用新方法 **Test scenarios:** - 中文:"帮我做数据分析" → 提取 ["数据分析", "帮我"] - 英文:"help with code generation" → 提取 ["code generation", "help"] - 混合:"用python做data analysis" → 提取 ["python", "data analysis"] - 停用词过滤:"的了一个" → 过滤后为空 **Verification:** 中文分词测试通过,现有路由测试不受影响 --- ### U3. 端到端可观测性(OpenTelemetry埋点) **Goal:** 为核心组件添加OTel trace/metrics埋点 **Dependencies:** None **Files:** - Create: `src/agentkit/telemetry/__init__.py` - Create: `src/agentkit/telemetry/tracer.py` (OTel导出器) - Modify: `src/agentkit/chat/skill_routing.py` (路由埋点) - Modify: `src/agentkit/core/react.py` (ReAct埋点) - Modify: `src/agentkit/core/rewoo.py` (ReWOO埋点) - Modify: `src/agentkit/core/reflexion.py` (Reflexion埋点) - Modify: `src/agentkit/quality/alignment.py` (Guard埋点) - Test: `tests/unit/test_telemetry.py` **Approach:** 1. 定义 `TelemetryConfig` 和 `get_tracer()` 工厂 2. 实现 `OTelTraceRecorder` 适配器,桥接现有 `TraceRecorder` 接口 3. 各组件在关键节点创建 Span:路由决策、引擎执行、约束检查 4. 配置通过 `telemetry.otlp_endpoint` 启用,未配置时为 no-op **Test scenarios:** - 未配置时:所有埋点为 no-op,不影响功能 - 配置endpoint时:Span正确创建,属性包含 layer/complexity/status 等 - 路由埋点:Layer 0/1/2 各产生带属性的 Span - 引擎埋点:执行完成后 Span 记录 steps_count/total_tokens/status **Verification:** 新增测试通过,无OTel依赖时功能正常 --- ### U4. 集成测试补充 **Goal:** 补充多模块交互集成测试,覆盖核心链路 **Dependencies:** U1, U2 **Files:** - Create: `tests/integration/test_router_engine_chain.py` - Create: `tests/integration/test_rewoo_fallback.py` - Create: `tests/integration/test_reflexion_loop.py` - Create: `tests/integration/test_soul_evolution_trigger.py` **Approach:** 1. 路由→执行→审计全链路测试(仅mock LLM) 2. ReWOO规划失败→回退测试 3. Reflexion多轮循环测试 4. Soul演变触发条件测试 **Test scenarios:** - 全链路:CostAwareRouter路由到ReActEngine → AlignmentGuard检查通过 - 全链路违规:AlignmentGuard检查失败,返回violations - ReWOO回退:规划异常时正确回退到ReAct - Reflexion:3轮循环后返回最佳结果 - Soul触发:3次低质量反思后触发update_soul **Verification:** 集成测试全部通过 --- ### U5. ReWOO渐进回退链 **Goal:** ReWOO规划失败时渐进降级,而非直接回退ReAct **Dependencies:** None **Files:** - Modify: `src/agentkit/core/rewoo.py` - Test: `tests/unit/test_rewoo_engine.py` **Approach:** 1. 新增 `FALLBACK_CHAIN` 配置:simplified_rewoo → plan_exec → react → direct 2. 规划失败时先尝试简化规划(max_plan_steps=3) 3. 简化仍失败则按链降级 4. 回退信息记录在 ReWOOResult 中 **Test scenarios:** - 正常规划成功:无回退 - 规划失败→简化规划成功:结果标记 fallback=simplified - 规划失败→简化失败→ReAct回退:结果标记 fallback=react - 所有回退都失败:返回错误结果 **Verification:** 回退链测试通过 --- ### U6. Agent间通信协议 **Goal:** 实现轻量级消息总线,支持Agent间请求-响应、广播、协商 **Dependencies:** None **Files:** - Create: `src/agentkit/bus/__init__.py` - Create: `src/agentkit/bus/message.py` (AgentMessage数据类) - Create: `src/agentkit/bus/interface.py` (MessageBus接口) - Create: `src/agentkit/bus/memory_bus.py` (InMemoryMessageBus实现) - Modify: `src/agentkit/server/app.py` (初始化MessageBus) - Test: `tests/unit/test_agent_bus.py` **Approach:** 1. 定义 `AgentMessage` dataclass:sender, recipient, msg_type, content, correlation_id, timestamp, ttl 2. 定义 `MessageBus` 抽象接口:publish, subscribe, request 3. 实现 `InMemoryMessageBus`:基于 asyncio.Queue 4. 与 AlignmentGuard 集成:消息经过约束检查 5. 与 CascadeDetector 集成:消息传递计入级联检测 **Test scenarios:** - 请求-响应:Agent A发送请求,Agent B响应,correlation_id匹配 - 广播:Agent A广播,所有订阅者收到 - 协商:Agent A发起协商,Agent B回复建议 - TTL过期:超时消息被丢弃 - 级联检测:超过阈值的消息链触发 CascadeAlert **Verification:** 消息总线测试通过,与Guard/Cascade集成正确 --- ## Risks & Mitigations | Risk | Impact | Mitigation | |------|--------|------------| | OTel依赖增加包体积 | Low | OTel为可选依赖,未配置时no-op | | 消息总线内存泄漏 | Medium | TTL过期清理 + 定期GC | | ReWOO回退链增加延迟 | Low | 每步设置timeout,总回退时间上限5s | | 2-gram分词噪声 | Low | 停用词过滤 + 长度阈值 | ## Deferred to Follow-Up Work - jieba分词集成(可选依赖) - RedisMessageBus分布式实现 - Live测试(需真实API Key) - Jaeger/Zipkin前端配置 - 消息总线持久化