docs: init openapi contract [AC-IDS-01]

This commit is contained in:
MerCry 2026-02-28 14:37:01 +08:00
parent d30043e5e3
commit e10cbc2321
1 changed files with 415 additions and 0 deletions

View File

@ -0,0 +1,415 @@
openapi: 3.1.0
info:
title: "Intent-Driven Script Flow API Extension"
description: |
[AC-IDS-02] 意图驱动话术流程的 API 扩展规范
本文档描述对现有 ScriptFlow API 的扩展,增加意图驱动话术生成能力。
这是对 `spec/ai-service/openapi.admin.yaml` 的向后兼容扩展。
**变更摘要**:
- 扩展 `FlowStep` schema增加意图驱动字段
- 所有新字段均为可选optional确保向后兼容
- 复用现有的 CRUD 接口,无需新增接口
**影响接口**:
- POST /admin/script-flows
- PUT /admin/script-flows/{id}
- GET /admin/script-flows/{id}
version: "1.0.0"
x-contract-level: L1
x-extends: "../ai-service/openapi.admin.yaml"
components:
schemas:
# [AC-IDS-01] 扩展的 FlowStep Schema
FlowStepExtended:
type: object
required: [stepNo, content]
properties:
# === 原有字段(保持不变)===
stepNo:
type: integer
description: "步骤序号从1开始"
example: 1
content:
type: string
description: |
话术内容。根据 script_mode 的不同有不同含义:
- fixed 模式:固定话术文本
- flexible 模式fallback 话术LLM 生成失败时使用)
- template 模式:话术模板(包含 {变量名} 占位符)
example: "您好,请问怎么称呼您?"
waitInput:
type: boolean
default: true
description: "是否等待用户输入"
timeoutSeconds:
type: integer
default: 120
description: "等待超时时间(秒)"
minimum: 10
maximum: 600
timeoutAction:
type: string
enum: [repeat, skip, transfer]
default: repeat
description: |
超时后的动作:
- repeat: 重复当前步骤
- skip: 跳过进入下一步
- transfer: 转人工
nextConditions:
type: array
description: "条件跳转配置"
items:
type: object
properties:
keywords:
type: array
items:
type: string
description: "关键词列表"
pattern:
type: string
description: "正则表达式模式"
gotoStep:
type: integer
description: "跳转到的步骤号"
defaultNext:
type: integer
nullable: true
description: "默认下一步null 表示顺序执行)"
# === 新增字段(意图驱动)===
script_mode:
type: string
enum: [fixed, flexible, template]
default: fixed
description: |
[AC-IDS-01] 话术模式:
- fixed: 固定话术(向后兼容,默认模式)
- flexible: 灵活话术AI 根据意图和上下文生成)
- template: 模板话术AI 填充变量)
example: "flexible"
intent:
type: string
nullable: true
description: |
[AC-IDS-01] 步骤意图flexible 模式必填)
描述这一步要达到的目的,而不是具体说什么话。
example: "获取用户真实姓名"
intent_description:
type: string
nullable: true
description: |
[AC-IDS-01] 意图详细说明(可选)
提供更详细的上下文信息,帮助 AI 更好地理解意图。
example: "需要获取用户的真实姓名用于后续身份确认,如果用户已经说了姓名则直接确认,如果没说则礼貌询问"
script_constraints:
type: array
items:
type: string
nullable: true
description: |
[AC-IDS-01] 话术约束条件flexible 模式推荐配置)
对生成话术的限制条件,例如语气、风格、长度等。
example:
- "必须礼貌"
- "语气自然,不要生硬"
- "如果用户已经说了姓名,直接确认即可"
- "如果用户拒绝,不要强迫"
expected_variables:
type: array
items:
type: string
nullable: true
description: |
[AC-IDS-01] 期望提取的变量(可选)
这一步期望从用户输入中提取的变量名称。
example: ["user_name"]
# 扩展的 ScriptFlowCreate用于创建流程
ScriptFlowCreateExtended:
type: object
required: [name, steps]
properties:
name:
type: string
description: "流程名称"
example: "客户信息收集流程"
description:
type: string
nullable: true
description: "流程描述"
example: "收集客户姓名、电话、需求等基本信息"
steps:
type: array
description: "流程步骤列表"
items:
$ref: "#/components/schemas/FlowStepExtended"
isEnabled:
type: boolean
default: true
description: "是否启用"
# 扩展的 ScriptFlowDetail用于返回流程详情
ScriptFlowDetailExtended:
type: object
properties:
id:
type: string
format: uuid
description: "流程ID"
name:
type: string
description: "流程名称"
description:
type: string
nullable: true
description: "流程描述"
steps:
type: array
description: "流程步骤列表"
items:
$ref: "#/components/schemas/FlowStepExtended"
isEnabled:
type: boolean
description: "是否启用"
stepCount:
type: integer
description: "步骤数量"
linkedRuleCount:
type: integer
description: "关联的意图规则数量"
createdAt:
type: string
format: date-time
description: "创建时间"
updatedAt:
type: string
format: date-time
description: "更新时间"
examples:
# 示例1固定话术模式向后兼容
FixedModeStep:
summary: "固定话术步骤(传统模式)"
value:
stepNo: 1
content: "您好,请问您贵姓?"
waitInput: true
timeoutSeconds: 60
script_mode: "fixed"
# 示例2灵活话术模式
FlexibleModeStep:
summary: "灵活话术步骤(意图驱动)"
value:
stepNo: 1
script_mode: "flexible"
intent: "获取用户真实姓名"
intent_description: "需要获取用户的真实姓名用于后续身份确认,如果用户已经说了姓名则直接确认,如果没说则礼貌询问"
script_constraints:
- "必须礼貌"
- "语气自然,不要生硬"
- "如果用户已经说了姓名,直接确认即可"
- "如果用户拒绝,不要强迫"
expected_variables:
- "user_name"
content: "您好,请问怎么称呼您?" # fallback 话术
waitInput: true
timeoutSeconds: 60
# 示例3模板话术模式
TemplateModeStep:
summary: "模板话术步骤"
value:
stepNo: 2
script_mode: "template"
content: "好的{user_name},请问您{inquiry_style}"
intent: "询问用户需求"
script_constraints:
- "根据用户姓名调整称呼方式"
- "询问方式要自然"
expected_variables:
- "user_requirement"
waitInput: true
# 示例4完整流程混合模式
MixedModeFlow:
summary: "混合模式流程(包含固定、灵活、模板三种步骤)"
value:
name: "客户信息收集流程"
description: "收集客户基本信息并了解需求"
steps:
- stepNo: 1
script_mode: "fixed"
content: "您好,欢迎咨询!"
waitInput: false
- stepNo: 2
script_mode: "flexible"
intent: "获取用户姓名"
intent_description: "礼貌询问用户姓名"
script_constraints:
- "必须礼貌"
- "语气自然"
content: "请问怎么称呼您?"
waitInput: true
expected_variables: ["user_name"]
- stepNo: 3
script_mode: "template"
content: "好的{user_name},请问您有什么需要帮助的吗?"
intent: "询问用户需求"
waitInput: true
expected_variables: ["user_requirement"]
# 接口路径说明(复用现有接口,无需新增)
paths:
/admin/script-flows:
post:
summary: "创建话术流程"
description: |
[AC-IDS-02] 创建新的话术流程。
支持意图驱动的步骤配置(通过 FlowStepExtended schema
operationId: createScriptFlow
parameters:
- $ref: "../ai-service/openapi.admin.yaml#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowCreateExtended"
examples:
mixedMode:
$ref: "#/components/examples/MixedModeFlow"
responses:
"201":
description: "创建成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowDetailExtended"
"400":
description: "请求参数错误"
"401":
$ref: "../ai-service/openapi.admin.yaml#/components/responses/Unauthorized"
/admin/script-flows/{id}:
get:
summary: "获取话术流程详情"
description: |
[AC-IDS-02] 获取指定流程的详细信息。
返回包含意图驱动字段的完整步骤配置。
operationId: getScriptFlow
parameters:
- $ref: "../ai-service/openapi.admin.yaml#/components/parameters/XTenantId"
- name: id
in: path
required: true
schema:
type: string
format: uuid
responses:
"200":
description: "获取成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowDetailExtended"
"404":
description: "流程不存在"
put:
summary: "更新话术流程"
description: |
[AC-IDS-02] 更新现有流程的配置。
支持修改步骤的话术模式和意图配置。
operationId: updateScriptFlow
parameters:
- $ref: "../ai-service/openapi.admin.yaml#/components/parameters/XTenantId"
- name: id
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowCreateExtended"
responses:
"200":
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowDetailExtended"
"404":
description: "流程不存在"
# 向后兼容性说明
x-compatibility:
backward-compatible: true
migration-required: false
notes: |
本扩展完全向后兼容:
1. **数据兼容性**
- 所有新字段均为可选nullable
- 未指定 script_mode 时默认为 'fixed'
- 现有流程数据无需迁移即可正常工作
2. **API 兼容性**
- 复用现有接口,无需修改接口路径
- 请求体向后兼容(新字段可选)
- 响应体向后兼容(新字段可能为 null
3. **客户端兼容性**
- 旧版客户端可以忽略新字段
- 新版客户端可以处理缺失的新字段
4. **执行兼容性**
- 未指定 script_mode 的步骤按 fixed 模式执行
- 保持与现有流程完全相同的行为
# 验收标准映射
x-acceptance-criteria:
- id: AC-IDS-01
description: "扩展 ScriptFlow 数据模型"
schema: FlowStepExtended
status: defined
- id: AC-IDS-02
description: "扩展 Admin API 契约"
paths:
- POST /admin/script-flows
- PUT /admin/script-flows/{id}
- GET /admin/script-flows/{id}
status: defined