ai-robot-core/spec/intent-driven-script/tasks.md

1127 lines
30 KiB
Markdown
Raw Normal View History

# 意图驱动话术流程 - 任务分解
---
feature_id: "IDS"
title: "意图驱动话术流程任务清单"
status: "in-progress"
version: "1.2.0"
last_updated: "2026-03-01"
---
## 任务概览
本文档将需求规范中的 13 个验收标准分解为可执行的开发任务,按 Phase 组织。
**总体进度**: 22/26 任务完成 (85%)
| Phase | 描述 | 任务数 | 完成数 | 进度 |
|-------|------|--------|--------|------|
| Phase 1 | 数据模型与 API 扩展 | 4 | 4 | 100% |
| Phase 2 | 后端话术生成引擎 | 6 | 6 | 100% |
| Phase 3 | 前端配置界面 | 6 | 6 | 100% |
| Phase 4 | 测试与验证 | 6 | 6 | 100% |
| Phase 5 | 部署与发布 | 4 | 0 | 0% |
---
## Phase 1: 数据模型与 API 扩展
**目标**: 扩展数据结构和 API 契约,为意图驱动话术提供基础
**预计工时**: 0.5 天
**依赖**: 无
### Task 1.1: 扩展 Python 类型定义
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-01
- **优先级**: P0
- **依赖**: 无
- **负责人**: backend
**描述**: 在后端 Python 代码中扩展 FlowStep 的类型定义
**文件修改**:
- `ai-service/app/models/entities.py``ai-service/app/schemas/script_flow.py`
**具体步骤**:
1. 找到 `FlowStep` 相关的类型定义(可能在 Pydantic model 或 TypedDict 中)
2. 添加以下可选字段:
```python
script_mode: Optional[Literal["fixed", "flexible", "template"]] = "fixed"
intent: Optional[str] = None
intent_description: Optional[str] = None
script_constraints: Optional[List[str]] = None
expected_variables: Optional[List[str]] = None
```
3. 确保向后兼容:所有新字段都是可选的,有默认值
**验收测试**:
```python
# 测试向后兼容
step_old = {"step_no": 1, "content": "Hello"}
# 应该能正常解析script_mode 默认为 "fixed"
# 测试新字段
step_new = {
"step_no": 1,
"script_mode": "flexible",
"intent": "获取用户姓名",
"script_constraints": ["必须礼貌"],
"content": "请问怎么称呼您?"
}
# 应该能正常解析
```
**完成标准**:
- [x] 类型定义已扩展
- [x] 所有新字段都是可选的
- [x] 代码通过类型检查mypy/pyright
---
### Task 1.2: 扩展前端 TypeScript 类型定义
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-07
- **优先级**: P0
- **依赖**: 无
- **负责人**: frontend
**描述**: 在前端 TypeScript 代码中扩展 FlowStep 接口
**文件修改**:
- `ai-service-admin/src/types/script-flow.ts`
**具体步骤**:
1. 打开 `script-flow.ts` 文件
2. 找到 `FlowStep` 接口定义
3. 添加新字段:
```typescript
export type ScriptMode = 'fixed' | 'flexible' | 'template'
export interface FlowStep {
// ... 现有字段 ...
// 新增字段
script_mode?: ScriptMode
intent?: string
intent_description?: string
script_constraints?: string[]
expected_variables?: string[]
}
```
4. 添加常量定义:
```typescript
export const SCRIPT_MODE_OPTIONS = [
{ value: 'fixed', label: '固定话术', description: '话术内容固定不变' },
{ value: 'flexible', label: '灵活话术', description: 'AI根据意图和上下文生成' },
{ value: 'template', label: '模板话术', description: 'AI填充模板中的变量' }
] as const
```
**完成标准**:
- [x] TypeScript 类型定义已扩展
- [x] 所有新字段都是可选的
- [x] 代码通过 TypeScript 编译
---
### Task 1.3: 更新 OpenAPI 契约
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-02
- **优先级**: P0
- **依赖**: Task 1.1
**描述**: 更新 openapi.admin.yaml 中 ScriptFlow 相关接口的 schema
**文件修改**:
- `spec/intent-driven-script/openapi.admin.yaml``ai-service/openapi/admin.yaml`
**具体步骤**:
1. 找到 `FlowStepSchema` 定义
2. 添加新字段定义:
```yaml
script_mode:
type: string
enum: [fixed, flexible, template]
default: fixed
description: 话术生成模式
intent:
type: string
description: 步骤意图(灵活模式必填)
intent_description:
type: string
description: 意图详细说明
script_constraints:
type: array
items:
type: string
description: 话术约束条件
expected_variables:
type: array
items:
type: string
description: 期望提取的变量
```
3. 更新接口文档说明
4. 标记契约成熟度为 L1
**完成标准**:
- [x] OpenAPI schema 已更新
- [x] 所有新字段标记为 optional
- [x] 契约通过 lint 校验
---
### Task 1.4: 验证 API 向后兼容性
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-02, AC-IDS-13
- **优先级**: P0
- **依赖**: Task 1.1, Task 1.3
**描述**: 确保 API 扩展不破坏现有客户端
**测试场景**:
1. 使用旧版请求体创建流程(不包含新字段)
2. 验证流程能正常保存和执行
3. 验证 API 响应包含新字段(值为 null 或默认值)
**测试文件**:
- `ai-service/tests/api/test_script_flow_backward_compat.py`
**测试用例**:
```python
async def test_create_flow_without_new_fields():
"""测试不包含新字段的请求能正常工作"""
payload = {
"name": "测试流程",
"steps": [
{"step_no": 1, "content": "Hello", "wait_input": True}
]
}
response = await client.post("/admin/script-flows", json=payload)
assert response.status_code == 201
# 验证响应包含新字段(默认值)
flow = response.json()
assert flow["steps"][0]["script_mode"] == "fixed"
assert flow["steps"][0]["intent"] is None
async def test_execute_old_flow():
"""测试旧流程能正常执行"""
# 创建不包含新字段的流程
# 启动流程
# 验证返回固定话术
```
**完成标准**:
- [x] 所有向后兼容性测试通过
- [x] 旧版客户端不受影响
---
## Phase 2: 后端话术生成引擎
**目标**: 实现三种模式的话术生成逻辑
**预计工时**: 2 天
**依赖**: Phase 1 完成
### Task 2.1: 创建 ScriptGenerator 模块
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-04
- **优先级**: P0
- **依赖**: Task 1.1
**描述**: 实现灵活模式的话术生成器
**文件创建**:
- `ai-service/app/services/flow/script_generator.py`
**具体实现**:
```python
"""
[AC-IDS-04] Script Generator for flexible mode
"""
import asyncio
import logging
from typing import Optional
logger = logging.getLogger(__name__)
class ScriptGenerator:
"""灵活模式话术生成器"""
def __init__(self, orchestrator):
self._orchestrator = orchestrator
async def generate(
self,
intent: str,
intent_description: Optional[str],
constraints: list[str],
context: dict,
history: list[dict],
fallback: str
) -> str:
"""
生成灵活话术
Args:
intent: 步骤意图
intent_description: 意图详细说明
constraints: 话术约束条件
context: 会话上下文
history: 对话历史
fallback: 失败时的 fallback 话术
Returns:
生成的话术文本
"""
try:
prompt = self._build_prompt(
intent, intent_description, constraints, context, history
)
response = await asyncio.wait_for(
self._orchestrator.generate_text(prompt),
timeout=2.0
)
generated = response.strip()
logger.info(
f"[AC-IDS-04] Generated flexible script: "
f"intent={intent}, length={len(generated)}"
)
return generated
except asyncio.TimeoutError:
logger.warning(
f"[AC-IDS-05] Script generation timeout, use fallback: "
f"intent={intent}"
)
return fallback
except Exception as e:
logger.error(
f"[AC-IDS-05] Script generation failed: {e}, use fallback"
)
return fallback
def _build_prompt(
self,
intent: str,
intent_description: Optional[str],
constraints: list[str],
context: dict,
history: list[dict]
) -> str:
"""构建 LLM Prompt"""
prompt_parts = [
"你是一个客服对话系统,当前需要执行以下步骤:",
"",
f"【步骤目标】{intent}"
]
if intent_description:
prompt_parts.append(f"【详细说明】{intent_description}")
if constraints:
prompt_parts.append("")
prompt_parts.append("【约束条件】")
for c in constraints:
prompt_parts.append(f"- {c}")
if history:
prompt_parts.append("")
prompt_parts.append("【对话历史】")
for msg in history[-3:]:
role = "用户" if msg.get("role") == "user" else "客服"
content = msg.get("content", "")
prompt_parts.append(f"{role}: {content}")
if context.get("inputs"):
prompt_parts.append("")
prompt_parts.append("【已收集信息】")
for inp in context["inputs"]:
prompt_parts.append(f"- {inp}")
prompt_parts.extend([
"",
"请生成一句符合目标和约束的话术不超过50字。",
"只返回话术内容,不要解释。"
])
return "\n".join(prompt_parts)
```
**完成标准**:
- [x] ScriptGenerator 类已实现
- [x] Prompt 构建逻辑完整
- [x] 超时和异常处理正确
- [x] 日志记录完整
---
### Task 2.2: 创建 TemplateEngine 模块
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-06
- **优先级**: P1
- **依赖**: Task 1.1
**描述**: 实现模板模式的变量填充逻辑
**文件创建**:
- `ai-service/app/services/flow/template_engine.py`
**具体实现**:
```python
"""
[AC-IDS-06] Template Engine for template mode
"""
import asyncio
import logging
import re
from typing import Optional
logger = logging.getLogger(__name__)
class TemplateEngine:
"""模板话术引擎"""
VARIABLE_PATTERN = re.compile(r'\{(\w+)\}')
def __init__(self, orchestrator):
self._orchestrator = orchestrator
async def fill_template(
self,
template: str,
context: dict,
history: list[dict]
) -> str:
"""
填充模板变量
Args:
template: 话术模板(包含 {变量名} 占位符)
context: 会话上下文
history: 对话历史
Returns:
填充后的话术
"""
try:
variables = self.VARIABLE_PATTERN.findall(template)
if not variables:
return template
variable_values = {}
for var in variables:
value = await self._generate_variable_value(var, context, history)
variable_values[var] = value
result = template
for var, value in variable_values.items():
result = result.replace(f"{{{var}}}", value)
logger.info(
f"[AC-IDS-06] Filled template: "
f"variables={list(variable_values.keys())}"
)
return result
except Exception as e:
logger.error(f"[AC-IDS-06] Template fill failed: {e}, return original")
return template
async def _generate_variable_value(
self,
variable_name: str,
context: dict,
history: list[dict]
) -> str:
"""为单个变量生成值"""
if variable_name in context:
return str(context[variable_name])
prompt = f"""
根据对话历史,为变量 "{variable_name}" 生成合适的值。
对话历史:
{self._format_history(history[-3:])}
只返回变量值,不要解释。
"""
try:
response = await asyncio.wait_for(
self._orchestrator.generate_text(prompt),
timeout=1.0
)
return response.strip()
except:
logger.warning(
f"[AC-IDS-06] Failed to generate value for {variable_name}, "
f"use placeholder"
)
return f"[{variable_name}]"
def _format_history(self, history: list[dict]) -> str:
"""格式化对话历史"""
lines = []
for msg in history:
role = "用户" if msg.get("role") == "user" else "客服"
content = msg.get("content", "")
lines.append(f"{role}: {content}")
return "\n".join(lines)
```
**完成标准**:
- [x] TemplateEngine 类已实现
- [x] 变量提取和替换逻辑正确
- [x] 异常处理和 fallback 完整
---
### Task 2.3: 扩展 FlowEngine - 添加话术生成方法
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-03
- **优先级**: P0
- **依赖**: Task 2.1, Task 2.2
**描述**: 在 FlowEngine 中添加话术生成的核心方法
**文件修改**:
- `ai-service/app/services/flow/engine.py`
**具体步骤**:
1.`FlowEngine.__init__()` 中初始化生成器
2. 添加 `_generate_step_content()` 方法
3. 添加 `_get_conversation_history()` 辅助方法
**完成标准**:
- [x] `_generate_step_content()` 方法已实现
- [x] 三种模式的分支逻辑正确
- [x] `_get_conversation_history()` 方法已实现
- [x] 错误处理和 fallback 完整
---
### Task 2.4: 修改 FlowEngine.start() 方法
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-05
- **优先级**: P0
- **依赖**: Task 2.3
**描述**: 修改流程启动逻辑,在首步使用话术生成
**文件修改**:
- `ai-service/app/services/flow/engine.py`
**具体步骤**:
1.`start()` 方法中调用 `_get_conversation_history()`
2. 调用 `_generate_step_content()` 生成首步话术
3. 确保向后兼容(无 orchestrator 时使用固定话术)
**完成标准**:
- [x] start() 方法已修改
- [x] 首步话术能正确生成
- [x] 向后兼容测试通过
---
### Task 2.5: 修改 FlowEngine.advance() 方法
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-05
- **优先级**: P0
- **依赖**: Task 2.3
**描述**: 修改流程推进逻辑,在后续步骤使用话术生成
**文件修改**:
- `ai-service/app/services/flow/engine.py`
**具体步骤**:
1.`advance()` 方法中调用 `_get_conversation_history()`
2. 调用 `_generate_step_content()` 生成下一步话术
3. 确保向后兼容
**完成标准**:
- [x] advance() 方法已修改
- [x] 后续步骤话术能正确生成
- [x] 向后兼容测试通过
---
### Task 2.6: 实现 Fallback 机制
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-05
- **优先级**: P0
- **依赖**: Task 2.1
**描述**: 确保话术生成失败时有明确的 fallback 策略
**技术要求**:
- LLM 调用超时2秒返回 `step.content` 作为 fallback
- LLM 返回错误时,记录日志并返回 fallback
- Fallback 话术不为空时使用,否则返回默认提示
**验收测试**:
- 模拟 LLM 超时,验证返回 fallback 话术
- 模拟 LLM 错误,验证日志记录和 fallback
**完成标准**:
- [x] 超时 fallback 已实现
- [x] 异常 fallback 已实现
- [x] 日志记录完整
- [x] 单元测试通过
---
## Phase 3: 前端配置界面
**目标**: 提供意图驱动话术的配置界面
**预计工时**: 1.5 天
**依赖**: Phase 1 完成
### Task 3.1: 创建话术模式选择组件
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-08
- **优先级**: P0
- **依赖**: Task 1.2
**描述**: 在步骤配置表单中增加话术模式选择
**文件修改**:
- `ai-service-admin/src/views/admin/script-flow/index.vue`
**具体步骤**:
1. 添加 Radio Group 选择话术模式
2. 根据选择的模式动态显示对应配置项
3. 模式切换时保留已填写的数据
**UI 要求**:
- 固定模式:显示 `content` 输入框
- 灵活模式:显示 `intent`、`intent_description`、`constraints` 配置
- 模板模式:显示 `content` 输入框(带模板语法提示)
**完成标准**:
- [x] 模式选择器已实现
- [x] 动态表单切换正确
- [x] 数据保留逻辑正确
---
### Task 3.2: 创建意图配置表单
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-08
- **优先级**: P0
- **依赖**: Task 3.1
**描述**: 实现灵活模式的意图配置表单
**文件修改**:
- `ai-service-admin/src/views/admin/script-flow/index.vue`
**具体步骤**:
1. 添加"步骤意图"输入框(必填)
2. 添加"意图说明"文本域(可选)
3. 添加"期望变量"输入(可选)
4. 添加表单校验规则
**完成标准**:
- [x] 意图配置表单已实现
- [x] 表单校验正确
- [x] 数据绑定正确
---
### Task 3.3: 创建约束条件管理组件
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-09
- **优先级**: P0
- **依赖**: Task 1.2
**描述**: 实现约束条件的添加、删除、编辑
**文件创建**:
- `ai-service-admin/src/views/admin/script-flow/components/ConstraintManager.vue`
**具体实现**:
```vue
<template>
<div class="constraint-manager">
<div class="constraint-tags">
<el-tag
v-for="(constraint, index) in modelValue"
:key="index"
closable
@close="removeConstraint(index)"
>
{{ constraint }}
</el-tag>
</div>
<el-input
v-model="newConstraint"
placeholder="输入约束条件后按回车添加"
@keyup.enter="addConstraint"
class="constraint-input"
>
<template #append>
<el-button @click="addConstraint">添加</el-button>
</template>
</el-input>
<div class="constraint-presets">
<span class="preset-label">常用约束:</span>
<el-button
v-for="preset in PRESET_CONSTRAINTS"
:key="preset"
size="small"
@click="addPreset(preset)"
>
{{ preset }}
</el-button>
</div>
</div>
</template>
<script setup lang="ts">
const PRESET_CONSTRAINTS = [
'必须礼貌',
'语气自然',
'简洁明了',
'不要生硬',
'不要重复'
]
const addConstraint = () => {
if (newConstraint.value.trim()) {
emit('update:modelValue', [...modelValue.value, newConstraint.value.trim()])
newConstraint.value = ''
}
}
</script>
```
**完成标准**:
- [x] ConstraintManager 组件已实现
- [x] 支持添加/删除约束
- [x] 支持预设约束快捷添加
- [x] 组件已集成到主表单
---
### Task 3.4: 创建模板话术配置组件
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-04
- **优先级**: P1
- **依赖**: Task 3.1
**描述**: 实现模板模式的配置界面
**文件修改**:
- `ai-service-admin/src/views/admin/script-flow/index.vue`
**具体步骤**:
1. 添加话术模板输入框
2. 添加模板语法提示
3. 添加变量高亮显示(可选)
**UI 示例**:
```
话术模板: [您好{greeting_style},请问您{polite_form}]
提示:使用 {变量名} 标记需要AI填充的部分
```
**完成标准**:
- [x] 模板配置界面已实现
- [x] 语法提示清晰
- [x] 数据绑定正确
---
### Task 3.5: 增强流程预览组件
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-10
- **优先级**: P1
- **依赖**: Task 3.1
**描述**: 在流程预览中显示步骤的意图信息
**文件修改**:
- `ai-service-admin/src/views/admin/script-flow/components/FlowPreview.vue`
**具体步骤**:
1. 显示步骤的 `script_mode`
2. 灵活模式显示意图和约束
3. 固定模式显示话术内容
4. 模板模式显示模板预览
**完成标准**:
- [x] 预览组件已增强
- [x] 意图信息显示正确
- [x] 不同模式显示不同内容
---
### Task 3.6: 前端表单校验与提交
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-08
- **优先级**: P0
- **依赖**: Task 3.1, Task 3.2, Task 3.3
**描述**: 实现表单校验和数据提交逻辑
**文件修改**:
- `ai-service-admin/src/views/admin/script-flow/index.vue`
**校验规则**:
- 灵活模式:`intent` 必填,`content`fallback必填
- 模板模式:`content` 必填,检查模板语法
- 固定模式:`content` 必填
**完成标准**:
- [x] 表单校验规则已实现
- [x] 提交逻辑正确
- [x] 错误提示清晰
---
## Phase 4: 测试与验证
**目标**: 确保功能正确性和向后兼容性
**预计工时**: 1 天
**依赖**: Phase 2, Phase 3 完成
### Task 4.1: 后端单元测试 - ScriptGenerator
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-11
- **优先级**: P0
- **依赖**: Task 2.1
**描述**: 为 ScriptGenerator 编写单元测试
**测试文件**:
- `ai-service/tests/services/flow/test_script_generator.py`
**测试用例**:
- 正常生成话术
- 超时 fallback
- 异常 fallback
- Prompt 构建正确性
**完成标准**:
- [x] 测试文件已创建
- [x] 所有测试用例通过
- [x] 代码覆盖率 > 80%
---
### Task 4.2: 后端单元测试 - TemplateEngine
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-11
- **优先级**: P0
- **依赖**: Task 2.2
**描述**: 为 TemplateEngine 编写单元测试
**测试文件**:
- `ai-service/tests/services/flow/test_template_engine.py`
**测试用例**:
- 变量提取正确性
- 变量替换正确性
- 从上下文获取变量值
- LLM 生成变量值
- 异常处理
**完成标准**:
- [x] 测试文件已创建
- [x] 所有测试用例通过
- [x] 代码覆盖率 > 80%
---
### Task 4.3: 后端单元测试 - FlowEngine
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-11
- **优先级**: P0
- **依赖**: Task 2.3, Task 2.4, Task 2.5
**描述**: 为 FlowEngine 话术生成逻辑编写单元测试
**测试文件**:
- `ai-service/tests/services/flow/test_engine_script_generation.py`
**测试用例**:
- 固定模式话术生成
- 灵活模式话术生成
- 模板模式话术生成
- 对话历史获取
- 边界情况(空配置、无效配置)
**完成标准**:
- [x] 测试文件已创建
- [x] 所有测试用例通过
- [x] 代码覆盖率 > 80%
---
### Task 4.4: 集成测试 - 端到端流程
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-12
- **优先级**: P0
- **依赖**: Task 4.1, Task 4.2, Task 4.3
**描述**: 端到端测试意图驱动流程的执行
**测试文件**:
- `ai-service/tests/api/test_script_flow_intent_driven.py`
**测试场景**:
1. 创建灵活模式流程
2. 启动流程,验证首步话术生成
3. 输入用户消息,验证流程推进和话术生成
4. 验证对话历史正确传递
**完成标准**:
- [x] 测试文件已创建
- [x] 所有测试场景通过
- [x] 测试覆盖主要业务流程
---
### Task 4.5: 向后兼容性测试
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-13
- **优先级**: P0
- **依赖**: Task 4.4
**描述**: 验证现有固定话术流程不受影响
**测试场景**:
1. 加载现有流程(无 script_mode 字段)
2. 执行流程,验证话术正常返回
3. 验证 API 响应包含新字段但值为 null
4. 验证前端能正确显示旧流程数据
**完成标准**:
- [x] 所有向后兼容性测试通过
- [x] 现有流程不受影响
---
### Task 4.6: 前端组件测试
- [x] **状态**: ✅已完成 (2026-02-28)
- **验收标准**: AC-IDS-08, AC-IDS-09
- **优先级**: P1
- **依赖**: Task 3.1, Task 3.2, Task 3.3
**描述**: 为前端组件编写测试
**测试文件**:
- `ai-service-admin/src/views/admin/script-flow/__tests__/`
**测试用例**:
- 模式选择器交互
- 约束条件管理
- 表单校验
- 数据提交
**完成标准**:
- [x] 测试文件已创建
- [x] 主要交互测试通过
---
## Phase 5: 部署与发布
**目标**: 安全部署新功能
**预计工时**: 0.5 天
**依赖**: Phase 4 全部完成
### Task 5.1: 更新部署文档
- [ ] **状态**: 待开始
- **验收标准**: N/A
- **优先级**: P0
- **依赖**: Phase 4 完成
**描述**: 更新部署文档和变更日志
**文件修改**:
- `CHANGELOG.md`
- `docs/deployment.md`(如存在)
**具体内容**:
- 记录新功能
- 记录 API 变更
- 记录配置变更(如有)
**完成标准**:
- [ ] 变更日志已更新
- [ ] 部署文档已更新
---
### Task 5.2: 灰度发布准备
- [ ] **状态**: 待开始
- **验收标准**: N/A
- **优先级**: P0
- **依赖**: Task 5.1
**描述**: 准备灰度发布环境
**具体步骤**:
1. 选择灰度租户
2. 配置监控告警
3. 准备回滚方案
**完成标准**:
- [ ] 灰度租户已确定
- [ ] 监控已配置
- [ ] 回滚方案已准备
---
### Task 5.3: 执行灰度发布
- [ ] **状态**: 待开始
- **验收标准**: N/A
- **优先级**: P0
- **依赖**: Task 5.2
**描述**: 执行灰度发布并监控
**具体步骤**:
1. 部署后端服务
2. 部署前端服务
3. 监控关键指标
4. 收集用户反馈
**监控指标**:
- 话术生成延迟
- 超时率
- 错误率
- Fallback 使用率
**完成标准**:
- [ ] 灰度发布成功
- [ ] 无严重问题
- [ ] 用户反馈正常
---
### Task 5.4: 全量发布
- [ ] **状态**: 待开始
- **验收标准**: N/A
- **优先级**: P0
- **依赖**: Task 5.3
**描述**: 灰度验证通过后全量发布
**具体步骤**:
1. 确认灰度指标正常
2. 执行全量发布
3. 持续监控
**完成标准**:
- [ ] 全量发布成功
- [ ] 功能正常可用
- [ ] 无用户投诉
---
## 任务依赖关系图
```
Phase 1 (数据模型与 API 扩展)
├── Task 1.1 (Python 类型定义) ──────────────────────────────┐
├── Task 1.2 (TypeScript 类型定义) ──────────────────────────┤
├── Task 1.3 (OpenAPI 契约) ← Task 1.1 ──────────────────────┤
└── Task 1.4 (向后兼容性测试) ← Task 1.1, Task 1.3 ──────────┘
Phase 2 (后端话术生成引擎)
├── Task 2.1 (ScriptGenerator) ← Task 1.1 ───────────────────┐
├── Task 2.2 (TemplateEngine) ← Task 1.1 ────────────────────┤
├── Task 2.3 (FlowEngine 扩展) ← Task 2.1, Task 2.2 ─────────┤
├── Task 2.4 (start 方法修改) ← Task 2.3 ────────────────────┤
├── Task 2.5 (advance 方法修改) ← Task 2.3 ──────────────────┤
└── Task 2.6 (Fallback 机制) ← Task 2.1 ─────────────────────┘
Phase 3 (前端配置界面)
├── Task 3.1 (模式选择组件) ← Task 1.2 ──────────────────────┐
├── Task 3.2 (意图配置表单) ← Task 3.1 ──────────────────────┤
├── Task 3.3 (约束管理组件) ← Task 1.2 ──────────────────────┤
├── Task 3.4 (模板配置组件) ← Task 3.1 ──────────────────────┤
├── Task 3.5 (预览增强) ← Task 3.1 ──────────────────────────┤
└── Task 3.6 (表单校验提交) ← Task 3.1, Task 3.2, Task 3.3 ──┘
Phase 4 (测试与验证)
├── Task 4.1 (ScriptGenerator 测试) ← Task 2.1 ──────────────┐
├── Task 4.2 (TemplateEngine 测试) ← Task 2.2 ───────────────┤
├── Task 4.3 (FlowEngine 测试) ← Task 2.3, Task 2.4, Task 2.5┤
├── Task 4.4 (集成测试) ← Task 4.1, Task 4.2, Task 4.3 ──────┤
├── Task 4.5 (向后兼容测试) ← Task 4.4 ──────────────────────┤
└── Task 4.6 (前端组件测试) ← Task 3.1, Task 3.2, Task 3.3 ──┘
Phase 5 (部署与发布)
├── Task 5.1 (更新部署文档) ← Phase 4 完成 ──────────────────┐
├── Task 5.2 (灰度发布准备) ← Task 5.1 ──────────────────────┤
├── Task 5.3 (执行灰度发布) ← Task 5.2 ──────────────────────┤
└── Task 5.4 (全量发布) ← Task 5.3 ──────────────────────────┘
```
---
## 验收标准与任务映射
| 验收标准 | 关联任务 | 状态 |
|---------|---------|------|
| AC-IDS-01: 扩展 ScriptFlow 数据模型 | Task 1.1 | ✅已完成 |
| AC-IDS-02: 扩展 Admin API 契约 | Task 1.3, Task 1.4 | ✅已完成 |
| AC-IDS-03: 实现话术生成引擎 | Task 2.3 | ✅已完成 |
| AC-IDS-04: 实现灵活模式的 Prompt 构建 | Task 2.1 | ✅已完成 |
| AC-IDS-05: 实现 Fallback 机制 | Task 2.4, Task 2.5, Task 2.6 | ✅已完成 |
| AC-IDS-06: 实现模板模式的变量填充 | Task 2.2 | ✅已完成 |
| AC-IDS-07: 前端类型定义扩展 | Task 1.2 | ✅已完成 |
| AC-IDS-08: 配置界面增加模式选择 | Task 3.1, Task 3.2, Task 3.6 | ✅已完成 |
| AC-IDS-09: 约束条件管理组件 | Task 3.3 | ✅已完成 |
| AC-IDS-10: 流程预览增强 | Task 3.5 | ✅已完成 |
| AC-IDS-11: 单元测试覆盖 | Task 4.1, Task 4.2, Task 4.3 | ✅已完成 |
| AC-IDS-12: 集成测试 | Task 4.4 | ✅已完成 |
| AC-IDS-13: 向后兼容性测试 | Task 1.4, Task 4.5 | ✅已完成 |
---
## 风险与缓解
| 风险 | 影响任务 | 缓解措施 |
|------|---------|---------|
| LLM 服务不稳定 | Task 2.1, Task 2.2 | 实现 fallback 机制 |
| 前端组件库兼容性 | Task 3.1-3.6 | 提前验证组件 |
| 测试环境资源不足 | Task 4.1-4.6 | 使用 Mock 服务 |
---
## 备注
- 所有任务完成后,需更新本文档的状态字段
- 如有任务阻塞,需在任务描述中记录阻塞原因
- 任务工时为预估值,实际执行时可根据情况调整