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