ai-robot-core/spec/ai-service/openapi.admin.yaml

2562 lines
69 KiB
YAML
Raw Normal View History

openapi: 3.1.0
info:
title: "AI Service Admin API"
description: "AI 中台管理类接口契约Provider: ai-service支持 ai-service-admin 模块进行知识库、Prompt 及 RAG 调试管理。"
version: "0.7.0"
x-contract-level: L1
components:
parameters:
XTenantId:
name: X-Tenant-Id
in: header
required: true
schema:
type: string
description: "租户ID用于物理隔离知识库与数据"
responses:
Unauthorized:
description: "未认证(缺少或无效的认证信息)"
Forbidden:
description: "无权限(当前身份无权访问该资源)"
schemas:
DocumentInfo:
type: object
properties:
docId:
type: string
description: "文档ID"
kbId:
type: string
description: "知识库ID"
fileName:
type: string
description: "文件名"
status:
type: string
description: "文档状态"
enum: [pending, processing, completed, failed]
createdAt:
type: string
format: date-time
description: "创建时间"
updatedAt:
type: string
format: date-time
description: "更新时间"
SessionInfo:
type: object
properties:
sessionId:
type: string
description: "会话ID"
status:
type: string
description: "会话状态"
enum: [active, closed, expired]
startTime:
type: string
format: date-time
description: "开始时间"
endTime:
type: string
format: date-time
description: "结束时间"
messageCount:
type: integer
description: "消息数量"
PageInfo:
type: object
properties:
page:
type: integer
description: "当前页码"
pageSize:
type: integer
description: "每页大小"
total:
type: integer
description: "总记录数"
totalPages:
type: integer
description: "总页数"
# v0.6.0 新增 schemas
KnowledgeBaseInfo:
type: object
properties:
id:
type: string
description: "知识库ID"
name:
type: string
description: "知识库名称"
kbType:
type: string
description: "知识库类型"
enum: [product, faq, script, policy, general]
description:
type: string
description: "描述"
priority:
type: integer
description: "优先级权重"
isEnabled:
type: boolean
description: "是否启用"
docCount:
type: integer
description: "文档数量"
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
KnowledgeBaseCreate:
type: object
required: [name, kbType]
properties:
name:
type: string
kbType:
type: string
enum: [product, faq, script, policy, general]
description:
type: string
priority:
type: integer
default: 0
KnowledgeBaseUpdate:
type: object
properties:
name:
type: string
kbType:
type: string
enum: [product, faq, script, policy, general]
description:
type: string
priority:
type: integer
isEnabled:
type: boolean
PromptTemplateInfo:
type: object
properties:
id:
type: string
name:
type: string
description: "模板名称"
scene:
type: string
description: "场景标签"
description:
type: string
isDefault:
type: boolean
publishedVersion:
type: integer
description: "当前发布版本号"
nullable: true
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
PromptTemplateCreate:
type: object
required: [name, scene, systemInstruction]
properties:
name:
type: string
scene:
type: string
description:
type: string
systemInstruction:
type: string
description: "系统指令内容,支持 {{variable}} 占位符"
variables:
type: array
items:
type: object
properties:
name:
type: string
default:
type: string
description:
type: string
PromptTemplateDetail:
type: object
properties:
id:
type: string
name:
type: string
scene:
type: string
description:
type: string
currentVersion:
type: object
properties:
version:
type: integer
status:
type: string
enum: [draft, published, archived]
systemInstruction:
type: string
variables:
type: array
items:
type: object
versions:
type: array
items:
type: object
properties:
version:
type: integer
status:
type: string
enum: [draft, published, archived]
createdAt:
type: string
format: date-time
IntentRuleInfo:
type: object
properties:
id:
type: string
name:
type: string
description: "意图名称"
keywords:
type: array
items:
type: string
patterns:
type: array
items:
type: string
priority:
type: integer
responseType:
type: string
enum: [flow, rag, fixed, transfer]
targetKbIds:
type: array
items:
type: string
nullable: true
flowId:
type: string
nullable: true
fixedReply:
type: string
nullable: true
transferMessage:
type: string
nullable: true
isEnabled:
type: boolean
hitCount:
type: integer
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
IntentRuleCreate:
type: object
required: [name, responseType]
properties:
name:
type: string
keywords:
type: array
items:
type: string
patterns:
type: array
items:
type: string
priority:
type: integer
default: 0
responseType:
type: string
enum: [flow, rag, fixed, transfer]
targetKbIds:
type: array
items:
type: string
flowId:
type: string
fixedReply:
type: string
transferMessage:
type: string
ScriptFlowInfo:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
stepCount:
type: integer
isEnabled:
type: boolean
linkedRuleCount:
type: integer
description: "关联意图规则数"
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ScriptFlowCreate:
type: object
required: [name, steps]
properties:
name:
type: string
description:
type: string
steps:
type: array
items:
$ref: "#/components/schemas/FlowStep"
FlowStep:
type: object
required: [stepNo, content]
properties:
stepNo:
type: integer
content:
type: string
description: "话术内容"
waitInput:
type: boolean
default: true
timeoutSeconds:
type: integer
default: 120
timeoutAction:
type: string
enum: [repeat, skip, transfer]
default: repeat
nextConditions:
type: array
items:
type: object
properties:
keywords:
type: array
items:
type: string
pattern:
type: string
gotoStep:
type: integer
defaultNext:
type: integer
nullable: true
ForbiddenWordInfo:
type: object
properties:
id:
type: string
word:
type: string
category:
type: string
enum: [competitor, sensitive, political, custom]
strategy:
type: string
enum: [mask, replace, block]
replacement:
type: string
nullable: true
fallbackReply:
type: string
nullable: true
isEnabled:
type: boolean
hitCount:
type: integer
createdAt:
type: string
format: date-time
ForbiddenWordCreate:
type: object
required: [word, category, strategy]
properties:
word:
type: string
category:
type: string
enum: [competitor, sensitive, political, custom]
strategy:
type: string
enum: [mask, replace, block]
replacement:
type: string
fallbackReply:
type: string
BehaviorRuleInfo:
type: object
properties:
id:
type: string
ruleText:
type: string
description: "行为约束描述"
category:
type: string
enum: [compliance, tone, boundary, custom]
isEnabled:
type: boolean
createdAt:
type: string
format: date-time
BehaviorRuleCreate:
type: object
required: [ruleText, category]
properties:
ruleText:
type: string
category:
type: string
enum: [compliance, tone, boundary, custom]
# v0.7.0 新增 schemas - 测试与监控
FlowExecutionStep:
type: object
description: "流程执行步骤详情"
properties:
step:
type: integer
description: "步骤编号1-12"
name:
type: string
description: "步骤名称"
status:
type: string
enum: [success, failed, skipped]
description: "执行状态"
durationMs:
type: integer
description: "执行耗时(毫秒)"
input:
type: object
description: "步骤输入数据"
output:
type: object
description: "步骤输出数据"
error:
type: string
nullable: true
description: "错误信息(如果失败)"
metadata:
type: object
description: "步骤元数据"
FlowExecutionResult:
type: object
description: "完整流程执行结果"
properties:
executionId:
type: string
steps:
type: array
items:
$ref: "#/components/schemas/FlowExecutionStep"
totalDurationMs:
type: integer
finalReply:
type: string
confidence:
type: number
format: float
shouldTransfer:
type: boolean
IntentRuleTestResult:
type: object
description: "意图规则测试结果"
properties:
matched:
type: boolean
description: "是否命中该规则"
matchedKeywords:
type: array
items:
type: string
description: "匹配的关键词列表"
matchedPatterns:
type: array
items:
type: string
description: "匹配的正则表达式列表"
priority:
type: integer
description: "规则优先级"
priorityRank:
type: integer
description: "在所有规则中的优先级排名"
conflictRules:
type: array
items:
type: object
properties:
ruleId:
type: string
ruleName:
type: string
priority:
type: integer
description: "同时命中的其他规则列表"
reason:
type: string
nullable: true
description: "未命中原因"
IntentRuleStats:
type: object
description: "意图规则监控统计"
properties:
ruleId:
type: string
ruleName:
type: string
hitCount:
type: integer
description: "命中次数"
hitRate:
type: number
format: float
description: "命中率"
avgResponseTime:
type: number
format: float
description: "平均响应时间(毫秒)"
lastHitTime:
type: string
format: date-time
nullable: true
responseType:
type: string
enum: [flow, rag, fixed, transfer]
IntentRuleHitRecord:
type: object
description: "意图规则命中记录"
properties:
conversationId:
type: string
sessionId:
type: string
userMessage:
type: string
matchedKeywords:
type: array
items:
type: string
matchedPatterns:
type: array
items:
type: string
responseType:
type: string
executionResult:
type: string
enum: [success, failed]
hitTime:
type: string
format: date-time
PromptTemplatePreview:
type: object
description: "Prompt 模板预览结果"
properties:
templateId:
type: string
templateName:
type: string
version:
type: integer
rawContent:
type: string
description: "原始模板内容"
variables:
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
description: "变量列表及当前值"
renderedContent:
type: string
description: "渲染后的完整 Prompt"
estimatedTokens:
type: integer
description: "预估 Token 数量"
PromptTemplateStats:
type: object
description: "Prompt 模板监控统计"
properties:
templateId:
type: string
templateName:
type: string
scene:
type: string
usageCount:
type: integer
avgTokens:
type: number
format: float
avgPromptTokens:
type: number
format: float
avgCompletionTokens:
type: number
format: float
lastUsedTime:
type: string
format: date-time
nullable: true
ScriptFlowSimulation:
type: object
description: "话术流程模拟执行结果"
properties:
simulationId:
type: string
flowId:
type: string
flowName:
type: string
currentStep:
type: integer
stepContent:
type: string
waitForInput:
type: boolean
nextConditions:
type: array
items:
type: object
properties:
keywords:
type: array
items:
type: string
nextStep:
type: integer
ScriptFlowStats:
type: object
description: "话术流程监控统计"
properties:
flowId:
type: string
flowName:
type: string
activationCount:
type: integer
completionCount:
type: integer
completionRate:
type: number
format: float
avgCompletionTime:
type: number
format: float
description: "平均完成时长(秒)"
interruptionCount:
type: integer
interruptionRate:
type: number
format: float
ScriptFlowExecution:
type: object
description: "话术流程执行记录"
properties:
executionId:
type: string
sessionId:
type: string
activationTime:
type: string
format: date-time
currentStep:
type: integer
status:
type: string
enum: [in_progress, completed, interrupted]
interruptionReason:
type: string
nullable: true
completionTime:
type: string
format: date-time
nullable: true
GuardrailTestResult:
type: object
description: "输出护栏测试结果"
properties:
originalText:
type: string
processedText:
type: string
detectedWords:
type: array
items:
type: object
properties:
word:
type: string
category:
type: string
position:
type: integer
strategy:
type: string
enum: [mask, replace, block]
isBlocked:
type: boolean
blockReason:
type: string
nullable: true
GuardrailStats:
type: object
description: "输出护栏监控统计"
properties:
wordId:
type: string
word:
type: string
category:
type: string
blockCount:
type: integer
replaceCount:
type: integer
maskCount:
type: integer
lastBlockTime:
type: string
format: date-time
nullable: true
GuardrailBlockRecord:
type: object
description: "禁词拦截记录"
properties:
blockId:
type: string
sessionId:
type: string
originalText:
type: string
processedText:
type: string
strategy:
type: string
enum: [mask, replace, block]
blockTime:
type: string
format: date-time
ConversationRecord:
type: object
description: "对话追踪记录"
properties:
conversationId:
type: string
sessionId:
type: string
userMessage:
type: string
aiReply:
type: string
triggeredRules:
type: array
items:
type: string
description: "触发的意图规则 ID 列表"
usedTemplate:
type: string
nullable: true
description: "使用的 Prompt 模板 ID"
usedFlow:
type: string
nullable: true
description: "使用的话术流程 ID"
executionTime:
type: integer
description: "执行耗时(毫秒)"
createdAt:
type: string
format: date-time
paths:
/admin/kb/documents:
get:
summary: "查询文档列表"
operationId: "listDocuments"
tags:
- KB Management
x-requirements: ["AC-ASA-08", "AC-AISVC-23"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: kbId
in: query
required: false
schema:
type: string
description: "知识库ID"
- name: status
in: query
required: false
schema:
type: string
enum: [pending, processing, completed, failed]
description: "文档状态"
- name: page
in: query
required: false
schema:
type: integer
default: 1
description: "页码"
- name: pageSize
in: query
required: false
schema:
type: integer
default: 20
description: "每页大小"
responses:
'200':
description: "文档列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/DocumentInfo"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "上传/导入文档"
operationId: "uploadDocument"
tags:
- KB Management
x-requirements: ["AC-ASA-01", "AC-AISVC-21", "AC-AISVC-22"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
kbId:
type: string
responses:
'202':
description: "已接受上传请求,异步启动索引任务"
content:
application/json:
schema:
type: object
properties:
jobId:
type: string
status:
type: string
enum: [pending, processing]
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/kb/index/jobs/{jobId}:
get:
summary: "查询索引任务详情"
operationId: "getIndexJob"
tags:
- KB Management
x-requirements: ["AC-ASA-02", "AC-AISVC-24"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: jobId
in: path
required: true
schema:
type: string
responses:
'200':
description: "任务状态详情"
content:
application/json:
schema:
type: object
properties:
jobId:
type: string
status:
type: string
enum: [pending, processing, completed, failed]
progress:
type: integer
minimum: 0
maximum: 100
errorMsg:
type: string
nullable: true
/admin/config/prompt-templates/{tplId}/publish:
post:
summary: "发布指定版本的 Prompt 模板"
operationId: "publishPromptTemplate"
tags:
- Prompt Management
x-requirements: ["AC-ASA-03"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
version:
type: string
responses:
'200':
description: "发布成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/rag/experiments/run:
post:
summary: "触发 RAG 调试实验"
operationId: "runRagExperiment"
tags:
- RAG Lab
x-requirements: ["AC-ASA-05", "AC-AISVC-25", "AC-AISVC-26"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
type: string
kbIds:
type: array
items:
type: string
params:
type: object
description: "检索参数集"
responses:
'200':
description: "实验结果"
content:
application/json:
schema:
type: object
properties:
retrievalResults:
type: array
items:
type: object
properties:
content:
type: string
score:
type: number
format: float
source:
type: string
finalPrompt:
type: string
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/sessions:
get:
summary: "查询会话列表"
operationId: "listSessions"
tags:
- Session Monitoring
x-requirements: ["AC-ASA-09", "AC-AISVC-27"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: status
in: query
required: false
schema:
type: string
enum: [active, closed, expired]
description: "会话状态"
- name: startTime
in: query
required: false
schema:
type: string
format: date-time
description: "开始时间"
- name: endTime
in: query
required: false
schema:
type: string
format: date-time
description: "结束时间"
- name: page
in: query
required: false
schema:
type: integer
default: 1
description: "页码"
- name: pageSize
in: query
required: false
schema:
type: integer
default: 20
description: "每页大小"
responses:
'200':
description: "会话列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/SessionInfo"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/sessions/{sessionId}:
get:
summary: "获取会话详情"
operationId: "getSessionDetail"
tags:
- Session Monitoring
x-requirements: ["AC-ASA-07", "AC-AISVC-28"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: sessionId
in: path
required: true
schema:
type: string
responses:
'200':
description: "全链路会话详情"
content:
application/json:
schema:
type: object
properties:
sessionId:
type: string
messages:
type: array
items:
type: object
trace:
type: object
description: "含检索、工具调用等追踪信息"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
# ========== v0.6.0 新增 paths ==========
/admin/kb/knowledge-bases:
get:
summary: "查询知识库列表"
operationId: "listKnowledgeBases"
tags:
- KB Management
x-requirements: ["AC-ASA-29", "AC-AISVC-59"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: kbType
in: query
required: false
schema:
type: string
enum: [product, faq, script, policy, general]
description: "知识库类型筛选"
- name: isEnabled
in: query
required: false
schema:
type: boolean
description: "启用状态筛选"
responses:
'200':
description: "知识库列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/KnowledgeBaseInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "创建知识库"
operationId: "createKnowledgeBase"
tags:
- KB Management
x-requirements: ["AC-ASA-30", "AC-AISVC-59"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/KnowledgeBaseCreate"
responses:
'201':
description: "创建成功"
content:
application/json:
schema:
$ref: "#/components/schemas/KnowledgeBaseInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/kb/knowledge-bases/{kbId}:
put:
summary: "更新知识库"
operationId: "updateKnowledgeBase"
tags:
- KB Management
x-requirements: ["AC-ASA-32", "AC-AISVC-61"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: kbId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/KnowledgeBaseUpdate"
responses:
'200':
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/KnowledgeBaseInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
delete:
summary: "删除知识库"
operationId: "deleteKnowledgeBase"
tags:
- KB Management
x-requirements: ["AC-ASA-33", "AC-AISVC-62"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: kbId
in: path
required: true
schema:
type: string
responses:
'204':
description: "删除成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/prompt-templates:
get:
summary: "查询 Prompt 模板列表"
operationId: "listPromptTemplates"
tags:
- Prompt Management
x-requirements: ["AC-ASA-23", "AC-AISVC-57"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: scene
in: query
required: false
schema:
type: string
description: "场景标签筛选"
responses:
'200':
description: "模板列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/PromptTemplateInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "创建 Prompt 模板"
operationId: "createPromptTemplate"
tags:
- Prompt Management
x-requirements: ["AC-ASA-24", "AC-AISVC-52"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplateCreate"
responses:
'201':
description: "创建成功"
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplateInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/prompt-templates/{tplId}:
get:
summary: "查询 Prompt 模板详情"
operationId: "getPromptTemplateDetail"
tags:
- Prompt Management
x-requirements: ["AC-ASA-28", "AC-AISVC-58"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
responses:
'200':
description: "模板详情(含版本历史)"
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplateDetail"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
put:
summary: "更新 Prompt 模板(自动创建新版本)"
operationId: "updatePromptTemplate"
tags:
- Prompt Management
x-requirements: ["AC-ASA-25", "AC-AISVC-53"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplateCreate"
responses:
'200':
description: "更新成功,返回新版本信息"
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplateInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/prompt-templates/{tplId}/publish:
post:
summary: "发布 Prompt 模板指定版本"
operationId: "publishPromptTemplateVersion"
tags:
- Prompt Management
x-requirements: ["AC-ASA-26", "AC-AISVC-54"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required: [version]
properties:
version:
type: integer
description: "要发布的版本号"
responses:
'200':
description: "发布成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/prompt-templates/{tplId}/rollback:
post:
summary: "回滚 Prompt 模板到指定版本"
operationId: "rollbackPromptTemplate"
tags:
- Prompt Management
x-requirements: ["AC-ASA-27", "AC-AISVC-55"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required: [version]
properties:
version:
type: integer
description: "要回滚到的版本号"
responses:
'200':
description: "回滚成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/intent-rules:
get:
summary: "查询意图规则列表"
operationId: "listIntentRules"
tags:
- Intent Rules
x-requirements: ["AC-ASA-34", "AC-AISVC-65"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: responseType
in: query
required: false
schema:
type: string
enum: [flow, rag, fixed, transfer]
description: "响应类型筛选"
- name: isEnabled
in: query
required: false
schema:
type: boolean
description: "启用状态筛选"
responses:
'200':
description: "规则列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/IntentRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "创建意图规则"
operationId: "createIntentRule"
tags:
- Intent Rules
x-requirements: ["AC-ASA-35", "AC-AISVC-66"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IntentRuleCreate"
responses:
'201':
description: "创建成功"
content:
application/json:
schema:
$ref: "#/components/schemas/IntentRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/intent-rules/{ruleId}:
put:
summary: "更新意图规则"
operationId: "updateIntentRule"
tags:
- Intent Rules
x-requirements: ["AC-ASA-36", "AC-AISVC-67"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/IntentRuleCreate"
responses:
'200':
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/IntentRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
delete:
summary: "删除意图规则"
operationId: "deleteIntentRule"
tags:
- Intent Rules
x-requirements: ["AC-ASA-36", "AC-AISVC-68"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
responses:
'204':
description: "删除成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/script-flows:
get:
summary: "查询话术流程列表"
operationId: "listScriptFlows"
tags:
- Script Flows
x-requirements: ["AC-ASA-37", "AC-AISVC-71"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: isEnabled
in: query
required: false
schema:
type: boolean
description: "启用状态筛选"
responses:
'200':
description: "流程列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ScriptFlowInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "创建话术流程"
operationId: "createScriptFlow"
tags:
- Script Flows
x-requirements: ["AC-ASA-38", "AC-AISVC-72"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowCreate"
responses:
'201':
description: "创建成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/script-flows/{flowId}:
get:
summary: "查询话术流程详情"
operationId: "getScriptFlowDetail"
tags:
- Script Flows
x-requirements: ["AC-ASA-39", "AC-AISVC-73"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: flowId
in: path
required: true
schema:
type: string
responses:
'200':
description: "流程详情(含完整步骤定义)"
content:
application/json:
schema:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
isEnabled:
type: boolean
steps:
type: array
items:
$ref: "#/components/schemas/FlowStep"
linkedRuleCount:
type: integer
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
put:
summary: "更新话术流程"
operationId: "updateScriptFlow"
tags:
- Script Flows
x-requirements: ["AC-ASA-38", "AC-AISVC-72"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: flowId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowCreate"
responses:
'200':
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/guardrails/forbidden-words:
get:
summary: "查询禁词列表"
operationId: "listForbiddenWords"
tags:
- Guardrails
x-requirements: ["AC-ASA-41", "AC-AISVC-78"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: category
in: query
required: false
schema:
type: string
enum: [competitor, sensitive, political, custom]
description: "类别筛选"
- name: isEnabled
in: query
required: false
schema:
type: boolean
description: "启用状态筛选"
responses:
'200':
description: "禁词列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ForbiddenWordInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "添加禁词"
operationId: "createForbiddenWord"
tags:
- Guardrails
x-requirements: ["AC-ASA-42", "AC-AISVC-79"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ForbiddenWordCreate"
responses:
'201':
description: "添加成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ForbiddenWordInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/guardrails/forbidden-words/{wordId}:
put:
summary: "更新禁词"
operationId: "updateForbiddenWord"
tags:
- Guardrails
x-requirements: ["AC-ASA-42", "AC-AISVC-80"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: wordId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ForbiddenWordCreate"
responses:
'200':
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/ForbiddenWordInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
delete:
summary: "删除禁词"
operationId: "deleteForbiddenWord"
tags:
- Guardrails
x-requirements: ["AC-ASA-42", "AC-AISVC-81"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: wordId
in: path
required: true
schema:
type: string
responses:
'204':
description: "删除成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/guardrails/behavior-rules:
get:
summary: "查询行为规则列表"
operationId: "listBehaviorRules"
tags:
- Guardrails
x-requirements: ["AC-ASA-43", "AC-AISVC-84"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: category
in: query
required: false
schema:
type: string
enum: [compliance, tone, boundary, custom]
description: "类别筛选"
responses:
'200':
description: "行为规则列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/BehaviorRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
post:
summary: "添加行为规则"
operationId: "createBehaviorRule"
tags:
- Guardrails
x-requirements: ["AC-ASA-44", "AC-AISVC-85"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BehaviorRuleCreate"
responses:
'201':
description: "添加成功"
content:
application/json:
schema:
$ref: "#/components/schemas/BehaviorRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/guardrails/behavior-rules/{ruleId}:
put:
summary: "更新行为规则"
operationId: "updateBehaviorRule"
tags:
- Guardrails
x-requirements: ["AC-ASA-43", "AC-AISVC-85"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/BehaviorRuleCreate"
responses:
'200':
description: "更新成功"
content:
application/json:
schema:
$ref: "#/components/schemas/BehaviorRuleInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
delete:
summary: "删除行为规则"
operationId: "deleteBehaviorRule"
tags:
- Guardrails
x-requirements: ["AC-ASA-43", "AC-AISVC-85"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
responses:
'204':
description: "删除成功"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
# v0.7.0 新增 paths - 测试与监控
/admin/test/flow-execution:
post:
summary: "完整流程测试"
operationId: "testFlowExecution"
tags:
- Testing
x-requirements: ["AC-ASA-49", "AC-AISVC-93", "AC-AISVC-94", "AC-AISVC-95"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [message]
properties:
message:
type: string
description: "测试消息"
sessionId:
type: string
description: "会话 ID可选"
compareConfigs:
type: array
description: "对比配置列表"
items:
type: object
properties:
templateId:
type: string
kbIds:
type: array
items:
type: string
retrievalParams:
type: object
responses:
'200':
description: "流程执行结果"
content:
application/json:
schema:
oneOf:
- $ref: "#/components/schemas/FlowExecutionResult"
- type: object
properties:
comparisons:
type: array
items:
$ref: "#/components/schemas/FlowExecutionResult"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/intent-rules/{ruleId}/test:
post:
summary: "测试意图规则"
operationId: "testIntentRule"
tags:
- Testing
x-requirements: ["AC-ASA-53", "AC-AISVC-96"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [message]
properties:
message:
type: string
description: "测试消息"
responses:
'200':
description: "测试结果"
content:
application/json:
schema:
$ref: "#/components/schemas/IntentRuleTestResult"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/intent-rules:
get:
summary: "查询意图规则监控统计"
operationId: "getIntentRuleStats"
tags:
- Monitoring
x-requirements: ["AC-ASA-54", "AC-AISVC-97"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: startTime
in: query
schema:
type: string
format: date-time
- name: endTime
in: query
schema:
type: string
format: date-time
- name: responseType
in: query
schema:
type: string
enum: [flow, rag, fixed, transfer]
responses:
'200':
description: "规则统计列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/IntentRuleStats"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/intent-rules/{ruleId}/hits:
get:
summary: "查询意图规则命中记录"
operationId: "getIntentRuleHits"
tags:
- Monitoring
x-requirements: ["AC-ASA-55", "AC-AISVC-98"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: ruleId
in: path
required: true
schema:
type: string
- name: page
in: query
schema:
type: integer
default: 1
- name: pageSize
in: query
schema:
type: integer
default: 20
responses:
'200':
description: "命中记录列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/IntentRuleHitRecord"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/prompt-templates/{tplId}/preview:
post:
summary: "预览 Prompt 模板"
operationId: "previewPromptTemplate"
tags:
- Testing
x-requirements: ["AC-ASA-56", "AC-AISVC-99"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: tplId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
variables:
type: object
description: "变量测试值key-value 对)"
additionalProperties:
type: string
responses:
'200':
description: "预览结果"
content:
application/json:
schema:
$ref: "#/components/schemas/PromptTemplatePreview"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/prompt-templates:
get:
summary: "查询 Prompt 模板监控统计"
operationId: "getPromptTemplateStats"
tags:
- Monitoring
x-requirements: ["AC-ASA-58", "AC-AISVC-100"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: scene
in: query
schema:
type: string
description: "场景标签筛选"
- name: startTime
in: query
schema:
type: string
format: date-time
- name: endTime
in: query
schema:
type: string
format: date-time
responses:
'200':
description: "模板统计列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/PromptTemplateStats"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/script-flows/{flowId}/simulate:
post:
summary: "模拟执行话术流程"
operationId: "simulateScriptFlow"
tags:
- Testing
x-requirements: ["AC-ASA-59", "AC-AISVC-101"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: flowId
in: path
required: true
schema:
type: string
responses:
'200':
description: "模拟执行结果"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowSimulation"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/script-flows/{flowId}/simulate/{simulationId}/next:
post:
summary: "推进话术流程模拟"
operationId: "simulateScriptFlowNext"
tags:
- Testing
x-requirements: ["AC-ASA-59", "AC-AISVC-102"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: flowId
in: path
required: true
schema:
type: string
- name: simulationId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [userInput]
properties:
userInput:
type: string
description: "用户模拟输入"
responses:
'200':
description: "下一步结果"
content:
application/json:
schema:
$ref: "#/components/schemas/ScriptFlowSimulation"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/script-flows:
get:
summary: "查询话术流程监控统计"
operationId: "getScriptFlowStats"
tags:
- Monitoring
x-requirements: ["AC-ASA-60", "AC-AISVC-103"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: startTime
in: query
schema:
type: string
format: date-time
- name: endTime
in: query
schema:
type: string
format: date-time
responses:
'200':
description: "流程统计列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ScriptFlowStats"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/script-flows/{flowId}/executions:
get:
summary: "查询话术流程执行记录"
operationId: "getScriptFlowExecutions"
tags:
- Monitoring
x-requirements: ["AC-ASA-61", "AC-AISVC-104"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: flowId
in: path
required: true
schema:
type: string
- name: status
in: query
schema:
type: string
enum: [in_progress, completed, interrupted]
- name: page
in: query
schema:
type: integer
default: 1
- name: pageSize
in: query
schema:
type: integer
default: 20
responses:
'200':
description: "执行记录列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ScriptFlowExecution"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/guardrails/test:
post:
summary: "测试输出护栏"
operationId: "testGuardrail"
tags:
- Testing
x-requirements: ["AC-ASA-62", "AC-AISVC-105"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [text]
properties:
text:
type: string
description: "测试文本"
responses:
'200':
description: "测试结果"
content:
application/json:
schema:
$ref: "#/components/schemas/GuardrailTestResult"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/guardrails:
get:
summary: "查询输出护栏监控统计"
operationId: "getGuardrailStats"
tags:
- Monitoring
x-requirements: ["AC-ASA-63", "AC-AISVC-106"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: category
in: query
schema:
type: string
enum: [competitor, sensitive, political, custom]
- name: startTime
in: query
schema:
type: string
format: date-time
- name: endTime
in: query
schema:
type: string
format: date-time
responses:
'200':
description: "护栏统计列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/GuardrailStats"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/guardrails/{wordId}/blocks:
get:
summary: "查询禁词拦截记录"
operationId: "getGuardrailBlocks"
tags:
- Monitoring
x-requirements: ["AC-ASA-64", "AC-AISVC-107"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: wordId
in: path
required: true
schema:
type: string
- name: page
in: query
schema:
type: integer
default: 1
- name: pageSize
in: query
schema:
type: integer
default: 20
responses:
'200':
description: "拦截记录列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/GuardrailBlockRecord"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/conversations:
get:
summary: "查询对话追踪列表"
operationId: "getConversations"
tags:
- Monitoring
x-requirements: ["AC-ASA-65", "AC-AISVC-108"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: startTime
in: query
schema:
type: string
format: date-time
- name: endTime
in: query
schema:
type: string
format: date-time
- name: ruleId
in: query
schema:
type: string
description: "意图规则 ID 筛选"
- name: templateId
in: query
schema:
type: string
description: "Prompt 模板 ID 筛选"
- name: flowId
in: query
schema:
type: string
description: "话术流程 ID 筛选"
- name: page
in: query
schema:
type: integer
default: 1
- name: pageSize
in: query
schema:
type: integer
default: 20
responses:
'200':
description: "对话记录列表"
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/ConversationRecord"
pagination:
$ref: "#/components/schemas/PageInfo"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/conversations/{conversationId}:
get:
summary: "查询对话执行链路详情"
operationId: "getConversationDetail"
tags:
- Monitoring
x-requirements: ["AC-ASA-66", "AC-AISVC-109"]
parameters:
- $ref: "#/components/parameters/XTenantId"
- name: conversationId
in: path
required: true
schema:
type: string
responses:
'200':
description: "对话执行链路详情"
content:
application/json:
schema:
$ref: "#/components/schemas/FlowExecutionResult"
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"
/admin/monitoring/conversations/export:
post:
summary: "导出对话记录"
operationId: "exportConversations"
tags:
- Monitoring
x-requirements: ["AC-ASA-68", "AC-AISVC-110"]
parameters:
- $ref: "#/components/parameters/XTenantId"
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
format:
type: string
enum: [json, csv]
default: json
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
filters:
type: object
properties:
ruleId:
type: string
templateId:
type: string
flowId:
type: string
responses:
'200':
description: "导出文件"
content:
application/json:
schema:
type: object
properties:
downloadUrl:
type: string
description: "下载链接"
text/csv:
schema:
type: string
format: binary
'401':
$ref: "#/components/responses/Unauthorized"
'403':
$ref: "#/components/responses/Forbidden"