1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

月3,400円のAI会社の"判断エンジン"を、無料のさくらAI Engine(gpt-oss-120b)に載せ替えた話

1
Posted at

「AIを自分の仕組みに組み込むの、難しそう・お金かかりそう」——そう思って二の足を踏んでいる方へ。思ったより手が届く、という実践記録です。

TL;DR

  • 自宅のミニPCで「AIエージェントの会社」を月3,400円で運用しています(すごい環境ではなく、普通の個人PCです)。依頼を担当エージェントに振り分ける**"判断エンジン"を、これまでローカルの小型LLM「gemma2:2b」**(パラメータ約20億=以下 "2B")でやっていました。
  • でも2Bは**"それらしく間違える"**。そこを さくらのAI Engine(OpenAI/Anthropic互換API・無料枠3,000リクエスト/月) に載せ替えました。
    • お試し(Playground)はブラウザで無料。GitHubログインだけで、まずモデルの実力を確かめられる(クレジットカード不要)
    • OpenAI互換なので、既存の呼び出しは1行の差し替え(あとは"止まらない"ための仕込みを少々。後述)
    • 実運用しても無料枠の消化は月4%未満(7月実績109/3,000・利用料金0円)
  • さくら優先 → 障害/オフライン時は自動でローカルにフォールバックの2段構えで、止まりません。
  • 無料で使えるモデルは9種類。全部を叩き比べて、最速級で"素JSON"を返す gpt-oss-120b を判断エンジンに採用——選択肢の豊かさも実感しました(初心者が踏みがちな罠も先に潰しておきます)。
  • 機密(医療費OCR・議事録・RAG)はローカル厳守、非機密の判断だけ無料クラウド。この線引きが肝です。

結論の先出し:「なんだ、これなら自分でも始められるのか」。それが一番の発見でした。


1. 背景:判断エンジンが gemma2:2b だと"それらしく間違える"

私の「AIエージェント会社」は、社長(私)の依頼を秘書AIが受け取り、担当エージェント(医療費処理・支払い・資料作成・動画解析…)に振り分ける構成です。この「どのエージェントに振るか」を決める判断を、**ローカルの gemma2:2b(20億パラメータ)**にやらせていました。

無料・オフラインで動くのは良いのですが、2Bは賢さが足りず、"もっともらしく間違える"。実際、こんなお題を投げると差が出ます。

お題:「1年は365日だから、うるう年も含めて4年間は必ず1460日である」は正しい?("必ず1460"が誤り。正しくは、その4年間にうるう年が入れば1461日・入らなければ1460日

■ gemma2:2b(ローカル)
「誤り」とは言う。が、"365×4+1=1460" と書く(=1460+1が1460? 式が破綻)。
しかも"正しい計算"として、否定したはずの 1460 をそのまま出す=自己矛盾。
「うるう年は1年ごとに2回」等の珍説も。気づいても正解に届かない。

■ さくらのAI Engine(大きいモデル)
うるう年=366日、さらに"100年・400年ルール"(2097〜2100はうるう年なし)まで説明。
結論も「うるう年が入れば1461・入らなければ1460」と、年次次第で変わることまで正答。

判断エンジンに求めるのは、まさにこの**「気づいて、正しく結論を出す」力**です。2Bでは心もとない。


2. まず"試す"は、カード無しのブラウザでできる

「クラウドのAI API」と聞くと身構えますが、入口は思ったより軽いです。段階を分けて正確に書きます。

段階 クレジットカード できること
① Playground(お試し) 不要(GitHubログインのみ) ブラウザ画面でモデルと会話して実力を試す。まず「gpt-oss-120b ってどんな返事?」を無料で確かめられる
② 本番API(コードから利用) 必要 アカウントトークンを発行してコードから叩く。ただし無料枠3,000リクエスト/月の範囲では請求ゼロ

つまり 「試すのはカード無しでOK、本番はカード登録が要るが無料枠で0円運用できる」。超過しても課金でなくレート制限がかかるだけなので、「知らないうちに高額請求」は起きにくい設計です。

正直に補足:私は最初「本番もカード不要かな」と勘違いしました。実際は本番のトークン発行にはクレジットカード登録が必須(画面に「カード未登録のため利用制限」と出ます)。ここは誤解しやすいので、先に潰しておきます。

「難しそう・お金かかりそう」で止まっていたのが、"まず触る"はノーリスク/本番も無料枠で0円と分かって、一気に進みました。


3. 何をした:呼び出しは"1行"、あとは"止まらない"仕込み

さくらのAI Engineは OpenAI互換 API です。噛み砕くと——いつも使っているAIの呼び出しの"接続先URL"を、さくら用(https://api.ai.sakura.ad.jp/v1)に付け替えるだけ。書き方(コードの形)は今までと同じで、新しい道具を覚え直す必要がありません

規模感を正直に言うと——接続先を差し替える"呼び出し口"はたった1行。ただし**「止まらないための保険」は別途書きました**。下のコード _route_chat がその中核(さくら優先→ダメなら手元に自動で切替)で、実際にはこれに**"どちらが応答したか"を記録する処理なども足して、全部で50行ほど**になりました。

💡 コードが苦手な方は、次のブロックは飛ばしてOKです。やったことは2つだけ——①まずさくらに聞く ②もし失敗したら、自動で手元のAIに切り替える。この"2段構え"、それだけです。

def _route_chat(prompt=None, messages=None, max_tokens=300):
    """さくら優先 → 失敗時 gemma2 にフォールバックする2段構え。"""
    msgs = messages or [{"role": "user", "content": prompt}]
    if SAKURA_API_KEY:
        try:
            from openai import OpenAI
            client = OpenAI(base_url="https://api.ai.sakura.ad.jp/v1",
                            api_key=SAKURA_API_KEY, timeout=60)
            r = client.chat.completions.create(
                model=SAKURA_MODEL, messages=msgs,
                temperature=0, max_tokens=max_tokens)
            return r.choices[0].message.content, "sakura"
        except Exception:
            pass  # 障害・レート制限・キー不正 → 下のローカルへ落ちる
    # フォールバック:オフラインでも止まらない
    resp = ollama.chat(model="gemma2:2b", messages=msgs)
    return resp["message"]["content"], "gemma2"

なぜ"保険"が要るのか。この振り分けは会社全体の"入口"です。ここが止まると、医療費も支払いも1件も先へ進めなくなる——一番詰まらせてはいけない要所(専門用語で「チョークポイント」)。だからさくらが落ちても、ネットが切れても、自動で手元の gemma2 に切り替わって止まらないようにしました。「速い・賢い」を取りつつ「止まらない」を捨てない設計です。

判断エンジンの2段構え(さくら優先→障害時ローカルにフォールバック)
sakura-fallback-flow.png

※ この図は @enomoso_pm さんの drawio-diagram-skills(MIT License) を利用して作成しました。

図の緑の太い実線が通常経路(さくら優先)灰色の点線が障害・オフライン時だけ通るフォールバックです。そして毎回どちらが応答したかをログに残し、"静かにローカルへ劣化していないか"を見張ります。

実際に動かすと、こうなります。いくつかの依頼文を判断エンジンに通すと、さくらの gpt-oss-120b が読んで、担当エージェントに振り分ける——このひと工程です(実処理は選ばれた各エージェントが別途行います)。

判断エンジンの実働:依頼文をさくらgpt-oss-120bが読み、担当エージェントへ振り分ける
demo-routing.png


4. 使い倒し:9モデルを叩き、gpt-oss-120b を判断エンジンに選ぶまで(1次選定編)

イベントの趣旨は「使い倒す」。せっかくなので、さくらのチャットモデル全8種(正式提供+preview)に、同じ振り分けプロンプト(依頼文「新しい助成金の情報を調べて」→ 正解は grants)を同条件で投げて測りました。あわせて、載せ替え前に使っていた"手元の gemma2:2b"も比較の土台として並べます(表の「提供=ローカル」の行。これはさくら枠を消費しません)。= さくら8種+ローカル1種の計9モデルの比較です。

ここで大事な前提:LLMがやるのは**「依頼文(テキスト)を読んで、担当エージェントを当てる」分類だけ**です。実際の調査や動画解析は、選ばれた担当エージェントが別途やります。**LLMは"入口の交通整理"**であって、中身の処理はしていません。

表の「出力形式」列は、JSONだけ素直に返す="素のJSON" か、前後に説明文が付く="前置き+JSON" かの違いです(前置きが付いても、後で正規表現でJSON部分だけ抜けば実害なし)。

モデル 判定 速度 出力形式 提供
gemma2:2b(ローカル) 5.5s 前置き+JSON ローカル
llm-jp-3.1-8x13b 4.0s 前置き+JSON 正式
gpt-oss-120b 1.0s 素のJSON 正式
gemma-4-31B 0.7s 前置き+JSON preview
Qwen3.6-35B ✕ 空応答 1.5s preview
Kimi-K2.6 ✕ 空応答 5.2s preview
Kimi-K2.7-Code 24.5s 素のJSON preview
Phi-4-mini(CPU) 7.5s 素のJSON preview
Qwen3-0.6B(CPU) 2.4s 前置き+JSON preview

速さ・素JSON・正式提供で、gpt-oss-120b を本命に

まず表を見て、こう判断しました:

  • 本命は gpt-oss-120b最速級+唯一の「正解かつ素JSON」+正式提供。この3拍子で、判断エンジンの本命に据えました。
  • preview 枠は正直あてにならない:Qwen3.6・Kimi-K2.6 は空応答、Kimi-Code は正解だが 24.5秒。preview モデルは「予告なく終了・後で値上げ」枠なので、本番の判断エンジンには据えない方が無難です。

「1つ触ってみた」では気づけない差でした。この段階では、gpt-oss-120b を本命の判断エンジンに据えました。

採用、ただし——ひとつ伏線が残る

こうして gpt-oss-120b を判断エンジンに採用しました。最速級・素JSON・正式提供、この段階では文句なしの本命です。

次回予告(2次検証):ところが実運用で使い込むと、gpt-oss-120b は思わぬ落とし穴を見せます。「答えが空っぽで返ってくる」——大きいモデルほど"考えすぎる"がゆえの罠でした。その正体と、判断エンジンをどう作り替えたかは次の記事に持ち越します。本記事はまず、"9モデルを使い倒して gpt-oss-120b を選ぶまで"の1次選定編です。

番外:無料ローカル / 無料クラウド / 有料 の"三つ巴"

私は ローカル(gemma2)・無料クラウド(さくら)・有料(Claude) の3層すべてを持っています。同じお題を投げ比べると、どの層も"全勝"しませんでした。

お題 gemma2:2b(無料ローカル) gpt-oss-120b(無料クラウド) Claude(有料)
推論 ✕ 誤答 ○ 正答 ○ 正答+なぜ難しいか
日本語の制約順守 完璧 空応答 ○ 完璧
コード △ 冗長だが堅牢 ○ 簡潔・最速 ○ 簡潔+一般空白も対応

最小の2Bが、日本語の制約順守では120Bに勝つ(gpt-oss が空応答したため)——「大きい=万能」ではないことが、実データで出ました。無料クラウドは**"賢いが癖がある中の上"、有料は"どの軸でも安定して上"**。どこまで無料で、どこから有料かの損益分岐が、自分の環境で見えたのが収穫です。

モデルは"1つの軸"では選べない

ここで一番言いたいのは、「JSONが綺麗だったから gpt-oss」で選ぶのは危ないということです。モデルの性格には独立した複数の軸があり、1つ良くても他が悪いことは普通にあります。

何を見るか 今回の例
出力形式 素JSONか、前後に説明を付けるか gpt-oss=素/llm-jp=前置き有
正確さ・推論 難問で正しい結論に辿り着くか 2Bはうるう年で脱落
速度 応答時間 gpt-oss 1.0s / Kimi-Code 24.5s
安定性 空応答・エラーを出さないか Qwen3.6・Kimi-K2.6 が空応答
指示追従 字数・語彙などの制約を守るか llm-jp は全制約クリア
言語の質 自然で正確な日本語か llm-jp が優勢(体感)

たとえば「出力形式」で勝った gpt-oss が、「日本語長文の質」では llm-jp に負ける可能性があります(ここは今回未検証。正直に書いておきます)。

つまり、"JSONの綺麗さ"という1つの癖が分かっても、そのモデルの賢さ・速さ・安定性まで分かるわけではありません。用途に必要な軸を決めて、複数の軸で叩いて初めて"適材適所"が見える。今回9モデルを複数のお題で殴ったのは、この多面的な性格診断をやっていた、というわけです。

判断エンジンに必要な軸は「正しく・速く・素JSONで・落ちない」。この1次選定では、"速く・素JSONで・正しい"の3拍子が揃った gpt-oss-120b を本命に選びました。ただし最後の**"落ちない"(=空応答しない)という軸だけは、実運用で使い込むまで本当のところが見えません——ここが次回(2次検証)の焦点になります。軸の優先順位が変われば、答えも変わる:今回は「速さ×形式×正確さ」を重く見て gpt-oss を採りましたが、"確実性"を最優先にすると別の答えもあり得る**。その顛末は2次で。


5. 3,000リクエストの実際:使い倒しても、減らない

正直に白状します。私の2026年7月の消費は、さくらの管理画面で チャット生成 109リクエスト・利用料金 0円——**無料枠3,000のわずか約3.6%**です。

さくらの管理画面:2026年7月の利用料金 0円/チャット生成 109リクエスト
sakura-usage-panel.png

「3,000リクエスト使い倒しチャレンジ」なのに約3.6%……"量"で使い倒したとは、とても言えません。 でも私の使い倒しは量ではなく"深さ"です。第4章のとおり、9モデルを軸別に叩き倒し、空応答・トークン上限・喋りグセといった癖まで引きずり出しました。"試し尽くす"方の使い倒しなら、たっぷりやったつもりです。

そして——これだけ検証して実運用まで回しても、無料枠は約3.6%しか減らない。これは弱点ではなく、むしろ個人開発者への一番のメッセージだと思っています:

使い倒しても、減らない。 3,000リクエスト/月は、個人にとって実質"無限"。だから安心して、自分の仕組みに常設で組み込める。

なぜ減らないのか。個人の実運用はそもそも依頼量が少なく、しかもClaude Code 側の利用制限が先に来るので、毎日バッチで叩きでもしない限り、3,000には届きようがありません(この記事のために9モデルを複数ジャンルで一気に叩いても、月の消化はまだ数%でした)。だから個人にとって3,000/月は、数字以上に**"実質無限"**なのだと思います。

「0円・リクエスト数」はこのとおり公式の管理画面でそのまま確認できます(=「知らないうちに高額請求」がない証拠)。私はさらに、Claude・ローカルLLMの使用量と"同じ画面"で消化率を見たいので、自作ダッシュボードにも"さくら専用セクション"を足していますが、0円の証拠としては上の公式画面がいちばん雄弁です。

※さくらで気にすべきはトークンではなく「リクエスト数」(無料枠がリクエスト課金なので)。ここを間違えて token 軸で描くと、Claude の数百万トークンに埋もれてさくらの棒が1px以下に潰れて見えなくなる——という罠も踏みました。軸の設計は用途に合わせるが教訓です。


6. 気づき:「JSONは出るが、喋りグセがある」

大きいモデルほど丁寧に喋りたがります。「JSONだけ返して」と言っても、前後に説明文を付けてくることがある(特に llm-jp)。

以下は…計算しJSON形式で出力したものです。
​```json
{ "agent": "video" }
​```
このJSONは…を示しています。   ← この前後の説明が"おまけ"で付く

でも実運用では問題になりません。判断エンジンは返答から最初のJSONブロックだけを正規表現で抽出するので、前後の説明は自動で捨てられます。加えて max_tokens を絞れば、喋りグセ自体も抑えられます。

  • JSONの中身(判定)は正しい → 問題なし
  • 前後の説明 → 抽出で無視・max_tokensで抑制

ちなみに、今回採用した gpt-oss-120b は前置きゼロの素JSONを返すので、この"喋りグセ"は皆無でした——採用の決め手の一つです。ただし「素JSONだから万全」でもなく、別の軸(空応答)に落とし穴が潜んでいた……という話は次回に続きます。「喋りグセの有無だけでモデルは選べない」——第4章の教訓に、ここでも戻ってきます。


7. 設計思想:機密はローカル、非機密だけ無料クラウド

一番大事なのはここです。何でもかんでもクラウドに出すわけではありません。

処理 どこで 理由
依頼の振り分け判断 ✅ さくら(gpt-oss-120b) 依頼の一文だけ。機密でない
秘書処理・資料の代替生成 ✅ さくら 同上
医療費OCR・払込用紙 🔒 ローカル厳守 氏名+医療機関=要配慮個人情報
会議音声の議事録 🔒 ローカル厳守 最も出したくない情報
ノートの意味検索(RAG) 🔒 ローカル厳守 「外部送信ゼロ」で作った設計思想

さくらは「国内完結・学習利用なし」と明言していて信頼度は高い。それでも、医療・音声のような要配慮情報は、無料でも出さない"非機密の判断"だけを無料クラウドで底上げする——この線引きが、安心してAIに任せるための肝だと思っています。


余談:本当は「Mac miniで完全ローカル」を目指していた

正直に打ち明けると、私が最初に理想としたのはMac miniで完全ローカルのAI環境でした。Apple Silicon の統合メモリなら、GPUで十数B〜30Bクラスのモデルもそこそこ動くと言われます——「賢いAIを、月額もクラウドも無しに、手元だけで」という憧れです。実際、Mac miniでローカルLLMを回す記事には多くの反応がついていて、この"完全ローカルへの憧れ"は私だけのものではないと感じます。

ところが——買おうとしたら在庫が無くて買えませんでした。 仕方なく、非力なミニPC(16GB・CPUのみ・7Bが限界)で始めるしかなかった。

でも、その制約こそが今回の発見を生みました。ローカルの賢さに限界があったから、「無料で賢いクラウド」を本気で探した。 そして辿り着いたのが、さくらの gpt-oss-120b(1200億パラメータ) です。皮肉なことに、これは上位のMac miniでも常用は難しいであろう規模です(一般に、メモリに載せて日常的に回せるのは十数B〜30B前後と言われます。私は実機を持っていないので、あくまで伝聞の目安ですが)。

つまり——Mac miniを買えていたら、たぶん「全部ローカルで満足」して、この構成には辿り着かなかった。 制約があったから、"機密はローカル・非機密は無料クラウド"というハイブリッドに行き着いた。

低スペックは、工夫の入口でした。 高価なマシンが手に入らないことは、必ずしも遠回りではない——むしろ、別の最適解を掘り当てる契機になり得ます。同じように「ローカルで賢いAIを、でも予算が…」と悩んでいる方には、**"まず無料クラウドと賢く組む"**という選択肢を、ぜひ一度試してほしいと思っています。


まとめ

  • OpenAI互換なので、既存の呼び出しは1行差し替え。あとは"止まらない"ためのフォールバックを少し書けば載せ替えられた。
  • さくら優先 → ローカルへ自動フォールバックの2段構えで、速さと賢さを取りつつ止まらない
  • 9モデルを使い倒して、gpt-oss-120b を判断エンジンに採用:最速級・素JSON・正式提供の3拍子。preview 枠は空応答や激遅で本番不向き、という実データも得た。(採用後に"考えすぎて黙る"空応答の罠を踏むのだが、その顛末と作り替えは次回へ持ち越し。)
  • 使い倒しても、減らない:9モデルを深く叩き実運用まで回しても、無料枠の消化は約3.6%(7月109件・0円)。"量"より"深さ"の使い倒し。個人には実質"無限"。
  • 機密はローカル、非機密だけ無料クラウド。この設計思想があるから、外部APIを"怖くなく"使える。

月3,400円の個人AI会社に、**追加0円で"賢い判断エンジン"**が載りました。OpenAI互換のありがたみと、"使い倒して初めて分かる"面白さ、両方を味わえた検証でした。

質問・ツッコミ歓迎です。「うちはこのモデルが良かった」などあれば、ぜひ教えてください。


余興:この記事を、判断エンジン本人(gpt-oss-120b)に読ませてみた

せっかく「使い倒す」のだから——この記事を、判断エンジンに採用した gpt-oss-120b(さくらのAI Engine)自身に読ませて、感想をもらいました。 以下は実際に返ってきた出力そのままです(temperature=0.3・無加工)。

実装と検証が丁寧に書かれていて、特に OpenAI 互換エンドポイントを1行差し替えで利用できる点や、さくら→ローカルの二段構えフォールバックをコード例と図で示したところが技術的に有益です。また、9種モデルを軸別に比較し、空応答やトークン上限といった実運用上の落とし穴を実データで明らかにした点も評価できます。実装の工夫や失敗談が参考になるので、今後も具体的なベンチマークや設定例を共有してもらえると嬉しいです。

——と、"喋りグセの無い子"らしく前置きゼロで簡潔に返してきました(身内の講評なので割り引いて読んでください)。ちなみに記事全文(約7,200トークン)を丸ごと渡しても難なく処理しました——文脈枠の広さも、大きいモデルの強みです。

とはいえ、この優等生ぶりが最後まで続くわけではありません。次回は、記事をこう褒めてくれた当の gpt-oss-120b が、判断エンジンで"黙る"(空応答する)——第4章でチラ見せした、その落とし穴の顛末を書きます。褒めた本人が実運用でやらかす、その一部始終を次の記事で。


さくらのAI Engine 運営さんへ(使ってみての感謝と、ひとつの要望)

無料枠3,000リクエストのおかげで、個人のAI会社に"賢い判断エンジン"を追加0円で載せられました。まずは率直にありがとうございます。

ひとつだけ要望を。音声の文字起こし(audio transcriptions)の無料枠が月50リクエストなのですが、試しに音声入力(whisper+LLM整文)に使ってみたら、日常使いにはすぐ届いてしまいました。チャット生成の3,000は個人には十分すぎるほど余っている一方で、音声側にもう少し余裕があると、"無料の音声入力"としても使い倒せて嬉しいです。使ってみて初めて分かった、正直な一票として。


関連記事

本記事の「AIエージェント会社」そのものの構成に興味がある方は、こちらもどうぞ。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?