「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 に切り替わって止まらないようにしました。「速い・賢い」を取りつつ「止まらない」を捨てない設計です。
※ この図は @enomoso_pm さんの drawio-diagram-skills(MIT License) を利用して作成しました。
図の緑の太い実線が通常経路(さくら優先)、灰色の点線が障害・オフライン時だけ通るフォールバックです。そして毎回どちらが応答したかをログに残し、"静かにローカルへ劣化していないか"を見張ります。
実際に動かすと、こうなります。いくつかの依頼文を判断エンジンに通すと、さくらの gpt-oss-120b が読んで、担当エージェントに振り分ける——このひと工程です(実処理は選ばれた各エージェントが別途行います)。
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%**です。
「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エージェント会社」そのものの構成に興味がある方は、こちらもどうぞ。
- 自宅のミニPCで月3,400円のAIエージェント会社を運用する話 … 本記事の前提になっている会社の全体構成
- AIエージェントの仕組み ― 「忘れず・暴走しない」AI会社に作り替えるまで … 記憶・品質ゲート・リスク階層など"仕組み"側の話





