Files
wecom_it_smart_desk/backend/app/schemas/wingman_assist.py
T

112 lines
3.6 KiB
Python
Raw Normal View History

# =============================================================================
# 企微IT智能服务台 — AI 辅助消息框请求模型
# =============================================================================
# 说明:坐席端 AI 辅助工具栏的 4 个功能的请求验证模型:
# 1. AutocompleteRequest — 自动补齐
# 2. ToneAdjustRequest — 语气调整
# 3. PolishRequest — 文字润色
# 4. RewriteRequest — 智能改写
#
# 字段约束与 PRD v1.0 / 增量设计 v1.0 对齐。
# =============================================================================
from typing import Optional
from pydantic import BaseModel, Field
class AutocompleteRequest(BaseModel):
"""自动补齐请求。
坐席输入停顿超过 800ms 后,前端发送当前输入文本请求补齐建议。
Attributes:
current_text: 当前输入文本,至少 1 个字符
cursor_position: 光标位置(保留字段,当前未使用)
max_length: 补齐建议最大长度(10-200 字符,默认 80)
"""
current_text: str = Field(
..., min_length=1, max_length=500,
description="当前输入文本"
)
cursor_position: int = Field(
0, ge=0,
description="光标位置"
)
max_length: int = Field(
80, ge=10, le=200,
description="补齐最大长度"
)
class ToneAdjustRequest(BaseModel):
"""语气调整请求。
坐席选中一段文字后,选择目标语气,请求 AI 改写。
Attributes:
selected_text: 选中的文字,至少 1 个字符
full_text: 输入框完整内容(可选,供 AI 理解上下文)
tone: 目标语气,必须是 professional/friendly/concise 之一
"""
selected_text: str = Field(
..., min_length=1, max_length=2000,
description="选中的文字"
)
full_text: str = Field(
"", max_length=5000,
description="输入框完整内容"
)
tone: str = Field(
..., pattern="^(professional|friendly|concise)$",
description="目标语气:professional/friendly/concise"
)
class PolishRequest(BaseModel):
"""文字润色请求。
坐席点击润色按钮后,选择操作类型,请求 AI 对输入文字进行处理。
Attributes:
text: 待润色文字
action: 润色操作类型:expand(扩写)/compress(压缩)/correct(纠错)
conversation_context: 是否携带对话上下文(默认 True)
"""
text: str = Field(
..., min_length=1, max_length=5000,
description="待润色文字"
)
action: str = Field(
..., pattern="^(expand|compress|correct)$",
description="润色操作:expand/compress/correct"
)
conversation_context: bool = Field(
True,
description="是否携带对话上下文"
)
class RewriteRequest(BaseModel):
"""智能改写请求。
坐席点击改写按钮后,AI 基于对话上下文生成多个不同风格的备选回复。
Attributes:
current_text: 当前输入文本(可为空,此时 AI 仅基于对话上下文生成)
generate_count: 生成版本数(1-5,默认 3)
include_knowledge: 是否包含知识库引用版本(默认 True)
"""
current_text: str = Field(
"", max_length=5000,
description="当前输入文本(可为空)"
)
generate_count: int = Field(
3, ge=1, le=5,
description="生成版本数"
)
include_knowledge: bool = Field(
True,
description="是否包含知识库引用版本"
)