fischer-agentkit/docs/plans/2026-06-10-019-feat-agentki...

245 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.

---
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 KeyCI中标记跳过
- UI可视化traceJaeger/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.5chat任务需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
- Reflexion3轮循环后返回最佳结果
- 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` dataclasssender, 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前端配置
- 消息总线持久化