はじめに
前回の記事 では、Kong AI Gateway の AI Proxy Plugin を使って、さくらの AI エンジンを OpenAI 互換 API として中継する最小構成を作成しました
今回はその構成をベースに、key-auth を追加したうえで、OpenCode から利用する手順まで含めて整理します
OpenCode 側から直接さくらの AI エンジンへ接続するのではなく、いったん Kong を経由させることで、Client に見せる接続先を統一、
key-auth を用いることで安全な接続を確保したうえで、だれがどの程度利用しているかを取得することができるようになります
構成ファイル
今回のファイルはここに用意しています
docker-compose.yml
services:
kong:
image: kong/kong-gateway:3.13.0.1
container_name: opencode-kong-sakura
restart: unless-stopped
environment:
KONG_DATABASE: "off"
KONG_DECLARATIVE_CONFIG: /opt/kong/kong.yaml
KONG_LOG_LEVEL: notice
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_ADMIN_GUI_LISTEN: 0.0.0.0:8002
KONG_ADMIN_GUI_URL: http://localhost:8002
SAKURA_AI_AUTH_HEADER: ${SAKURA_AI_AUTH_HEADER}
ports:
- "8000:8000"
- "8443:8443"
- "8001:8001"
- "8444:8444"
- "8002:8002"
volumes:
- ./kong.yaml:/opt/kong/kong.yaml:ro
kong.yaml
ai-proxy と key-auth を同じ Route に設定します
_format_version: "3.0"
services:
- name: sakura-ai-chat-service
url: http://localhost
routes:
- name: sakura-ai-chat-completions-route
paths:
- /v1/chat/completions
strip_path: false
plugins:
- name: key-auth
config:
key_names:
- x-api-key
key_in_header: true
key_in_query: false
key_in_body: false
hide_credentials: true
- name: ai-proxy
config:
route_type: llm/v1/chat
max_request_body_size: 131072
auth:
header_name: Authorization
header_value: "{vault://env/sakura-ai-auth-header}"
model:
provider: openai
options:
upstream_url: https://api.ai.sakura.ad.jp/v1/chat/completions
consumers:
- username: opencode
keyauth_credentials:
- key: REPLACE_WITH_A_LONG_RANDOM_API_KEY
max_request_body_sizeはデフォルトが8192ですが、これだと足りないので今回は増やしています
通常のチャットであれば足りそうですが、opencodeでは不足します
.env の設定
.env.example を .env にコピーして使います。
SAKURA_AI_AUTH_HEADER=Bearer <your-sakura-ai-token>
SAKURA_AI_AUTH_HEADER は Bearer を含めた完全な値を設定します
Kong 側の API Key 設定
kong.yaml 内の以下はプレースホルダです
consumers:
- username: opencode
keyauth_credentials:
- key: REPLACE_WITH_A_LONG_RANDOM_API_KEY
ここは実際に利用する長いランダム文字列へ置き換えてください
OpenCode 側にも同じ値を設定します
OpenCode の設定
インストール
こちらにある通り、
curl -fsSL https://opencode.ai/install | bash
でインストール可能です
これを実行すると ~/.opencode/bin/ にインストールされます
OpenCode 側には opencode.json を用意します
今回は @ai-sdk/openai-compatible を使って Kong を provider として登録します
設定方法はこちらを参照
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"sakura-kong": {
"npm": "@ai-sdk/openai-compatible",
"name": "Sakura via Kong",
"options": {
"baseURL": "http://localhost:8000/v1",
"headers": {
"x-api-key": "{env:OPENCODE_KONG_API_KEY}"
}
},
"models": {
"Qwen3-Coder-30B-A3B-Instruct": {
"name": "qwen3"
},
"gpt-oss-120b": {
"name": "gpt-oss-120b"
}
}
}
},
"model": "sakura/gpt-oss-120b"
}
ここで、models に設定するキーはモデル名になるので
ガイド参照のこと
あわせて、OpenCode 実行環境側に API Key を環境変数で渡します
export OPENCODE_KONG_API_KEY=replace-with-the-same-key-as-kong-yaml
ここで作成した opencode.json は ~/.config/opencode/opencode.json に配置をしておきます
openaiのapikeyの実態はBearerトークンであるため、
openai-compatibleを利用する場合のapiKeyはBearerである前提で設定されることになる
カスタムプロバイダー設定にあるoptions.apiKeyは
今回のKey-authの方式では使用できないことに注意
起動手順
-
.env.exampleを.envにコピーする -
SAKURA_AI_AUTH_HEADERを設定する -
kong.yamlのREPLACE_WITH_A_LONG_RANDOM_API_KEYを置き換える -
docker compose up -dで Kong を起動する - OpenCode 側で
OPENCODE_KONG_API_KEYを設定する -
opencode.jsonを配置して provider を使う
すべての設定が終わったらこんな感じ
