目次
この記事について
本記事で扱うAIエージェントは、RaspberryPi Zero 2 WHを端末として用いる音声対話型のシステムで、
処理の中心はAWS Lightsail上のサーバーで行っています。
端末には録音、再生、画面表示の機能のみを任せます。
文字起こし、応答、データベースを含む外部サービスとの連携はAWS側で処理する構成です。
本記事では、ハードウェア構成や音声入力から応答までの経路、実際にできること、設計原則をひとつの流れで説明していきます。
本文中で詳しく説明しない用語は、補足:本文に登場する技術で簡潔に紹介します。
2026年10月時点の更新
会話の応答にはGemini、文字起こしにはGroq Whisperを使います。
Web検索やファイル操作など、道具が必要な依頼はOpenClawへ渡すようにしています。
第一部:RaspberryPi Zero 2 WHのハードウェア構成
あらすじ
初めて手にしたRaspberryPiといえば、私にとっては少し昔の話です。
興味本位でRaspberryPi 4を購入しましたが、予算を抑えるためにメモリ2GBのモデルを選びました。
そのため、Webカメラとニューラルネットワークを組み合わせた個体認識で遊ぶ程度に留まり、
実用的な活用と呼べるところまでは、なかなか到達できていませんでした。
とはいえ、「Pi欲」は依然として持ち続けていました。
そこで今回は、RaspberryPi 4よりさらに小さなRaspberryPi Zero 2 WHを手に入れ、
これを使って何かを作ってみることにしました。
この記事は、その試行錯誤をまとめた備忘録です。
作成に至った動機
一人暮らしをしていると、自分自身のことでも物忘れが増えるものです。
- 自分の年齢に、一瞬確信が持てなくなる
- やろうと思っていたこと自体を忘れる
- 買い物リストを作ろうとしても、「リストに追加すること」自体を忘れる
そんなとき、ふと思い浮かんだのがIron Manでした。作中では、主人公のトニー・スタークが、パワードスーツ内に搭載されたAIエージェントJ.A.R.V.I.S.と対話しながら戦闘を進めていきます。
「戦闘はしなくても、日常生活をこのAIエージェントに任せてしまえばよいのではないか」——そう考えたのが、AIエージェントを作り始めたきっかけです。
そこで今回は、RaspberryPiをベースにしたAIエージェントを自作し、RaspberryPi Zero 2 WHの限界に挑みます。
今回のゴール
- SFチックなHUD(ヘッドアップディスプレイ)を画面に実装する
- PTT(Push To Talk)で話しかけた言葉をプロンプトとして、音声認識、AIによる応答文の生成、合成音声による発話までの一連の流れを実現する
- 日常会話から天気を尋ねたり、スマート家電を操作したりできる外部APIを搭載する
- 会話の中で重要だと判断した情報(体調や個人に関する情報)をデータベースへ保存し後の回答に活用することで、食生活や体調管理に役立てる
- 男心くすぐるハイテクアイテムを完成させる
この記事ではどのようなハードウェアで動いているのかを中心に、使用している技術にも軽く触れながら紹介します。
結論から言うと、今回作成したAIエージェントは自分の想像をはるかに上回る、便利なものとなりました。
RaspberryPi調理レシピ
まずはハードウェアから紹介します。基本的なパーツをすべて合わせても、
(定価で購入できれば)1万円台に収まる構成です。
1. RaspberryPi Zero 2 WH
順番は前後しますが、頭脳となる本体はRaspberryPi Zero 2 WHです。
Zero 2は名刺よりも小さなシングルボードコンピューターで、クアッドコアのCortex-A53を搭載しています。
| 項目 | スペック |
|---|---|
| CPU | クアッドコア Arm Cortex-A53 1GHz |
| メモリ | 512MB |
| 無線 | Wi-Fi(2.4GHz) / Bluetooth |
| サイズ | 65mm × 30mm |
| 価格 | 4,000円前後(定価) |
注目してほしいのは、メモリが512MBである点です。ここが今回の設計を決定づけました。
...とは言えどメモリは512MBです。
今どきのスマートフォンの1/10以下ともいえる容量なので、
当然音声認識モデルを載せたり、ローカルでLLMを動かしたりするには正直なところ限界があります。
しかしながら同サイズのシングルボードコンピューターと比較すると512MBでも大きな部類です。
しかし今回この頭脳に任せる処理はマイクで拾った音を送り合成音声を再生する程度の役割に絞っています。
この構成なら、非力なスペックでも十分に動作すると見込みました。
実際に重い処理をこなしているのはクラウド側のAPIです。
Pi自体は「送って、受け取って、鳴らす」窓口役を担います。
言い換えるなら、今回Piに任せるのは大手企業ビルの受付係です。
会社を動かすのは重役の仕事ですが、外部からのアポイントメントを受け取り、内部へ取り次ぐ受付も会社には必要不可欠な役割です。
RaspberryPi Zero 2 WHのサイズはクレジットカードよりかなり小さいため、机の上に置いても邪魔になりません。
RaspberryPi Zero 2には無線LAN内蔵のW、またはピンヘッダー付きのWHがあり、
WHを選べばはんだ付けをせず、そのままWi-Fiに接続して使えます。
画像:今回は公式在庫がなかったため、Amazonのプレミアム価格で購入しました。(値段は言いたくありません...。)
袋が紙袋に入った状態で発送されてきたためメモリの不良やピンの破損がないか確認するまで、内心ひやひやしていました。
2. Whisplay HAT
Whisplay HATは、PiSugar社が販売しているHAT(拡張基板)です。
HAT(Hardware Attached on Top)はRaspberryPiの上に重ねて挿す拡張ボードの規格名です。
画像:液晶は割れやすいようなので、透明の下敷きを切り取った簡易的な保護フィルムをかぶせて使用します。
このHATが今回の要となるパーツです。
| 機能 | 詳細 |
|---|---|
| 液晶 | ST7789P3、240×280、SPI接続。1.69インチの小型LCDで、応答やアニメーションを表示 |
| 物理ボタン | PTT(押している間だけ録音する)のトリガー |
| マイク・スピーカー | WM8960オーディオコーデックにより、録音・再生を実施 |
| RGB LED | 状態表示用。処理中は光り方が変わる。 |
通常のRaspberryPiでは、別途配線やマイク、スピーカー、ボタンが必要です。
つまりこのWhisplay HATには、今回音声アシスタントを作るために必要な機能が1枚にまとまっています。
RaspberryPi Zero 2 WHであればピンを挿し込むだけで使えます。
とはいえ、片側が浮いた状態で、まっすぐピンに挿さなければなりません。
崩れかけたショートケーキにイチゴを乗せるくらい、慎重な作業です。
このWhisplay HATをRaspberryPi 4、5やZeroシリーズと組み合わせることで、持ち運び可能なスマートガジェットを比較的簡単に自作できます。
3. PiSugar 3
PiSugarは、同じくPiSugar社が販売しているRaspberryPi Zero専用のバッテリーHATです。裏面に磁石で貼り付くタイプで、これを取り付けるとRaspberryPi Zero 2 WHは電源ケーブルの足枷から解放されます。
画像:RaspberryPi Zero 2 WHの基板とPiSugar 3を重ねてねじ止めした状態。マグネットは意識しなくても強くくっつきます。
PiSugarが優れている点として単なるモバイルバッテリーではなく、残量と充電状態をI2C経由でソフトウェアから読み取れるところです。
これにより、AIエージェントが次のような動作を行えます。
- 「バッテリーが少なくなってきました」と通知する
- 充電開始や満充電を検知して知らせる
- 残量が危険域に入ったら、安全にシャットダウンする
これがなくても想定している機能自体は実現できます。
しかし、場所を選ばない「いつでも一緒☆おでかけAIエージェント」として運用していく以上、欠かせないパーツです。
ケースについて
画像:左からWhisplay HAT(画面・ボタン・マイク・スピーカー)、RaspberryPi Zero 2 WH(本体)、PiSugar 3(バッテリー)
この3パーツで基本構成は完成します。
しかしこのままでは基板や配線がむき出しのため、持ち運ぶには精神衛生上よろしくありません。
画像:RaspberryPi Zero 2 WH、Whisplay HAT、PiSugar 3を重ねた状態。
これを外に持ち出したら、帰宅する頃には手汗まみれの木っ端微塵になること請け合い。
...そこで色々とケースを探していたところ、PiSugar社がケースのデータを配布していることを知りました。
参考:PiSugar公式リポジトリ(ケースのSTLファイル)
このSTLデータを3Dプリントすれば、今回の構成にジャストフィットするケースを作れます。
しかし、3Dプリンターは数年前の引っ越しを機に手放していたため、止むおえず3Dプリントサービスを探すことにしました。
今回はDMMの3Dプリントサービスを利用します。
このサービスでは、STLファイルをアップロードするだけで、ナイロンやシリコン、レジンから金属まで、さまざまな素材でのプリントを代行してくれます。
素材にはPA12GBという、ナイロンにガラスビーズを練り込んだ比較的安価で強度のあるものを選びました。
聞き慣れない名前ですがブレーキチューブや工業用ホース、スポーツシューズのソールなどにも使われている素材のようです。
価格については、小さいパーツなのでそこまでかからないだろうと高をくくっていました。しかし、shell-1が5,019円、shell-2が2,595円で、合計7,614円となりました。
とはいえ業務用の高性能3Dプリンターでミスなく仕上げてもらえることを考えると、妥当な金額だと思います。
これから面倒を見てもらうAIエージェントのため、迷わず注文しました。
こちらが、到着した3Dプリント製ケース(PA12GB)です。
画像:固定用のねじは付属していないため、別途用意する必要があります。
GitHub上には「M2×3 countersunk screw × 4」と記載されていますが、M2では空回りしたため、M2.6×3を4本用意しました。
色は黒がよかったのですが、オプションの指定をし忘れたため、素材本来の色であるグレーになりました。積層痕も目立ちにくく、指で押してもたわみにくい頑丈な仕上がりです。
触ったときの質感は滑らかなコンクリートのようで、平面でも仄かにざらつきを感じます。
余談ですが各パーツを注文してから到着するまでには、次の日数がかかりました。
- Pi Zero 2 WH・PiSugar 3:注文の翌日に到着(Amazon.co.jpで購入)
- 3Dプリント製ケース:約1週間(DMMで注文・購入)
- Whisplay HAT:約2週間(海外発送、PiSugarで購入)
これらを無事に組み合わせることができたので、ハードウェア構成編は以上です。
次は、この小さなAIエージェントに組み込んだアーキテクチャについて解説します。
第二部:音声処理と応答経路
全体の流れ
この図は、マイク入力から応答までの「どこで何をするか」を示したものです。
小さなRaspberryPiは録音と表示を担当し、重い処理や外部ツールはAWS側で受け持ちます。
Jev:外部処理の必要性を見分ける
Jevは、回答文を作るためのAIではありません。
このAIエージェントでは、音声を文字にしたあとに「この依頼は外部の情報や道具を使う必要があるか」を確率で見分ける補助役としての役割をJevに与えます。
例えば雑談や一般的な質問は会話の経路へ進みます。
Web検索、ファイル操作、記憶の参照などが必要そうな依頼は、Jevの判定も参考にし、OpenClawやLangChainへ振り分ける方針です。
重要なのは、Jevが既存の判定を置き換えない点です。
Jevに接続できない場合や時間切れの場合は、従来のローカル判定へ戻ります。
そのため、Jevの不調だけで会話全体が止まらない設計です。
Jevについての詳しい説明は、別途掲載している記事
Jevとは?文章生成AIとは違う「判定に強いAI」を解説 を参照してください。
今回作成するAIエージェントは、依頼の種類によって経路を分けます。
すべての発話を同じモデルへ送る構成ではありません。
- Piが音声を受け取る
- AWSが音声形式を揃える
- Groq Whisperで文字起こしする
- 依頼の種類を判定する
- 直接処理、LangChain、Gemini、OpenClawへ振り分ける
- 結果を音声と画面で返す
この分割によって、短い質問への応答を速くできます。
外部ツールが不要な依頼も、余計な処理を通りません。
入力処理
ウェイクワード (例:「ア⚪︎クサ」とか「Hey, S⚪︎ri」のあれ」)
RaspberryPiはSnowboyの個人モデルで指定した文言を検知し、検知イベントだけをAWSへ送ります。
待機中の音声を常時アップロードすることはありません。
起動後は効果音を返して録音へ移行、効果音と相槌の再生状態も管理します。
音声再生中に同じ音を再検知しないよう、短い停止時間を設けています。
音声形式
AIエージェントの録音はWAV、ブラウザのPTTはWebM形式になることもある仕様です。
サーバーは受信した音声をWAVへ変換し使用します。
入力形式を揃えることで、後続処理を共通化できるため音声形式とMIMEタイプの不一致による失敗も防止可能です。
文字起こし
文字起こしは速度を優先として無料のGroqのWhisperを採用。
結果には本文だけでなく、自信度と無音の確率も含めます。
聞き取れなかった場合は、回答せず聞き返します。
応答経路の分担
| 依頼 | 経路 |
|---|---|
| 時刻、天気、現在地、地震情報 | 直接応答 |
| カレンダー、家電、メモ | LangChain |
| 雑談、一般的な質問 | Gemini |
| Web検索、ファイル操作、記憶 | OpenClaw |
| 議事録、ボイスメモ | 専用の連続録音処理 |
挨拶程度の直接答えられる依頼は、応答時間短縮のためモデルを経由しません。
カレンダーやSwitchBotは、軽量な処理へ先に渡します。
道具を組み合わせる依頼だけをOpenClawへ渡します。
OpenClaw
OpenClawは、AIが複数の道具を使いながら依頼を進めるための実行環境です。単に文章を返すだけではなく、検索、ファイル操作、記憶の参照、開発作業のように、手順を伴う依頼を受け持ちます。
このAIエージェントでは、短い質問や決まった操作を先に軽量な経路で処理します。OpenClawへ渡すのは、複数の情報源や道具を組み合わせる必要がある場合です。開発・改修の依頼では、OpenClawからCodex CLIへつなぎ、作業ブランチ、テスト、レビューの確認手順を通します。
人間が挨拶には即答し、調べものには記憶やノートを使うように、依頼の内容に応じて処理経路を使い分けます。
記憶の扱い
会話が終わるたび、AIエージェントは、好み、体調、家族、習慣など、後で思い出す価値がある内容を抽出します。そのうえで保存するかを判断し、必要な情報だけを記憶DBへ記録します。
ここが、個人用AIエージェントとして特に大切にした部分です。
保存先はSQLiteです。予定や一度きりの約束は、記憶ではなくカレンダーで管理する方針にしています。
AIエージェントが会話の内容を保存するかの判断と、次の会話で必要な記憶だけを使う流れ
次の会話では、質問に関係する記憶だけを検索します。
キーワードの一致だけでなく、意味が近い内容も探すため、「好物」と「好きな食べ物」のような言い換えにも対応できます。
見つかった記憶は応答の文脈として使いますが、関係のない記憶を毎回会話へ持ち出すことはありません。
同じ言葉を含む別の記憶まで消さないための仕組みとして記憶には番号を付けます。
番号を指定すれば対象の1件だけを取り消せます。
モデルの使い分け
会話の応答はGeminiが中心です。
文字起こしの中心はGroq Whisperです。
コード作成と自己修復は、ChatGPTのサブスクリプションでログインしたCodex CLIを使います。
Codex CLIが利用制限に達した場合は、AiderとGemini APIへ切り替える構成(フォールバック)です。
OpenClawの応答経路には、Gemini系が使えない場合の別フォールバックも残しています。
ただし、あくまでもコード作成の主経路はCodex CLIです。
(2026年10月現在、メインで契約しているのがChatGPT Plusだからという個人的な理由です。)
応答速度について
口頭での指示〜回答を発声して返すまでの応答速度についてはリアルタイムで会話できるAIエージェントであることを前提としているため、少しでも早く返答を返すことが重要になるので以下の様な細工を施しています。
- 文字起こしをGroq Whisperへ分離(音声をGeminiへ直接送らず、Groqで高速に文字起こし。)→ 実測約0.27秒
- 直接応答経路
時刻・天気・定型情報などはOpenClawを経由せず、その場で返す。 - OpenClawの軽量モデル化
Web検索や記憶操作などが必要な場合も、まずGemini Flash Liteを使って応答生成を軽量化。 - 単純な依頼のモデル振り分け
短い質問は軽量モデル、複雑な質問は精度重視モデル(Gemini Flash Lite)へ回す。 - ストリーミング読み上げ
回答文面が全文完成してから発声するのではなく、最初の文章ができた時点で文章区切りで音声再生を開始。 - 相槌・効果音で待ち時間を隠す
処理の開始時に効果音や「確認しています」などの相槌を先に返し、無音時間を減らすことで体感時間を軽減。 - 各種キャッシュ
- 過去と同じ雑談への応答
- 会話履歴込みの応答
- メモリ上の先読み
- OpenClawへ行く前のGemini応答再利用
などをキャッシュとして保持しておくことで深い経路には回さず即回答。
- OpenClawへの送信前圧縮
「えーと、」や「あっ、その」などの言い淀みや重複を削り、送信する文量を減らす。
対話の例として「AWS認定Machine Learning Engineer Associateの受験料はいくら?」という口頭プロンプトで確認したところ、
「AWS認定Machine Learning Engineer はAssociateレベルであれば150ドル 日本円の税込で約22,000円となります。」との回答があり、プロンプトの聞き取り終了〜回答表示まで3秒弱でした。
これくらいであれば人間との会話と大差のない間であると考えます。
今回のAIエージェントは処理を細かく分けて小さな端末を活用する設計です。
RaspberryPiは入力と表示を担当します。
AWSは音声認識、応答、外部サービス連携を担当します。
モデルを増やすことだけが解決策ではありません。
依頼ごとに適切な経路を選ぶことが、速度と安定性を大きく左右します。
最後に第一部と第二部で構成したAIエージェントを、実際の生活でどう使うかを紹介します。
第三部:統合後の機能・設計原則
A.I.R.I.Sの命名
ここまで「AIエージェント」として紹介してきたシステムです。
ここからは完成したAIエージェントを私が命名した
A.I.R.I.S(Artificial Intelligence Responsive Interaction and Solution) と呼びます。
A.I.R.I.Sは「対話型自律解決人工知能」という意味を持つ名称ですが本当の理由はなんかカッコいいからです。
日常のアシスタント
「今日の天気は」と聞けば、直接応答で返します。
「次の電車は」と聞けば、Web検索へ回す仕組みです。
「明日の予定を確認して」と言えば、連携したGoogleカレンダーを確認して答えます。
買い物リスト、メモ、体調の記録も音声で扱えます。
保存した記憶を応答へ活用するのは、関連する話題に限る方針です。
SwitchBotに接続すれば、対応する家電も操作可能なため電気も消せます。
バッテリーの状態や地震速報も、条件に応じて知らせてくれます。
会議と調査
「議事録を取って」と言うと、連続録音の開始です。
録音の終了後に文字起こしと要約を行い、最後にNotionへページを作成し記録として残す流れです。
調査の深さも指定できます。短い確認は音声で返し、記録が必要な調査はNotionへ出力します。
深掘り調査では、複数の観点から検索し、レポートにまとめる流れです。
自分で育つ開発道具
A.I.R.I.Sは、自分自身の改修も扱う開発道具です。
例えば「⚪︎⚪︎の通知機能を追加して」と頼むと、自身の現在のコードを調べて変更案を作ります。
通常の変更手順は、次のとおりです。
- Gitの新しいブランチで変更する
- 構文チェックとテストを行う
- Discordへ変更内容を送る
- 利用者が差分を確認する
- 承認後にmainへマージする
- AWSとPiへ反映する
音声で依頼できても、実機への反映は利用者の承認後です。
承認前の変更を実機へ反映することはありません。
修正後のプルリクで変更差分を確認できるため、会話だけで意図しない動作に変わってしまうこともありません。
現在の制約
-
常時ウェイクワード検知は、CPUとバッテリー消費が発生します。
バッテリー持ちを優先する場合は、設定で無効化が可能です。 -
音声認識や外部サービスには、ネットワークと利用上限の影響があります。
応答モデルが使えない時に備えたフォールバックを用意済みです。
ただし、すべての失敗を隠して動かすのではなく、原因をログへ残します。 -
OpenClawの応答経路には、Gemini系が使えない場合の別モデルが残っています。
コード作成と自己修復の主経路は、ChatGPTのサブスクリプションで使うCodex CLIです。 -
PiSugar 3のバッテリー持ちはすこぶる悪いです。現状の構成では半日持ちません。
全体のまとめ
本記事ではRaspberryPi Zero 2 WHを端末にした音声対話型のAIエージェントを、ハードウェア、処理経路、運用設計の順で紹介しました。
構成の要点
- RaspberryPiは録音、再生、画面表示、ウェイクワード検知を担う
- AWSは文字起こし、応答生成、外部サービスとの連携を担う
- 依頼の内容に応じて、直接応答、LangChain、Gemini、OpenClaw、Codex CLIへ経路を分ける
この役割分担により、小さな端末へ無理に重い処理を載せず、日常の質問には速く、道具が必要な依頼には必要な処理だけを使えます。
運用で大切にしたこと
音声認識や外部サービスには、聞き間違い、通信エラー、利用上限といった不確実さがあります。そのため、文字起こしの自信度を確認し、応答経路にはフォールバックを用意し、開発の変更にはGitの差分確認と承認を挟みます。
第三部で命名したA.I.R.I.Sは、生活の操作、記録、調査、開発を一つの端末へまとめつつ、使いながら安全に育てていくためのAIエージェントです。
小さなRaspberryPiとクラウドの役割を分け、ログと実測を見ながら改善を続けることが、この構成の価値だと考えています。
AIエージェントの作成に関するまとめ
今回の構成は、RaspberryPiを用いた小型AIエージェントの開発初号機です。
制約はありますが、目指した機能を実現でき、初号機として十分に満足しています。
まだ改善点はありますが、今後のAIエージェント開発の基盤となる、良い学習の機会になりました。
補足:本文に登場する技術
Groq Whisper
Groq Whisperは、音声データを文字へ変換するために使う音声認識モデルです。本記事の構成ではAWS側で音声を受け取り、発話内容を文字起こししてから、依頼の種類に応じた経路へ渡します。
LangChain
LangChainは、言語モデルと外部の道具を組み合わせるための仕組みです。このAIエージェントでは、カレンダー、家電、メモのように処理内容が比較的決まっている依頼を扱います。
Aider
Aiderは、ソースコードの変更を支援するためのコーディングエージェントです。本記事ではCodex CLIが使えない場合の代替経路として位置付けています。実機への反映前には、Gitの差分確認と承認を行います。
Gemini
Geminiは、会話や一般的な質問への応答を主に担当する生成AIです。外部の道具を必要としない依頼は、まずこの会話経路で扱います。
Codex CLI
Codex CLIは、開発・改修の依頼でコード作成と検証を行うためのコマンドラインツールです。変更は作業ブランチで行い、テストとレビューを通してから反映します。
Jev
Jevは、回答文を作る役ではなく、外部情報や道具が必要そうかを補助的に見分ける役です。Jevへ接続できない場合は従来のローカル判定へ戻るため、この判定だけで会話全体が止まることはありません。
AWS Lightsail
AWS Lightsailは、AIエージェントのサーバーを動かすクラウド環境です。本記事の構成では、RaspberryPiから届いた音声を受け取り、文字起こし、応答、外部サービスとの連携を担います。
Snowboy
Snowboyは、指定した呼びかけを検知するウェイクワード用の仕組みです。待機中の音声を常時クラウドへ送るのではなく、RaspberryPi上で検知してから録音へ進めます。