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

30 KiB
Raw Permalink Blame 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 类型定义

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-01
  • 优先级: P0
  • 依赖: 无
  • 负责人: backend

描述: 在后端 Python 代码中扩展 FlowStep 的类型定义

文件修改:

  • ai-service/app/models/entities.pyai-service/app/schemas/script_flow.py

具体步骤:

  1. 找到 FlowStep 相关的类型定义(可能在 Pydantic model 或 TypedDict 中)
  2. 添加以下可选字段:
    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. 确保向后兼容:所有新字段都是可选的,有默认值

验收测试:

# 测试向后兼容
step_old = {"step_no": 1, "content": "Hello"}
# 应该能正常解析script_mode 默认为 "fixed"

# 测试新字段
step_new = {
    "step_no": 1,
    "script_mode": "flexible",
    "intent": "获取用户姓名",
    "script_constraints": ["必须礼貌"],
    "content": "请问怎么称呼您?"
}
# 应该能正常解析

完成标准:

  • 类型定义已扩展
  • 所有新字段都是可选的
  • 代码通过类型检查mypy/pyright

Task 1.2: 扩展前端 TypeScript 类型定义

  • 状态: 已完成 (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. 添加新字段:
    export type ScriptMode = 'fixed' | 'flexible' | 'template'
    
    export interface FlowStep {
      // ... 现有字段 ...
    
      // 新增字段
      script_mode?: ScriptMode
      intent?: string
      intent_description?: string
      script_constraints?: string[]
      expected_variables?: string[]
    }
    
  4. 添加常量定义:
    export const SCRIPT_MODE_OPTIONS = [
      { value: 'fixed', label: '固定话术', description: '话术内容固定不变' },
      { value: 'flexible', label: '灵活话术', description: 'AI根据意图和上下文生成' },
      { value: 'template', label: '模板话术', description: 'AI填充模板中的变量' }
    ] as const
    

完成标准:

  • TypeScript 类型定义已扩展
  • 所有新字段都是可选的
  • 代码通过 TypeScript 编译

Task 1.3: 更新 OpenAPI 契约

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-02
  • 优先级: P0
  • 依赖: Task 1.1

描述: 更新 openapi.admin.yaml 中 ScriptFlow 相关接口的 schema

文件修改:

  • spec/intent-driven-script/openapi.admin.yamlai-service/openapi/admin.yaml

具体步骤:

  1. 找到 FlowStepSchema 定义
  2. 添加新字段定义:
    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

完成标准:

  • OpenAPI schema 已更新
  • 所有新字段标记为 optional
  • 契约通过 lint 校验

Task 1.4: 验证 API 向后兼容性

  • 状态: 已完成 (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

测试用例:

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():
    """测试旧流程能正常执行"""
    # 创建不包含新字段的流程
    # 启动流程
    # 验证返回固定话术

完成标准:

  • 所有向后兼容性测试通过
  • 旧版客户端不受影响

Phase 2: 后端话术生成引擎

目标: 实现三种模式的话术生成逻辑

预计工时: 2 天

依赖: Phase 1 完成

Task 2.1: 创建 ScriptGenerator 模块

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-04
  • 优先级: P0
  • 依赖: Task 1.1

描述: 实现灵活模式的话术生成器

文件创建:

  • ai-service/app/services/flow/script_generator.py

具体实现:

"""
[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)

完成标准:

  • ScriptGenerator 类已实现
  • Prompt 构建逻辑完整
  • 超时和异常处理正确
  • 日志记录完整

Task 2.2: 创建 TemplateEngine 模块

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-06
  • 优先级: P1
  • 依赖: Task 1.1

描述: 实现模板模式的变量填充逻辑

文件创建:

  • ai-service/app/services/flow/template_engine.py

具体实现:

"""
[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)

完成标准:

  • TemplateEngine 类已实现
  • 变量提取和替换逻辑正确
  • 异常处理和 fallback 完整

Task 2.3: 扩展 FlowEngine - 添加话术生成方法

  • 状态: 已完成 (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() 辅助方法

完成标准:

  • _generate_step_content() 方法已实现
  • 三种模式的分支逻辑正确
  • _get_conversation_history() 方法已实现
  • 错误处理和 fallback 完整

Task 2.4: 修改 FlowEngine.start() 方法

  • 状态: 已完成 (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 时使用固定话术)

完成标准:

  • start() 方法已修改
  • 首步话术能正确生成
  • 向后兼容测试通过

Task 2.5: 修改 FlowEngine.advance() 方法

  • 状态: 已完成 (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. 确保向后兼容

完成标准:

  • advance() 方法已修改
  • 后续步骤话术能正确生成
  • 向后兼容测试通过

Task 2.6: 实现 Fallback 机制

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-05
  • 优先级: P0
  • 依赖: Task 2.1

描述: 确保话术生成失败时有明确的 fallback 策略

技术要求:

  • LLM 调用超时2秒返回 step.content 作为 fallback
  • LLM 返回错误时,记录日志并返回 fallback
  • Fallback 话术不为空时使用,否则返回默认提示

验收测试:

  • 模拟 LLM 超时,验证返回 fallback 话术
  • 模拟 LLM 错误,验证日志记录和 fallback

完成标准:

  • 超时 fallback 已实现
  • 异常 fallback 已实现
  • 日志记录完整
  • 单元测试通过

Phase 3: 前端配置界面

目标: 提供意图驱动话术的配置界面

预计工时: 1.5 天

依赖: Phase 1 完成

Task 3.1: 创建话术模式选择组件

  • 状态: 已完成 (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 输入框
  • 灵活模式:显示 intentintent_descriptionconstraints 配置
  • 模板模式:显示 content 输入框(带模板语法提示)

完成标准:

  • 模式选择器已实现
  • 动态表单切换正确
  • 数据保留逻辑正确

Task 3.2: 创建意图配置表单

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-08
  • 优先级: P0
  • 依赖: Task 3.1

描述: 实现灵活模式的意图配置表单

文件修改:

  • ai-service-admin/src/views/admin/script-flow/index.vue

具体步骤:

  1. 添加"步骤意图"输入框(必填)
  2. 添加"意图说明"文本域(可选)
  3. 添加"期望变量"输入(可选)
  4. 添加表单校验规则

完成标准:

  • 意图配置表单已实现
  • 表单校验正确
  • 数据绑定正确

Task 3.3: 创建约束条件管理组件

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-09
  • 优先级: P0
  • 依赖: Task 1.2

描述: 实现约束条件的添加、删除、编辑

文件创建:

  • ai-service-admin/src/views/admin/script-flow/components/ConstraintManager.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>

完成标准:

  • ConstraintManager 组件已实现
  • 支持添加/删除约束
  • 支持预设约束快捷添加
  • 组件已集成到主表单

Task 3.4: 创建模板话术配置组件

  • 状态: 已完成 (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填充的部分

完成标准:

  • 模板配置界面已实现
  • 语法提示清晰
  • 数据绑定正确

Task 3.5: 增强流程预览组件

  • 状态: 已完成 (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. 模板模式显示模板预览

完成标准:

  • 预览组件已增强
  • 意图信息显示正确
  • 不同模式显示不同内容

Task 3.6: 前端表单校验与提交

  • 状态: 已完成 (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 必填,contentfallback必填
  • 模板模式:content 必填,检查模板语法
  • 固定模式:content 必填

完成标准:

  • 表单校验规则已实现
  • 提交逻辑正确
  • 错误提示清晰

Phase 4: 测试与验证

目标: 确保功能正确性和向后兼容性

预计工时: 1 天

依赖: Phase 2, Phase 3 完成

Task 4.1: 后端单元测试 - ScriptGenerator

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-11
  • 优先级: P0
  • 依赖: Task 2.1

描述: 为 ScriptGenerator 编写单元测试

测试文件:

  • ai-service/tests/services/flow/test_script_generator.py

测试用例:

  • 正常生成话术
  • 超时 fallback
  • 异常 fallback
  • Prompt 构建正确性

完成标准:

  • 测试文件已创建
  • 所有测试用例通过
  • 代码覆盖率 > 80%

Task 4.2: 后端单元测试 - TemplateEngine

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-11
  • 优先级: P0
  • 依赖: Task 2.2

描述: 为 TemplateEngine 编写单元测试

测试文件:

  • ai-service/tests/services/flow/test_template_engine.py

测试用例:

  • 变量提取正确性
  • 变量替换正确性
  • 从上下文获取变量值
  • LLM 生成变量值
  • 异常处理

完成标准:

  • 测试文件已创建
  • 所有测试用例通过
  • 代码覆盖率 > 80%

Task 4.3: 后端单元测试 - FlowEngine

  • 状态: 已完成 (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

测试用例:

  • 固定模式话术生成
  • 灵活模式话术生成
  • 模板模式话术生成
  • 对话历史获取
  • 边界情况(空配置、无效配置)

完成标准:

  • 测试文件已创建
  • 所有测试用例通过
  • 代码覆盖率 > 80%

Task 4.4: 集成测试 - 端到端流程

  • 状态: 已完成 (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. 验证对话历史正确传递

完成标准:

  • 测试文件已创建
  • 所有测试场景通过
  • 测试覆盖主要业务流程

Task 4.5: 向后兼容性测试

  • 状态: 已完成 (2026-02-28)
  • 验收标准: AC-IDS-13
  • 优先级: P0
  • 依赖: Task 4.4

描述: 验证现有固定话术流程不受影响

测试场景:

  1. 加载现有流程(无 script_mode 字段)
  2. 执行流程,验证话术正常返回
  3. 验证 API 响应包含新字段但值为 null
  4. 验证前端能正确显示旧流程数据

完成标准:

  • 所有向后兼容性测试通过
  • 现有流程不受影响

Task 4.6: 前端组件测试

  • 状态: 已完成 (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__/

测试用例:

  • 模式选择器交互
  • 约束条件管理
  • 表单校验
  • 数据提交

完成标准:

  • 测试文件已创建
  • 主要交互测试通过

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 服务

备注

  • 所有任务完成后,需更新本文档的状态字段
  • 如有任务阻塞,需在任务描述中记录阻塞原因
  • 任务工时为预估值,实际执行时可根据情况调整