Files
map-client-vue/docs/model-selection-debug.md
douboer cb2f9ea76f feat: 增强模型选择日志和验证
- 在 chatService 中添加模型选择详细日志
- 在 modelServiceManager 中添加请求/响应确认日志
- 创建模型选择验证指南文档
- 帮助用户确认所选模型是否被正确使用

新增日志:
- 🎯 用户选择的模型
-  找到匹配服务
- 🔍 最终选择确认
- 📋 请求体 model 字段
- �� 最终发送确认
-  API 响应模型确认

用户现在可以在控制台清晰看到:
- 选择了哪个模型
- 找到了哪个服务
- 实际发送了什么模型参数
- API 返回了什么模型
- 请求模型和响应模型是否一致
2025-10-15 10:06:42 +08:00

273 lines
7.8 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.

# 模型选择验证指南
## 问题:切换模型后回答没有变化?
这个问题可能有以下几个原因,我已经添加了详细的日志来帮助你诊断。
---
## 🔍 如何确认模型被正确使用
### 方法 1: 查看控制台日志 (推荐)
打开浏览器开发者工具 (F12),切换到 Console 标签,发送一条消息后查看日志:
#### 关键日志标记
1. **用户选择阶段**
```
🎯 [callModelStream] 用户选择的模型: qwen-turbo-latest
✅ [callModelStream] 找到匹配服务: 阿里云通义千问
```
2. **最终确认阶段**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 [callModelStream] 最终选择:
服务: 阿里云通义千问 (dashscope)
模型: qwen-turbo-latest
MCP: 未选择
工具: 0 个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
3. **请求准备阶段**
```
🎯 [makeChatRequestStream] 准备请求参数:
服务类型: dashscope
服务名称: 阿里云通义千问
使用模型: qwen-turbo-latest
消息数量: 2
工具数量: 0
```
4. **最终发送阶段**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 [最终确认] 即将发送请求:
模型: qwen-turbo-latest
服务: 阿里云通义千问 (dashscope)
URL: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
5. **API 响应确认**
```
✅ [响应确认] API 返回的模型: qwen-turbo-latest
请求的模型: qwen-turbo-latest
模型匹配: ✓ 一致
```
### 方法 2: 测试不同模型的特性
#### 测试 qwen-turbo-latest (快速响应)
```
提问: "用一句话介绍你自己"
预期: 快速响应,简洁回答
```
#### 测试 qwq-plus (推理能力)
```
提问: "如果 A>BB>C那么 A 和 C 的关系是什么?请详细说明推理过程。"
预期: 详细的逻辑推理步骤
```
#### 测试 qwen-long (长上下文)
```
提问: "总结一下我们之前的所有对话"
预期: 能够回顾更多历史消息
```
#### 测试 qwen3-omni-flash (快速响应)
```
提问: "快速回答1+1=?"
预期: 极速响应
```
---
## 🐛 常见问题排查
### 问题 1: 模型显示但没有变化
**检查点 1**: 确认服务配置正确
```javascript
// 在控制台执行
const providers = JSON.parse(localStorage.getItem('model-providers') || '[]')
const aliyun = providers.find(p => p.type === 'dashscope')
console.log('阿里云配置:', aliyun)
console.log('可用模型:', aliyun?.models)
```
**检查点 2**: 确认模型列表包含目标模型
```javascript
// 在控制台执行
const providers = JSON.parse(localStorage.getItem('model-providers') || '[]')
providers.forEach(p => {
console.log(`${p.name} (${p.type}):`, p.models)
})
```
**检查点 3**: 查看控制台是否有错误
- 红色错误信息
- 黄色警告信息
- 404/401/403 等 HTTP 错误
### 问题 2: 所有模型回答都一样
**可能原因**:
1. **服务类型配置错误**: 检查服务类型是否为 `dashscope`
2. **Base URL 错误**: 应该是 `https://dashscope.aliyuncs.com/compatible-mode/v1`
3. **模型参数未传递**: 查看日志中的 `📋 [makeChatRequestStream] 请求体 model 字段`
4. **API 不支持该模型**: 某些 API Key 可能没有权限使用特定模型
### 问题 3: API 返回模型不一致
如果看到这样的日志:
```
✅ [响应确认] API 返回的模型: gpt-3.5-turbo
请求的模型: qwen-turbo-latest
模型匹配: ✗ 不一致!
```
**可能原因**:
1. **服务配置错误**: 可能连接到了错误的服务
2. **模型映射问题**: API 可能自动映射到了其他模型
3. **API Key 权限**: 该 API Key 可能无权使用指定模型
---
## 🔧 修复步骤
### 步骤 1: 验证服务配置
```javascript
// 在浏览器控制台执行
const providers = JSON.parse(localStorage.getItem('model-providers') || '[]')
const aliyun = providers.find(p => p.type === 'dashscope')
console.log('配置检查:')
console.log('✓ 服务类型:', aliyun.type)
console.log('✓ Base URL:', aliyun.baseUrl)
console.log('✓ API Key:', aliyun.apiKey?.substring(0, 10) + '...')
console.log('✓ 模型列表:', aliyun.models)
console.log('✓ 默认模型:', aliyun.defaultModel)
console.log('✓ 启用状态:', aliyun.enabled)
```
### 步骤 2: 重新配置模型列表
如果模型列表不正确:
```javascript
// 在浏览器控制台执行
const providers = JSON.parse(localStorage.getItem('model-providers') || '[]')
const aliyunIndex = providers.findIndex(p => p.type === 'dashscope')
if (aliyunIndex >= 0) {
// 更新模型列表
providers[aliyunIndex].models = [
'qwen-turbo-latest',
'qwq-plus',
'qwen-long',
'qwen3-omni-flash'
]
// 保存
localStorage.setItem('model-providers', JSON.stringify(providers))
console.log('✅ 模型列表已更新,请刷新页面')
setTimeout(() => location.reload(), 2000)
}
```
### 步骤 3: 测试连接
1. 进入"模型服务"设置
2. 找到阿里云服务
3. 点击"测试连接"
4. 查看是否成功
### 步骤 4: 清空缓存重试
```javascript
// 清空对话历史
localStorage.removeItem('chat-conversations')
localStorage.removeItem('chat-topics')
// 刷新页面
location.reload()
```
---
## 📊 预期日志输出示例
### 正常情况 (切换模型成功)
```
🎯 [callModelStream] 用户选择的模型: qwq-plus
✅ [callModelStream] 找到匹配服务: 阿里云通义千问
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 [callModelStream] 最终选择:
服务: 阿里云通义千问 (dashscope)
模型: qwq-plus
MCP: 未选择
工具: 0 个
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 [makeChatRequestStream] 准备请求参数:
服务类型: dashscope
服务名称: 阿里云通义千问
使用模型: qwq-plus
消息数量: 2
工具数量: 0
📋 [makeChatRequestStream] 请求体 model 字段: qwq-plus
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 [最终确认] 即将发送请求:
模型: qwq-plus
服务: 阿里云通义千问 (dashscope)
URL: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ [响应确认] API 返回的模型: qwq-plus
请求的模型: qwq-plus
模型匹配: ✓ 一致
```
### 异常情况 (服务未找到)
```
🎯 [callModelStream] 用户选择的模型: unknown-model
⚠️ [callModelStream] 未找到包含该模型的服务,使用默认服务
```
---
## 💡 使用建议
1. **首次使用**: 先用日志确认模型是否正确传递
2. **测试对比**: 用不同模型测试相同问题,对比回答差异
3. **性能对比**: 观察不同模型的响应速度
4. **功能测试**: 用特定模型测试其特长(如 qwq-plus 测试推理)
---
## 🆘 仍然有问题?
如果以上方法都无法解决问题,请:
1. 截图控制台完整日志
2. 记录以下信息:
- 选择的模型名称
- 服务配置(隐藏 API Key
- 完整的控制台输出
- 问题描述
3. 检查以下文件:
- `/web/src/services/chatService.ts`
- `/web/src/services/modelServiceManager.ts`
- localStorage 中的 `model-providers`
---
**现在刷新页面,选择不同的模型,查看控制台日志,你应该能看到完整的模型选择和使用流程!** 🔍✨