一个健壮且灵活的大语言模型(LLM)API 配置加载器

一个健壮且灵活的大语言模型(LLM)API 配置加载器

具体来说,它实现了以下 5 个核心功能:

  1. 📁 环境变量安全加载
    通过 load_dotenv() 自动读取项目根目录下的 .env 文件,将敏感信息(如 API Key)与代码逻辑分离,避免密钥硬编码泄露到代码仓库中。
  2. 🔄 多模型提供商的智能路由(优先级机制)
    代码内置了对主流大模型的支持,并按照 if-elif 的顺序进行优先级匹配:
    OpenAI (优先级最高)
    DeepSeek
    智谱 AI (ZhipuAI)
    通义千问 (Qwen) (优先级最低)
    只要检测到某个提供商的有效配置,就会立即返回该提供商的配置,实现了"配置即切换"的灵活性。
  3. 🛡️ 配置有效性校验(防呆设计)
    不仅检查 API Key 是否存在(os.getenv("XXX")),还额外检查了它是否是不安全的默认占位符(!= "sk-xxx")。如果所有配置都无效,代码会:
    打印清晰的、带边框的错误提示,指导用户如何修复(复制 .env.example 并填入真实 Key)。
    主动抛出 ValueError 异常,强制中断程序。这防止了程序在缺少配置的情况下"带病运行",避免后续调用 API 时产生难以排查的深层错误。
  4. 📦 标准化的配置输出
    无论匹配到哪个提供商,函数都会返回一个结构统一的字典,包含:
    provider: 明确标识当前使用的服务商(方便后续日志记录或条件判断)。
    api_key: 认证密钥。
    base_url: API 请求地址(支持通过环境变量自定义,满足内网部署或代理需求)。
    model: 具体使用的模型名称(支持自定义,否则回退到默认的高性价比模型,如 gpt-4o-mini 或 glm-4-flash)。
  5. 🧪 安全的测试与执行入口
    通过 if name == "main": 块,提供了一个安全的测试入口。当该文件被直接运行时,它会尝试加载配置并打印结果;如果被其他模块(如 Django 的 settings.py 或 LangChain 初始化脚本)导入,则不会自动执行,保证了模块化。
python 复制代码
import os
from dotenv import load_dotenv
from typing import Dict, Any

def load_config() -> Dict[str, Any]:
    load_dotenv()

    # 支持多种模型配置
    if os.getenv("OPENAI_API_KEY") and os.getenv("OPENAI_API_KEY") != "sk-xxx":
        return {
            "provider": "openai",
            "api_key": os.getenv("OPENAI_API_KEY"),
            "base_url": os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1"),
            "model": os.getenv("MODEL_NAME", "gpt-4o-mini"),
        }
    elif os.getenv("DEEPSEEK_API_KEY") and os.getenv("DEEPSEEK_API_KEY") != "sk-xxx":
        return {
            "provider": "deepseek",
            "api_key": os.getenv("DEEPSEEK_API_KEY"),
            "base_url": os.getenv("DEEPSEEK_API_BASE", "https://api.deepseek.com/v1"),
            "model": os.getenv("MODEL_NAME", "deepseek-chat"),
        }
    elif os.getenv("ZHIPUAI_API_KEY") and os.getenv("ZHIPUAI_API_KEY") != "sk-xxx":
        return {
            "provider": "zhipuai",
            "api_key": os.getenv("ZHIPUAI_API_KEY"),
            "base_url": os.getenv("ZHIPUAI_API_BASE", "https://open.bigmodel.cn/api/paas/v4"),
            "model": os.getenv("MODEL_NAME", "glm-4-flash"),
        }
    elif os.getenv("QWEN_API_KEY") and os.getenv("QWEN_API_KEY") != "sk-xxx":
        return {
            "provider": "qwen",
            "api_key": os.getenv("QWEN_API_KEY"),
            "base_url": os.getenv("QWEN_API_BASE", "https://dashscope.aliyuncs.com/compatible-mode/v1"),
            "model": os.getenv("MODEL_NAME", "qwen-turbo"),
        }
    else:
        print("=" * 60)
        print("错误:未找到有效的 API Key 配置!")
        print("请先复制 .env.example 为 .env,并填入你的 API Key。")
        print("=" * 60)
        # 抛出异常,防止后续代码在缺少配置的情况下继续执行导致难以排查的错误
        raise ValueError("未找到有效的 API Key 配置")

if __name__ == "__main__":
    try:
        config = load_config()
        print("✅ 成功加载配置:", config)
    except ValueError as e:
        print(f"❌ 配置加载失败: {e}")
bash 复制代码
# 复制此文件为 .env 并填入你的 API Key
# cp .env.example .env

# OpenAI 配置(如果你用 OpenAI)
# OPENAI_API_KEY=sk-xxx
# OPENAI_API_BASE=https://api.openai.com/v1
# OPENAI_MODEL=gpt-4o-mini

# 也支持兼容 OpenAI 接口的其他模型,例如:
# DeepSeek
# DEEPSEEK_API_KEY=sk-xxx
# DEEPSEEK_API_BASE=https://api.deepseek.com/v1
# MODEL_NAME=deepseek-chat

# 智谱 AI
# ZHIPUAI_API_KEY=xxx
# ZHIPUAI_API_BASE=https://open.bigmodel.cn/api/paas/v4
# MODEL_NAME=glm-4-flash

# 通义千问
# QWEN_API_KEY=sk-xxx
# QWEN_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1
# MODEL_NAME=qwen-turbo
相关推荐
龙亘川32 分钟前
电子印章安全审计管理业务建模:从证书密钥、安全策略到审计预警的全链路闭环
运维·人工智能·安全·智慧城市·开源软件·数据可视化
饼饼学习空间智能36 分钟前
物流仓储机器人训练数据从哪来?真机、仿真与数据回流技术解析
人工智能
瑞克-桑切斯2 小时前
企业生产环境:https部署+nginx高可用(业务不中断)
linux·服务器·数据库
2501_938140073 小时前
做内容很省心,2026好用AI笔记,支持抖音小红书视频无水印保存
人工智能
sell-cloud5 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国7 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI7 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区8 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris9 小时前
郴州logo设计机构
大数据·人工智能·python