Skip to content

[bug] API 供应商切换配置流程缺失,导致认证失败 #70

Description

@moyu12-ae

API 供应商切换配置流程缺失,导致认证失败

问题描述

更换 LLM 供应商(从 DeepSeek 切换到 MiniMax)时,只改了 config.yaml 中的 model 字段,但实际 API 调用仍然使用了旧供应商的配置,导致认证失败(1004 错误)。

根因分析

API 配置(key + base URL)散落在三个层级,加载顺序不透明:

  1. 模块导入时的 load_dotenv() — 从 cwd 加载 .env
  2. KB 本地 .env_setup_llm_key() 从 kb_dir/.env 加载
  3. 全局 ~/.config/openkb/.env_setup_llm_key() 从 global config 加载
  4. Shell 环境变量(如 .zshrc 中的 export)

虽然有 override=False,但 Python 模块导入阶段的 load_dotenv() 发生在用户环境变量注入之前,实际行为不可预测。

建议改进

  1. 统一的 API 配置管理命令

    openkb config set-api --provider minimax --key sk-xxx --base-url https://api.minimaxi.com/v1
    

    或提供交互式向导来配置/切换供应商。

  2. 供应商切换检测
    当 config.yaml 中的 model provider 前缀发生变化时,主动提示用户更新对应的 API 配置,而不是默默失败。

  3. 更好的错误诊断
    在认证失败时,输出当前实际使用的 base URL 和 model,帮助用户定位问题:

    [ERROR] Authentication failed.
      Model: openai/MiniMax-M2.7-highspeed
      Base URL: https://api.deepseek.com/v1  <-- 这里就能一眼看出不对
    
  4. 考虑支持在 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions