【Python】配置LLM API Key

在 Python 项目中配置大模型 API Key,有几种推荐的方式:

1. 环境变量(最常用、最安全)

创建 .env 文件

env 复制代码
# .env
OPENAI_API_KEY=sk-your-openai-key-here
ANTHROPIC_API_KEY=your-anthropic-key-here
GROQ_API_KEY=your-groq-key-here

安装依赖

bash 复制代码
pip install python-dotenv

使用示例

python 复制代码
import os
from dotenv import load_dotenv

# 加载 .env 文件中的环境变量
load_dotenv()

# 读取配置
api_key = os.getenv("OPENAI_API_KEY")
print(f"API Key: {api_key[:10]}...")  # 只显示前10位,安全起见

2. 配置文件(YAML/JSON)

config.yaml 方式

yaml 复制代码
# config.yaml
apis:
  openai:
    api_key: "sk-your-key"
    base_url: "https://api.openai.com/v1"
    model: "gpt-4"
  anthropic:
    api_key: "your-key"
    model: "claude-3"
python 复制代码
import yaml
from pathlib import Path

config_path = Path("config.yaml")
with open(config_path, 'r') as f:
    config = yaml.safe_load(f)

openai_key = config['apis']['openai']['api_key']

config.json 方式

json 复制代码
{
  "openai": {
    "api_key": "sk-your-key",
    "model": "gpt-4"
  },
  "anthropic": {
    "api_key": "your-key"
  }
}

3. 配置文件(INI格式)

python 复制代码
import configparser

config = configparser.ConfigParser()
config.read('config.ini')

# config.ini 内容:
# [openai]
# api_key = sk-your-key
# model = gpt-4

api_key = config['openai']['api_key']

4. 使用 LangChain 的配置

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
import os

# 设置环境变量
os.environ["OPENAI_API_KEY"] = "sk-your-key"
os.environ["ANTHROPIC_API_KEY"] = "your-key"

# 使用
llm_openai = ChatOpenAI(model="gpt-4")
llm_anthropic = ChatAnthropic(model="claude-3")

5. 工厂模式管理多模型

python 复制代码
from typing import Dict, Optional
from dataclasses import dataclass

@dataclass
class ModelConfig:
    api_key: str
    base_url: Optional[str] = None
    model_name: Optional[str] = None

class ModelManager:
    def __init__(self):
        self.configs: Dict[str, ModelConfig] = {}
    
    def add_config(self, provider: str, config: ModelConfig):
        self.configs[provider] = config
    
    def get_config(self, provider: str) -> ModelConfig:
        return self.configs.get(provider)

# 使用
manager = ModelManager()
manager.add_config("openai", ModelConfig(
    api_key=os.getenv("OPENAI_API_KEY"),
    model_name="gpt-4"
))

6. 安全最佳实践

使用密钥管理服务

python 复制代码
# AWS Secrets Manager 示例
import boto3
import json

def get_secret(secret_name):
    client = boto3.client('secretsmanager')
    response = client.get_secret_value(SecretId=secret_name)
    return json.loads(response['SecretString'])

secrets = get_secret("ai-api-keys")
openai_key = secrets["OPENAI_API_KEY"]

配置文件模板

python 复制代码
# config_template.py
"""
复制此文件为 config.py 并填写您的 API Key
"""

class Config:
    # OpenAI
    OPENAI_API_KEY = "your-key-here"
    OPENAI_BASE_URL = "https://api.openai.com/v1"
    
    # Anthropic
    ANTHROPIC_API_KEY = "your-key-here"
    
    # Azure OpenAI
    AZURE_OPENAI_KEY = "your-key-here"
    AZURE_ENDPOINT = "https://your-resource.openai.azure.com/"

7. 完整示例

python 复制代码
# config.py
import os
from pathlib import Path
from dataclasses import dataclass
from typing import Optional

@dataclass
class APIConfig:
    """API 配置类"""
    api_key: str
    base_url: Optional[str] = None
    model: Optional[str] = None
    
    @property
    def headers(self):
        return {"Authorization": f"Bearer {self.api_key}"}

class ConfigManager:
    """配置管理器"""
    
    def __init__(self, env_file: str = ".env"):
        self.env_file = env_file
        self.load_environment()
    
    def load_environment(self):
        """加载环境变量"""
        from dotenv import load_dotenv
        
        # 从多个位置加载 .env 文件
        env_path = Path(self.env_file)
        if env_path.exists():
            load_dotenv(env_path)
    
    def get_config(self, provider: str) -> APIConfig:
        """获取特定提供商的配置"""
        providers = {
            "openai": {
                "api_key": os.getenv("OPENAI_API_KEY"),
                "base_url": os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1"),
                "model": os.getenv("OPENAI_MODEL", "gpt-4")
            },
            "anthropic": {
                "api_key": os.getenv("ANTHROPIC_API_KEY"),
                "model": os.getenv("ANTHROPIC_MODEL", "claude-3-opus-20240229")
            }
        }
        
        if provider not in providers:
            raise ValueError(f"Unsupported provider: {provider}")
        
        config_data = providers[provider]
        if not config_data["api_key"]:
            raise ValueError(f"API key for {provider} not found")
        
        return APIConfig(**config_data)

# 使用示例
if __name__ == "__main__":
    config_manager = ConfigManager()
    
    try:
        openai_config = config_manager.get_config("openai")
        print(f"OpenAI Model: {openai_config.model}")
        
        # 使用配置初始化客户端
        from openai import OpenAI
        client = OpenAI(
            api_key=openai_config.api_key,
            base_url=openai_config.base_url
        )
        
    except ValueError as e:
        print(f"配置错误: {e}")

8. Docker 部署配置

dockerfile 复制代码
# Dockerfile
FROM python:3.10

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

# 通过环境变量传入 API Key
CMD ["python", "app.py"]
yaml 复制代码
# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    env_file:
      - .env

推荐实践

  1. 开发环境 :使用 .env 文件 + python-dotenv
  2. 生产环境:使用环境变量或密钥管理服务
  3. 多环境 :使用不同的 .env 文件(.env.dev, .env.prod
  4. 安全性:永远不要在代码中硬编码 API Key
  5. 版本控制 :将 .gitignore 中添加 .envconfig.py
bash 复制代码
# .gitignore
.env
.env.*
config.py
secrets/
*.secret

选择哪种方式取决于你的项目规模和安全要求。对于大多数项目,环境变量 + .env 文件是最佳选择。

相关推荐
2501_9462447820 小时前
Flutter & OpenHarmony OA系统个人中心组件开发指南
java·javascript·flutter
菩提祖师_20 小时前
地下管线三维CAD与信息管理软件开发
java·深度学习
uup20 小时前
SpringBoot 集成 Redis 缓存实践
java·redis
默默前行的虫虫20 小时前
Python轻松实现某德地图可视化
python
智算菩萨20 小时前
基于Pygame的沉浸式新年特效系统设计与实现
开发语言·python·pygame
胡闹5420 小时前
Linux中取消默认休眠配置
linux·运维·服务器
Mr_Xuhhh20 小时前
深入理解进程控制:退出、等待与替换
linux·运维·服务器
独自破碎E20 小时前
Leetcode200岛屿数量
java·开发语言
Dxy123931021621 小时前
国家税务总局中文点选验证码识别
python·深度学习·机器学习·图像识别·验证码识别·中文识别