菜单

API 密钥管理

相关源文件

本文档详细介绍了 GPT Academic 如何管理各种大型语言模型 (LLM) 提供商的 API 密钥。它涵盖了系统中 API 密钥管理的配置、验证、选择和安全方面。

有关整体 LLM 集成架构的信息,请参阅 LLM 集成LLM 桥接架构

API 密钥配置

配置源和优先级

GPT Academic 从以下三个可能的来源加载 API 密钥,优先级如下:

  1. 环境变量(最高优先级)
  2. config_private.py(用于本地覆盖,不跟踪版本控制)
  3. config.py(默认设置,优先级最低)

此优先级系统记录在配置文件头中。

Reading priority: environment variable > config_private.py > config.py

API 密钥配置流程

来源:config.py1-9 main.py40-55

支持的 API 密钥

GPT Academic 支持众多 LLM 提供商的 API 密钥。主要包括:

提供商配置变量描述
OpenAIAPI_KEY用于 GPT 模型(gpt-3.5-turbo, gpt-4 等)
Azure OpenAIAZURE_API_KEY, AZURE_CFG_ARRAY用于 Azure 托管的 OpenAI 模型
AnthropicANTHROPIC_API_KEY用于 Claude 模型
阿里巴巴云DASHSCOPE_API_KEY用于 Qwen 模型
DeepSeekDEEPSEEK_API_KEY用于 DeepSeek 模型
智谱 AIZHIPUAI_API_KEY用于 GLM 模型
GoogleGEMINI_API_KEY用于 Gemini 模型
Moonshot AIMOONSHOT_API_KEY用于 Moonshot 模型
YiYIMODEL_API_KEY用于 Yi 模型
BaiduBAIDU_CLOUD_API_KEY, BAIDU_CLOUD_SECRET_KEY用于百度模型
iFlytekXFYUN_APPID, XFYUN_API_SECRET, XFYUN_API_KEY用于 Spark 模型

来源:config.py10-270

多个密钥和负载均衡

系统通过逗号分隔来支持同一提供商的多个 API 密钥。

API_KEY = "sk-key1,sk-key2,sk-key3"

在进行 API 调用时,系统会随机选择一个可用密钥来分发负载。

来源:config.py11 shared_utils/key_pattern_manager.py83-113

密钥验证和选择

密钥验证

系统使用 shared_utils/key_pattern_manager.py 中定义的正则表达式模式来验证 API 密钥。不同的提供商有不同的密钥格式。

密钥验证模式包括:

  • OpenAI: sk-[a-zA-Z0-9_-]{48}$(外加较新密钥格式的附加模式)
  • Azure: [a-zA-Z0-9]{32}$
  • API2D: fk[a-zA-Z0-9]{6}-[a-zA-Z0-9]{32}$
  • Cohere: [a-zA-Z0-9]{40}$
  • OpenRouter: sk-or-v1-[a-zA-Z0-9]{64}$

系统还支持通过 CUSTOM_API_KEY_PATTERN 配置选项来自定义密钥模式。

来源:shared_utils/key_pattern_manager.py12-61 tests/test_key_pattern_manager.py14-62

密钥选择逻辑

key_pattern_manager.py 中的 select_api_key() 函数根据模型名称选择合适的密钥。

如果某个模型类型有多个密钥可用,系统将随机选择一个进行负载均衡。

来源:shared_utils/key_pattern_manager.py83-113

运行时密钥管理

用户可以通过用户界面提供临时 API 密钥,这些密钥会覆盖当前会话配置的密钥。这些临时密钥存储在 cookie 中,不会在会话之间持久化。

运行时密钥流程

在处理请求时,toolbox.py 中的 ArgsGeneralWrapper 函数会从 cookie 中提取 API 密钥,并为 LLM 请求做好准备。

来源:toolbox.py88-150

模型-密钥关系

系统维护着模型类型与其所需密钥类型之间的映射关系,确保为每个 API 请求使用正确的身份验证。

模型-密钥映射表

模型模式密钥配置变量
gpt-*, chatgpt-*, o1*API_KEY
azure-*AZURE_API_KEYAZURE_CFG_ARRAY
claude-*ANTHROPIC_API_KEY
qwen-*DASHSCOPE_API_KEY
glm-*ZHIPUAI_API_KEY
yi-*YIMODEL_API_KEY
spark*XFYUN_* 密钥
gemini-*GEMINI_API_KEY

这些映射关系已在配置文件中以综合关系图的形式记录。

来源:config.py356-429

嵌入模型密钥

对于嵌入模型(如 text-embedding-3-small),系统使用专用函数 select_api_key_for_embed_models(),该函数为文本嵌入模型选择 OpenAI API 密钥。

来源:shared_utils/key_pattern_manager.py116-129 request_llms/embed_models/bridge_all_embed.py15-40

安全考量

API 密钥是需要谨慎处理的敏感凭证。

  1. 配置安全:

    • 使用 config_private.py 来存储私有密钥(不包含在版本控制中)。
    • 在生产环境中应使用环境变量。
  2. 密钥验证:

    • 所有密钥在使用前都会经过验证。
    • 可防止使用格式错误或不正确的密钥。
  3. 运行时安全:

    • 临时密钥仅存储在会话 cookie 中。
    • 密钥不会暴露在日志或错误消息中。
  4. API URL 重定向:

    • 系统支持 API URL 重定向,但警告这是一个高风险设置。
# WARNING in config.py:
# 重新URL重新定向,实现更换API_URL的作用(高危设置! 常规情况下不要修改! 通过修改此设置,您将把您的API-KEY和对话隐私完全暴露给您设定的中间人!)

来源:config.py78-81

本文档提供了 GPT Academic API 密钥管理的技术概述。有关相关信息,请参阅 配置与部署Azure OpenAI 集成