feat: chat integration, tenant admin spec, backend chat service, miniprogram updates, DEMO moved to tmp, XCX-TEST removed, migrations & docs

This commit is contained in:
Neo
2026-03-20 09:02:10 +08:00
parent 3d2e5f8165
commit beb88d5bea
388 changed files with 6436 additions and 25458 deletions

View File

@@ -0,0 +1,106 @@
"""
小程序 CHAT 模块 Pydantic 模型。
覆盖对话历史列表、消息查看、发送消息、SSE 流式请求等场景。
"""
from __future__ import annotations
from app.schemas.base import CamelModel
# ---------------------------------------------------------------------------
# 对话历史CHAT-1
# ---------------------------------------------------------------------------
class ChatHistoryItem(CamelModel):
"""对话历史列表项。"""
id: int
title: str
customer_name: str | None = None
last_message: str | None = None
timestamp: str # ISO 8601最后消息时间
unread_count: int = 0
class ChatHistoryResponse(CamelModel):
"""CHAT-1 对话历史列表响应。"""
items: list[ChatHistoryItem]
total: int
page: int
page_size: int
# ---------------------------------------------------------------------------
# 消息查看CHAT-2
# ---------------------------------------------------------------------------
class ReferenceCard(CamelModel):
"""引用卡片,附加在 AI 回复消息中的结构化上下文数据。"""
type: str # 'customer' | 'record'
title: str
summary: str
data: dict[str, str] # 键值对详情
class ChatMessageItem(CamelModel):
"""对话消息项。"""
id: int
role: str # 'user' | 'assistant'
content: str
created_at: str # ISO 8601统一字段名
reference_card: ReferenceCard | None = None
class ChatMessagesResponse(CamelModel):
"""CHAT-2 对话消息列表响应。"""
chat_id: int
items: list[ChatMessageItem]
total: int
page: int
page_size: int
# ---------------------------------------------------------------------------
# 发送消息CHAT-3
# ---------------------------------------------------------------------------
class MessageBrief(CamelModel):
"""消息摘要(用于发送消息响应)。"""
id: int
content: str
created_at: str # ISO 8601
class SendMessageRequest(CamelModel):
"""CHAT-3 发送消息请求体。"""
content: str
class SendMessageResponse(CamelModel):
"""CHAT-3 发送消息响应(含用户消息和 AI 回复)。"""
user_message: MessageBrief
ai_reply: MessageBrief
# ---------------------------------------------------------------------------
# SSE 流式CHAT-4
# ---------------------------------------------------------------------------
class ChatStreamRequest(CamelModel):
"""CHAT-4 SSE 流式请求体。"""
chat_id: int
content: str