--- feature_id: "IDS" title: "意图驱动话术流程(Intent-Driven Script)需求规范" status: "draft" version: "1.0.0" owners: - "product" - "backend" - "frontend" last_updated: "2026-02-28" source: type: "conversation" ref: "话术流程配置合理性讨论" --- # 意图驱动话术流程需求规范(IDS) ## 1. 背景与目标 ### 1.1 背景 当前话术流程采用"固定话术"模式,每个步骤配置的 `content` 字段是预设的固定文本。这种模式存在以下问题: - **缺乏灵活性**:无法根据对话上下文调整话术,显得生硬 - **意图不明确**:配置中只有"说什么",没有"为什么说" - **维护成本高**:需要为不同场景配置多个相似的流程 实际业务需求是:每个步骤有固定的**目的**(例如"获取用户姓名"),但具体**话术**应该根据上下文灵活调整。 ### 1.2 目标 - 支持"意图驱动"的话术生成模式,AI 根据步骤意图和上下文实时生成话术 - 保持向后兼容,现有固定话术流程不受影响 - 提供三种话术模式:固定、灵活、模板,满足不同场景需求 - 前端配置界面支持意图配置和模式切换 ### 1.3 非目标(Out of Scope) - 不涉及用户输入的意图识别(已有 IntentRule 模块) - 不改变流程状态机的核心逻辑 - 不涉及 LLM 模型选择和切换 - 不涉及话术生成的性能优化(缓存、预生成等) --- ## 2. 用户故事(User Stories) ### US-IDS-01: 配置意图驱动的话术步骤 **作为** 话术流程配置人员 **我想要** 在配置步骤时指定"意图"而不是固定话术 **以便** AI 能根据对话上下文灵活生成合适的话术 **验收标准**: - 前端配置界面支持选择话术模式(固定/灵活/模板) - 灵活模式下可以配置步骤意图、意图说明、话术约束 - 配置保存后能正确存储到数据库 ### US-IDS-02: 灵活话术的实时生成 **作为** 对话系统 **我想要** 根据步骤意图和对话历史生成话术 **以便** 提供更自然、更符合上下文的对话体验 **验收标准**: - 执行灵活模式步骤时,调用 LLM 生成话术 - 生成时考虑步骤意图、约束条件、对话历史 - 生成失败时有明确的 fallback 机制 ### US-IDS-03: 向后兼容现有流程 **作为** 系统管理员 **我想要** 现有的固定话术流程继续正常工作 **以便** 不影响已上线的业务 **验收标准**: - 现有流程数据不需要迁移即可正常执行 - 未指定 script_mode 的步骤默认为 fixed 模式 - API 响应包含新字段但不破坏现有客户端 ### US-IDS-04: 模板话术的变量填充 **作为** 话术流程配置人员 **我想要** 配置话术模板,让 AI 填充变量部分 **以便** 在保持话术框架的同时增加灵活性 **验收标准**: - 支持在话术中使用 `{变量名}` 标记 - AI 根据上下文填充变量 - 模板语法错误时有明确提示 --- ## 3. 验收标准详细说明(Acceptance Criteria) ### Phase 1: 数据模型与 API 扩展 #### AC-IDS-01: 扩展 ScriptFlow 数据模型 **优先级**: P0 (MVP 必须) **描述**: 在 `ScriptFlow.steps` JSON 字段中增加意图驱动相关字段 **技术要求**: - 在 `FlowStep` 类型定义中增加以下字段: - `intent?: string` - 步骤意图(例如:"获取用户姓名") - `intent_description?: string` - 意图详细说明 - `script_mode?: 'fixed' | 'flexible' | 'template'` - 话术模式 - `script_constraints?: string[]` - 话术约束条件 - `expected_variables?: string[]` - 期望提取的变量 - 保持 `content` 字段向后兼容 - 默认 `script_mode = 'fixed'` **验收测试**: ```json // 示例:灵活模式步骤配置 { "step_id": "step_1", "step_no": 1, "script_mode": "flexible", "intent": "获取用户真实姓名", "intent_description": "需要获取用户的真实姓名用于后续身份确认", "script_constraints": [ "必须礼貌", "语气自然,不要生硬", "如果用户已经说了姓名,直接确认即可" ], "expected_variables": ["user_name"], "content": "您好,请问怎么称呼您?", // fallback 话术 "wait_input": true } ``` --- #### AC-IDS-02: 扩展 Admin API 契约 **优先级**: P0 (MVP 必须) **描述**: 更新 `openapi.admin.yaml` 中 ScriptFlow 相关接口的 schema **技术要求**: - 更新 `FlowStepSchema` 定义,增加新字段 - 所有新字段标记为 `optional` - 更新接口文档说明 - 保持 API 版本不变(向后兼容扩展) **影响接口**: - `POST /admin/script-flows` - 创建流程 - `PUT /admin/script-flows/{id}` - 更新流程 - `GET /admin/script-flows/{id}` - 获取流程详情 --- ### Phase 2: 后端话术生成引擎 #### AC-IDS-03: 实现话术生成引擎 **优先级**: P0 (MVP 必须) **描述**: 在 `FlowEngine` 中实现根据 `script_mode` 生成话术的逻辑 **技术要求**: - 在 `FlowEngine` 中新增方法 `_generate_step_content(step, context, history)` - 实现三种模式的生成逻辑: - `fixed`: 直接返回 `step.content` - `flexible`: 调用 LLM 生成话术 - `template`: 使用模板引擎填充变量 - 在 `start()` 和 `advance()` 方法中调用话术生成 **代码位置**: `ai-service/app/services/flow/engine.py` **验收测试**: - 固定模式:返回原始 content - 灵活模式:生成的话术符合意图和约束 - 模板模式:正确填充变量 --- #### AC-IDS-04: 实现灵活模式的 Prompt 构建 **优先级**: P0 (MVP 必须) **描述**: 为灵活模式构建合适的 LLM Prompt **技术要求**: - Prompt 包含:步骤意图、约束条件、对话历史(最近 3 轮)、会话上下文 - 明确指示 AI 生成简洁的话术(不超过 50 字) - 包含 fallback 指令(生成失败时的处理) **Prompt 模板示例**: ```python prompt = f""" 你是一个客服对话系统,当前需要执行以下步骤: 【步骤目标】{intent} 【详细说明】{intent_description} 【约束条件】 {'\n'.join(f'- {c}' for c in constraints)} 【对话历史】 {format_history(history[-3:])} 【会话上下文】 {format_context(context)} 请生成一句符合目标和约束的话术(不超过50字)。 只返回话术内容,不要解释。 """ ``` --- #### AC-IDS-05: 实现 Fallback 机制 **优先级**: P0 (MVP 必须) **描述**: 当话术生成失败时,使用 fallback 策略 **技术要求**: - LLM 调用超时(2秒)时,返回 `step.content` 作为 fallback - LLM 返回错误时,记录日志并返回 fallback - Fallback 话术不为空时使用,否则返回默认提示 **验收测试**: - 模拟 LLM 超时,验证返回 fallback 话术 - 模拟 LLM 错误,验证日志记录和 fallback --- #### AC-IDS-06: 实现模板模式的变量填充 **优先级**: P1 (可选) **描述**: 支持在 `content` 中使用 `{变量名}` 标记,AI 填充变量 **技术要求**: - 解析模板中的变量(正则匹配 `{...}`) - 调用 LLM 根据上下文生成变量值 - 替换模板中的变量占位符 **示例**: ```python # 模板 content = "您好{greeting_style},请问您{polite_form}?" # AI 生成 greeting_style = ",很高兴为您服务" polite_form = "贵姓" # 结果 "您好,很高兴为您服务,请问您贵姓?" ``` --- ### Phase 3: 前端配置界面 #### AC-IDS-07: 前端类型定义扩展 **优先级**: P0 (MVP 必须) **描述**: 更新 `script-flow.ts` 类型定义 **技术要求**: - 在 `FlowStep` 接口中增加新字段 - 定义 `ScriptMode` 枚举类型 - 更新相关的 Create/Update 类型 **代码位置**: `ai-service-admin/src/types/script-flow.ts` --- #### AC-IDS-08: 配置界面增加模式选择 **优先级**: P0 (MVP 必须) **描述**: 在步骤配置表单中增加话术模式选择 **技术要求**: - 增加 Radio Group 选择话术模式 - 根据选择的模式动态显示对应配置项 - 固定模式:显示 `content` 输入框 - 灵活模式:显示 `intent`、`intent_description`、`constraints` 配置 - 模板模式:显示 `content` 输入框(带模板语法提示) **代码位置**: `ai-service-admin/src/views/admin/script-flow/index.vue` **UI 要求**: - 模式切换时保留已填写的数据 - 提供模式说明的 Tooltip - 约束条件支持标签式添加/删除 --- #### AC-IDS-09: 约束条件管理组件 **优先级**: P0 (MVP 必须) **描述**: 实现约束条件的添加、删除、编辑 **技术要求**: - 使用 `el-tag` 显示已添加的约束 - 支持点击删除约束 - 输入框回车添加新约束 - 约束不能为空或重复 **UI 示例**: ``` 话术约束: [必须礼貌 ×] [语气自然 ×] [不要生硬 ×] [输入新约束...] ``` --- #### AC-IDS-10: 流程预览增强 **优先级**: P1 (可选) **描述**: 在流程预览中显示步骤的意图信息 **技术要求**: - 在 `FlowPreview.vue` 中显示步骤的 `script_mode` - 灵活模式显示意图和约束 - 固定模式显示话术内容 **代码位置**: `ai-service-admin/src/views/admin/script-flow/components/FlowPreview.vue` --- ### Phase 4: 测试与验证 #### AC-IDS-11: 单元测试覆盖 **优先级**: P0 (MVP 必须) **描述**: 为话术生成引擎编写单元测试 **技术要求**: - 测试三种模式的话术生成 - 测试 fallback 机制 - 测试边界情况(空配置、无效配置) **测试文件**: `ai-service/tests/services/flow/test_engine_script_generation.py` --- #### AC-IDS-12: 集成测试 **优先级**: P0 (MVP 必须) **描述**: 端到端测试意图驱动流程的执行 **测试场景**: 1. 创建灵活模式流程 2. 启动流程,验证首步话术生成 3. 输入用户消息,验证流程推进和话术生成 4. 验证对话历史正确传递 --- #### AC-IDS-13: 向后兼容性测试 **优先级**: P0 (MVP 必须) **描述**: 验证现有固定话术流程不受影响 **测试场景**: 1. 加载现有流程(无 script_mode 字段) 2. 执行流程,验证话术正常返回 3. 验证 API 响应包含新字段但值为 null --- ## 4. 接口映射表(API Mapping) | 验收标准 | 接口路径 | 方法 | 变更类型 | 说明 | |---------|---------|------|---------|------| | AC-IDS-02 | `/admin/script-flows` | POST | 扩展请求体 | steps 增加意图字段 | | AC-IDS-02 | `/admin/script-flows/{id}` | PUT | 扩展请求体 | 同上 | | AC-IDS-02 | `/admin/script-flows/{id}` | GET | 扩展响应体 | 返回意图字段 | | AC-IDS-03 | 内部方法 | - | 新增 | `_generate_step_content()` | | AC-IDS-05 | 内部方法 | - | 修改 | `start()`, `advance()` | --- ## 5. 非功能性需求(NFR) ### NFR-IDS-01: 性能要求 - 话术生成延迟 < 2 秒(P95) - LLM 调用超时设置为 2 秒 - API 响应时间增加 < 10% ### NFR-IDS-02: 可靠性要求 - 话术生成失败率 < 1% - Fallback 机制 100% 可用 - 无数据丢失 ### NFR-IDS-03: 兼容性要求 - 现有流程无需迁移即可运行 - API 向后兼容(新字段可选) - 前端支持旧版本数据 --- ## 6. 数据迁移方案 ### 6.1 数据库变更 **无需数据库 Schema 变更**,因为 `steps` 字段已经是 JSON 类型,可以直接扩展。 ### 6.2 现有数据处理 - 现有流程数据保持不变 - 执行时默认 `script_mode = 'fixed'` - 无需运行迁移脚本 --- ## 7. 风险与缓解措施 | 风险 | 影响 | 概率 | 缓解措施 | |------|------|------|---------| | LLM 生成话术不稳定 | 用户体验差 | 中 | 提供 fallback 到固定话术 | | 生成延迟过高 | 对话不流畅 | 中 | 设置 2 秒超时,超时返回 fallback | | 约束条件理解偏差 | 话术不符合预期 | 低 | 提供详细的 Prompt 指导 | | 向后兼容性问题 | 现有流程失效 | 低 | 充分测试,默认 fixed 模式 | --- ## 8. 发布计划 ### 8.1 Phase 划分 - **Phase 1**: 数据模型与 API 扩展(AC-IDS-01 ~ AC-IDS-02) - **Phase 2**: 后端话术生成引擎(AC-IDS-03 ~ AC-IDS-06) - **Phase 3**: 前端配置界面(AC-IDS-07 ~ AC-IDS-10) - **Phase 4**: 测试与验证(AC-IDS-11 ~ AC-IDS-13) ### 8.2 里程碑 - **M1**: 后端 MVP 完成(Phase 1 + Phase 2 核心功能) - **M2**: 前端配置完成(Phase 3) - **M3**: 测试通过,可发布(Phase 4) --- ## 9. 附录 ### 9.1 术语表 - **意图(Intent)**: 步骤要达到的目的,例如"获取用户姓名" - **话术(Script)**: 实际发送给用户的文本内容 - **约束(Constraint)**: 对话术的限制条件,例如"必须礼貌" - **Fallback**: 当主要方案失败时的备用方案 ### 9.2 参考文档 - [功能定界](./scope.md) - [现有 FlowEngine 实现](../../ai-service/app/services/flow/engine.py) - [现有前端配置界面](../../ai-service-admin/src/views/admin/script-flow/index.vue)