ai-robot-core/spec/metadata-role-separation/openapi.provider.yaml

775 lines
20 KiB
YAML
Raw Normal View History

openapi: 3.0.3
info:
title: 元数据职责分层 API
description: |
提供元数据字段职责分层配置、槽位定义管理及按角色查询能力。
## 字段角色定义
- `resource_filter`: 资源过滤角色,用于 KB 文档检索
- `slot`: 运行时槽位角色,用于对话信息收集
- `prompt_var`: 提示词变量角色,用于 Prompt 注入
- `routing_signal`: 路由信号角色,用于意图路由判断
version: 0.1.0
x-contract-level: L1
contact:
name: AI Robot Core Team
servers:
- url: /api
description: API Server
tags:
- name: MetadataSchema
description: 元数据字段定义管理(扩展 field_roles
- name: SlotDefinition
description: 槽位定义管理
- name: RuntimeSlot
description: 运行时槽位查询
paths:
/admin/metadata-schemas:
get:
summary: 获取元数据字段定义列表
description: |-
[AC-MRS-06] 支持按状态、范围、角色过滤查询元数据字段定义列表。
operationId: listMetadataSchemas
tags:
- MetadataSchema
parameters:
- name: status
in: query
description: 字段状态过滤
schema:
$ref: '#/components/schemas/MetadataFieldStatus'
- name: scope
in: query
description: 适用范围过滤
schema:
$ref: '#/components/schemas/MetadataScope'
- name: field_role
in: query
description: 字段角色过滤
schema:
$ref: '#/components/schemas/FieldRole'
- name: tenant_id
in: query
required: true
schema:
type: string
format: uuid
responses:
'200':
description: 成功返回字段定义列表
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/MetadataFieldDefinition'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
post:
summary: 创建元数据字段定义
description: |-
[AC-MRS-01][AC-MRS-02][AC-MRS-03] 创建新的元数据字段定义,支持 field_roles 多选配置。
operationId: createMetadataSchema
tags:
- MetadataSchema
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MetadataFieldDefinitionCreate'
responses:
'201':
description: 创建成功
content:
application/json:
schema:
$ref: '#/components/schemas/MetadataFieldDefinition'
'400':
$ref: '#/components/responses/BadRequest'
'409':
description: field_key 已存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/admin/metadata-schemas/{id}:
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
get:
summary: 获取单个元数据字段定义
operationId: getMetadataSchema
tags:
- MetadataSchema
responses:
'200':
description: 成功返回字段定义
content:
application/json:
schema:
$ref: '#/components/schemas/MetadataFieldDefinition'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: 更新元数据字段定义
description: |-
[AC-MRS-01] 更新元数据字段定义,支持修改 field_roles。
operationId: updateMetadataSchema
tags:
- MetadataSchema
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MetadataFieldDefinitionUpdate'
responses:
'200':
description: 更新成功
content:
application/json:
schema:
$ref: '#/components/schemas/MetadataFieldDefinition'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
delete:
summary: 删除元数据字段定义
description: |-
[AC-MRS-16] 删除元数据字段定义,无需考虑历史数据兼容性。
operationId: deleteMetadataSchema
tags:
- MetadataSchema
responses:
'204':
description: 删除成功
'404':
$ref: '#/components/responses/NotFound'
/admin/metadata-schemas/by-role:
get:
summary: 按角色查询元数据字段定义
description: |-
[AC-MRS-04][AC-MRS-05] 按指定角色查询所有包含该角色的活跃字段定义。
operationId: getMetadataSchemasByRole
tags:
- MetadataSchema
parameters:
- name: role
in: query
required: true
description: 字段角色
schema:
$ref: '#/components/schemas/FieldRole'
- name: tenant_id
in: query
required: true
schema:
type: string
format: uuid
- name: include_deprecated
in: query
description: 是否包含已废弃字段
schema:
type: boolean
default: false
responses:
'200':
description: 成功返回字段定义列表
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/MetadataFieldDefinition'
'400':
description: 无效的角色参数
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error_code: INVALID_ROLE
message: "Invalid role 'invalid_role'. Valid roles are: resource_filter, slot, prompt_var, routing_signal"
/admin/slot-definitions:
get:
summary: 获取槽位定义列表
operationId: listSlotDefinitions
tags:
- SlotDefinition
parameters:
- name: tenant_id
in: query
required: true
schema:
type: string
format: uuid
- name: required
in: query
description: 是否必填槽位过滤
schema:
type: boolean
responses:
'200':
description: 成功返回槽位定义列表
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SlotDefinition'
post:
summary: 创建槽位定义
description: |-
[AC-MRS-07][AC-MRS-08] 创建新的槽位定义,可关联已有元数据字段。
operationId: createSlotDefinition
tags:
- SlotDefinition
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SlotDefinitionCreate'
responses:
'201':
description: 创建成功
content:
application/json:
schema:
$ref: '#/components/schemas/SlotDefinition'
'400':
$ref: '#/components/responses/BadRequest'
/admin/slot-definitions/{id}:
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
get:
summary: 获取单个槽位定义
operationId: getSlotDefinition
tags:
- SlotDefinition
responses:
'200':
description: 成功返回槽位定义
content:
application/json:
schema:
$ref: '#/components/schemas/SlotDefinition'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: 更新槽位定义
operationId: updateSlotDefinition
tags:
- SlotDefinition
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SlotDefinitionUpdate'
responses:
'200':
description: 更新成功
content:
application/json:
schema:
$ref: '#/components/schemas/SlotDefinition'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
delete:
summary: 删除槽位定义
description: |-
[AC-MRS-16] 删除槽位定义,无需考虑历史数据兼容性。
operationId: deleteSlotDefinition
tags:
- SlotDefinition
responses:
'204':
description: 删除成功
'404':
$ref: '#/components/responses/NotFound'
/mid/slots/by-role:
get:
summary: 运行时按角色获取槽位定义
description: |-
[AC-MRS-10] 运行时接口,按角色获取槽位定义及关联的元数据字段信息。
operationId: getSlotsByRole
tags:
- RuntimeSlot
parameters:
- name: role
in: query
required: true
schema:
$ref: '#/components/schemas/FieldRole'
- name: tenant_id
in: query
required: true
schema:
type: string
format: uuid
responses:
'200':
description: 成功返回槽位定义列表
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SlotDefinitionWithField'
'400':
$ref: '#/components/responses/BadRequest'
/mid/slots/{slot_key}:
parameters:
- name: slot_key
in: path
required: true
schema:
type: string
get:
summary: 获取运行时槽位值
description: |-
[AC-MRS-09] 获取指定槽位的运行时值,包含来源、置信度、更新时间。
operationId: getSlotValue
tags:
- RuntimeSlot
parameters:
- name: tenant_id
in: query
required: true
schema:
type: string
format: uuid
- name: user_id
in: query
required: true
schema:
type: string
format: uuid
- name: session_id
in: query
required: true
schema:
type: string
format: uuid
responses:
'200':
description: 成功返回槽位值
content:
application/json:
schema:
$ref: '#/components/schemas/RuntimeSlotValue'
'404':
description: 槽位不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
FieldRole:
type: string
enum:
- resource_filter
- slot
- prompt_var
- routing_signal
description: |
字段角色类型:
- resource_filter: 资源过滤角色
- slot: 运行时槽位角色
- prompt_var: 提示词变量角色
- routing_signal: 路由信号角色
MetadataFieldStatus:
type: string
enum:
- draft
- active
- deprecated
MetadataScope:
type: string
enum:
- kb_document
- intent_rule
- script_flow
- prompt_template
MetadataFieldType:
type: string
enum:
- string
- number
- boolean
- enum
- array_enum
MetadataFieldDefinition:
type: object
required:
- id
- tenant_id
- field_key
- label
- type
- status
- field_roles
properties:
id:
type: string
format: uuid
tenant_id:
type: string
format: uuid
field_key:
type: string
pattern: '^[a-z][a-z0-9_]*$'
description: 字段键名,仅允许小写字母数字下划线
label:
type: string
description: 显示名称
type:
$ref: '#/components/schemas/MetadataFieldType'
required:
type: boolean
default: false
options:
type: array
items:
type: string
description: 选项列表enum/array_enum 类型必填)
default_value:
description: 默认值
scope:
type: array
items:
$ref: '#/components/schemas/MetadataScope'
description: 适用范围
is_filterable:
type: boolean
default: false
is_rank_feature:
type: boolean
default: false
field_roles:
type: array
items:
$ref: '#/components/schemas/FieldRole'
description: 字段角色列表
status:
$ref: '#/components/schemas/MetadataFieldStatus'
version:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
MetadataFieldDefinitionCreate:
type: object
required:
- tenant_id
- field_key
- label
- type
properties:
tenant_id:
type: string
format: uuid
field_key:
type: string
pattern: '^[a-z][a-z0-9_]*$'
label:
type: string
minLength: 1
maxLength: 100
type:
$ref: '#/components/schemas/MetadataFieldType'
required:
type: boolean
default: false
options:
type: array
items:
type: string
default_value:
type: object
scope:
type: array
items:
$ref: '#/components/schemas/MetadataScope'
is_filterable:
type: boolean
default: false
is_rank_feature:
type: boolean
default: false
field_roles:
type: array
items:
$ref: '#/components/schemas/FieldRole'
description: 字段角色列表,可为空
MetadataFieldDefinitionUpdate:
type: object
properties:
label:
type: string
minLength: 1
maxLength: 100
required:
type: boolean
options:
type: array
items:
type: string
default_value:
type: object
scope:
type: array
items:
$ref: '#/components/schemas/MetadataScope'
is_filterable:
type: boolean
is_rank_feature:
type: boolean
field_roles:
type: array
items:
$ref: '#/components/schemas/FieldRole'
status:
$ref: '#/components/schemas/MetadataFieldStatus'
ExtractStrategy:
type: string
enum:
- rule
- llm
- user_input
description: |
槽位提取策略:
- rule: 规则提取
- llm: LLM 推断
- user_input: 用户输入
SlotSource:
type: string
enum:
- user_confirmed
- rule_extracted
- llm_inferred
- default
SlotDefinition:
type: object
required:
- id
- tenant_id
- slot_key
- type
- required
properties:
id:
type: string
format: uuid
tenant_id:
type: string
format: uuid
slot_key:
type: string
pattern: '^[a-z][a-z0-9_]*$'
description: 槽位键名
type:
$ref: '#/components/schemas/MetadataFieldType'
required:
type: boolean
description: 是否必填槽位
extract_strategy:
$ref: '#/components/schemas/ExtractStrategy'
validation_rule:
type: string
description: 校验规则(正则或 JSON Schema
ask_back_prompt:
type: string
description: 追问提示语模板
default_value:
description: 默认值
linked_field_id:
type: string
format: uuid
description: 关联的元数据字段 ID
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
SlotDefinitionCreate:
type: object
required:
- tenant_id
- slot_key
- type
- required
properties:
tenant_id:
type: string
format: uuid
slot_key:
type: string
pattern: '^[a-z][a-z0-9_]*$'
type:
$ref: '#/components/schemas/MetadataFieldType'
required:
type: boolean
extract_strategy:
$ref: '#/components/schemas/ExtractStrategy'
validation_rule:
type: string
ask_back_prompt:
type: string
default_value:
type: object
linked_field_id:
type: string
format: uuid
SlotDefinitionUpdate:
type: object
properties:
type:
$ref: '#/components/schemas/MetadataFieldType'
required:
type: boolean
extract_strategy:
$ref: '#/components/schemas/ExtractStrategy'
validation_rule:
type: string
ask_back_prompt:
type: string
default_value:
type: object
linked_field_id:
type: string
format: uuid
SlotDefinitionWithField:
type: object
description: 槽位定义与关联字段信息
allOf:
- $ref: '#/components/schemas/SlotDefinition'
- type: object
properties:
linked_field:
$ref: '#/components/schemas/MetadataFieldDefinition'
RuntimeSlotValue:
type: object
required:
- key
- value
- source
- confidence
properties:
key:
type: string
description: 槽位键名
value:
description: 槽位值
source:
$ref: '#/components/schemas/SlotSource'
description: 槽位来源
confidence:
type: number
format: float
minimum: 0.0
maximum: 1.0
description: 置信度
updated_at:
type: string
format: date-time
description: 最后更新时间
ErrorResponse:
type: object
required:
- error_code
- message
properties:
error_code:
type: string
message:
type: string
details:
type: object
additionalProperties: true
responses:
BadRequest:
description: 请求参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error_code: BAD_REQUEST
message: "Invalid request parameters"
Unauthorized:
description: 未授权
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error_code: UNAUTHORIZED
message: "Authentication required"
NotFound:
description: 资源不存在
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error_code: NOT_FOUND
message: "Resource not found"