12 KiB
| feature_id | iteration_id | title | status | version | created_at | inputs | ||
|---|---|---|---|---|---|---|---|---|
| AISVC | v0.8.0-intent-hybrid-routing | 意图识别混合路由优化 - 任务清单 | draft | 0.8.0 | 2026-03-08 |
|
意图识别混合路由优化 - Tasks(v0.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 - 定义
FusionConfigdataclass
- 新增文件:
-
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 - 定义
RuleMatchResultdataclass
- 修改文件:
-
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、IntentRuleUpdateschema - 修改 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 字段 |