API 供应商切换配置流程缺失,导致认证失败
问题描述
更换 LLM 供应商(从 DeepSeek 切换到 MiniMax)时,只改了 config.yaml 中的 model 字段,但实际 API 调用仍然使用了旧供应商的配置,导致认证失败(1004 错误)。
根因分析
API 配置(key + base URL)散落在三个层级,加载顺序不透明:
- 模块导入时的
load_dotenv() — 从 cwd 加载 .env
- KB 本地
.env — _setup_llm_key() 从 kb_dir/.env 加载
- 全局
~/.config/openkb/.env — _setup_llm_key() 从 global config 加载
- Shell 环境变量(如
.zshrc 中的 export)
虽然有 override=False,但 Python 模块导入阶段的 load_dotenv() 发生在用户环境变量注入之前,实际行为不可预测。
建议改进
-
统一的 API 配置管理命令
openkb config set-api --provider minimax --key sk-xxx --base-url https://api.minimaxi.com/v1
或提供交互式向导来配置/切换供应商。
-
供应商切换检测
当 config.yaml 中的 model provider 前缀发生变化时,主动提示用户更新对应的 API 配置,而不是默默失败。
-
更好的错误诊断
在认证失败时,输出当前实际使用的 base URL 和 model,帮助用户定位问题:
[ERROR] Authentication failed.
Model: openai/MiniMax-M2.7-highspeed
Base URL: https://api.deepseek.com/v1 <-- 这里就能一眼看出不对
-
考虑支持在 config.yaml 中直接配置 API
允许用户在 config.yaml 中配置 provider-specific 的 api_key 和 base_url,减少对多层 .env 的依赖。
Diagnostics (auto-collected by openkb feedback)
- openkb: 0.1.dev1+g51b6d4f88
- python: 3.12.2
- platform: Darwin 24.2.0
- kb_initialised: yes
API 供应商切换配置流程缺失,导致认证失败
问题描述
更换 LLM 供应商(从 DeepSeek 切换到 MiniMax)时,只改了 config.yaml 中的 model 字段,但实际 API 调用仍然使用了旧供应商的配置,导致认证失败(1004 错误)。
根因分析
API 配置(key + base URL)散落在三个层级,加载顺序不透明:
load_dotenv()— 从 cwd 加载 .env.env—_setup_llm_key()从 kb_dir/.env 加载~/.config/openkb/.env—_setup_llm_key()从 global config 加载.zshrc中的 export)虽然有
override=False,但 Python 模块导入阶段的load_dotenv()发生在用户环境变量注入之前,实际行为不可预测。建议改进
统一的 API 配置管理命令
或提供交互式向导来配置/切换供应商。
供应商切换检测
当 config.yaml 中的 model provider 前缀发生变化时,主动提示用户更新对应的 API 配置,而不是默默失败。
更好的错误诊断
在认证失败时,输出当前实际使用的 base URL 和 model,帮助用户定位问题:
考虑支持在 config.yaml 中直接配置 API
允许用户在 config.yaml 中配置 provider-specific 的 api_key 和 base_url,减少对多层 .env 的依赖。
Diagnostics (auto-collected by
openkb feedback)