完成请求推送,但组装mes还有问题
This commit is contained in:
250
API_CONFIG_DEBUG.md
Normal file
250
API_CONFIG_DEBUG.md
Normal file
@@ -0,0 +1,250 @@
|
||||
# API 配置调试指南
|
||||
|
||||
## 问题描述
|
||||
|
||||
后端日志显示 Model 和 API URL 为空:
|
||||
```
|
||||
[LLMClient] 🔧 创建 ChatOpenAI 实例
|
||||
- Model:
|
||||
- API URL:
|
||||
- Temperature: 1
|
||||
- Max Tokens: 30000
|
||||
```
|
||||
|
||||
## 可能的原因
|
||||
|
||||
### 1. 前端未配置 API
|
||||
|
||||
**症状**:
|
||||
- 前端控制台显示 `currentProfile` 为 `null` 或 `apis.mainLLM` 不存在
|
||||
- 后端接收到的 `apiConfig` 为空对象或字段为空
|
||||
|
||||
**解决方案**:
|
||||
1. 打开浏览器开发者工具(F12)
|
||||
2. 切换到 Console 标签
|
||||
3. 查看是否有以下警告:
|
||||
```
|
||||
[ChatBoxStore] ⚠️ 未找到 API 配置,请先到 API 配置页面设置
|
||||
```
|
||||
4. 如果有,需要先到 API 配置页面设置
|
||||
|
||||
### 2. API 配置页面设置步骤
|
||||
|
||||
1. **打开左侧边栏** → 点击 **API 配置** 标签
|
||||
2. **创建或选择配置文件**:
|
||||
- 如果没有配置文件,点击 "新建配置"
|
||||
- 输入配置名称(如 "Default")
|
||||
3. **填写 Main LLM 配置**:
|
||||
- API URL: `https://api.openai.com/v1`(或其他兼容 OpenAI 的 API)
|
||||
- API Key: 你的 API 密钥
|
||||
- Model: `gpt-4` 或 `gpt-3.5-turbo`
|
||||
4. **测试连接**:
|
||||
- 点击 "测试连接" 按钮
|
||||
- 确保连接成功并获取到模型列表
|
||||
5. **保存配置**:
|
||||
- 点击 "保存" 按钮
|
||||
6. **设置为默认**(可选):
|
||||
- 在配置列表中点击 "设为默认"
|
||||
|
||||
### 3. 数据结构检查
|
||||
|
||||
正确的 `currentProfile` 结构应该是:
|
||||
|
||||
```javascript
|
||||
{
|
||||
id: "profile-xxx",
|
||||
name: "Default",
|
||||
apis: {
|
||||
mainLLM: {
|
||||
apiUrl: "https://api.openai.com/v1",
|
||||
apiKey: "sk-xxx...",
|
||||
model: "gpt-4"
|
||||
},
|
||||
// 其他 API 配置...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 调试步骤
|
||||
|
||||
### 前端调试
|
||||
|
||||
1. **打开浏览器控制台**(F12 → Console)
|
||||
|
||||
2. **发送消息前查看日志**:
|
||||
```
|
||||
[ChatBoxStore] 🔍 API 配置状态检查:
|
||||
- currentProfile: {...}
|
||||
- apis: {...}
|
||||
- mainLLM: {...}
|
||||
```
|
||||
|
||||
3. **发送消息时查看日志**:
|
||||
```
|
||||
--------------------------------------------------------------------------------
|
||||
[WebSocket] 📤 发送消息:
|
||||
- Floor: 6
|
||||
- Role: 互动小说家
|
||||
- Chat: 赛博朋克-数据幽灵
|
||||
- Stream: true
|
||||
- Message Length: 45
|
||||
- API Config: {
|
||||
api_url: "https://api.openai.com/v1",
|
||||
api_key: "***",
|
||||
model: "gpt-4"
|
||||
}
|
||||
- Current Profile: {...}
|
||||
--------------------------------------------------------------------------------
|
||||
```
|
||||
|
||||
4. **如果 API Config 为空**:
|
||||
- 检查 `Current Profile` 是否为 `null`
|
||||
- 检查 `apis.mainLLM` 是否存在
|
||||
- 确认是否已保存配置
|
||||
|
||||
### 后端调试
|
||||
|
||||
1. **查看接收到的请求**:
|
||||
```
|
||||
--------------------------------------------------------------------------------
|
||||
[WebSocket] 📨 收到请求:
|
||||
- Floor: 6
|
||||
- Role: 互动小说家
|
||||
- Chat: 赛博朋克-数据幽灵
|
||||
- Stream: True
|
||||
- Message Length: 45
|
||||
- API URL: https://api.openai.com/v1
|
||||
- API Key: ***xxxx
|
||||
- Model: gpt-4
|
||||
--------------------------------------------------------------------------------
|
||||
```
|
||||
|
||||
2. **如果显示 "⚠️ 未提供"**:
|
||||
- 说明前端没有发送 `apiConfig`
|
||||
- 检查前端代码是否正确组装数据
|
||||
- 检查 WebSocket 消息格式
|
||||
|
||||
3. **如果字段为空**:
|
||||
- 说明前端发送了空值
|
||||
- 回到前端调试步骤
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 配置保存后仍然为空?
|
||||
|
||||
**A**: 可能是以下原因:
|
||||
1. 配置没有正确保存到 localStorage
|
||||
2. 页面刷新后没有重新加载配置
|
||||
3. 多个配置文件混淆
|
||||
|
||||
**解决**:
|
||||
```javascript
|
||||
// 在控制台执行
|
||||
const store = useApiConfigStore.getState();
|
||||
console.log('Profiles:', store.profiles);
|
||||
console.log('Current:', store.currentProfile);
|
||||
```
|
||||
|
||||
### Q2: 有多个配置文件,如何切换?
|
||||
|
||||
**A**:
|
||||
1. 在 API 配置页面选择要使用的配置
|
||||
2. 点击 "加载" 按钮
|
||||
3. 确认 `currentProfile` 已更新
|
||||
|
||||
### Q3: 测试连接成功,但发送消息时仍为空?
|
||||
|
||||
**A**:
|
||||
- 可能是测试后没有保存配置
|
||||
- 或者保存后没有重新加载
|
||||
- 尝试刷新页面重新加载配置
|
||||
|
||||
### Q4: 如何快速验证配置是否正确?
|
||||
|
||||
**A**: 在浏览器控制台执行:
|
||||
```javascript
|
||||
const apiConfig = useApiConfigStore.getState().currentProfile?.apis?.mainLLM;
|
||||
console.log('API URL:', apiConfig?.apiUrl);
|
||||
console.log('API Key:', apiConfig?.apiKey ? '已设置' : '未设置');
|
||||
console.log('Model:', apiConfig?.model);
|
||||
```
|
||||
|
||||
应该输出:
|
||||
```
|
||||
API URL: https://api.openai.com/v1
|
||||
API Key: 已设置
|
||||
Model: gpt-4
|
||||
```
|
||||
|
||||
## 临时解决方案
|
||||
|
||||
如果暂时无法配置 API,可以使用环境变量或默认值:
|
||||
|
||||
### 方法 1: 使用 .env 文件
|
||||
|
||||
在 `.env` 文件中添加:
|
||||
```env
|
||||
MAIN_LLM_API_KEY=sk-your-api-key
|
||||
MAIN_LLM_MODEL=gpt-4
|
||||
MAIN_LLM_BASE_URL=https://api.openai.com/v1
|
||||
```
|
||||
|
||||
### 方法 2: 代码中添加默认值
|
||||
|
||||
修改 `ChatBoxSlice.jsx`:
|
||||
```javascript
|
||||
apiConfig: {
|
||||
api_url: apiConfigStore.currentProfile?.apis?.mainLLM?.apiUrl ||
|
||||
import.meta.env.VITE_DEFAULT_API_URL ||
|
||||
'https://api.openai.com/v1',
|
||||
api_key: apiConfigStore.currentProfile?.apis?.mainLLM?.apiKey ||
|
||||
import.meta.env.VITE_DEFAULT_API_KEY ||
|
||||
'',
|
||||
model: apiConfigStore.currentProfile?.apis?.mainLLM?.model ||
|
||||
import.meta.env.VITE_DEFAULT_MODEL ||
|
||||
'gpt-4'
|
||||
}
|
||||
```
|
||||
|
||||
## 验证修复
|
||||
|
||||
完成配置后,发送一条测试消息,应该看到:
|
||||
|
||||
**前端日志**:
|
||||
```
|
||||
[WebSocket] 📤 发送消息:
|
||||
- API Config: {
|
||||
api_url: "https://api.openai.com/v1",
|
||||
api_key: "***",
|
||||
model: "gpt-4"
|
||||
}
|
||||
```
|
||||
|
||||
**后端日志**:
|
||||
```
|
||||
[WebSocket] 📨 收到请求:
|
||||
- API URL: https://api.openai.com/v1
|
||||
- API Key: ***xxxx
|
||||
- Model: gpt-4
|
||||
|
||||
[LLMClient] 🔧 创建 ChatOpenAI 实例
|
||||
- Model: gpt-4
|
||||
- API URL: https://api.openai.com/v1
|
||||
- Temperature: 1.0
|
||||
- Max Tokens: 30000
|
||||
|
||||
[LLMClient] 🚀 开始流式请求...
|
||||
```
|
||||
|
||||
## 总结
|
||||
|
||||
1. ✅ 确保在 API 配置页面创建了配置文件
|
||||
2. ✅ 填写完整的 Main LLM 配置(URL、Key、Model)
|
||||
3. ✅ 测试连接成功后保存配置
|
||||
4. ✅ 在前端控制台验证 `currentProfile.apis.mainLLM` 存在
|
||||
5. ✅ 发送消息时检查前后端日志中的 API 配置信息
|
||||
|
||||
如果仍有问题,请提供:
|
||||
- 前端控制台的完整日志
|
||||
- 后端控制台的完整日志
|
||||
- API 配置页面的截图
|
||||
Reference in New Issue
Block a user