245 lines
8.4 KiB
Markdown
245 lines
8.4 KiB
Markdown
---
|
||
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前端配置
|
||
- 消息总线持久化
|