docs: add ai-service provider openapi [AC-AISVC-01]

This commit is contained in:
MerCry 2026-02-24 12:43:57 +08:00
parent 78fec1fc8e
commit 2fdc91a54c
2 changed files with 436 additions and 0 deletions

188
java/openapi.deps.yaml Normal file
View File

@ -0,0 +1,188 @@
openapi: 3.0.3
info:
title: AI Service API
description: |
Python AI 服务接口契约。
本文件定义主框架对 AI 服务的接口需求Consumer-First
由主框架作为调用方Python AI 服务作为提供方实现。
version: 1.0.0
x-contract-level: L0
x-consumer: "java-main-framework"
x-provider: "python-ai-service"
servers:
- url: http://ai-service:8080
description: AI 服务地址
paths:
/ai/chat:
post:
operationId: generateReply
summary: 生成 AI 回复
description: |
根据用户消息和会话历史生成 AI 回复。
覆盖验收标准:
- AC-MCA-04: 主框架通过 HTTP POST 调用 AI 服务
- AC-MCA-05: 响应包含 reply、confidence、shouldTransfer 字段
- AC-MCA-06: AI 服务不可用时的降级处理(主框架侧实现)
- AC-MCA-07: 超时处理(主框架侧实现)
tags:
- AI Chat
x-requirements:
- AC-MCA-04
- AC-MCA-04-REQ
- AC-MCA-04-OPT
- AC-MCA-05
- AC-MCA-06
- AC-MCA-07
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRequest'
example:
sessionId: "kf_001_wx123456_1708765432000"
currentMessage: "我想了解产品价格"
channelType: "wechat"
responses:
'200':
description: 成功生成回复
content:
application/json:
schema:
$ref: '#/components/schemas/ChatResponse'
example:
reply: "您好,我们的产品价格根据套餐不同有所差异。"
confidence: 0.92
shouldTransfer: false
'400':
description: 请求参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 服务内部错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'503':
description: 服务不可用
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/ai/health:
get:
operationId: healthCheck
summary: 健康检查
description: 检查 AI 服务是否正常运行
tags:
- Health
responses:
'200':
description: 服务正常
content:
application/json:
schema:
type: object
properties:
status:
type: string
'503':
description: 服务不健康
components:
schemas:
ChatRequest:
type: object
required:
- sessionId
- currentMessage
- channelType
properties:
sessionId:
type: string
description: 会话IDAC-MCA-04-REQ 必填)
currentMessage:
type: string
description: 当前用户消息AC-MCA-04-REQ 必填)
channelType:
type: string
description: 渠道类型AC-MCA-04-REQ 必填)
enum:
- wechat
- douyin
- jd
history:
type: array
description: 历史消息列表AC-MCA-04-OPT 可选)
items:
$ref: '#/components/schemas/ChatMessage'
metadata:
type: object
description: 扩展元数据AC-MCA-04-OPT 可选)
additionalProperties: true
ChatMessage:
type: object
required:
- role
- content
properties:
role:
type: string
enum:
- user
- assistant
content:
type: string
ChatResponse:
type: object
required:
- reply
- confidence
- shouldTransfer
properties:
reply:
type: string
description: AI 回复内容AC-MCA-05 必填)
confidence:
type: number
format: double
description: 置信度评分 0.0-1.0AC-MCA-05 必填)
shouldTransfer:
type: boolean
description: 是否建议转人工AC-MCA-05 必填)
transferReason:
type: string
description: 转人工原因(可选)
metadata:
type: object
description: 响应元数据(可选)
additionalProperties: true
ErrorResponse:
type: object
required:
- code
- message
properties:
code:
type: string
description: 错误代码
message:
type: string
description: 错误消息
details:
type: array
description: 详细错误信息(可选)
items:
type: object
additionalProperties: true

View File

@ -0,0 +1,248 @@
openapi: 3.0.3
info:
title: AI Service API
description: |
Python AI 服务对外提供的接口契约Provider
目标100% 覆盖并对齐 Java 端 Consumer-First 依赖契约 `java/openapi.deps.yaml`。
- 路径与方法必须一致
- non-streaming JSON 响应 schema 必须一致reply/confidence/shouldTransfer 等)
额外扩展:支持 SSE 流式输出Accept: text/event-stream
version: 1.0.0
x-contract-level: L0
x-provider: "python-ai-service"
x-consumer: "java-main-framework"
servers:
- url: http://ai-service:8080
description: AI 服务地址
tags:
- name: AI Chat
description: 对话生成
- name: Health
description: 健康检查
paths:
/ai/chat:
post:
operationId: generateReply
summary: 生成 AI 回复
description: |
根据用户消息和会话历史生成 AI 回复。
non-streaming返回 application/jsonChatResponse
streaming当请求头包含 `Accept: text/event-stream` 时,以 SSE 推送事件流。
覆盖验收标准(来自 Java 侧契约描述):
- AC-MCA-04: 主框架通过 HTTP POST 调用 AI 服务
- AC-MCA-05: 响应包含 reply、confidence、shouldTransfer 字段
- AC-MCA-06: AI 服务不可用时的降级处理(主框架侧实现)
- AC-MCA-07: 超时处理(主框架侧实现)
tags:
- AI Chat
x-requirements:
- AC-MCA-04
- AC-MCA-04-REQ
- AC-MCA-04-OPT
- AC-MCA-05
- AC-MCA-06
- AC-MCA-07
parameters:
- name: X-Tenant-Id
in: header
required: true
description: 租户ID多租户隔离必填便于网关/拦截器统一处理)
schema:
type: string
- name: Accept
in: header
required: false
description: |
内容协商。
- 设置为 text/event-stream 时返回 SSE 事件流
- 其他情况返回 application/json
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChatRequest'
example:
sessionId: "kf_001_wx123456_1708765432000"
currentMessage: "我想了解产品价格"
channelType: "wechat"
metadata:
channelUserId: "wx123456"
extra: "..."
responses:
'200':
description: |
成功生成回复。
注意:
- non-streaming响应 Content-Type 为 application/json
- streaming当请求头 Accept: text/event-stream 时,服务端可返回 text/event-stream见下方 200 的第二种 content 描述)
content:
application/json:
schema:
$ref: '#/components/schemas/ChatResponse'
example:
reply: "您好,我们的产品价格根据套餐不同有所差异。"
confidence: 0.92
shouldTransfer: false
text/event-stream:
schema:
type: string
description: |
SSE 事件流(按行文本)。事件模型:
1) event: message
- data: {"delta": "..."}
- 返回时机:模型生成过程中多次发送,用于增量渲染。
2) event: final
- data: ChatResponse完整结构化结果字段至少包含 reply/confidence/shouldTransfer
- 返回时机:生成结束时发送一次,随后关闭连接。
3) event: error
- data: ErrorResponse结构化错误至少 code/message可含 details
- 返回时机:发生错误时发送一次,随后关闭连接。
示例(片段):
event: message\n
data: {"delta":"您好,"}\n
event: final\n
data: {"reply":"...","confidence":0.9,"shouldTransfer":false}\n
'400':
description: 请求参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 服务内部错误
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'503':
description: 服务不可用
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/ai/health:
get:
operationId: healthCheck
summary: 健康检查
description: 检查 AI 服务是否正常运行
tags:
- Health
responses:
'200':
description: 服务正常
content:
application/json:
schema:
type: object
properties:
status:
type: string
'503':
description: 服务不健康
components:
schemas:
ChatRequest:
type: object
required:
- sessionId
- currentMessage
- channelType
properties:
sessionId:
type: string
description: 会话IDAC-MCA-04-REQ 必填)
currentMessage:
type: string
description: 当前用户消息AC-MCA-04-REQ 必填)
channelType:
type: string
description: 渠道类型AC-MCA-04-REQ 必填)
enum:
- wechat
- douyin
- jd
history:
type: array
description: 历史消息列表AC-MCA-04-OPT 可选)
items:
$ref: '#/components/schemas/ChatMessage'
metadata:
type: object
description: 扩展元数据AC-MCA-04-OPT 可选)
additionalProperties: true
ChatMessage:
type: object
required:
- role
- content
properties:
role:
type: string
enum:
- user
- assistant
content:
type: string
ChatResponse:
type: object
required:
- reply
- confidence
- shouldTransfer
properties:
reply:
type: string
description: AI 回复内容AC-MCA-05 必填)
confidence:
type: number
format: double
description: 置信度评分 0.0-1.0AC-MCA-05 必填)
shouldTransfer:
type: boolean
description: 是否建议转人工AC-MCA-05 必填)
transferReason:
type: string
description: 转人工原因(可选)
metadata:
type: object
description: 响应元数据(可选)
additionalProperties: true
ErrorResponse:
type: object
required:
- code
- message
properties:
code:
type: string
description: 错误代码
message:
type: string
description: 错误消息
details:
type: array
description: 详细错误信息(可选)
items:
type: object
additionalProperties: true