複数のAIサービスを統合する必要がある企業や開発者向けに特別に設計された、高性能でエンタープライズグレードのAI APIトランスペアレントプロキシサービス。Goで構築され、インテリジェントなキー管理、ロードバランシング、包括的な監視機能を備え、高並行性の本番環境向けに設計されています。
詳細なドキュメントについては、公式ドキュメントをご覧ください。
- トランスペアレントプロキシ: ネイティブAPIフォーマットの完全な保持、OpenAI、Google Gemini、Anthropic Claudeなどのフォーマットをサポート
- インテリジェントキー管理: グループベース管理、自動ローテーション、障害復旧を備えた高性能キープール
- ロードバランシング: サービスの可用性を向上させる複数のアップストリームエンドポイント間の重み付けロードバランシング
- スマート障害処理: サービスの継続性を確保する自動キーブラックリスト管理と復旧メカニズム
- 動的設定: システム設定とグループ設定は再起動不要のホットリロードをサポート
- エンタープライズアーキテクチャ: 水平スケーリングと高可用性をサポートする分散リーダー・フォロワーデプロイメント
- モダンな管理: Vue 3ベースの直感的で使いやすいWeb管理インターフェース
- 包括的な監視: リアルタイム統計、ヘルスチェック、詳細なリクエストログ
- 高性能設計: ゼロコピーストリーミング、接続プール再利用、アトミック操作
- 本番対応: グレースフルシャットダウン、エラー復旧、包括的なセキュリティメカニズム
- デュアル認証: 管理とプロキシの分離認証、プロキシ認証はグローバルおよびグループレベルのキーをサポート
GPT-Loadは、さまざまなAIサービスプロバイダーのネイティブAPIフォーマットを完全に保持するトランスペアレントプロキシサービスとして機能します:
- OpenAIフォーマット: 公式OpenAI API、Azure OpenAI、その他のOpenAI互換サービス
- Google Geminiフォーマット: Gemini Pro、Gemini Pro VisionなどのモデルのネイティブAPI
- Anthropic Claudeフォーマット: Claudeシリーズモデル、高品質な会話とテキスト生成をサポート
- Go 1.24+(ソースビルド用)
- Docker(コンテナ化デプロイメント用)
- MySQL、PostgreSQL、またはSQLite(データベースストレージ用)
- Redis(キャッシュと分散調整用、オプション)
docker run -d --name gpt-load \
-p 3001:3001 \
-e AUTH_KEY=your-secure-key-here \
-v "$(pwd)/data":/app/data \
ghcr.io/tbphp/gpt-load:latest
your-secure-key-hereを強力なパスワードに変更してください(デフォルト値は絶対に使用しないでください)。その後、管理インターフェースにログインできます:http://localhost:3001
インストールコマンド:
# ディレクトリを作成
mkdir -p gpt-load && cd gpt-load
# 設定ファイルをダウンロード
wget https://raw.githubusercontent.com/tbphp/gpt-load/refs/heads/main/docker-compose.yml
wget -O .env https://raw.githubusercontent.com/tbphp/gpt-load/refs/heads/main/.env.example
# .envファイルを編集し、AUTH_KEYを強力なパスワードに変更します。デフォルトやsk-123456のような単純なキーは絶対に使用しないでください。
# サービスを開始
docker compose up -dデプロイメント前に、デフォルトの管理キー(AUTH_KEY)を必ず変更してください。推奨フォーマット:sk-prod-[32文字のランダム文字列]。
デフォルトのインストールは、軽量な単一インスタンスアプリケーションに適したSQLiteバージョンを使用します。
MySQL、PostgreSQL、Redisをインストールする必要がある場合は、docker-compose.ymlファイルで必要なサービスのコメントを解除し、対応する環境変数を設定して、再起動してください。
その他のコマンド:
# サービスステータスを確認
docker compose ps
# ログを表示
docker compose logs -f
# サービスを再起動
docker compose down && docker compose up -d
# 最新バージョンに更新
docker compose pull && docker compose down && docker compose up -dデプロイメント後:
- Web管理インターフェースにアクセス:http://localhost:3001
- APIプロキシアドレス:http://localhost:3001/proxy
変更した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ファイルを編集し、AUTH_KEYを強力なパスワードに変更します。デフォルトやsk-123456のような単純なキーは絶対に使用しないでください。
# .envでDATABASE_DSNとREDIS_DSNの設定を変更
# REDIS_DSNはオプションです。設定されていない場合、メモリストレージが有効になります
# 実行
make runデプロイメント後:
- Web管理インターフェースにアクセス:http://localhost:3001
- APIプロキシアドレス:http://localhost:3001/proxy
変更したAUTH_KEYを使用して管理インターフェースにログインしてください。
クラスターデプロイメントでは、すべてのノードが同じMySQL(またはPostgreSQL)とRedisに接続する必要があり、Redisは必須です。統一された分散MySQLとRedisクラスターの使用を推奨します。
デプロイメント要件:
- すべてのノードは同一の
AUTH_KEY、DATABASE_DSN、REDIS_DSNを設定する必要があります - リーダー・フォロワーアーキテクチャで、フォロワーノードは環境変数を設定する必要があります:
IS_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 |
- | 管理端末のアクセス認証キー、強力なパスワードに変更してください |
| 暗号化キー | ENCRYPTION_KEY |
- | APIキーを保存時に暗号化。任意の文字列をサポート、空の場合は暗号化を無効化。データ暗号化移行を参照 |
データベース設定:
| 設定 | 環境変数 | デフォルト | 説明 |
|---|---|---|---|
| データベース接続 | DATABASE_DSN |
./data/gpt-load.db |
データベース接続文字列(DSN)またはファイルパス |
| Redis接続 | REDIS_DSN |
- | Redis接続文字列、空の場合はメモリストレージを使用 |
パフォーマンス&CORS設定:
| 設定 | 環境変数 | デフォルト | 説明 |
|---|---|---|---|
| 最大同時リクエスト数 | MAX_CONCURRENT_REQUESTS |
100 | システムが許可する最大同時リクエスト数 |
| CORS有効化 | ENABLE_CORS |
false | クロスオリジンリソース共有を有効にするか |
| 許可されたオリジン | 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:
http://user:pass@host:port - HTTPS:
https://user:pass@host:port - SOCKS5:
socks5://user:pass@host:port
動的設定(ホットリロード)
基本設定:
| 設定 | フィールド名 | デフォルト | グループ上書き | 説明 |
|---|---|---|---|---|
| プロジェクトURL | app_url |
http://localhost:3001 |
❌ | プロジェクトベースURL |
| グローバルプロキシキー | proxy_keys |
AUTH_KEYの初期値 |
❌ | グローバルに有効なプロキシキー、カンマ区切り |
| ログ保持日数 | request_log_retention_days |
7 | ❌ | リクエストログ保持日数、0でクリーンアップなし |
| ログ書き込み間隔 | request_log_write_interval_minutes |
1 | ❌ | データベースへのログ書き込みサイクル(分) |
| リクエストボディログ有効化 | enable_request_body_logging |
false | ✅ | リクエストログに完全なリクエストボディコンテンツを記録するか |
リクエスト設定:
| 設定 | フィールド名 | デフォルト | グループ上書き | 説明 |
|---|---|---|---|---|
| リクエストタイムアウト | 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 | ✅ | アップストリームホストごとの最大アイドル接続数 |
| プロキシURL | proxy_url |
- | ✅ | 転送リクエスト用のHTTP/HTTPSプロキシ、空の場合は環境を使用 |
キー設定:
| 設定 | フィールド名 | デフォルト | グループ上書き | 説明 |
|---|---|---|---|---|
| 最大リトライ回数 | max_retries |
3 | ✅ | 単一リクエストで異なるキーを使用する最大リトライ回数 |
| ブラックリストしきい値 | blacklist_threshold |
3 | ✅ | キーがブラックリストに入る前の連続失敗回数 |
| キー検証間隔 | key_validation_interval_minutes |
60 | ✅ | バックグラウンドスケジュールキー検証サイクル(分) |
| キー検証並行数 | key_validation_concurrency |
10 | ✅ | 無効なキーのバックグラウンド検証の並行数 |
| キー検証タイムアウト | key_validation_timeout_seconds |
20 | ✅ | バックグラウンドでの個別キー検証のAPIリクエストタイムアウト(秒) |
GPT-LoadはAPIキーの暗号化保存をサポートしています。いつでも暗号化を有効化、無効化、または暗号化キーを変更できます。
データ暗号化移行の詳細を表示
- 暗号化を有効化: プレーンテキストデータを暗号化して保存 -
--to <新しいキー>を使用 - 暗号化を無効化: 暗号化されたデータをプレーンテキストに復号化 -
--from <現在のキー>を使用 - 暗号化キーを変更: 暗号化キーを置き換える -
--from <現在のキー> --to <新しいキー>を使用
# 1. イメージを更新(最新バージョンを使用していることを確認)
docker compose pull
# 2. サービスを停止
docker compose down
# 3. データベースをバックアップ(強く推奨)
# 移行前に、操作や例外によるキーの損失を避けるため、データベースを手動でバックアップするか、キーをエクスポートする必要があります。
# 4. 移行コマンドを実行
# 暗号化を有効化(your-32-char-secret-keyはあなたのキー、32文字以上のランダム文字列の使用を推奨)
docker compose run --rm gpt-load migrate-keys --to "your-32-char-secret-key"
# 暗号化を無効化
docker compose run --rm gpt-load migrate-keys --from "your-current-key"
# 暗号化キーを変更
docker compose run --rm gpt-load migrate-keys --from "old-key" --to "new-32-char-secret-key"
# 5. 設定ファイルを更新
# .envファイルを編集し、ENCRYPTION_KEYを--toパラメータと一致させる
# 暗号化を無効にする場合は、ENCRYPTION_KEYを削除するか空に設定
vim .env
# 追加または変更: ENCRYPTION_KEY=your-32-char-secret-key
# 6. サービスを再起動
docker compose up -d# 1. サービスを停止
# 実行中のサービスプロセスを停止(Ctrl+Cまたはプロセスをkill)
# 2. データベースをバックアップ(強く推奨)
# 移行前に、操作や例外によるキーの損失を避けるため、データベースを手動でバックアップするか、キーをエクスポートする必要があります。
# 3. 移行コマンドを実行
# 暗号化を有効化
make migrate-keys ARGS="--to your-32-char-secret-key"
# 暗号化を無効化
make migrate-keys ARGS="--from your-current-key"
# 暗号化キーを変更
make migrate-keys ARGS="--from old-key --to new-32-char-secret-key"
# 4. 設定ファイルを更新
# .envファイルを編集し、ENCRYPTION_KEYを--toパラメータと一致させる
echo "ENCRYPTION_KEY=your-32-char-secret-key" >> .env
# 5. サービスを再起動
make run- ENCRYPTION_KEYが失われると、暗号化されたデータは復元できません! このキーを安全にバックアップしてください。パスワードマネージャーまたは安全なキー管理システムの使用を検討してください
- データの不整合を避けるため、移行前にサービスを停止する必要があります
- 移行が失敗して復旧が必要な場合に備えて、データベースをバックアップすることを強く推奨します
- セキュリティのため、キーは32文字以上のランダム文字列を使用してください
- 移行後、
.envのENCRYPTION_KEYが--toパラメータと一致していることを確認してください - 暗号化を無効にする場合は、
ENCRYPTION_KEY設定を削除またはクリアしてください
# 安全なランダムキーを生成(32文字)
openssl rand -base64 32 | tr -d "=+/" | cut -c1-32管理コンソールにアクセス:http://localhost:3001(デフォルトアドレス)
Web管理インターフェースは以下の機能を提供します:
- ダッシュボード: リアルタイム統計とシステムステータスの概要
- キー管理: AIサービスプロバイダーグループの作成と設定、APIキーの追加、削除、監視
- リクエストログ: 詳細なリクエスト履歴とデバッグ情報
- システム設定: グローバル設定管理とホットリロード
プロキシインターフェースの呼び出し
GPT-Loadはグループ名を通じてリクエストを異なるAIサービスにルーティングします。使用方法は以下の通りです:
http://localhost:3001/proxy/{group_name}/{original_api_path}
{group_name}: 管理インターフェースで作成されたグループ名{original_api_path}: 元のAIサービスパスと完全に一致を保つ
Web管理インターフェースでプロキシキーを設定します。システムレベルとグループレベルのプロキシキーをサポートします。
- 認証方法: ネイティブAPIと一致しますが、元のキーを設定されたプロキシキーに置き換えます。
- キーのスコープ: システム設定で設定されたグローバルプロキシキーはすべてのグループで使用できます。グループで設定されたグループプロキシキーは現在のグループでのみ有効です。
- フォーマット: 複数のキーはカンマで区切られます。
GPT-Load は現在、2種類の OpenAI 互換グループタイプをサポートしています:
openai(OpenAI Chat Completions 形式)openai-response(OpenAI Responses 形式)
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に置き換える- 元のAPIキーをプロキシキーに置き換える
OpenAI Responses 形式の例(openai-response グループ):
curl -X POST http://localhost:3001/proxy/openai-response/v1/responses \
-H "Authorization: Bearer your-proxy-key" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4.1-mini", "input": "Hello"}'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/geminiに置き換える- URLパラメータの
key=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/anthropicに置き換えるx-api-keyヘッダーの元のAPIキーをプロキシキーに置き換える
OpenAI Chat Completions フォーマット(openai):
/v1/chat/completions- チャット会話/v1/completions- テキスト補完/v1/embeddings- テキスト埋め込み/v1/models- モデルリスト- その他すべてのOpenAI互換インターフェース
OpenAI Responses フォーマット(openai-response):
/v1/responses- 統合レスポンス生成/v1/models- モデルリスト- その他すべての OpenAI Responses 互換インターフェース
Geminiフォーマット:
/v1beta/models/*/generateContent- コンテンツ生成/v1beta/models- モデルリスト- その他すべてのGeminiネイティブインターフェース
Anthropicフォーマット:
/v1/messages- メッセージ会話/v1/models- モデルリスト(利用可能な場合)- その他すべてのAnthropicネイティブインターフェース
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はさまざまなアイサービスのネイティブ APIフォーマットと認証方法を完全に保持します。エンドポイントアドレスを置き換え、管理インターフェースで設定されたプロキシキーを使用するだけで、シームレスな移行が可能です。
- New API - 優秀なAIモデル統合管理配信システム
GPT-Loadに貢献してくださったすべての開発者に感謝します!
-
LINUX DO コミュニティからのサポートに心より感謝いたします!
MITライセンス - 詳細はLICENSEファイルを参照してください。

