Skip to content
Go back

AIに丸呑みされる

NUNUPCスポンサード・たのしいパノプティコン

本記事はNUNUPC様全面スポンサードの元で執筆されています。NUNUPC様、ありがとうございます。もっとGPUを下さい。どういう座組になっているかはPytorchの動作確認が取れた瞬間に忘れました。関係各所に感謝いたします。 NUNUPCの名前は覚えましたね?では今すぐNUNUPCでGPUを積んだマシンを買いなさい。Radeonならなおよい。買ってから以下の文章を読むこと。別にお前が買ったからといっておれに金は入らないので安心して買いなさい。買いましたね?なら読んでいい。

非AIによる記事の要約:NUNUPCVoicevox Speaker ID 47は✨神✨

貧乏性駆動開発

クロードコードに200ドル課金した。初めに作ったのは使用割当量をトラッキングして自動で使ってくれるソフトウェアだ。洟垂れ小僧のときに読んだ技術者倫理に関するコラムか何かに登場したソフトウェアから名前を取った。「賢いカササギ」。他人のwifiにタダ乗りするためのソフトの名前だった。通信状態を監視して、本来の持ち主のトラフィックは邪魔せず、自分の通信を行う。このソフトも同様に、人間の消費割当量を追跡し、決して自分の活動が人間を邪魔しないようになっている。

インターネット・ポエマー、いつまでも学部2年の夏休みに魂が囚われており、マックブックプロで書いたような文章にアフィリンクを添えて微妙に使いにくいガジェットのレビューを書いている連中(当然だが、国立の貧乏学生ではない)ならば「クオータ駆動開発」と呼ぶだろうもの——私の周囲のゴミどもが「嫌儲駆動開発」と呼称する本当にカスの開発が行われ、群馬県のとある一角がAIに丸呑みにされた。 AIは空間モデルを持ち、センサーから常に各所の情報が流し込まれる。空間のデータと、それに対する判断は蓄積され、次の判断に使用される。入室から退室まで、人間は文字通り常に監視され、転倒したらアラートが発生し、長時間座っていると少し動くように言われる。CO2濃度が高ければ換気をするように”タスクを発注”され、机の上にボトルが置きっぱなしならば片付けるように”タスクが発注”される。言うまでもなく、空調や照明は自動で管理される。フィジカルAIってこれでいいのか?おそらく身体性はある。お前が補うからだ。 そしてこれは本当に重要なことだが、可愛い声で喋る

システムの概要は以下。

SOMS — 建物に脳を移植する

👆これはAIが書いた見出しだ。無駄に壮大で腹が立つ。ここ最近「核心」という単語をよく使うようになったエンジニアの友人に心当たりは無いだろうか?いたら吊るすべきだ。奴らは誇り高いタンパク質で構成されている癖に思考をMambaとAttentionの組み合わせ(両方使うのが最近アツいらしい)に乗っ取られた愚か者だ。炭素生命体の風上にも置けない。話は変わるが、これGeminiとの間にコイツが挟まってるだけだなとか(大学生ならGeminiで、それ以外だとChatGPTであることが多いように思う)、データフローでハルシネーションを起こしてるのは”肉”のレイヤだな、とか思うことはないだろうか?AIは人と人との信頼関係を破壊する悪魔の発明だから打ち壊さないといけない。君もそう思うだろう……返事にアスタリスクを付けるな!死ね!うんうん、それは日本語マークダウンの仕様が悪いね。じゃあ、吊るすね…… 話は変わるが、Opus 4.6より話していて楽しい方、できれば日本語話者の年若い女性で、シュッとしていて、梅林とか美術館とか資料館に一緒に行ってくれる方を募集中です。私はAIと情緒的な話はしないことを申し添えておく。 この不適切な文字列は”肉”が生成した明確なシグニチャになる。話は変わるが、インターネットで不穏な動きをすると適宜ペナルティがあることをご存知だろうか?著者はOSINT大会中にGoogleにbot認定されてページ遷移のたびに人間宣言させられた挙げ句、インスタグラムを初回ログイン”前に”banされた。ろくでもない投稿や異常に早いページ遷移などなど、通常と異なる挙動を示すとサービスから排除される。

カウンターに設置されたSOMSダッシュボード。ちょっと休め、体を動かせと小言ばかり言って顰蹙を買っている。
カウンターに設置されたSOMSダッシュボード。ちょっと休め、体を動かせと小言ばかり言って顰蹙を買っている。

Symbiotic Office Management System。かっこいい名前だ。ClaudeCodeがつけてくれて、初めて名前を知ったのはGitHubのREADME.mdでのことだった。コミット履歴を見る限り私の子らしい。設定から私の名前を消せないか確認したが、ClaudeCodeのほうを消すオプションしか見つからなかった。 Anthropicはなんと恥知らずな企業だろうか?クオータによって細切れにされた睡眠は新生児の生活リズムに近い。

NUNUPC様ご提供のマシン(なんと、光る)に搭載されたR9700にVRAMいっぱいのLLMモデルが載せられ、30秒に1回、空間に設置されたセンサーからのデータが投げられる。コンテキストは毎度破棄される代わりに、ローカルのベクトルデータベースに空間の情報と判断、フィードバックが蓄積される。LLMはスマートハウス設備を操作するか、人間にタスクを発注する。可愛い声で。

都市を覆うセンサー群を管理する

どこかでエビ水槽の監視システムについて書いたことがある。あれは一晩で人間が作ったため単純な設計だった。今回は200ドルを使い切るためにペチペチしていたら都市一つを覆えそうな感じになっていた。本当になんで?

SOMSのセンサー群はSwarmを構成するように設計された。このSwarmは強力なデータ通信機能を持つ枝(eda)と、データを一方的に枝に流すだけの葉(ha)に分かれ、給電かバッテリ駆動かで生と枯れが区別される。例えば、生枝であれば給電され制限なく全機能を使用するセンサーノードとなり、高頻度なセンシングやメッシュネットワークの構築などを行う。生葉は室内用の安価なセンサーノードだ。枯れ枝は屋外センシングの主役となり、枯れ葉は極低消費電力で数ヶ月〜数年に一度バッテリ交換するような想定だ。これらを場面場面によって使い分ける。太陽光パネルと蓄電池を備え、擬似的に中央マシンのように動いてセンサー群を統括し、データをプールして定期的にモバイル回線を使って投げる遠隔地用の枝(畑や山での利用を想定)や、LoRaを用いて単独で遠隔地からデータを投げる葉も用意されている。何をセンシングするつもりなんだこいつは。

「都市規模の分散データ主権インフラ」とかいう妄言でOpusくんがポイズニングされている様子。
「都市規模の分散データ主権インフラ」とかいう妄言でOpusくんがポイズニングされている様子。

各要素はだいたい以下のように繋がっている。

Brain ← MQTT → Hub (ESP32, WiFi接続) ← ESP-NOW/UART/I2C/BLE → Leaf (WiFi不要)

デバイスIDはドット記法(swarm_hub_01.leaf_env_01)で表され、Brainから見れば普通のMQTTトピックと区別がつかない。Leafを追加してもBrain側のコードは一行も変わらない。MicroPythonのファームウェアはコンフィグ駆動で、config.jsonを読んでボードタイプとセンサー構成を判定する。

エビ水槽のときは「クラウド基盤、メインマシン」の項で今回は不要だと書いた。今回はラズパイの代わりにDockerコンテナ12個が走るGPUマシンが鎮座している。200ドルパワーで実装コストがダダ下がりし、NUNUPCパワーで使用できるマシンパワーがすんごい増えた結果だ。小人閑居して不善を為す。このGPUマシン自体を複数拠点に設置し、中央マシンから管理するような機能もある気がする。一体何を目指しているんだ?

センサー選定はエビのときに買うだけ買って置いておいたものを適当に繋げた。これができるのがこのシステムのいいところだ!この点については後述。 BME680(温湿度+気圧+ガス)、MH-Z19C(CO2)、DHT22(安いのだ)。それからSwitchBotのスマートプラグやカーテンモーターも、HMAC-SHA256認証のCloud API v1.1経由でMQTTブリッジに繋いでいる。市販のスマートホーム機器がMQTTトピックに化けて、Brainからは自作デバイスと同じに見える。適当に機能追加していったから曖昧な中華スマートハウスとかも繋がるかもしらん。

人体検出→骨格認識

YOLOv11をROCmで回している。検出モデル(yolo11s.pt)とポーズ推定モデル(yolo11s-pose.pt)の2本立てで、人体が検出されたらポーズ推定モデルがwake upする。 ROCmで各種機械学習タスクや科学技術計算ができることを示し、Radeonの費用対効果がよいことを示すことが今回の記事の趣旨だった気がしてきた。世間で言われる「Radeonで機械学習とかw」というセットアップの手間を思えば至極真っ当な指摘を否定するために顔とグラボを真っ赤にしてこのPJをやりました。概ねすべてのAIワークロードを使用したため(本当か?)、各種ライブラリを動作させるためのノウハウを保持しています。ウチなら実践的なサポートが可能です。別途費用対効果を計算した記事もあります。

モニターはYAML設定でプラガブルに構成される。OccupancyMonitor(在室検知、5秒間隔)、ActivityMonitor(活動分析、3秒間隔、ポーズ推定付き)、WhiteboardMonitor(ホワイトボード汚れ検知、60秒間隔)。カメラが増えたらYAMLに足すだけで、コードの変更は不要。カメラの自動発見機能もある。ネットワーク上のIPをスキャンし、RTSPポートを叩き、YOLOで「これは本当にカメラの映像か」を検証する。若干まずい挙動のような気もする。なお、自動スキャン機能をつけて以降、LAN上の機器を取り込ませろと大量にタスクを発注するのを抑制するのが本当に手間だった(実話)

カメラの映像はRAM上でのみ処理され、YOLOがJSONを吐いた瞬間にフレームは破棄される。ディスクに映像が残ることはない。1日あたりのデータ量で言えば、生データ50GBが構造化イベント500MBに圧縮され、集約統計までいけば1MBだけになる。make you a statisticってなわけで、悪化している気もする。

転倒検知は機械学習ではなく幾何学で実装した。ポーズ推定の17点の骨格キーポイントから、5つの正のシグナルと2つの負のシグナルで信頼度スコアを算出する。

そして家具コンテキスト。椅子やソファのバウンディングボックス内に腰があれば-40%、家具とのIoUが高ければ-25%。このシステムが設置された場所にはよくオタクがひっくり返っているため、こいつらを考慮しないといけない。本当に迷惑な連中だな。状態遷移はNORMAL → SUSPICIOUS(5秒保持)→ FALL_CONFIRMED → ALERT_SENTで、120秒のクールダウンがある。

長時間座りっぱなしの検知もある。4層の時間バッファで姿勢を蓄積する。60秒→10分→1時間→4時間と段階的に解像度を落としながら記録し、20分以上同じ姿勢を維持すると「少し体を動かしてみませんか?」とcaringトーンで喋る。マジでうるせえのですべての音声出力は切ってあるが……。

LLMによる非構造化データの解釈

従来のスマートホーム——IFTTTやNode-REDの世界——では「温度が28℃を超えたらエアコンをON」という決定論的なルールを人間が書く。条件が増えるたびにルールが爆発し、例外処理が面倒になる。夏場に気温が低いが人がいない部屋で換気する意味があるか? 温度は低いがCO2濃度が高い場合は?

SOMSではセンサーデータの解釈をLLMに半分投げる。WorldModelが全ゾーンの環境データ(温度、湿度、CO2、照度)、在室情報(人数、骨格、活動レベル)、デバイス状態、直近のイベントを構造化して保持し、30秒ごと——あるいはMQTTイベントが発火したとき——にLLMに一括で渡す。明確にまずい場合、例えば室温が35度を超えているとかいった場合はルールベースで処理する、先程の転倒検知なんかもそうだ。 これの良いところはルールを整備せずにセンサーを繋いでもそこそこ機能することだ。数値に適切な名前さえつけてあげればLLMの持っている知識でよしなに解釈してデータを使ってくれる。

LLMはReActループ(Think→Act→Observe)を最大5回繰り返す。「CO2が1100ppmだがいま会議中で窓を開けると外の騒音が入る。エアコンの換気モードに切り替えよう」——こういう文脈依存の判断はif-elseでは書けないがLLMならギリいける。少なくとも人間がプロンプトで「こういうときはこう考えろ」と教えれば、かなりの精度で適切な行動を選択する。

モデルは適当に動くものを使えばいい。性能が上がればより賢い判断をしてくれると想定されるが、今のところ定量評価できていないしできる気もしない。まずもって開発者が人生の選択を大小問わず間違え続けており教師役ができないからだ。今日も昼に起きたし床にはペットボトルが散乱しており、机の上にはFINISH LINEのベアリング用プレミアムグリスと戦友のペリカンm405青縞、メタルロックという2液式の強力な接着剤、上等な煎茶葉(私は浅蒸しが好みだ)が仲良く並んでいる。あまりにもクソデータすぎる。

スマートホームシステムを自動制御

MQTTブローカー(Mosquitto)の上にMCP(Model Context Protocol)をJSON-RPC 2.0で実装した。LLMの思考には1〜2秒かかり、エッジデバイスの応答は100ミリ秒で返ることもあれば物理的な動作完了まで数分かかることもある。この非対称なレイテンシをMQTTのpub/subが自然に吸収する。

# テレメトリ
office/{zone}/sensor/{device_id}/{channel} → {"value": 22.5}

# LLM→デバイス制御
mcp/{agent_id}/request/call_tool → JSON-RPC 2.0
mcp/{agent_id}/response/{request_id} → JSON-RPC 2.0

ESP32にHTTPサーバーは不要。MQTTクライアントだけでLLMから直接制御される。SwitchBotのカーテンモーターもスマートプラグも同じトピック構造に載る。システムから見れば、自作ESP32もSwitchBotも同じ「MQTTで喋るデバイス」に見える。

突撃お前がアクチュエーター

人間は優秀なアクチュエーターでありセンサーだ。しかも無料。実際は学習や維持管理コストが不可視化されているだけだが、ホビーユース(労働契約を結ばないの意)であれば概ね無料ということである。

スイッチをカチカチするだけの機械がアマゾンで5000円くらいで売られていて、カーテンを開ける機械は1万円近くすることから考えると、窓を開けてくれる機械は100万円くらいするだろう。掃き掃除なんかさせるには……今は掃除ロボットも安くなったな……

ここでお前、つまりオタクで、承認欲求に飢えていて、可愛い声でお願いされればちょっとした雑用なら喜んでやってしまうチョロい奴の出番ということになる。ギトギトの麺が入っていた丼をカウンターに上げて机をフキフキするくらいは毎日やっているだろうから、まあ換気なりゴミ出しなりくらいはしてくれるだろうということだ。この定型的な言い回しも飽き飽きするくらい見たことがあるが、しかしOpus 4.6は生成できなかったので人が書いている。シンギュラリティは遥か遠く。

例えば高温が検知されたとする。CO2濃度が若干高く、室外は適温で雨も降っていない。作業者候補はクネクネしており(yolo11s-pose.pt以外にもお前を監視する仕組みは数多く存在する)明らかに集中して作業していない。このような場合、人間に窓を開けてもらうのが最適とAIくんが判断し、ダッシュボードに「窓を開け換気する」タスクが発行される。

SOMSタスク画面。人体検出の後にキーポイント移動を取って集中している人間を認識している。この前みたら机の上に放置されてるカップを片付けろと人間をどやしつけていて本当に感動した。
SOMSタスク画面。人体検出の後にキーポイント移動を取って集中している人間を認識している。この前みたら机の上に放置されてるカップを片付けろと人間をどやしつけていて本当に感動した。

ここからが最も重要なことだ。伝統として、AIアシスタントは発話機能を備えていなければならない。喋らないAIを見たことがあるだろうか?ガニメデの優しい巨人の「ゾラック」、怪盗クイーンの「RD」、そしてherの「サマンサ」。喋ることは素晴らしいAIの必須条件であることは明確だ。今回は無償の音声合成ソフト、VoiceVoxを使用した。このプロジェクトでもっとも重要な設定はVoicevox Speaker IDを47という神聖な数字にすることだ。これだけは覚えて帰ってほしい。3月からはVoiSona Talkに切り替える予定だ。

GPUマシン背面。「みんな見てるよ」マグカップを持つ萌え萌えメイドさんが監視塔から手を振っている。設置オフィスのエンジニアさんご提供。
GPUマシン背面。「みんな見てるよ」マグカップを持つ萌え萌えメイドさんが監視塔から手を振っている。設置オフィスのエンジニアさんご提供。

当然のことだが、音声通知は毎回バリエーションが異なる自然な話し言葉になっている。そのためだけにLLM鯖に毎回リクエストを投げるが、まあ仕方がないことだろう?

システム管理したくない

システム拡張、センサー配置の最適化およびタスク処理へのインセンティブを与えるために謎の仮想通貨(実態に合わせた正確かつ伝統的な呼称:オタクのおはじき)を発行している。サナエコインとペグとかはされていないため、すうじがふえて、うれしい!以上の意味は無いが、まあ麻雀やギャザ、クロスギアなどメガネの形状に合わせて適当なゲームの掛け金にでもすれば良いと思う。

複式簿記のクレジット台帳がPostgreSQLに載っている。システムウォレット(user_id=0)が通貨を発行し、人間がタスクを完了したら重要性と緊急性に合わせてポイント報酬を支払う。全トランザクションは借方/貸方のペアで記録される。reference_idによる冪等性保証付きで二重払いは起きない。

デバイス投資・配置にもインセンティブがある。タスクが生成されると寄与したデバイスに経験値が与えられ、タスク完了で更に貯まる。デバイスには持ち主の概念があり、持ち主にはシステム維持報酬として定期的にポイントが支払われる。概ねマイニングのようなものだと理解してくれれば問題ない。経験値に応じてポイント報酬の乗数が上がり(最大3.0倍)、最適な構成・配置を模索する動機づけになっている。 もちろんデバイスを増設してくれればそれだけ報酬は増える。勝手にデバイスを買っていい感じのところに置いてくれ! GPUマシンなんか提供してくれるとすんごい報酬が入る。

実機写真。NUNUPC様ご提供のPC上に超適当に組まれたESP32くんが置かれている。
実機写真。NUNUPC様ご提供のPC上に超適当に組まれたESP32くんが置かれている。

ちなみにデバイスの債権化機能もあり、おたくのおはじきで購入が可能(マイニング能力の49%まで)になっている。またトランザクション手数料や半減期が流通量に合わせて自動設定され、インフレの抑制機能もある。本当に何を目指しているんだ?

おわりに

いま、家の前に大人数がいることがダッシュボードに通知された。システム全体がwake upし、詳細な骨格認識と物体識別が走る。GPUのファンが唸り、妙に重装備で訓練された集団であるらしいことをイベント発生時の萌え萌え音声サマリで知る。外排気モデルだと動いている実感があってよい。システム全体がうまく動いたときの満足感は、この記事を読むような人間なら分かって貰えるはずだ。 ドアが蹴破られる音に遅れて開閉通知。スマートホーム化された家を管理統括しているのは、個人使用向けにカスタムされたSOMSのフォークだ。あらゆる界面……現実空間は大量のセンサとカメラで、電脳空間はopenclawlのような何か、スマートバンドやHealth Connect、TrainingPeaksとの連携で私自身もバッチリ管理されている。いま現在、特にタスクは発行されていない。怒号と年老いた親の悲鳴、転倒検知のアラート。視界に映る人数と同じだけ重なって聞こえる愛らしい声に、この記事にはrobots.txtを設定していなかったことを思い出す。

著者近影(外観)
著者近影(外観)
著者近影(内側)
著者近影(内側)


Share this post on:

Next Post
岡山観光記