Files
Jog/doc/AI助手联调与模型管理冲突分析.md
T
2026-05-24 00:39:10 +08:00

211 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 助手联调验收 vs 模型管理 — 冲突分析
| 文档版本 | 修订日期 | 说明 |
| :------- | :--------- | :--- |
| V1.0 | 2026-05-23 | 助手功能联调/验收进行中时,与《AI助手模型管理功能需求》V1.2 的差异与冲突梳理 |
**关联文档**
- [AI助手功能需求.md](./AI助手功能需求.md)V1.2,联调验收基准)
- [AI助手功能技术实施文档.md](./AI助手功能技术实施文档.md)(待办 23~25:联调 🔄、验收 ⬜)
- [AI助手模型管理功能需求.md](./AI助手模型管理功能需求.md)V1.2
- [AI助手模型管理功能技术实施文档.md](./AI助手模型管理功能技术实施文档.md)V1.1,未实施)
**分析基准**:当前仓库已实现助手 V5 表 + 四接口 + `AiAssistant.vue`,模型管理 **尚未编码**
---
## 1. 结论摘要
| 类别 | 数量 | 对联调验收的影响 |
| :--- | :--- | :--- |
| **P0 破坏性冲突**(不协同发布会导致助手页异常) | **1** | 必须先完成助手 AC 或做兼容层,再上线模型管理后端 |
| **P1 行为/语义冲突**(验收口径变化,需补充用例) | **4** | 不阻断当前联调,但模型管理上线后原 AC 覆盖不足 |
| **P2 环境与流程冲突**(库表、分支、验收顺序) | **3** | 联调环境执行 V6 后需重跑部分 AC |
| **P3 扩展性差异**UI/接口增量,无逻辑矛盾) | **5** | 与当前联调并行开发需注意合并顺序 |
| **无冲突(可并存)** | **12+** | 多轮、限流、登录、重试、分页等规则一致 |
**合计需纳入排期的冲突/差异项:8 项(P0×1 + P1×4 + P2×3**;P3 五项建议在模型管理 PR 中一并交付,但不计入「硬冲突」。
**推荐节奏**
1. **先** 按《AI助手功能需求》完成待办 23~25(AC-AI-CHAT-*),基线环境 **仅 V5、不部署 V6**
2. **再** 实施模型管理;`GET .../messages` 与前端 **同一 PR** 发布,或后端短期兼容旧响应格式。
3. 模型管理验收使用 **AC-AI-MODEL-***,并 **追加** 4 条 P1 回归(见 §5)。
---
## 2. 冲突项清单
### 2.1 P0 — 破坏性冲突(1 项)
| 编号 | 冲突点 | 助手现状(联调基准) | 模型管理要求 | 影响 |
| :--- | :----- | :------------------- | :----------- | :--- |
| **C-P0-01** | `GET /api/app/ai/sessions/{id}/messages` 响应结构 | `ApiResult.data`**消息数组** `List<AiChatMessageVO>`(需求 FR-AI-CHAT-BE-07);前端 `messages.value = res.data` | `data` 改为 **包装对象**`{ messages, modelEnabled, readOnlyReason, roundCount, maxRounds }` | 仅升级后端时,前端把对象当数组渲染 → **消息区空白或报错** |
**缓解**(择一):
- **A(推荐)**:模型管理前后端同版本发布;联调环境在助手 AC 通过后再合入。
- **B**:后端过渡期双格式:`?legacy=true` 仍返回数组,默认新格式。
- **C**:前端先判 `Array.isArray(data)`,兼容两种结构。
---
### 2.2 P1 — 行为 / 语义冲突(4 项)
| 编号 | 冲突点 | 助手现状 | 模型管理要求 | 对联调/验收的影响 |
| :--- | :----- | :------- | :----------- | :---------------- |
| **C-P1-01** | 调用 DashScope 的 `model` 来源 | FR-AI-CHAT-BE-09`DashScopeProperties.model``DASHSCOPE_MODEL` | FR-AI-MODEL-BE-03:会话绑定 `ai_assistant_model.model_code` | 联调时记录的 `response.model` 来自 yml;上线后来自 **库表**。同一环境改 `DASHSCOPE_MODEL` **不再** 改变已有助手会话行为 |
| **C-P1-02** | 只读条件 | FR-AI-CHAT-FE-05:仅 `roundCount >= 5` → 只读 | 另增 `modelEnabled === false`(D-09);未满 5 轮也可只读 | AC-AI-CHAT-FE-04/05 **未覆盖**「模型禁用」;模型管理验收需 AC-AI-MODEL-FE-04/05 |
| **C-P1-03** | `POST /chat` 拒绝条件 | 满 5 轮、参数非法、限流、AI 异常 | 绑定模型 `enabled=0`**400 模型已停用**FR-AI-MODEL-BE-01) | 联调阶段不会出现;管理员禁用模型后,原「未满 5 轮可继续」会话 **不能再发** — 与 FR-AI-CHAT-FE-05 文案/预期 **不一致**(属需求演进,非实现 bug |
| **C-P1-04** | 创建会话与模型绑定 | `POST /sessions` **无 body**`ai_chat_session` **无** `model_id` | 可选 `{ modelId }`;表字段 `model_id` 必填(迁移回填) | 联调创建的会话在 V6 后 `model_id` 指向种子默认模型;**不会** 自动等同于当时 yml 中的 model(若种子与 yml 不一致) |
---
### 2.3 P2 — 环境 / 流程冲突(3 项)
| 编号 | 冲突点 | 说明 | 建议 |
| :--- | :----- | :--- | :--- |
| **C-P2-01** | Flyway V6 与联调库 | 联调库若已跑 V5 并产生会话,执行 V6 会 `ALTER` + 种子 + `UPDATE model_id` | 助手 AC 在 **V5-only** 环境签字;V6 后重跑:刷新恢复、历史点选、发送(C-P0-01 相关) |
| **C-P2-02** | 验收清单并行 | 《AI助手功能技术实施文档》待办 25:`AC-AI-CHAT-*`;《模型管理》`AC-AI-MODEL-*` | 分两轮签字,避免混在同一表格未标注版本 |
| **C-P2-03** | 默认模型双配置 | 助手联调看 `application.yml` / `DASHSCOPE_MODEL`;模型管理运行看库内 `is_default` | 部署检查清单增加:**种子 `model_code` 与 yml 一致**(见模型管理需求 §3.4) |
---
### 2.4 P3 — 扩展差异(非硬冲突,5 项)
| 编号 | 差异点 | 助手现状 | 模型管理增量 | 说明 |
| :--- | :----- | :------- | :----------- | :--- |
| **C-P3-01** | 新接口 | 4 个 app 接口 | `GET /api/app/ai/models` | 纯增量,不影响联调 |
| **C-P3-02** | 会话列表字段 | `id, title, roundCount, lastMessageAt` | + `modelDisplayName`, `modelEnabled` | 向后兼容,旧前端可忽略 |
| **C-P3-03** | 创建会话 body | 空 POST | 可选 `modelId` | 旧客户端不传即可 |
| **C-P3-04** | 页面布局 | 标题栏仅「会话标题 + 轮次」 | 增加模型 `el-select`FR-AI-MODEL-FE | 布局扩展,不推翻 FR-AI-CHAT-FE 分栏 |
| **C-P3-05** | localStorage | FR-AI-CHAT-FE-14:不存对话正文 | 仅存 `jog_ai_assistant_model_id` | 不冲突 |
---
### 2.5 无冲突项(联调可继续,12 项代表)
以下规则在两份需求中 **一致或模型管理显式不改**
| 领域 | 助手需求编号 | 说明 |
| :--- | :----------- | :--- |
| 多轮上限 5 轮 | FR-AI-CHAT-BE-02、FE-05/06 | 模型管理未改 `MAX_ROUNDS` |
| 失败重试不重复 user | FR-AI-CHAT-BE-15 | 不变 |
| 限流 10 次/分钟 | FR-AI-CHAT-BE-12 | FR-AI-MODEL-BE-08 明确不按模型分限流 |
| 登录与鉴权 | FR-AI-CHAT-FE-10、BE-01 | 不变 |
| 会话列表分页 50 | FR-AI-CHAT-FE-16、D-07 | 不变 |
| 历史全文回看 | FR-AI-CHAT-FE-04、D-01 | 不变(仅多只读原因) |
| 新会话不删旧数据 | FR-AI-CHAT-FE-02、D-03 | 不变 |
| 进入页默认最近会话 | D-06 | 不变 |
| System Prompt / max-input 截断 | FR-AI-CHAT-BE-03/04/10 | 不变 |
| 会话软删除预留 | FR-AI-CHAT-BE-14 | 模型管理不强制前端删会话 |
| 润色/标签/摘要模型来源 | D-10、§1.6 | 与助手联调无关 |
| `POST /chat` 请求体核心字段 | `sessionId` + `message` | 仍必填;`modelId` 可选且可忽略 |
---
## 3. 接口契约对照表
| 接口 | 联调中契约 | 模型管理后契约 | 冲突级别 |
| :--- | :--------- | :------------- | :------- |
| `POST /sessions` | 无 body → `{ sessionId }` | 可选 body `{ modelId }` → 同上 | 兼容 |
| `GET /sessions` | 分页 + 4 字段 | +2 字段 | 兼容 |
| `GET /sessions/{id}/messages` | `data`: **数组** | `data`: **对象** | **C-P0-01** |
| `POST /chat` | `{ sessionId, message }` | +可选 `modelId`(忽略) | 兼容 |
| `GET /models` | 不存在 | 新增 | 无 |
---
## 4. 前端实现差异(当前代码)
| 文件 | 联调实现 | 模型管理需改 |
| :--- | :------- | :----------- |
| `api/aiChat.js` | `createAiChatSession()` 无参;messages 按数组解析 | 传 `modelId`;解析 `payload.messages` |
| `AiAssistant.vue` | `readOnly = roundCount >= 5``res.data` 作消息列表 | 合并 `modelEnabled`;处理 `readOnlyReason` |
| `AiChatPanel.vue` | 仅满 5 轮 `readonly-banner` | 增加模型停用提示条 |
| (无) | 无模型选择器 | 标题栏 `el-select` + `listAppAiModels` |
---
## 5. 验收用例冲突与合并建议
### 5.1 当前联调应完成的范围(不受模型管理阻塞)
以下用例 **仅依赖 V5 + 现有代码**,与模型管理无硬冲突:
- AC-AI-CHAT-NAV-*、AC-AI-CHAT-FE-0103、0607
- AC-AI-CHAT-FE-04、05**仅满 5 轮只读**
- AC-AI-CHAT-BE-0105
对应技术文档待办:**23、24、25(助手部分)**。
### 5.2 模型管理上线后必须追加的回归(原 AC 未覆盖)
| 追加编号 | 场景 | 对应冲突 |
| :------- | :--- | :------- |
| REG-MODEL-01 | V6 迁移后,旧会话可加载消息且可对话(默认模型启用) | C-P1-04、C-P2-01 |
| REG-MODEL-02 | 禁用绑定模型后,未满 5 轮会话只读且 chat 400 | C-P1-02、C-P1-03 |
| REG-MODEL-03 | 切换模型 + 新会话,DashScope 使用新 `model_code` | C-P1-01 |
| REG-MODEL-04 | 前端 messages 包装结构渲染正常 | C-P0-01 |
### 5.3 不必在助手联调阶段执行的用例
- AC-AI-MODEL-ADM-*、AC-AI-MODEL-FE-0105、AC-AI-MODEL-BE-*(属模型管理专项验收)
---
## 6. 测试与自动化影响
| 资产 | 联调基准 | 模型管理后 |
| :--- | :------- | :--------- |
| `AiChatServiceImplTest` | Mock `properties.getModel()` | 需 Mock `AiAssistantModelMapper` / Service |
| `AiChatServiceIntegrationTest` | 内存实现,无 model_id | 补 model 绑定与禁用用例 |
| `AiChatServiceLiveIT` | 打印 `model` 来自配置 | 可能为库表 `model_code` |
| 前端 E2E(若有) | 无模型下拉 | 需新场景 |
**冲突项计数**:自动化需 **显著改动** 的约 **2 处**(Service 单测 + 集成测),计入 P1 维护成本,不单列新编号。
---
## 7. 分支与发布策略建议
```
main ──┬── [阶段1] 助手联调验收(V5 only,签 AC-AI-CHAT-*
└── [阶段2] feature/ai-model-mgmtV6 + 模型 CRUD + 助手改造)
└── 同一 PR 合并:后端 messages 包装 + 前端兼容/新 UI
└── 签 AC-AI-MODEL-* + REG-MODEL-0104
```
- **避免**:阶段 1 未完成时合入仅含 V6 + 后端 messages 改动的 PR。
- **允许**:阶段 1 期间在独立分支开发模型管理,但不部署到联调验收环境。
---
## 8. 冲突项统计(速查)
| 级别 | 编号 | 计数 |
| :--- | :--- | :--- |
| P0 | C-P0-01 | 1 |
| P1 | C-P1-01 C-P1-04 | 4 |
| P2 | C-P2-01 C-P2-03 | 3 |
| P3 | C-P3-01 C-P3-05 | 5(扩展,非阻断) |
| **需协调的硬冲突合计** | P0 + P1 + P2 | **8** |
---
## 9. 文档修订建议(可选)
| 文档 | 建议 |
| :--- | :--- |
| 《AI助手功能需求》 | 在 §3.3.3 增加脚注:「消息列表响应以模型管理上线版为准,见《AI助手联调与模型管理冲突分析》C-P0-01」 |
| 《AI助手模型管理功能需求》 | §3.3.3 标明对 FR-AI-CHAT-BE-07 的 **替代关系** |
| 《AI助手功能技术实施文档》 | 待办 25 备注:验收环境 Flyway ≤ V5 |
---
**编写人:** AI 助手
**评审人:** 待评审
**生效日期:** 2026-05-23