E.D.E.N.開発ログ #3|Ollamaの3つのモデルを「人格」で切り替えたら、モデル選択画面を開かなくなった

E.D.E.N.の3つのモード。JARVIS・RAPHAEL・CIELと、それぞれが使うローカルLLMの対応表

執筆者:

カテゴリ:

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つを分けた本当の理由は、タスクによって必要なモデルの大きさが違い、外部に出すべき境界も違うからでした。予定を読み上げるだけの用事に大きいモデルは要りません。逆に、考えを整理したい相談に小さいモデルを当てると、会話が浅くなって使わなくなります。

設定画面でモデル名を選ばせる作りにすると、結局わたしは切り替えません。面倒だからです。モードに名前と声と色を与えたら、「ラファエル」と呼びかけるだけで、モデルと課金方針がまとめて切り替わるようになりました。

演出は、無駄ではなかった

E.D.E.N.のRAPHAELモード。左に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にも分けて書いています。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です