ai-robot-core/spec/ai-service/iterations/v0.8.0-intent-hybrid-routing/tasks.md

315 lines
12 KiB
Markdown
Raw Permalink Normal View History

---
feature_id: "AISVC"
iteration_id: "v0.8.0-intent-hybrid-routing"
title: "意图识别混合路由优化 - 任务清单"
status: "draft"
version: "0.8.0"
created_at: "2026-03-08"
inputs:
- "spec/ai-service/iterations/v0.8.0-intent-hybrid-routing/requirements.md"
- "spec/ai-service/iterations/v0.8.0-intent-hybrid-routing/design.md"
---
# 意图识别混合路由优化 - Tasksv0.8.0
## 1. 任务拆分原则
- **原子性**:每个任务仅解决一个具体技术点或功能逻辑
- **可验证性**:任务完成后必须可通过单元测试、接口冒烟或契约校验
- **弱模型可执行**:任务描述清晰,不依赖 AI 猜测业务逻辑
- **AC 关联**:每个任务关联明确的验收标准 ID
---
## 2. 任务状态说明
- ⏳ 待处理
- 🔄 进行中
- ✅ 已完成
- ❌ 已取消
---
## 3. 任务执行计划
### Phase 17.1: 数据模型扩展
- [ ] T17.1 扩展 `IntentRule` 实体:新增 `intent_vector`JSONB、`semantic_examples`JSONB字段 `[AC-AISVC-114]`
- 修改文件: `app/models/entities.py`
- 新增字段定义与注释
- 数据库迁移: `alembic revision --autogenerate -m "add_intent_vector_fields"`
- [ ] T17.2 创建 `FusionConfig` 配置模型:定义融合权重与阈值参数 `[AC-AISVC-116]`
- 新增文件: `app/services/intent/models.py`
- 定义 `FusionConfig` dataclass
- [ ] T17.3 创建 `RouteTrace` 追踪模型:定义三路打分日志结构 `[AC-AISVC-122]`
- 修改文件: `app/services/intent/models.py`
- 定义 `RouteTrace`、`FusionResult` 等 dataclass
- [ ] T17.4 扩展 `ChatMessage` 实体:新增 `route_trace`JSONB字段 `[AC-AISVC-123]`
- 修改文件: `app/models/entities.py`
- 数据库迁移: `alembic revision --autogenerate -m "add_route_trace_field"`
---
### Phase 17.2: RuleMatcher 改造
- [ ] T17.5 创建 `RuleMatchResult` 数据类:封装规则匹配结果(含 score `[AC-AISVC-112]`
- 修改文件: `app/services/intent/models.py`
- 定义 `RuleMatchResult` dataclass
- [ ] T17.6 改造 `IntentRouter``RuleMatcher`:增加 score 输出,保留 `match()` 向后兼容 `[AC-AISVC-112]`
- 修改文件: `app/services/intent/router.py`
- 重构现有匹配逻辑,封装为 `RuleMatcher`
- 输出 `RuleMatchResult` 而非 `IntentMatchResult`
---
### Phase 17.3: SemanticMatcher 实现
- [ ] T17.7 实现 `SemanticMatcher` 类:初始化方法,注入 EmbeddingProvider 和配置 `[AC-AISVC-113]`
- 新增文件: `app/services/intent/semantic_matcher.py`
- 定义 `SemanticMatcher`
- 实现 `__init__` 方法
- [ ] T17.8 实现 `SemanticMatcher.match()`:模式 A预置向量相似度计算 `[AC-AISVC-114]`
- 修改文件: `app/services/intent/semantic_matcher.py`
- 实现 `_calculate_similarity` 方法
- 实现 `_cosine_similarity` 方法
- [ ] T17.9 实现 `SemanticMatcher.match()`:模式 B示例句动态计算平均相似度 `[AC-AISVC-114]`
- 修改文件: `app/services/intent/semantic_matcher.py`
- 支持从 `semantic_examples` 动态计算向量
- [ ] T17.10 实现 `SemanticMatcher` 异常处理Embedding/Qdrant 失败时跳过并记录原因 `[AC-AISVC-113]`
- 修改文件: `app/services/intent/semantic_matcher.py`
- 添加超时控制
- 添加异常捕获与日志记录
---
### Phase 17.4: LlmJudge 实现
- [ ] T17.11 实现 `LlmJudge` 类:初始化方法,注入 LLMClient 和配置 `[AC-AISVC-119]`
- 新增文件: `app/services/intent/llm_judge.py`
- 定义 `LlmJudge`
- 定义 `JUDGE_PROMPT` 模板
- [ ] T17.12 实现 `LlmJudge.should_trigger()`:判断是否满足触发条件(冲突/灰区/多意图) `[AC-AISVC-118]`
- 修改文件: `app/services/intent/llm_judge.py`
- 实现三种触发条件判断
- [ ] T17.13 实现 `LlmJudge.judge()`:构建仲裁 Prompt调用 LLM解析结果 `[AC-AISVC-119]`
- 修改文件: `app/services/intent/llm_judge.py`
- 实现 `_build_candidates_text` 方法
- 实现 `_parse_response` 方法
- [ ] T17.14 实现 `LlmJudge` 异常处理LLM 调用失败时回退到 SemanticMatcher `[AC-AISVC-119]`
- 修改文件: `app/services/intent/llm_judge.py`
- 添加超时控制
- 添加异常捕获与日志记录
---
### Phase 17.5: FusionPolicy 实现
- [ ] T17.15 实现 `FusionPolicy` 类:初始化方法,加载配置 `[AC-AISVC-115]`
- 新增文件: `app/services/intent/fusion_policy.py`
- 定义 `FusionPolicy`
- 定义 `DECISION_PRIORITY` 常量
- [ ] T17.16 实现 `FusionPolicy.fuse()`:加权融合计算 `[AC-AISVC-116]`
- 修改文件: `app/services/intent/fusion_policy.py`
- 实现 `_calculate_weighted_confidence` 方法
- [ ] T17.17 实现 `FusionPolicy.fuse()`决策优先级判定规则优先→语义→LLM→无匹配 `[AC-AISVC-117]`
- 修改文件: `app/services/intent/fusion_policy.py`
- 实现优先级遍历与条件判断
- [ ] T17.18 实现 `FusionPolicy.fuse()`:澄清触发判定 `[AC-AISVC-121]`
- 修改文件: `app/services/intent/fusion_policy.py`
- 判断 `final_confidence < clarify_threshold`
- 生成 `clarify_candidates` 列表
- [ ] T17.19 实现 `FusionPolicy.fuse()`:路由追踪日志生成 `[AC-AISVC-122]`
- 修改文件: `app/services/intent/fusion_policy.py`
- 构建 `RouteTrace` 对象
- 记录三路打分详情
---
### Phase 17.6: IntentRouter 升级
- [ ] T17.20 升级 `IntentRouter`:注入 RuleMatcher、SemanticMatcher、LlmJudge、FusionPolicy `[AC-AISVC-111]`
- 修改文件: `app/services/intent/router.py`
- 修改 `__init__` 方法
- 支持依赖注入
- [ ] T17.21 实现 `IntentRouter.match_hybrid()`:并行执行 RuleMatcher + SemanticMatcher `[AC-AISVC-111]`
- 修改文件: `app/services/intent/router.py`
- 使用 `asyncio.gather` 并行执行
- [ ] T17.22 实现 `IntentRouter.match_hybrid()`:条件触发 LlmJudge `[AC-AISVC-118]`
- 修改文件: `app/services/intent/router.py`
- 调用 `LlmJudge.should_trigger()`
- 条件执行 `LlmJudge.judge()`
- [ ] T17.23 实现 `IntentRouter.match_hybrid()`:调用 FusionPolicy 返回融合结果 `[AC-AISVC-115]`
- 修改文件: `app/services/intent/router.py`
- 调用 `FusionPolicy.fuse()`
- 返回 `FusionResult`
---
### Phase 17.7: Orchestrator 集成
- [ ] T17.24 修改 `Orchestrator._match_intent()`:调用 `match_hybrid()` 替代 `match()` `[AC-AISVC-111]`
- 修改文件: `app/services/orchestrator.py`
- 替换方法调用
- 处理 `FusionResult` 返回值
- [ ] T17.25 修改 `Orchestrator._match_intent()`:将 `route_trace` 写入 `GenerationContext` `[AC-AISVC-122]`
- 修改文件: `app/services/orchestrator.py`
- 扩展 `GenerationContext` 添加 `route_trace` 字段
- [ ] T17.26 修改 `Orchestrator._build_response()`:在响应 metadata 中包含 `route_trace` `[AC-AISVC-123]`
- 修改文件: `app/services/orchestrator.py`
-`route_trace` 写入响应 metadata
---
### Phase 17.8: 配置与 API
- [ ] T17.27 新增融合配置 API`GET /admin/intent-rules/fusion-config` `[AC-AISVC-116]`
- 修改文件: `app/api/admin/intent_rules.py`
- 返回当前融合配置
- [ ] T17.28 新增融合配置 API`PUT /admin/intent-rules/fusion-config` `[AC-AISVC-116]`
- 修改文件: `app/api/admin/intent_rules.py`
- 更新融合配置(支持热更新)
- [ ] T17.29 扩展意图规则 API支持 `intent_vector``semantic_examples` 字段的 CRUD `[AC-AISVC-114]`
- 修改文件: `app/api/admin/intent_rules.py`
- 修改 `IntentRuleCreate`、`IntentRuleUpdate` schema
- 修改 CRUD 方法
- [ ] T17.30 新增意图向量生成 API`POST /admin/intent-rules/{id}/generate-vector` `[AC-AISVC-114]`
- 修改文件: `app/api/admin/intent_rules.py`
- 调用 EmbeddingProvider 生成向量
- 更新规则的 `intent_vector` 字段
---
### Phase 17.9: 监控与追踪
- [ ] T17.31 修改监控 API`GET /admin/monitoring/conversations/{id}` 返回 `route_trace` `[AC-AISVC-123]`
- 修改文件: `app/api/admin/monitoring.py`
- 扩展响应 schema
---
### Phase 17.10: 测试与验证
- [ ] T17.32 编写 `SemanticMatcher` 单元测试Mock Embedding/Qdrant `[AC-AISVC-113, AC-AISVC-114]`
- 新增文件: `tests/test_semantic_matcher.py`
- 测试正常匹配、跳过场景、异常处理
- [ ] T17.33 编写 `LlmJudge` 单元测试Mock LLM 调用 `[AC-AISVC-118, AC-AISVC-119]`
- 新增文件: `tests/test_llm_judge.py`
- 测试触发条件、仲裁结果、异常处理
- [ ] T17.34 编写 `FusionPolicy` 单元测试:覆盖各种融合场景 `[AC-AISVC-115~AC-AISVC-117]`
- 新增文件: `tests/test_fusion_policy.py`
- 测试决策优先级、加权融合、澄清触发
- [ ] T17.35 编写 `IntentRouter.match_hybrid()` 集成测试:验证完整路由链路 `[AC-AISVC-111]`
- 新增文件: `tests/test_intent_router_hybrid.py`
- 测试并行执行、条件触发、融合决策
- [ ] T17.36 性能测试:验证 P95 延迟满足约束 `[AC-AISVC-125]`
- 新增文件: `tests/perf/test_intent_latency.py`
- 测试 RuleMatcher < 10ms
- 测试 SemanticMatcher < 100ms
- 测试 P95 总增量延迟 < 500ms不含 LlmJudge
---
## 4. 任务进度追踪
| Phase | 描述 | 任务数 | 状态 |
|-------|------|--------|------|
| Phase 17.1 | 数据模型扩展 | 4 | ⏳ 待处理 |
| Phase 17.2 | RuleMatcher 改造 | 2 | ⏳ 待处理 |
| Phase 17.3 | SemanticMatcher 实现 | 4 | ⏳ 待处理 |
| Phase 17.4 | LlmJudge 实现 | 4 | ⏳ 待处理 |
| Phase 17.5 | FusionPolicy 实现 | 5 | ⏳ 待处理 |
| Phase 17.6 | IntentRouter 升级 | 4 | ⏳ 待处理 |
| Phase 17.7 | Orchestrator 集成 | 3 | ⏳ 待处理 |
| Phase 17.8 | 配置与 API | 4 | ⏳ 待处理 |
| Phase 17.9 | 监控与追踪 | 1 | ⏳ 待处理 |
| Phase 17.10 | 测试与验证 | 5 | ⏳ 待处理 |
**总任务数: 36**
---
## 5. 依赖关系
```
Phase 17.1 (数据模型)
├──→ Phase 17.2 (RuleMatcher)
├──→ Phase 17.3 (SemanticMatcher)
└──→ Phase 17.4 (LlmJudge)
└──→ Phase 17.5 (FusionPolicy)
└──→ Phase 17.6 (IntentRouter 升级)
└──→ Phase 17.7 (Orchestrator 集成)
└──→ Phase 17.8 (配置与 API)
└──→ Phase 17.9 (监控与追踪)
└──→ Phase 17.10 (测试与验证)
```
---
## 6. 文件变更汇总
### 6.1 新增文件
| 文件路径 | 说明 |
|----------|------|
| `app/services/intent/models.py` | 数据模型定义 |
| `app/services/intent/semantic_matcher.py` | 语义匹配器 |
| `app/services/intent/llm_judge.py` | LLM 仲裁器 |
| `app/services/intent/fusion_policy.py` | 融合决策策略 |
| `tests/test_semantic_matcher.py` | 语义匹配单元测试 |
| `tests/test_llm_judge.py` | LLM 仲裁单元测试 |
| `tests/test_fusion_policy.py` | 融合决策单元测试 |
| `tests/test_intent_router_hybrid.py` | 混合路由集成测试 |
| `tests/perf/test_intent_latency.py` | 性能测试 |
### 6.2 修改文件
| 文件路径 | 变更说明 |
|----------|----------|
| `app/models/entities.py` | 扩展 IntentRule、ChatMessage 实体 |
| `app/services/intent/router.py` | 新增 `match_hybrid()` 方法,封装 `RuleMatcher` |
| `app/services/orchestrator.py` | Step 3 调用 `match_hybrid()` |
| `app/api/admin/intent_rules.py` | 新增融合配置 API、向量生成 API |
| `app/api/admin/monitoring.py` | 返回 `route_trace` 字段 |
### 6.3 数据库迁移
| 迁移文件 | 说明 |
|----------|------|
| `alembic/versions/xxx_add_intent_vector_fields.py` | 新增 intent_vector、semantic_examples 字段 |
| `alembic/versions/xxx_add_route_trace_field.py` | 新增 route_trace 字段 |