# 第八阶段:AI 底座与教师端对话 状态:基础包和边界已引入,业务接口待实现。 ## 使用场景 ### 租户教师 AI 对话 - 教师在租户后台发起对话。 - AI 根据当前租户 Provider 配置调用模型。 - 对话历史按租户和教师隔离保存。 - 后续预留 function calling,但只能调用受审计的后端业务函数。 - function 有写操作时必须复用 RBAC、DataScope、Tenant Scope 和 AuditLog。 ### AI 审核题目反馈 - 输入:题目反馈、题目摘要、反馈类型、提交用户上下文摘要。 - 输出:审核建议、风险等级、归类标签、是否建议人工复核。 - 不做 function calling。 - 不直接修改题目、反馈状态或用户数据。 ## 存储模型 不要把 Semantic Kernel 的 `ChatHistory`、`ChatMessageContent`、`KernelContent`、tool call object graph 或 provider 原始 response 作为 EF Core 持久化模型。 数据库保存 provider-neutral 消息: - `AiConversation`:租户、教师、标题、场景、Provider、模型、状态、metadata。 - `AiConversationMessage`:租户、会话、序号、role、文本、tool call id/name/arguments/result summary、token、metadata。 - `AiToolCallLog`:租户、会话、消息、函数名、输入摘要、结果、耗时、错误码。 - `AiFeedbackReview`:租户、题目反馈、建议、风险、标签、人工复核标记、metadata。 运行时由 Infrastructure adapter 把规范化消息转换为 SK / OpenAI-compatible 请求。DeepSeek 等 provider 只接收目标接口允许的 `role`、`content`、`tool_calls`、`tool_call_id` 字段;SK metadata 不得原样回放给模型 API。 ## Provider 与密钥边界 - AI Provider 使用 `TenantExternalProvider(capability=ai)`。 - 租户 API Key 存 `TenantSecret`,通过 `SecretRef` 关联。 - `ConfigPublic` 只允许 provider、model、endpoint、deployment、temperature、max token 等公开配置。 - `ConfigPublic` 禁止 `secret`、`token`、`apiKey`、`key`、`privateKey` 等敏感字段。 - `Microsoft.SemanticKernel` 只引用在 `Tiku.Infrastructure`。 - `Tiku.Api`、`Tiku.Application`、`Tiku.Domain` 不直接引用 Semantic Kernel namespace。 ## 第一批接口 - `POST /api/tenant-admin/ai/conversations` - `GET /api/tenant-admin/ai/conversations` - `GET /api/tenant-admin/ai/conversations/{conversationId}` - `POST /api/tenant-admin/ai/conversations/{conversationId}/messages` - `POST /api/tenant-admin/ai/question-feedback/review` 第一批先接 fake/local AI provider 跑通对话、日志和隔离,再接真实模型。 ## 暂不做 - 学生端 AI。 - 复杂 RAG。 - 自动改题或自动发布题目。 - 自动处理反馈状态。 - 让客户端指定任意 function call。 - 明文 API Key 配置。