feat: Kimi k2.5参数适配+AI日志导出完善(20260419_2249)

- Kimi k2.5 强制传参拦截: 当 provider=kimi 且 model 包含 k2.5 时,
  从请求体中 delete temperature/top_p/presence_penalty/frequency_penalty,
  彻底解决 HTTP 400 报错
- 完善导出AI日志: 新增 lastExchangeLog 状态, 记录每次调用的
  完整请求体(requestPayload)、原始响应(responsePayload)、
  错误详情(errorDetail含status/statusText/responseText)、模型配置
- 更新导出按钮 JSON 结构, 包含 lastExchange 字段
This commit is contained in:
2026-04-19 22:54:00 +08:00
parent 2e634ff832
commit 3bec69986e
4 changed files with 269 additions and 9 deletions

View File

@@ -0,0 +1,64 @@
# 功能变更测试文档20260419_2249
## 测试项 1Kimi k2.5 参数拦截
### 测试场景 AKimi + k2.5 模型
1. 进入系统设置 → AI 接口集成
2. 供应商选择「Kimi (Moonshot)」,模型名填写 `kimi-k2.5`
3. 填写有效 API Key点击「测试连接」确认配置有效
4. 进入报告编辑器,打开 AI 面板,发送任意消息
5. **预期结果**
- 网络请求成功HTTP 200无 400 报错
- 浏览器 DevTools → Network → 请求体中**不包含** `temperature``top_p``presence_penalty``frequency_penalty`
### 测试场景 BKimi + 非 k2.5 模型
1. 系统设置中模型名改为 `moonshot-v1-32k`
2. 发送 AI 消息
3. **预期结果**
- 请求体中**包含** `temperature: 0.3`
- 调用正常
### 测试场景 CDeepSeek / OpenAI / Custom
1. 切换供应商为 DeepSeek模型 `deepseek-chat`
2. 发送 AI 消息
3. **预期结果**
- 请求体中**包含** `temperature: 0.3`
- 调用正常
---
## 测试项 2AI 日志导出完善
### 测试场景 A成功调用后的导出
1. 发送一条 AI 消息并等待成功返回
2. 点击「导出 AI 日志」
3. **预期结果**
- 下载的 JSON 中 `lastExchange` 字段非空
- `lastExchange.requestPayload` 包含完整的 `model``messages`system + user
- `lastExchange.requestPayload.messages[0].content` 包含系统提示词全文
- `lastExchange.responsePayload` 包含 AI 返回的原始 JSON`reply``updatedHtml`
- `lastExchange.modelConfig` 包含 provider、endpoint、modelName
- `lastExchange.errorDetail``null`
### 测试场景 B失败调用后的导出
1. 故意填写错误的 API Key 或断开网络
2. 发送 AI 消息,等待报错
3. 点击「导出 AI 日志」
4. **预期结果**
- `lastExchange.errorDetail` 非空
- 包含 `status`(如 401/400/403`statusText``responseText`(服务端返回的原始错误 JSON`message`
- `lastExchange.responsePayload``null`
### 测试场景 C未进行任何 AI 调用时的导出
1. 刷新页面后直接点击「导出 AI 日志」
2. **预期结果**
- `lastExchange``null`
- 其他字段messages、metadata正常导出
---
## 回归测试
- `tsc --noEmit` 零错误
- `npm run build` 构建成功
- 预览服务器正常启动并可访问
- 现有 AI 对话功能不受影响的供应商deepseek/openai调用正常