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

1127 lines
30 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.

# 意图驱动话术流程 - 任务分解
---
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 服务 |
---
## 备注
- 所有任务完成后,需更新本文档的状态字段
- 如有任务阻塞,需在任务描述中记录阻塞原因
- 任务工时为预估值,实际执行时可根据情况调整