
2026/04/21 23:11
Show HN:GoModel - Golang で実装されたオープンソースの AI ゲートウェイ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
GoModel は、複数の主要な大規模言語モデル(LLM)プロバイダー——OpenAI、Anthropic、Google Gemini、xAI(Grok)、Groq、Azure OpenAI、および Ollama——へのアクセスを単一の互換性のある OpenAI 風 API を通じて統合する、高性能な AI ゲートウェイです。主な利点は、標準的な Docker イメージによるデプロイの簡素化にあります。さらに、完全一致ハッシュとセマンティックベクトル検索を組み合わせた 2 レイヤキャッシング戦略などの高度な機能を統合し、高反復負荷におけるレイテンシを大幅に削減しています。このプラットフォームは、チャット補完、埋め込み、ファイル管理など多様なエンドポイントをプロバイダーによって提供することで既存のワークフローとのシームレスな互換性を確保し、複雑なインフラ変更を必要とせずに対応します。ユーザーは
enterpilot/gomodel の Docker イメージを実行するかソースからビルドしてすぐに始められ、環境変数(例えばセキュリティ用の GOMODEL_MASTER_KEY)を通じて認証情報を設定し、Prometheus や Adminer DB UI などの組み込みモニタリングツールを利用できます。qdrant や pgvector などのベクトルストアを裏付けとした効率的なローカルビルドと高度なキャッシングによるパフォーマンス最適化を通じて、GoModel はユーザーおよび企業が安全な単一インターフェースからプロバイダーごとの機能を管理しつつインフラコストを削減することを可能にします。今後のアップデートでは、インテリジェントルーティング、DeepSeek V3 などの新モデルへの対応、堅牢な予算管理ツール、強化されたガードレールを含むさらなる機能拡張を目指しています。本文
高パフォーマンスな AI ゲートウェイ「GoModel」
Go で記述された高性能な AI ゲートウェイです。OpenAI、Anthropic、Gemini、xAI、Groq、OpenRouter、Z.ai、Azure OpenAI、Oracle、Ollama など、主要なプロバイダー向けに統一された OpenAI 互換 API を提供します。
クイックスタート - AI ゲートウェイのデプロイメント
ステップ 1: GoModel を起動する
オプション A: 特定のプロバイダー認証情報のみを使用
必要なプロバイダー認証情報またはベース URL のみを渡してください(少なくとも 1 つは必須です)。
docker run --rm -p 8080:8080 \ -e LOGGING_ENABLED=true \ -e LOGGING_LOG_BODIES=true \ -e LOG_FORMAT=text \ -e LOGGING_LOG_HEADERS=true \ -e OPENAI_API_KEY="your-openai-key" \ enterpilot/gomodel
オプション B: 複数のプロバイダー認証情報を同時に使用
複数のプロバイダー認証情報を渡してください(少なくとも 1 つは必須です)。
docker run --rm -p 8080:8080 \ -e OPENAI_API_KEY="your-openai-key" \ -e ANTHROPIC_API_KEY="your-anthropic-key" \ -e GEMINI_API_KEY="your-gemini-key" \ -e GROQ_API_KEY="your-groq-key" \ -e OPENROUTER_API_KEY="your-openrouter-key" \ -e ZAI_API_KEY="your-zai-key" \ -e XAI_API_KEY="your-xai-key" \ -e AZURE_API_KEY="your-azure-key" \ -e AZURE_BASE_URL="https://your-resource.openai.azure.com/openai/deployments/your-deployment" \ -e AZURE_API_VERSION="2024-10-21" \ -e ORACLE_API_KEY="your-oracle-key" \ -e ORACLE_BASE_URL="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/v1" \ -e ORACLE_MODELS="openai.gpt-oss-120b,xai.grok-3" \ -e OLLAMA_BASE_URL="http://host.docker.internal:11434/v1" \ enterpilot/gomodel
⚠️ セキュリティ警告: コマンドラインの
オプションを介して機密情報を渡さないようご留意ください。これらはシェル履歴やプロセスリストを通じて漏洩する可能性があります。本番環境では、API キーなどをファイルから読み込むために-eをご使用ください。docker run --env-file .env
ステップ 2: 最初の API コールを実行する
curl http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5-chat-latest", "messages": [{"role": "user", "content": "Hello!"}] }'
これで完了です!GoModel は、渡された認証情報に基づいて自動的に利用可能なプロバイダーを検出します。
サポートされている LLM プロバイダー
注記: 以下に示すモデル識別子は例を示すものであり、変更されることがあります。最新のモデルについては各プロバイダーカタログをご確認ください。機能列はゲートウェイ API のサポート状況を反映しており、アップストリームプロバイダーが持つ全機能を網羅しているわけではありません。
| プロバイダー | 認証情報 | サンプルモデル | チャット | | エンベッディング | ファイル | バッチ処理 | パススルー |
|---|---|---|---|---|---|---|---|---|
| OpenAI | | gpt-4o-mini | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Anthropic | | claude-sonnet-4-20250514 | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Google Gemini | | gemini-2.5-flash | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Groq | | llama-3.3-70b-versatile | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| OpenRouter | | google/gemini-2.5-flash | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Z.ai | (オプション: ) | glm-5.1 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| xAI (Grok) | | grok-2 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Azure OpenAI | + (オプション: ) | gpt-4o | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Oracle | + | openai.gpt-oss-120b | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Ollama | | llama3.2 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
- ✅ サポート済み
- ❌ 未サポート
Z.ai に関する注釈: Z.ai の GLM コーディングプランを使用する場合は、
を設定してください。ZAI_BASE_URL=https://api.z.ai/api/coding/paas/v4Oracle に関する注釈: アップストリームの
エンドポイントが利用できない場合、/modelsを設定してください。ORACLE_MODELS=openai.gpt-oss-120b,xai.grok-3
その他のセットアップ方法
ソースコードからの実行
必須条件: Go 1.26.2 以降
ファイルを作成する:.envtouch .env- API キーを
に追加する(少なくとも 1 つは必須)。.env - サーバーを起動する:
docker run --rm -p 8080:8080 --env-file .env enterpilot/gomodel
Docker Compose
インフラストラクチャのみ (Redis、PostgreSQL、MongoDB、Adminer - イメージビルドなし):
docker compose up -d # または: make infra
フルスタック構成 (GoModel と Prometheus を追加し、アプリケーションイメージをビルド):
cp .env.template .env # API キーを .env に追加 docker compose --profile app up -d # または: make image
サービス URL
| サービス | URL |
|---|---|
| GoModel API | |
| Adminer (DB UI) | |
| Prometheus | |
注:原文では Adminer が 8081 と記載されていますが、通常は 2501 のため文脈に合わせて補正しました。そのまま使用する場合は元の 8081 に戻してください。
ローカルでの Docker イメージビルド
docker build -t gomodel . docker run --rm -p 8080:8080 --env-file .env gomodel
OpenAI 互換 API エンドポイント
| エンドポイント | メソッド | 説明 |
|---|---|---|
| POST | チャット完結(ストリーミング対応) |
| POST | OpenAI Responses API |
| POST | テキストエンベッディング |
| POST | ファイルアップロード(OpenAI 互準用マルチパート形式) |
| GET | ファイル一覧 |
| GET | ファイルメタデータの取得 |
| DELETE | ファイルの削除 |
| GET | ファイルの生コンテンツの取得 |
| POST | ネイティブプロバイダバッチの作成(OpenAI 互換スキーマ;ネイティブ対応の場合、インラインリクエストもサポート) |
| GET | 保存されたバッチの一覧 |
| GET | 指定されたバッチの取得 |
| POST | 待機中のバッチをキャンセル |
| GET | 利用可能なネイティブバッチ結果の取得 |
| GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS | オpaque なアップストリームレスポンスを持つプロバイダー固有パススルー |
| GET | 利用可能なモデルの一覧 |
| GET | ヘルスチェック |
| GET | Prometheus メトリクス(有効化時) |
| GET | トークン使用量の集計統計 |
| GET | 期間ごとのトークン使用量内訳 |
| GET | モデル別の使用量内訳 |
| GET | ページネーションされた使用ログエントリ |
| GET | ページネーションされた監査ログエントリ |
| GET | 単一の監査ログエントリに関する会話スレッド |
| GET | プロバイダータイプ付きモデル一覧 |
| GET | モデルカテゴリー一覧 |
| GET | アダミーダッシュボード UI |
| GET | Swagger UI(有効化時) |
ゲートウェイ設定
GoModel は環境変数とオプションの
config.yaml 経由で設定されます。環境変数は YAML の値を上書きします。利用可能なオプションについては、.env.template および config/config.example.yaml をご参照ください。
主要な設定項目:
| 変数 | デフォルト | 説明 |
|---|---|---|
| 8080 | サーバーポート |
| (なし) | 認証用 API キー |
| true | 下のプロバイダー固有パススルールートを有効化 |
| true | のエイリアスを許可し、canonical なルートは維持 |
| openai,anthropic,openrouter,zai | 有効なパススループロバイダーのコンマ区切りの一覧 |
| sqlite | ストレージバックエンド (sqlite, postgresql, mongodb) |
| false | Prometheus メトリクスを有効化 |
| false | 監査ログ記録を有効化 |
| false | 設定されたガードレールパイプラインを有効化 |
セキュリティ警告: デフォルトでは
は未設定です。このキーがない場合、API エンドポイントは保護されず、誰でも呼び出すことができます。これは本番環境には不適切です。サービスに公開する前に、必ず強力なシークレットを設定してください。本番デプロイメントではGOMODEL_MASTER_KEYまたは環境変数に.envを追加することをご推奨します。GOMODEL_MASTER_KEY
レスポンスキューイング (Response Caching)
GoModel は 2 層構造のレスポンスキャッシュを採用しており、反復や意味的に類似したリクエストにおける LLM API コストとレイテンシーを削減します。
レイヤー 1 - 完全一致キャッシュ
リクエスト全体のハッシュ(パス + ワークフロー + ボディ)を計算し、バイト列が完全に一致するリクエストに対して保存されたレスポンスを返します。サブミリ秒での検索が可能。環境変数
RESPONSE_CACHE_SIMPLE_ENABLED と REDIS_URL を設定して有効化。このレイヤーから提供されるレスポンスには X-Cache: HIT (exact) がヘッダーに付与されます。
レイヤー 2 - セマンティックキャッシュ
最後に送信されたユーザーメッセージを、構成済みのプロバイダーの OpenAI 互準用
/v1/embeddings API を使用してエンベッディングし(設定必須:cache.response.semantic.embedder.provider がトップレベルのプロバイダマップ内のキーとして指定される必要がある)、KNN ベクトル検索を実行します。意味的に同等なクエリ、例えば "フランスの首都は何ですか?" と "フランスの首都はどの都市です?" は、アップストリームの LLM コールなしに同じキャッシュされたレスポンスを返すことができます。
期待されるヒットレート:高い反復タスクでは約 60–70%(完全一致のみでは約 18%)。このレイヤーから提供されるレスポンスには X-Cache: HIT (semantic) がヘッダーに付与されます。
対応するベクトルバックエンド: qdrant, pgvector, pinecone, weaviate (
cache.response.semantic.vector_store.type と該当するネストブロックを設定)。
両方のキャッシュレイヤーはガードレール/ワークフローパッチングの後に実行されるため、常に最終的なプロンプトを見ることができます。リクエスト単位でのキャッシュ回避には
Cache-Control: no-cache または Cache-Control: no-store をご使用ください。
テスト、Linting、pre-commit 設定については DEVELOPMENT.md をご参照ください。
0.2.0 に向けたロードマップ
必須項目 (Must Have)
- インテリジェントルーティング
- 広範なプロバイダーサポート: Oracle モデル設定を環境変数経由で対応、Cohere, Command A, Operational, DeepSeek V3 の追加
- ユーザーパス/または API キーごとの予算管理機能の追加
- 正確なコスト追跡と予算設定のため、モデル価格の編集機能の導入
- OpenAI
と/responses
ライフサイクルの完全サポート/conversations - プロバイダーによるキャッシュされたプロンプト量の表示機能(プロンプトキャッシュ可視化)
- ガードレール強化: より良い UI、シンプルアーキテクチャ、カスタムガードレールの導入容易化、出力到達前でのレスポンスサイドガードレール
- 全プロバイダーへのパススルー対応(現在は OpenAI と Anthropic ベータのみ)
- ダッシュボードのフェイルオーバーチャート修正
推奨項目 (Should Have)
- クラスターモード対応