Show HN:GoModel - Golang で実装されたオープンソースの AI ゲートウェイ

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

⚠️ セキュリティ警告: コマンドラインの

-e
オプションを介して機密情報を渡さないようご留意ください。これらはシェル履歴やプロセスリストを通じて漏洩する可能性があります。本番環境では、API キーなどをファイルから読み込むために
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 のサポート状況を反映しており、アップストリームプロバイダーが持つ全機能を網羅しているわけではありません。

プロバイダー認証情報サンプルモデルチャット
/responses
エンベッディングファイルバッチ処理パススルー
OpenAI
OPENAI_API_KEY
gpt-4o-mini
Anthropic
ANTHROPIC_API_KEY
claude-sonnet-4-20250514
Google Gemini
GEMINI_API_KEY
gemini-2.5-flash
Groq
GROQ_API_KEY
llama-3.3-70b-versatile
OpenRouter
OPENROUTER_API_KEY
google/gemini-2.5-flash
Z.ai
ZAI_API_KEY
(オプション:
ZAI_BASE_URL
)
glm-5.1
xAI (Grok)
XAI_API_KEY
grok-2
Azure OpenAI
AZURE_API_KEY
+
AZURE_BASE_URL
(オプション:
AZURE_API_VERSION
)
gpt-4o
Oracle
ORACLE_API_KEY
+
ORACLE_BASE_URL
openai.gpt-oss-120b
Ollama
OLLAMA_BASE_URL
llama3.2
  • サポート済み
  • 未サポート

Z.ai に関する注釈: Z.ai の GLM コーディングプランを使用する場合は、

ZAI_BASE_URL=https://api.z.ai/api/coding/paas/v4
を設定してください。

Oracle に関する注釈: アップストリームの

/models
エンドポイントが利用できない場合、
ORACLE_MODELS=openai.gpt-oss-120b,xai.grok-3
を設定してください。


その他のセットアップ方法

ソースコードからの実行

必須条件: Go 1.26.2 以降

  1. .env
    ファイルを作成する:
    touch .env
    
  2. API キーを
    .env
    に追加する(少なくとも 1 つは必須)。
  3. サーバーを起動する:
    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
http://localhost:8080
Adminer (DB UI)
http://localhost:2501
Prometheus
http://localhost:9090

注:原文では Adminer が 8081 と記載されていますが、通常は 2501 のため文脈に合わせて補正しました。そのまま使用する場合は元の 8081 に戻してください。

ローカルでの Docker イメージビルド

docker build -t gomodel .
docker run --rm -p 8080:8080 --env-file .env gomodel

OpenAI 互換 API エンドポイント

エンドポイントメソッド説明
/v1/chat/completions
POSTチャット完結(ストリーミング対応)
/v1/responses
POSTOpenAI Responses API
/v1/embeddings
POSTテキストエンベッディング
/v1/files
POSTファイルアップロード(OpenAI 互準用マルチパート形式)
/v1/files
GETファイル一覧
/v1/files/{id}
GETファイルメタデータの取得
/v1/files/{id}
DELETEファイルの削除
/v1/files/{id}/content
GETファイルの生コンテンツの取得
/v1/batches
POSTネイティブプロバイダバッチの作成(OpenAI 互換スキーマ;ネイティブ対応の場合、インラインリクエストもサポート)
/v1/batches
GET保存されたバッチの一覧
/v1/batches/{id}
GET指定されたバッチの取得
/v1/batches/{id}/cancel
POST待機中のバッチをキャンセル
/v1/batches/{id}/results
GET利用可能なネイティブバッチ結果の取得
/p/{provider}/...
GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONSオpaque なアップストリームレスポンスを持つプロバイダー固有パススルー
/v1/models
GET利用可能なモデルの一覧
/health
GETヘルスチェック
/metrics
GETPrometheus メトリクス(有効化時)
/admin/api/v1/usage/summary
GETトークン使用量の集計統計
/admin/api/v1/usage/daily
GET期間ごとのトークン使用量内訳
/admin/api/v1/usage/models
GETモデル別の使用量内訳
/admin/api/v1/usage/log
GETページネーションされた使用ログエントリ
/admin/api/v1/audit/log
GETページネーションされた監査ログエントリ
/admin/api/v1/audit/conversation
GET単一の監査ログエントリに関する会話スレッド
/admin/api/v1/models
GETプロバイダータイプ付きモデル一覧
/admin/api/v1/models/categories
GETモデルカテゴリー一覧
/admin/dashboard
GETアダミーダッシュボード UI
/swagger/index.html
GETSwagger UI(有効化時)

ゲートウェイ設定

GoModel は環境変数とオプションの

config.yaml
経由で設定されます。環境変数は YAML の値を上書きします。利用可能なオプションについては、
.env.template
および
config/config.example.yaml
をご参照ください。

主要な設定項目:

変数デフォルト説明
PORT
8080サーバーポート
GOMODEL_MASTER_KEY
(なし)認証用 API キー
ENABLE_PASSTHROUGH_ROUTES
true
/p/{provider}/...
下のプロバイダー固有パススルールートを有効化
ALLOW_PASSTHROUGH_V1_ALIAS
true
/p/{provider}/v1/...
のエイリアスを許可し、canonical なルートは維持
ENABLED_PASSTHROUGH_PROVIDERS
openai,anthropic,openrouter,zai有効なパススループロバイダーのコンマ区切りの一覧
STORAGE_TYPE
sqliteストレージバックエンド (sqlite, postgresql, mongodb)
METRICS_ENABLED
falsePrometheus メトリクスを有効化
LOGGING_ENABLED
false監査ログ記録を有効化
GUARDRAILS_ENABLED
false設定されたガードレールパイプラインを有効化

セキュリティ警告: デフォルトでは

GOMODEL_MASTER_KEY
は未設定です。このキーがない場合、API エンドポイントは保護されず、誰でも呼び出すことができます。これは本番環境には不適切です。サービスに公開する前に、必ず強力なシークレットを設定してください。本番デプロイメントでは
.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)

  • クラスターモード対応

同じ日のほかのニュース

一覧に戻る →

2026/04/22 2:14

Vercel の侵害事件:OAuth 攻撃によるプラットフォーム環境変数のリスク浮上

## Japanese Translation: 最も重要な教訓は、攻撃者がサードパーティの OAuth の侵害を利用して、2024 年 6 月頃に始まり公開された 2026 年 4 月 19 日まで約 22 カ月到達した間、Vercel の内部システムへの侵入を成し遂げたという点です。この期間中、敵対者は顧客の機密情報や従業員のデータ、OpenAI のようなサービスにリンクされた認証情報を盗みました。この侵害は Vercel の環境変数モデルによって拡大されました:「sensitive」と明示的にマークされていない変数は静態で暗号化されて保存されていたため、内部へのアクセスが得られた時点で読み取ることができました。これにより、侵害された OAuth アプリケーションから従業員の Google Workspace アカウントへ、さらに非機密の環境変数の列挙および下流の認証情報の悪用への横移動が可能になりました。 Vercel の CEO ガビエル・ロイシュは、攻撃者の驚くべき速度と Vercel に対する深い理解を AI の拡張作用に帰因しました。地下フォーラムで ShinyHunters と関連するハッカー集団が従業員のレコード約 580 件、トークン、および API キーの保有を主張していますが、公式な確認が出るまでこれらの主張は検証されていません。この出来事は、LiteLLM(2024 年 3 月 24 日)、Axios(2024 年 3 月 31 日)、Codecov(2021 年)、CircleCI(2023 年)、Snowflake(2024 年)などの主要ソフトウェア提供者を標的とするサプライチェーン攻撃のより広範な 2026 年の傾向を反映しています。 即時の是正策として、すべての非機密 Vercel 環境変数を再設定し、アプリケーションを再起動する必要があります。パスワードのみの再設定では、すでに古い認証情報を既に使用していた以前のデプロイメントが無効化できないためです。調査は困難に直面しており、デフォルトの Google Workspace ログがわずか 6 ヶ月間のみ保持されるため、正確なエントリーポイントや最も早期の侵害活動が隠れてしまう可能性があります。究極的には、セキュリティ環境は、現代のサプライチェーン構成において「非機密」というラベルが静的な未暗号化データを保護することを失敗するという危険なギャップを開示しています。

2026/04/22 0:29

CrabTrap:実環境におけるエージェントを保護するための、LLM を採用した「審査官」として機能する HTTP プロキシ

## Japanese Translation: Capital One の完全子会社であり、米国ユタ州ソルトレイクシティ 650 S 500W スイート 300 に本社を置く Brex LLC は、コア・バンキングサービスにおいて関係ないパートナー銀行を利用する金融プラットフォームとして運営されています。支払いサービスは Brex Payments LLC(免許を受けた資金送金業者)が管理しており、Vault fonds には即座に FDIC の保険が付与され、Treasury fonds はパートナー・プログラム銀行へ転送される際に FDIC 資格を取得します。証券は Brex Treasury LLC を通じて提供され、同社は各株式で $1.00 の価値を維持することを目的とするファンドへの投資を行うが、これは保証されておらず、収益は市場状況によって変動し、元本損失の可能性もあることに注意すべきです。クレジットカードは製品により異なります:Brex Mastercard® Corporate は Emigrant Bank、Fifth Third Bank N.A.、または Airwallex(オランダ)B.V. が発行し、Brex Commercial Card は Visa ライセンスの下で Sutton Bank が発行します。現在、ATM アクセスは利用できませんが、すべてのローンには承認が必要です。また、Brex LLC は法的、税務、直接的投資アドバイスを提供しません。料金プランはユーザー 1 人あたり月 $0 から開始し、高度な機能を必要とする場合はユーザー 1 人あたり月 $12 です。資金を投入する前に、これらの構造的ニュアンス、パートナー依存関係、および本質的な市場リスクを考慮する必要があります。

2026/04/18 19:53

スティーブンのソーセージロールは、今なお最も影響力の大きいパズルゲームの一つとして確立されている。

## Japanese Translation: この原稿は『Stephen's Sausage Roll』の 10 周年を祝い、パズルゲームの定義を継続的に確立し続けてきたタイムレスな傑作として位置づけています。2016 年 4 月に PC でリリースされ、ゲームプレイについてほとんど何も明らかにしない予告編と共に登場したこの oversized fork-based ソコバンタイトル(プレイヤーがブロック、ラダー、フォークを使用して肉を焼くためにソーセージを押す)は、細心の注意を払った設計、深いパズル層、そして公平だが困難な難易度を通じて直ちにプレイヤーを魅了しました。ゲームは Stephen Lavelle 氏(Increpare Games)によってデザインされており、ソコバンの設計を探求するグリッドベースのパズルの作成を可能にする PuzzleScript も以前にリリースしています。開発者は『Stephen's Sausage Roll』を「削ぎ落とされた純粋さ」の傑作として評価し、「ソーセージのような」ゲームや新しい世代のソコバンタイトルを鼓舞していると述べています。Alan Hazelden 氏(*A Monster's Expedition*)はそれを「少ないもので多くのことを成し遂げるためのマスタークラス」と呼び、Patrick Traynor 氏(*Patrick's Parabox*)はそれが純粋なパズルデザインを追求するようそしてタイトルに自分の名前を含めるよう刺激したと述べています。Gwen Frey 氏(*Kine*, *Lab Rat*)はそれを「ソコバンへのゲートウェイ薬物」と呼び、彼女のキャリアを変えたと言っています。Corey Martin 氏(*Bonfire Peaks*)はその純粋さを「1976 年の Ramones」に例え、Joseph Mansfield 氏(Thinky Games)はそれが手慣れた古典的なソコバンから深みのある焦点を当てた設計への転換を標記していると指摘しています。Thinky Games は開発者の証言をフィーチャーした 10 歳の誕生日祭りを開催しており、これにより『Stephen's Sausage Roll』がどのようにジャンルを形成し続けているかが強調され、その遺産がリソースに制約のある志の高い創作者のための成功したブループリントとして検証され、新しい世代のパズル愛好家に enduring するために確保されています。

Show HN:GoModel - Golang で実装されたオープンソースの AI ゲートウェイ | そっか~ニュース