Skip to content

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

@moyu12-ae

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions