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