GPT-Load 繁體中文版 - 高效能 AI 介面透明代理服務
1.3K
繁體中文文檔 | English
一個高效能、企業級的 AI 介面透明代理服務,專門為需要整合多種 AI 服務的企業和開發者設計。採用 Go 語言開發,具備智慧密鑰管理、負載平衡和完善的監控功能,專為高併發生產環境而設計。
詳細請查看官方文檔
GPT-Load 作為透明代理服務,完整保留各 AI 服務商的原生 API 格式:
docker run -d --name gpt-load \
-p 3001:3001 \
-e AUTH_KEY=sk-123456 \
-v "$(pwd)/data":/app/data \
charles0568/gpt-load:latest
使用
sk-123456登入管理介面:http://localhost:3001
安裝指令:
# 建立目錄
mkdir -p gpt-load && cd gpt-load
# 下載配置檔案
wget https://raw.githubusercontent.com/charles0568/gpt-load/refs/heads/main/docker-compose.yml
wget -O .env https://raw.githubusercontent.com/charles0568/gpt-load/refs/heads/main/.env.example
# 啟動服務
docker compose up -d
預設安裝的是 SQLite 版本,適合輕量單機應用。
如需安裝 MySQL, PostgreSQL 及 Redis,請在 docker-compose.yml 檔案中取消所需服務的註解,並配置好對應的環境配置重啟即可。
推薦使用 latest 標籤:
charles0568/gpt-load:latest - 最新穩定版本,包含所有最新功能和修復版本歷史:
使用建議:
charles0568/gpt-load:latestlatest 標籤charles0568/gpt-load:v1.3.5其他指令:
# 查看服務狀態
docker compose ps
# 查看日誌
docker compose logs -f
# 重啟服務
docker compose down && docker compose up -d
# 更新到最新版本
docker compose pull && docker compose down && docker compose up -d
部署完成後:
使用預設的認證 Key
sk-123456登入管理端,認證 Key 可以在 .env 中修改 AUTH_KEY。
原始碼建置需要本地已安裝資料庫(SQLite、MySQL 或 PostgreSQL)和 Redis(可選)。
# 複製並建置
git clone https://github.com/tbphp/gpt-load.git
cd gpt-load
go mod tidy
# 建立配置
cp .env.example .env
# 修改 .env 中 DATABASE_DSN 和 REDIS_DSN 配置
# REDIS_DSN 為可選,如果不配置則啟用記憶體儲存
# 執行
make run
部署完成後:
使用預設的認證 Key
sk-123456登入管理端,認證 Key 可以在 .env 中修改 AUTH_KEY。
叢集部署需要所有節點都連接同一個 MySQL(或者 PostgreSQL) 和 Redis,並且 Redis 是必須要求。建議使用統一的分散式 MySQL 和 Redis 叢集。
部署要求:
AUTH_KEY、DATABASE_DSN、REDIS_DSNIS_SLAVE=true詳細請參考叢集部署文檔
GPT-Load 採用雙層配置架構:
.env 檔案或系統環境變數設定伺服器配置:
| 配置項 | 環境變數 | 預設值 | 說明 |
|---|---|---|---|
| 服務埠 | PORT | 3001 | HTTP 伺服器監聽埠 |
| 服務位址 | HOST | 0.0.0.0 | HTTP 伺服器綁定位址 |
| 讀取逾時 | SERVER_READ_TIMEOUT | 60 | HTTP 伺服器讀取逾時(秒) |
| 寫入逾時 | SERVER_WRITE_TIMEOUT | 600 | HTTP 伺服器寫入逾時(秒) |
| 閒置逾時 | SERVER_IDLE_TIMEOUT | 120 | HTTP 連線閒置逾時(秒) |
| 優雅關閉逾時 | SERVER_GRACEFUL_SHUTDOWN_TIMEOUT | 10 | 服務優雅關閉等待時間(秒) |
| 從節點模式 | IS_SLAVE | false | 叢集部署時從節點標識 |
| 時區 | TZ | Asia/Shanghai | 指定時區 |
認證與資料庫配置:
| 配置項 | 環境變數 | 預設值 | 說明 |
|---|---|---|---|
| 管理密鑰 | AUTH_KEY | sk-123456 | 管理端的存取認證密鑰 |
| 資料庫連線 | DATABASE_DSN | ./data/gpt-load.db | 資料庫連線字串 (DSN) 或檔案路徑 |
| Redis 連線 | REDIS_DSN | - | Redis 連線字串,為空時使用記憶體儲存 |
效能與跨域配置:
| 配置項 | 環境變數 | 預設值 | 說明 |
|---|---|---|---|
| 最大併發請求 | MAX_CONCURRENT_REQUESTS | 100 | 系統允許的最大併發請求數 |
| 啟用 CORS | ENABLE_CORS | true | 是否啟用跨域資源共享 |
| 允許的來源 | ALLOWED_ORIGINS | * | 允許的來源,逗號分隔 |
| 允許的方法 | ALLOWED_METHODS | GET,POST,PUT,DELETE,OPTIONS | 允許的 HTTP 方法 |
| 允許的標頭 | ALLOWED_HEADERS | * | 允許的請求標頭,逗號分隔 |
| 允許憑證 | ALLOW_CREDENTIALS | false | 是否允許傳送憑證 |
日誌配置:
| 配置項 | 環境變數 | 預設值 | 說明 |
|---|---|---|---|
| 日誌級別 | LOG_LEVEL | info | 日誌級別:debug, info, warn, error |
| 日誌格式 | LOG_FORMAT | text | 日誌格式:text, json |
| 啟用檔案日誌 | LOG_ENABLE_FILE | false | 是否啟用檔案日誌輸出 |
| 日誌檔案路徑 | LOG_FILE_PATH | ./data/logs/app.log | 日誌檔案儲存路徑 |
代理配置:
GPT-Load 會自動從環境變數中讀取代理設定,用於向上游 AI 服務商發起請求。
| 配置項 | 環境變數 | 預設值 | 說明 |
|---|---|---|---|
| HTTP 代理 | HTTP_PROXY | - | 用於 HTTP 請求的代理伺服器位址 |
| HTTPS 代理 | HTTPS_PROXY | - | 用於 HTTPS 請求的代理伺服器位址 |
| 無代理 | NO_PROXY | - | 不需要透過代理存取的主機或網域名,逗號分隔 |
支援的代理協定格式:
http://user:pass@host:porthttps://user:pass@host:portsocks5://user:pass@host:port基礎設定:
| 配置項 | 欄位名 | 預設值 | 分組可覆蓋 | 說明 |
|---|---|---|---|---|
| 專案位址 | app_url | http://localhost:3001 | ❌ | 專案基礎 URL |
| 日誌保留天數 | request_log_retention_days | 7 | ❌ | 請求日誌保留天數,0 為不清理 |
| 日誌寫入間隔 | request_log_write_interval_minutes | 1 | ❌ | 日誌寫入資料庫週期(分鐘) |
| 全域代理密鑰 | proxy_keys | 初始值為環境配置的 AUTH_KEY | ❌ | 全域生效的代理認證密鑰,多個用逗號分隔 |
請求設定:
| 配置項 | 欄位名 | 預設值 | 分組可覆蓋 | 說明 |
|---|---|---|---|---|
| 請求逾時 | request_timeout | 600 | ✅ | 轉發請求完整生命週期逾時(秒) |
| 連線逾時 | connect_timeout | 15 | ✅ | 與上游服務建立連線逾時(秒) |
| 閒置連線逾時 | idle_conn_timeout | 120 | ✅ | HTTP 用戶端閒置連線逾時(秒) |
| 回應標頭逾時 | response_header_timeout | 600 | ✅ | 等待上游回應標頭逾時(秒) |
| 最大閒置連線數 | max_idle_conns | 100 | ✅ | 連線池最大閒置連線總數 |
| 每主機最大閒置連線數 | max_idle_conns_per_host | 50 | ✅ | 每個上游主機最大閒置連線數 |
| 代理伺服器位址 | proxy_url | - | ✅ | 用於轉發請求的 HTTP/HTTPS 代理,為空則使用環境配置 |
密鑰配置:
| 配置項 | 欄位名 | 預設值 | 分組可覆蓋 | 說明 |
|---|---|---|---|---|
| 最大重試次數 | max_retries | 3 | ✅ | 單個請求使用不同密鑰的最大重試次數 |
| 黑名單閾值 | blacklist_threshold | 3 | ✅ | 密鑰連續失敗多少次後進入黑名單 |
| 密鑰驗證間隔 | key_validation_interval_minutes | 60 | ✅ | 後台定時驗證密鑰週期(分鐘) |
| 密鑰驗證併發數 | key_validation_concurrency | 10 | ✅ | 後台定時驗證無效 Key 時的併發數 |
| 密鑰驗證逾時 | key_validation_timeout_seconds | 20 | ✅ | 後台定時驗證單個 Key 時的 API 請求逾時時間(秒) |
存取管理控制台:http://localhost:3001(預設位址)
Web 管理介面提供以下功能:
GPT-Load 透過分組名稱路由請求到不同的 AI 服務。使用方式如下:
http://localhost:3001/proxy/{group_name}/{原始API路徑}
{group_name}: 在管理介面建立的分組名稱{原始API路徑}: 保持與原始 AI 服務完全一致的路徑在 Web 管理介面中配置代理密鑰 (Proxy Keys),可設定系統級別和分組級別的代理密鑰。
假設建立了名為 openai 的分組:
原始呼叫方式:
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer sk-your-openai-key" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4.1-mini", "messages": [{"role": "user", "content": "Hello"}]}'
代理呼叫方式:
curl -X POST http://localhost:3001/proxy/openai/v1/chat/completions \
-H "Authorization: Bearer your-proxy-key" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4.1-mini", "messages": [{"role": "user", "content": "Hello"}]}'
变更说明:
https://api.openai.com 替换为 http://localhost:3001/proxy/openai假设创建了名为 gemini 的分组:
原始调用方式:
curl -X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent?key=your-gemini-key \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "Hello"}]}]}'
代理调用方式:
curl -X POST http://localhost:3001/proxy/gemini/v1beta/models/gemini-2.5-pro:generateContent?key=your-proxy-key \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "Hello"}]}]}'
变更说明:
https://generativelanguage.googleapis.com 替换为 http://localhost:3001/proxy/geminikey=your-gemini-key 替换为代理密钥假设创建了名为 anthropic 的分组:
原始调用方式:
curl -X POST https://api.anthropic.com/v1/messages \
-H "x-api-key: sk-ant-api03-your-anthropic-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "Hello"}]}'
代理调用方式:
curl -X POST http://localhost:3001/proxy/anthropic/v1/messages \
-H "x-api-key: your-proxy-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "Hello"}]}'
变更说明:
https://api.anthropic.com 替换为 http://localhost:3001/proxy/anthropicx-api-key 头部中的原始 API Key 替换为代理密钥OpenAI 格式:
/v1/chat/completions - 聊天对话/v1/completions - 文本补全/v1/embeddings - 文本嵌入/v1/models - 模型列表Gemini 格式:
/v1beta/models/*/generateContent - 内容生成/v1beta/models - 模型列表Anthropic 格式:
/v1/messages - 消息对话/v1/models - 模型列表(如果可用)OpenAI Python SDK:
from openai import OpenAI
client = OpenAI(
api_key="your-proxy-key", # 使用密钥
base_url="http://localhost:3001/proxy/openai" # 使用代理端点
)
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello"}]
)
Google Gemini SDK (Python):
import google.generativeai as genai
# 配置 API 密钥和基础 URL
genai.configure(
api_key="your-proxy-key", # 使用代理密钥
client_options={"api_endpoint": "http://localhost:3001/proxy/gemini"}
)
model = genai.GenerativeModel('gemini-2.5-pro')
response = model.generate_content("Hello")
Anthropic SDK (Python):
from anthropic import Anthropic
client = Anthropic(
api_key="your-proxy-key", # 使用代理密钥
base_url="http://localhost:3001/proxy/anthropic" # 使用代理端点
)
response = client.messages.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hello"}]
)
重要提示:作為透明代理服務,GPT-Load 完全保留各 AI 服務的原生 API 格式和認證方式,僅需要替換端點位址並使用在管理端配置的代理密鑰即可無縫遷移。
MIT 授權條款 - 詳情請參閱 LICENSE 檔案。
Content type
Image
Digest
sha256:806b39cc2…
Size
17.5 MB
Last updated
about 1 year ago
docker pull charles0568/gpt-load