- 添加 Gemini 2.5 Flash 对话接口(流式+非流式) - 添加 NanoBanana 图像生成/编辑接口 - 添加 Sora2 视频生成接口(文生视频、图生视频、去水印) - 移除 models-integration 子项目(功能已迁移至主后端) - 新增测试文档和 Playwright E2E 配置 - 更新前端页面和 API 接口 - 更新后端配置和日志处理
46 lines
2.7 KiB
Plaintext
46 lines
2.7 KiB
Plaintext
|
||
BUG-005 相关修改已按你的要求做完,结论与改动如下。
|
||
|
||
---
|
||
|
||
## 1. 问题原因
|
||
|
||
- **前端**:创建对话后从 `response.data.chat` 取 `conversation_id`、`id`,但后端返回的是 `CozeBaseResponse.success(resp)`,`data` 就是 Coze 的 CreateChatResp,没有嵌套的 `chat`,且多为 camelCase(如 `conversationID`)。因此取不到会话/聊天 ID,轮询失败,请求在 catch 里走本地兜底 `getAIResponse(content)`,看起来就像“固定一段话”。
|
||
- **后端**:Coze 实现里没有发现硬编码占位词,用户内容来自 `additionalMessages[0].content`。已做的修改是“无用户消息时不发请求”的防护。
|
||
|
||
---
|
||
|
||
## 2. 前端修改(`msh_single_uniapp/pages/tool/ai-nutritionist.vue`)
|
||
|
||
- **创建对话响应解析**
|
||
- 兼容 `response.data.chat` 与 `response.data`。
|
||
- 兼容 `conversation_id` / `conversationID` / `conversationId` 和 `id`。
|
||
- 只有拿到 `conversationId` 和 `chatId` 后才调用 `pollChatStatus`,否则抛出明确错误。
|
||
- **轮询状态**
|
||
- 使用 `const chatObj = res.data.chat || res.data` 再取 `status`,避免因结构不同取不到状态。
|
||
- **消息列表**
|
||
- 支持 `res.data.messages` 或 `res.data` 为数组两种结构,用 `rawMessages` 统一处理,保证 AI 回复用 `role: 'ai', content: msg.content` 正确 push 到 `messageList`。
|
||
|
||
未改 UI,只修了数据流;`sendMessage` / `sendToAI` 里用的始终是 `inputText.trim()` → `content`,请求体已正确带用户输入。
|
||
|
||
---
|
||
|
||
## 3. 后端修改(`ToolCozeServiceImpl.java`)
|
||
|
||
- **无用户消息时不调用 Coze**
|
||
- `chat()` 与 `chatStream()` 中:若 `buildMessages(request)` 为空,则不再调用 Coze,直接返回错误(如“请提供对话内容”),避免“空请求”导致平台返回欢迎语等固定回复。
|
||
|
||
未改动 `ToolKieAIServiceImpl.java`:该文件是 Gemini 对话实现,营养师页走的是 Coze(`/api/front/coze/chat`);且其中没有硬编码占位词,prompt 来自 `KieAIGeminiChatRequest.getMessages()`,因此按要求未修改。
|
||
|
||
---
|
||
|
||
## 4. 修改汇总
|
||
|
||
| 文件 | 修改内容 |
|
||
|------|----------|
|
||
| `ai-nutritionist.vue` | 修正 create-chat 响应解析(data / data.chat、camel/snake);轮询与消息列表兼容不同返回结构;保证 AI 回复写入 `messageList`。 |
|
||
| `ToolCozeServiceImpl.java` | 在 `chat` / `chatStream` 中增加“无用户消息则不请求 Coze”的校验。 |
|
||
| `ToolKieAIServiceImpl.java` | 未修改(非本接口且无硬编码)。 |
|
||
|
||
按当前逻辑,用户输入会正确传到 Coze,且能正确解析创建对话与轮询结果,AI 的真实回复会显示在列表中,而不再被固定兜底文案覆盖。
|