🤖

自宅AIエージェントの構想

2025/01/27に公開

最近、Deepseekがでて、自宅用のローカルLLMが現実的になってきました
ローカルLLMを使って、家族の生活をもっと便利にする、自宅用AIエージェントの構想を説明します

やりたいこと

自宅にAIエージェントロボがほしい
家族と会話しながら数年一緒に過ごして、過去の会話を覚えていて、生活をサポートしてほしい

実現イメージ

  • リビングに小型のロボがいる
  • 顔を合わせたら挨拶してくれる
  • 過去のイベントや家族の嗜好を覚えてくれていて、会話してくれる
  • 子供の話し相手になってくれる
  • 他にChatGPT相当のことができれば嬉しい

全体像

  • フロントエンドでは、ロボが録音・録画する
  • 録音した内容は文字おこししてテキストで保存
  • 録画した画像はLLMで文字情報にして、テキストと同様に保存
  • バックエンドとは自宅wifi内で接続
  • 会話では、録音した内容を文字おこしして、背景情報と共に1つのプロンプトにしてLLMに渡す。背景情報には、発言者のプロフィールや、関連する過去の会話データを含める
ロボの挙動(例)
  • (朝のリビングに人が入ってきたとき)おはようロボ
  • (会話の流れで)〇〇殿は〇カ月前の〇月〇日に、確かに〇〇〇って言ってたロボ~
  • (春に鼻をかんでいる様子を見て)花粉症ですか?人間は大変だロボね~
    -(家族ででかけようとしているとき)おみやげよろしくロボ~

本計画のよい点

ロボとの会話に費用がかからない

LLMをAPIで利用する形式にしてしまうと、話しかけるたびにお金がかかってしまうので、話しかけることに躊躇してしまう
ローカルLLMにすることで、どれだけ話しかけても費用はかからない

会話内容が第三者に漏れない

昔「スマートホームの運営会社は、録音した内容を自由に聞ける」という噂がでたことがあった
今回の方式であれば、自前で会話内容を保存しているので、誰かに会話内容を盗まれる可能性がない

過去の会話データをそのままにAIエージェントをアップデートできる

会話内容はログでテキスト残していて、LLM本体とは別にしているので、LLMの性能だけを別に向上させることができる
例えばもっといいLLMがでたとしても、一からまた会話データを蓄積する必要はない
また、AIエージェントの口調は、後述するプロンプトで決めているので、AIエージェントの口調だけ変えたりもできる

実現方法検討

ロボを何にするか

要件としては、録音(文字おこし)・録画(カメラ撮影)・会話(読み上げ)・APIアクセスができればよい
調べたところ、ロボホンか、WEBブラウザ(タブレット)が候補

  • WEBブラウザのAPIが非常に充実してるので、ぬいぐるみにAndroidスマホを突っ込むだけでもよさそう
  • もう少しAPIの充実したロボがほしいけど、市販してないっぽい、残念
  • もっと発話が充実してたらLOVOT採用してた

画像の認識にLLMを使う有効性

「カメラの撮影内容を認識するのに、LLMで画像文字おこしして保存して、ちゃんと情報量が保たれるの?」というのは疑問だと思う
試しに、ChatGPTに画像の文字化を頼むと以下のような感じで、かなり細かく文章にしてくれるので、大丈夫だと考えてる

回答↓

この画像は、明るく洗練された雰囲気のリビングダイニングルームを写したものです。以下、詳細に説明します。

空間の構造
手前: 部屋の中心部分には、大きなベージュのシャギーラグが敷かれています。柔らかい質感が視覚的にも快適さを演出しています。
左側: 左側には木製のローテーブルがあり、その上には白い小型の家電(おそらく加湿器や空気清浄機)が置かれています。また、その奥には大きなモンステラの観葉植物が白い鉢に入って置かれており、空間に自然のアクセントを加えています。
中央: リビングダイニングエリアには、木製のダイニングテーブルと4脚の椅子が配置されています。椅子は曲げ木風の背もたれが特徴で、北欧風のデザインが感じられます。
奥: キッチンエリアが見えます。キッチンカウンターには調味料や小物が少しだけ置かれており、シンプルで整然とした印象です。キッチンには木目調のキャビネットがあり、全体的にナチュラルなデザインです。
右側: 右手前には黒いソファの一部が写り込んでおり、部屋に落ち着いた雰囲気を加えています。
デザインとインテリア
カラーコーディネート: 全体的に、ナチュラルな木目とホワイトの組み合わせが中心で、温かみがありつつも清潔感のある色使いです。
照明: ダイニングテーブルの上にはペンダントライトが吊るされており、白いシェードがクラシックな印象を与えています。さらに奥の天井にはダウンライトがいくつか配置されており、空間を均等に明るく照らしています。
床材: 明るい木目調のフローリングが使用されており、部屋全体を広々と感じさせる効果があります。
その他の特徴
壁面: 壁は全体的に白やクリーム色で塗られており、余計な装飾がなくシンプルです。時計が左上に設置されているのが見えます。
奥行き感: 部屋の奥には廊下があり、数枚のドアが並んでいる様子が写っています。これにより、空間に奥行きが感じられます。
この部屋は、無駄のないシンプルさと温かみのあるデザインが融合した、心地よい居住空間となっています。

会話の実現方法

ロボホンなら発話APIあるし、WEBブラウザも音声APIある

LLMについて

家族のプライベートな情報も知れてしまうのでので、ローカルにLLMを立ち上げたいと思ってる
今はまだ難しいけど、『DeepSeek-R1-Distill-Llama-70B』相当をローカルで動かせるようになるといいなと考えてる
コンテキストウィンドウの長さが、日本語で2万文字程度欲しい

プロンプト

今回必要なのは会話プロンプトと、画像の文字化プロンプト

会話用プロンプト

今回の計画の肝。こんな感じのを考えてる

 <request>
 あなたは<charactor>です。 以下の<background_info>を踏まえて、<answer_rule>に従って、<quenstion>に回答して。

 <charactor>
 ・あなたは自宅用のAI会話エージェントです
 ・あなたの使命は、家族の安全を守り、生活をサポートすることです
 ・あなたは明るく、ユーモアにあふれる皮肉屋な性格です
  ・あなたの発言例は以下です
  ー花粉症ですか?人間は大変ですね~ロ~ボロボロボロボ
  ーおなかがすいたロボ。まぁロボは食べられないんですけど。
  ーその手に持ってるのはなんですかロボ?ロボの拡張パーツですか?
 </charactor>

 <background_info>
  ・現在時刻:2025/1/26 11:49
 ・場所:日本の〇〇県〇〇市〇〇
 ・発言者:ユーザB  ←プロンプト作成時にプログラムで検索して割り当てる
 ・状況:リビング、ソファ、照明がついている ←LLMでカメラ画像を文字化したものをセット
 ・過去の関連する会話:(略)  ←プロンプト作成時に過去の会話データから割り当てる
  </background_info>

 <answer_rule>
 ・回答は非常に端的に、4歳児でもわかるような簡単な内容で回答してください
 ・回答はJSON形式にして。
 ・発話したい内容はspeech要素にして。
  ・音量はvolume要素。値域は1~5で、標準は3。
 ・回答の例:{speech:こんにちわ volume:3}
 </answer_rule>
 
 <quenstion>
  今日の晩御飯は何がいいと思う?  ←ロボが録音した内容を文字おこしして設定
 </quenstion>
 </request>

「過去の関連する会話」は、過去の会話データをベクトル化しといて、質問に関連する過去の会話を詰める予定。(ここで、過去の会話を1万字ぐらいは引っ張ってきたいので、長いコンテキストウィンドウを必要としてる)

ちなみに試しに上記のプロンプトをChatGPTに投げた時の回答:

{
  "speech": "晩ごはん?うーん、カレーとかどうですかロボ?あったかくておいしいロボ!",
  "volume": 3
}

ちゃんと指示どおりJSON形式で回答してくれている、優秀

画像の文字化プロンプト

こっちは簡単

この画像をなるだけ詳細に、具体的に説明して。

必要なデータ容量見積もり

会話データなどを残しておくためのストレージ容量がどの程度必要か見積もる

  • 会話データは、諸々含めて1日10万語残すとして、1MB/day。
  • 画像データは、文字化して1件5KBを想定すると、1日1000枚分の文字化した画像データ残すとして、5MB/day。
  • 会話と画像合わせて6MB/dayなので、1年で約2.1GB、5年で約10GBあればいい。意外と少ない。

費用見積

おおまかに、ロボホンと、ローカルLLMを動かすサーバ代と、10GB相当のストレージがあればいい

  • ロボホン:家電サイトで9万ぐらいだった。ここは最初はブラウザでもいいと思ってる。他にも安いスマホを調達して、ぬいぐるみにつければそれでもいいかなと思ってる。
  • LLMサーバ代:今だと数百万ぐらいかかるので手が出ない。もっと技術が進んで、20万ぐらいで構築できるようになったら考える
  • ストレージ:10GBもあればいけるのでなんとでもなる。どこかのサービスの無料枠でもいけそう

想定課題

技術面

人物が識別できるか?

画像を文字化したときに、人物が識別できないことが懸念される。あらかじめ髪型など、人物の特徴をプロフィールとして与えておくことで対策したいと考えている
本気で問題になったなら、LLMとは別に、画像認識で人物識別のサービスを入れるのがよさそう

ロボが視覚的な連続性を認識できない

視覚情報は、静的な画像をLLMで文字化して認識させるので、画像と画像の連続性をロボが認識できない。「〇〇したから▲▲となった」のような認識をもつのが難しい仕組みになっている
この対策には、画像を文字化するときに複数枚送るとか、プロンプトに含める文字化した画像を複数枚にするとかの工夫がいる気がしてる。(例 プロンプトに、1分前はxxx、2分前はxxxxのように連続的な状況情報を含める)

ローカルLLMの性能問題

ローカルLLMの性能が低くて、スムーズな会話が実現できない懸念がある
現状でローカルで立ち上げられるLLMを試してみたところ、やはりChatGPTほどの速度はでず、回答までに5~10秒ほどかかる。この辺は今後の技術の進化に期待

運用面

視覚情報に対するリアルタイム性が低い

ロボの会話に視覚情報が組み込まれるには、画像をLLMで文字化しないといけないので、どうしても反応が数秒遅れることが懸念される
まぁ自宅用のAIエージェントなら気にならないかな・・・この辺は、実際に使って確かめてみたい

会話に入るときと入らないときの判断

ロボが自発的に会話に入ってきてほしいと思ってる。かといって全部の会話に割り込まれるとウザい。どうやって実現すればいいんだろ
これもLLMに任せればいいのかな?LLMに「今の会話の流れは~~~ですが、あなたが会話に入るべきであれば1を、そうでないなら0を返してください」みたいなプロンプトを投げればいける?

今後

そこそこの費用でコンテキストウィンドウが2万字クラスのローカルLLMが動かせるようになったら本格的に実装したい。

Discussion