E.D.E.N.という、わたし専用のAIアシスタントを作っています。従量課金のAPIを増やさず、手元のPCで動かすことを条件にしているプロジェクトです。
今回は、E.D.E.N.に3つのモードを実装した話です。
最初は演出のつもりでした。同じAIでも、呼び方と見た目が変わると気分が変わる。その程度の動機です。名前は、好きな作品に出てくる「知恵を貸してくれる存在」から借りています。JARVIS はアイアンマンから、RAPHAEL と CIEL は『転生したらスライムだった件』から取りました。あくまで自分用の呼び名で、作品のセリフや設定を再現しているわけではありません。
作り終えてから気づいたのですが、これは人格の実装ではありませんでした。モデルサイズと、課金の境界を切り替えるスイッチになっていました。
3つのモードが、実際には何を切り替えているか
| モード | 役割 | 使うモデル | 外部へ出る条件 |
|---|---|---|---|
| JARVIS(実行) | 予定確認、家電操作、短い指示 | Qwen 3.5 9B | 自動判定では常にローカル。外部へ出したいときは接続先を手動で切り替える |
| RAPHAEL(解析) | 調べもの、整理、比較 | Gemma 4 12B | 通常会話はローカル。最新情報の調査時だけ契約内のAIへ昇格 |
| CIEL(対話) | 考えがまとまっていない相談、企画 | Gemma 4 26B | 通常会話はローカル。複雑な依頼とWeb検索時だけ昇格 |
いずれもOllamaで動かしています。昇格先は、すでに契約しているChatGPT(Codex)の枠内です。使った分だけ課金されるAPIは追加していません。
上の表が、このシステムの設計そのものです。
3つを分けた本当の理由は、タスクによって必要なモデルの大きさが違い、外部に出すべき境界も違うからでした。予定を読み上げるだけの用事に大きいモデルは要りません。逆に、考えを整理したい相談に小さいモデルを当てると、会話が浅くなって使わなくなります。
設定画面でモデル名を選ばせる作りにすると、結局わたしは切り替えません。面倒だからです。モードに名前と声と色を与えたら、「ラファエル」と呼びかけるだけで、モデルと課金方針がまとめて切り替わるようになりました。
演出は、無駄ではなかった

各モードには、声の高さと話す速さ、画面中央の「知性コア」の色と図形を別々に割り当てています。JARVIS は低い声で落ち着いた青、RAPHAEL は中高音で金、CIEL は高めでやわらかい紫です。
これは趣味の部分ですが、実用上の効果が1つありました。今どのモードで動いているかを、画面を見なくても声で判別できることです。ローカルの小さいモデルと、契約内の大きいAIでは、返ってくる答えの質が違います。色と声が違えば、「今は軽い方で答えている」と分かった上で読めます。
音声での切り替えにも対応しました。名前を呼びかける言い方を何通りか登録してあり、「〜モード」「〜に切り替えて」のような語尾の揺れも受け付けます。ここはAIの推測に任せず、決められた表記のパターンとして実装しています。開発ログ #2 で家電操作を固定ルールに寄せたのと同じ考え方です。
名前を借りた作品のこと
解析役と対話役の名前は、『転生したらスライムだった件』から取りました。どちらも作中で「考えを補助する存在」として登場する名前で、自分が作ろうとしていたものと役割の連想が近かったからです。実行役の JARVIS をアイアンマンから取ったのも同じ理由です。
わたしはこの作品をラノベ・コミック・アニメのいずれも読んで(観て)います。わたしが読んだ・観た範囲では、ラノベは設定の説明が細かく、コミックは展開が追いやすく、アニメは映像と音の印象が強い、という感じ方でした。
※上記はAmazonアソシエイトのリンクです。紹介しているのは実際に読んだ・観たものだけで、作品の内容や画像は掲載していません(アフィリエイトについて)。
従量課金を増やさないための線引き
このプロジェクトの制約は「月額契約の中で完結させる。使った分だけ課金されるAPIは増やさない」です。3モードは、その制約を守るための実装でもあります。
自動テストで確認している挙動を、いくつか挙げます。
- CIEL に「少し相談したい」と話しかけた場合 → ローカルのまま処理する
- RAPHAEL に「今日の最新ニュースを検索して」と頼んだ場合 → 契約内のAIへ昇格する
- 手元の仕組みが既にニュースを取得できている場合 → 昇格せず、ローカルで答える
JARVIS は自動判定では昇格しません。軽い用事を確実にローカルで済ませる枠として固定しています。
3つ目が、この設計でいちばん効いています。「最新情報だから外部に出す」ではなく、「手元に答えが無いときだけ外部に出す」にすると、昇格の回数はかなり減ります。
分かったこと
人格を作ったつもりで、実際に作っていたのはルーターでした。
AIの使い分けを「モデル名」や「エンジン設定」として持つと、切り替えるのが面倒になって、結局いちばん手近な1つしか使わなくなります。切り替えを名前のある人格という形で持たせると、日常の言葉のまま切り替えられます。中身は同じ条件分岐ですが、使われる頻度が変わりました。
もしローカルLLMを複数入れたまま使い分けられていない方がいたら、モデル選択ではなく「呼び名」を作る方向を試してみてください。モデル選択画面を開く回数が減ります。
使っている環境と機器
この記録の時点で動かしている構成です。
- ローカルLLM: Ollama(Qwen 3.5 9B / Gemma 4 12B / Gemma 4 26B を用途別に使用)
- 昇格先: 既に契約しているAIサービスの枠内のみ。従量課金APIは追加していない
- 音声: ローカルで動作する日本語音声合成。文単位で生成しながら読み上げ
- 家電: Nature Remo 3(Remo-1W3)
家電まわりで実測できたのは、温度・湿度・照度の3つの取得と、テレビ専用APIへ電源信号を1回送ってAPIに受け付けられたところまでです。汎用の赤外線信号ではテレビが反応せず、専用の経路を追加して直しました。赤外線は一方向のため、テレビ本体が実際に消えたかはE.D.E.N.側から確認できていません。消音・音量・チャンネル・入力切替はボタンを表示できた段階で、送信の実測はこれからです。経緯は 開発ログ #2 に書いています。
スマートリモコン側は、センサー値が取れる機種でないと環境の記録ができないため、ここは機種差が出ます。
※上記はAmazonアソシエイトのリンクです。紹介しているのは実際に使っている機器だけで、実物の写真は掲載していません(アフィリエイトについて)。
次にやること
予定とタスクの連携を、個人情報を伏せた形で整理します。複数アカウントの予定を1画面へまとめる部分は動いていますが、記事にできる形にはまだなっていません。
自分専用のAIに名前を付けている方は、何と呼んでいますか。使い分けの基準があるなら、コメントで教えていただけると参考になります。
このシリーズの記事:
設計をどう判断したかという話は、noteにも分けて書いています。
- note: 「テレビを消して」が通じなかった。わたし専用AIを生活につなぐまでの実装記録(note・有料980円)

コメントを残す