Files
msh-system/scripts/logs/agent-BUG-005-171812.log
scottpan 4be53dcd1b feat: 集成 KieAI 服务,移除 models-integration 子项目
- 添加 Gemini 2.5 Flash 对话接口(流式+非流式)
- 添加 NanoBanana 图像生成/编辑接口
- 添加 Sora2 视频生成接口(文生视频、图生视频、去水印)
- 移除 models-integration 子项目(功能已迁移至主后端)
- 新增测试文档和 Playwright E2E 配置
- 更新前端页面和 API 接口
- 更新后端配置和日志处理
2026-03-03 15:33:50 +08:00

46 lines
2.7 KiB
Plaintext
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.
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 的真实回复会显示在列表中,而不再被固定兜底文案覆盖。