はじめに
別の記事で、さくらのAI Engineを使った行政文書検索の窓口AIを作りました。この記事はその前段——「そもそも使える状態になるまで」の道のりを、実際の画面を貼りながら歩き直したものです。
なぜわざわざ記事にするかというと、私自身がこの道のりで一度迷子になったからです。具体的には「ログインしているはずなのにログイン画面が出る」という現象で数分固まりました。原因は後述しますが、先に知っていれば迷わなかったはずのことばかりだったので、これから触る人向けに整理しておきます。
対象読者: さくらのAI Engineをこれから初めて触る人。OpenAI互換APIを触ったことがあれば、この記事の内容は30分あれば追いつけます。
参考文献
道のりの全体マップ
最初のAPIコールまでのステップは4つです。
- さくらインターネットの会員登録(既存の会員IDがあればスキップ)
- さくらのクラウドのコントロールパネルでAI Engineを開き、アカウントトークンを発行
- Playgroundでモデルの動作を体感(任意だがおすすめ)
- curlで最初のAPIコール
順に歩いていきます。
Step0 サービスページを眺める
まずは公式のサービスページです。チャット・埋め込み・音声などのAPIが国内データセンターで動く推論基盤で、無償プランと従量課金が用意されています(料金・無料枠の値は変わりうるので公式ページで最新を確認してください)。
ページ内に入口が2つあることを覚えておいてください。「無料でPlaygroundを試す」と「さくらのクラウドのプロジェクトを作成/ログインする」です。実はこの2つ、行き先の認証システムが違います。ここが今回いちばんのハマりどころなので、次で説明します。
ハマりどころ 認証が2系統ある
私はここで「ログインしているのにログイン画面が出る」現象に遭遇しました。整理すると、さくらのAI Engineまわりには認証が2系統あります。
| 系統 | 使う場所 | アカウント |
|---|---|---|
| さくらインターネット会員ID | さくらのクラウドのコントロールパネル(トークン発行・音声モデルの規約同意) | 会員登録で発行される nnn12345 形式のID |
| さくらID(またはGitHub認証) | Playground | 会員IDとは別のアカウント |
Playgroundにさくらのアカウントでログインした状態でも、コントロールパネル(secure.sakura.ad.jp)は別の会員IDセッションを要求します。逆も同じです。「さっきログインしたのに」と思ったら、開いているのがどちらの系統かをURLで確認してください。
会員IDをまだ持っていない場合は、ログイン画面の「新規会員登録」から作成します。
Step1 コントロールパネルでトークンを発行する
さくらのクラウドのコントロールパネルにログインしたら、トークン発行の前にいくつか準備があります。順番は、プロジェクトの作成 → AI Engineの利用開始手続き(利用規約への同意とプランの選択。アカウント状況によっては本人確認などの手続きも挟まります)→ アカウントトークンの発行、です。細かい画面遷移は公式の利用手順が正確なので、迷ったらそちらを正としてください。
APIを叩くのに必要なのは最後に発行する「アカウントトークン」で、形式は UUID:シークレット です。
発行したトークンの扱いは最初に決めておくのがおすすめです。私は .env ファイルに保存して環境変数として読み込む方式にしました。
.env はエディタで作成します(echoコマンドで作るとトークンがシェル履歴に残るので避けます)。中身は1行だけです。
SAKURA_AI_ENGINE_TOKEN=<UUID>:<シークレット>
作成したら権限を絞り、シェルに読み込みます。この後のcurlは、この読み込みを済ませた前提です。
chmod 600 .env
source .env
トークンをソースコードに直書きしてGitにコミットする事故は本当によく起きます。.env は必ず .gitignore に入れてください。もしチャットやスクショで露出したら、その場で再発行を。
Step2 Playgroundで動作を体感する
APIを書く前に、ブラウザだけで試せるPlaygroundを触っておくとモデルの雰囲気がつかめます。入口はサービスページの「無料でPlaygroundを試す」で、こちらはさくらIDまたはGitHub認証です(会員IDではない点に注意)。
モデルを切り替えながら数往復してみると、応答速度がかなり速いことに気づくはずです。スピーカーボタンから音声合成も試せます。
Step3 curlで最初のAPIコール
いよいよAPIです。エンドポイントはOpenAI互換で、ベースURLは https://api.ai.sakura.ad.jp/v1 、認証は Authorization: Bearer <トークン> ヘッダです。
まずは利用できるモデルの一覧から。
curl -sS https://api.ai.sakura.ad.jp/v1/models \
-H "Authorization: Bearer $SAKURA_AI_ENGINE_TOKEN"
私の環境では、gpt-oss-120b、llm-jp-3.1-8x13b-instruct4、preview/Kimi-K2.6、preview/Qwen3.6-35B-A3B、preview/gemma-4-31B-it などのチャットモデルに加えて、埋め込みの multilingual-e5-large、文字起こしの whisper-large-v3-turbo が返ってきました(提供モデルは時期により入れ替わります)。
続いて、最初のチャットリクエストです。
curl -sS https://api.ai.sakura.ad.jp/v1/chat/completions \
-H "Authorization: Bearer $SAKURA_AI_ENGINE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-oss-120b",
"messages": [{"role": "user", "content": "APIの疎通確認です。「ようこそ、さくらのAI Engineへ」とだけ返してください。"}],
"max_tokens": 500
}'
{
"id": "chatcmpl-96b0de4926da75b6",
"object": "chat.completion",
"model": "gpt-oss-120b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "ようこそ、さくらのAI Engineへ",
"reasoning": "The user requests: ... Please respond only with 'ようこそ、さくらのAI Engineへ'. So we just output that exact phrase."
},
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 90, "completion_tokens": 85, "total_tokens": 175 }
}
返ってきました。OpenAIのレスポンスと同じく回答は choices[0].message.content に入っています。面白いのは reasoning フィールドで、gpt-oss-120bが内部でどう考えたかが覗けます。ここまで来れば、OpenAI互換のライブラリやツールに対して、ベースURL・トークン・モデル名を差し替えれば手持ちのコードを動かせます(モデルごとに対応パラメータは異なるので、使っている機能の互換性だけは確認を)。Anthropic互換の /v1/messages エンドポイントも用意されていて、手元で試した範囲では preview/Kimi-K2.6 と gpt-oss-120b のどちらでも応答が返りました。
まとめ
登録からAPIコールまで、迷子ポイントさえ知っていれば30分かからない道のりでした。OpenAI互換なので2歩目以降の学習コストがほぼゼロなのも、最初の一歩として勧めやすいところです。
このあと私は埋め込みAPIで検索を組み、行政文書に答える窓口AIまで作りました。その顛末は別記事にまとめているので、最初の一歩の次が気になる方はそちらもどうぞ。



