Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ラズパイ×ローカルLLMで“MAGIシステム”を作る 〜3体のAIによる合議制マルチエージェン...
Search
Noriyuki TAKEI
August 01, 2026
Technology
22
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ラズパイ×ローカルLLMで“MAGIシステム”を作る 〜3体のAIによる合議制マルチエージェント〜/magibypi
Noriyuki TAKEI
August 01, 2026
More Decks by Noriyuki TAKEI
See All by Noriyuki TAKEI
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
420
第50回 Tokyo Jazug Night/react-deepdive
noriyukitakei
0
97
RAG構築のためのAzure OpenAI Serviceリファレンスアーキテクチャ詳解/wakarimiragarchitecture
noriyukitakei
0
300
生成AI時代の検索手法〜スターウォーズの登場人物で紐解くベクトル/セマンティック/ハイブリッド検索〜/wakarimiaisearch
noriyukitakei
0
110
Prompt flowでブログ記事紹介ツイートアプリをラクチン開発/wakarimipromptflow
noriyukitakei
0
73
世界一わかりみの深いAzure OpenAI Service/wakarimiaoai
noriyukitakei
1
930
AIとペアプロ!! ChatGPTとGitHub Copilotで ToDoアプリを爆速ライブコーディング/wakarimigithubcopilot
noriyukitakei
0
110
世界一わかりみの深いApplicationGateway/wakarimiappilicationgateway
noriyukitakei
0
410
クラウドデザインパターンを使ってクールな設計をしよう/jazug12th
noriyukitakei
1
430
Other Decks in Technology
See All in Technology
QA・ソフトウェアテスト研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
3
1.8k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
脱Jenkins、インターン生が挑んだCIツールGitHubActions移行
mixi_engineers
PRO
1
280
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
CloudWatchから始めるAWS監視
butadora
0
300
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
550
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
780
新しい SLO が良い感じにハマっている話
z63d
1
1.2k
CTOキーノート:AI時代の「つなぐ」を再定義 ― 真のIoTとリアルワールドAI【SORACOM Discovery 2026】
soracom
PRO
0
330
歴史から理解するクラウドインフラのしくみ
kizawa2020
0
190
toio・myCobotでフィジカルAIっぽいことを行うための検討(とりあえず調査) / フィジカルAI LT(IoTLTによる開催)
you
PRO
0
150
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
350
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
Agile that works and the tools we love
rasmusluckow
331
22k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
750
Navigating Team Friction
lara
192
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
400
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Building Adaptive Systems
keathley
44
3.1k
Transcript
CODE : 378 FILE:MAGI_SYS EX_MODE:OFF PRIORITY:AAA LOCAL LLM × RASPBERRY
PI × MULTI-AGENT ラズパイ3台で MAGIシステム を動かす 30年前のアニメに出てきた「合議制AI」を、 ローカルLLMとマルチエージェントで現実に持ってく る話
Noriyuki TAKEI 武井 宜行 Information • Microsoft MVP for AI
Platform • サイオステクノロジー株式会社 blog https://tech-lab.sios.jp/ X @noriyukitakei core skill Azureによる クラウドネイティブなアプリ開発 Favorites • • • • • スカッシュ スキー 走ること ストリートファイター6 PCデスクまわりの環境改善 books 10月発売予定!! Coming Soon Claude Codeによる AI駆動開発
None
SPEAKER 自己紹介 WHO WHY お名前 なぜこれを作ったのか 所属 / 役割 ・「面白そう」以外の理由は、正直あとから付けた
担当している仕事 ・若手が最新技術に触れる口実として、題材の強さは効く ひとことプロフィール TAKEAWAY 今日持ち帰ってほしいこと ・ローカルLLM × マルチエージェントは、もう趣味の予算で試せる ※ 顔写真をここに配置 MAGI SYSTEM / SIOS ・コードは驚くほど短い。今日から真似できる 02 / 29
AGENDA 本日お話しすること 全45分 / うち実機デモ 約8分 01 MAGIシステムとは何だったのか エヴァを知らない人向けの5分解説 5分
02 なぜ今、手のひらサイズで作れるのか 30年で何が変わったのか 5分 03 システム構成 ハード・ネットワーク・コスト 6分 04 実装解説 LangGraph / Ollama / 合議ロジック 05 実機デモ ラズパイ3台が本当に審議します 8分 06 ハマりどころと、これから 作ってみて分かったこと 7分 + 質疑応答 3分 / MAGI SYSTEM SIOS / 11分 スライドとソースコードは後日公開します 03 / 29
SECTION 01 MAGIシステム とは何だったのか 5 min まずは題材の共有から。エヴァを知らなくても3分で分かります 04 / 29
SECTION 01 MAGIシステム — 3体のAIが多数決で結論を出す装置 『新世紀エヴァンゲリオン』(1995) に登場する意思決定支援システム ▸ 3体の独立したスーパーコンピュータ BALTHASAR
-2 MELCHIOR-1 / BALTHASAR-2 / CASPER-3 ▸ 開発者の人格を3つの側面に分けて移植 承認 「科学者」「母親」「女性」— つまり評価の観点が違う MAGI CASPER-3 否決 MELCHIOR1 否決 2体が否決 → 否決。多数決で機械が結論を出す ▸ 3体が別々に思考し、合議制で結論を出す 劇中では 2/3 の多数決で可決・否決が決まる ▸ 意見が割れて膠着する描写もある そこが物語上のスリルになっていた 「巨大な計算機が3つ、部屋を埋め尽くしている」絵として描かれていた MAGI SYSTEM / SIOS 05 / 29
SECTION 01 エンジニアの目で見ると、これは完全に「マルチエージェント」 劇中のMAGIがやっていること 2026年の私たちが呼んでいる名前 ▸ 独立した3つのエージェント ▸ マルチエージェント (Multi-Agent)
▸ 同じ議題を、異なる観点で評価 ▸ ロール/観点を変えたプロンプト設計 ほぼ同義 ▸ 結果を集約して多数決 ▸ アンサンブル・多数決による集約 ▸ 割れたら議論して再評価 ▸ エージェント間の討議 (debate) つまりMAGIは、30年前に描かれたマルチエージェント・アーキテクチャ。 だから今、 素直に実装できる。 MAGI SYSTEM / SIOS 06 / 29
SECTION 02 なぜ今、手のひらサイズ で作れるのか 5 min 30年で何が変わったのか、3つだけ 07 / 29
SECTION 02 部屋いっぱいの巨大計算機が、机の上に収まった 1995 — 劇中の描写 2026 — 今回つくったもの -
フロアを埋める専用ハードウェア ▸ Raspberry Pi 5 (8GB) × 3台 — 手のひら → - 国家プロジェクト級の開発体制 サイズ ▸ 調達コスト 約15万円 - 専任のオペレーターが常駐 何が変わったのか — 3つだけ 01 02 03 小型モデルが実用になった Ollama がLLMをHTTPサーバにした SBCの性能が上がった 4B級+量子化なら、8GBのSBCでも「まともな モデルを落として起動するだけ。あとは Raspberry Pi 5 は 8GB / 64bit。ローカル推論 日本語で答える」ところまで来た :11434 を叩けばよい が現実的な土台になった MAGI SYSTEM / SIOS 08 / 29
SECTION 02 使った技術は、この4つだけ 特別なものは何も使っていません HARDWARE RUNTIME MODEL ORCHESTRATION Raspberry Pi
5 (8GB) Ollama 小型モデル (4B級) LangGraph 手のひらサイズの64bit Linux機 ローカルLLMをHTTPで叩けるよ 量子化して 8GB に載るサイズ。 エージェントの流れをグラフで 。 うにする。 7B以上はスワップして厳しかっ 宣言的に書く。 1台 = MAGI 1体。物理的に独立 ポート 11434 に投げるだけ。 た。 並列・分岐・再実行が数行で表 させると、 JSON強制オプションが後で効い モデル選定は実機で要検証。 現できる。 見た目の説得力が段違いになる てくる。 今回の構成はノード11個。 。 requirements.txt はこれだけ langgraph MAGI SYSTEM / SIOS / langchain-ollama / Flask / python-dotenv 09 / 29
SECTION 03 システム構成 6 min ハード・ネットワーク・コスト。全部お見せします 10 / 29
SECTION 03 全体構成 — エージェント本体1台 + ラズパイ3台 MELCHIOR-1 Raspberry Pi
5 (8GB) + Ollama 観点: 論理性・合理性 エージェント本体 (PC) INPUT ブラウザ / curl LangGraph — 審議フロー Flask + SSE — 画面配信 L2 SWITCH ギガビット BALTHASAR-2 Raspberry Pi 5 (8GB) + Ollama 観点: 人間要因・感情 HDMI CASPER-3 Raspberry Pi 5 (8GB) + Ollama 観点: 現実性・リスク DISPLAY 投影用モニタ / Chrome kiosk HTTP → :11434 (Ollama API) ポイント: 推論はラズパイ側、指揮はPC側。1台=1体にしたのは性能ではなく「3台並んでいる絵」が欲しかったから MAGI SYSTEM / SIOS 11 / 29
SECTION 03 全体構成 — エージェント本体1台 + ラズパイ3台 投影用モニタ エージェント 本体
L2スイッチ ローカルLLM (on Ollama) MAGI SYSTEM / SIOS ローカルLLM (on Ollama) ローカルLLM (on Ollama) 11 / 29
SECTION 03 調達したもの — 合計 約15万円 品名 用途 Raspberry Pi
5 (8GB) 単価 数 合計 MAGI 3体の本体。ここが主 コスト 44,000 3 132,000 L2スイッチ 3台とPCを閉じたLANで繋ぐ 2,000 1 2,000 LANケーブル (1m) スイッチ〜各機 800 4 3,200 12,000 1 12,000 モニター (24インチ) MAGI画面の投影用 合計 149,200 ※ 価格は企画時点(2026年前半)の参考値です。 ※ ケース・電源アダプタ・microSDは別途。当日の実費に差し替えてください。 COST DOWN 実費はもっと安くなる モニター・L2スイッチ・LANケーブルは 情シスから借用可。実質 約13.2万円。 TRADE-OFF 一番効くのはラズパイ台数 1台構成なら約4.4万円で成立する。 「3台並ぶ絵」に11万円出す判断。 TIPS SDカードと電源に注意 本体価格に含まれない付属品で 数千円ずつ積み上がる。要確認。 MAGI SYSTEM / SIOS 12 / 29
SECTION 03 ソフトウェア構成 — 3層に分かれている ・ Chrome (kiosk モード) で全画面表示
DISPLAY 表示層 ・ Server-Sent Events で審議の進行を受け取る ・ HTML/CSS/JS 1ファイル (418行) だけ AGENT エージェント層 ・ Python + LangGraph — 審議フローを定義 ・ Flask — 画面配信 と /run エンドポイント ・ magi.py 1ファイル (377行) だけ INFERENCE 推論層 (ラズパイ×3) ・ Raspberry Pi OS (64bit) ・ Ollama をサービス起動し :11434 で待機 ・ 4B級の量子化モデルを事前に pull しておく MAGI SYSTEM / SIOS 13 / 29
SECTION 04 実装解説 11 min ここが本編。全部コードでお見せします 14 / 29
SECTION 04 3体の違いは、プロンプトの「観点」一文だけ MELCHIOR-1 BALTHASAR-2 CASPER-3 観点 (viewpoint) 観点 (viewpoint)
観点 (viewpoint) 論理性・合理性・整合性を最重視す 人間要因・感情・受容性を重視する 現実性・リスク・実務性を重視する ひとことで言うと「人はどう感じるか」 ひとことで言うと「本当に回せるのか」 る ひとことで言うと「筋が通っているか」 違いはここだけ — モデルもプロンプトの残りも全部同じ ask_agent("Melchior", "論理性・合理性・整合性を最重視する", question) ask_agent("Balthasar", "人間要因・感情・受容性を重視する", question) ask_agent("Casper", "現実性・リスク・実務性を重視する", question) ▸ 同じモデル・同じ議題でも、観点を変えるだけで結論が割れる。ここが面白いところ。 MAGI SYSTEM / SIOS 15 / 29
SECTION 04 LangGraph で審議フローを組む 並列は「エッジを増やす」だけ START prepare から3ノードへ add_edge するだけで3体が同時に走る。
prepare threadingもasyncも書かない。 fan-out melchior balthasar casper 分岐は conditional_edges aggregate_first_votes YES 全会一致 なら即決 賛成 0 or 3 票 ? NO → 討議へ 票が割れた(1票 or 2票)ときだけ討議フェーズへ。 全会一致ならスキップして即決する。 debate debate は要約するだけ melchior_revote balthasar_revote casper_revote 3体の票と理由を1つの文字列にまとめ、 「参考情報」として再投票に渡すだけ。 aggregate_final_votes finalize → END ノード11個・エッジを張るだけ。 このフロー全体が、約40行のグラフ定義。 MAGI SYSTEM / SIOS 16 / 29
SECTION 04 / CODE コード① — 3台のラズパイに繋ぐ magi.py — LLMの初期化
MIGRATION クラウドからの差し替えは3行 from langchain_ollama import ChatOllama AzureChatOpenAI → ChatOllama に置換。 # ラズパイ1台 = MAGI 1体。IPを分けるだけで物理的に独立する エンドポイントとAPIキーの代わりに def unit(host: str) -> ChatOllama: return ChatOllama( model="qwen3:4b", ラズパイのIPを書くだけで動く。 # 8GBに載る4B級モデル base_url=f"http://{host}:11434", # Ollama の待受ポート format="json", # ★JSONを強制させる temperature=0, # 毎回同じ判断にしたい ) LLM = { "Melchior": KEY POINT format="json" が効く LLMは頼んでもJSON以外を返す。 Ollamaのこのオプションで出力を unit("192.168.10.11"), "Balthasar": unit("192.168.10.12"), "Casper": unit("192.168.10.13"), JSONに固定でき、パース失敗が激減。 → 詳細はハマりどころで。 } .env に書くのは ラズパイ3台のIPアドレスとモデル名だけ。 APIキーもトークン課金も、もう存在しない。 MAGI SYSTEM / SIOS 17 / 29
SECTION 04 / CODE コード② — エージェント1体の中身 magi.py — 1体に意見を聞く
SIMPLE def ask_agent(role, viewpoint, question, extra_context="") -> dict: prompt = f""" あなたは {role} です。 観点: {viewpoint} ← ここが3体の唯一の違い エージェント1体 = 関数1つ 「役割」「観点」「議題」を渡して、 JSONで票と理由を返してもらうだけ。 フレームワークらしい記述はゼロ。 難しいことは何もしていない。 議題: {question} LangGraph のノードにする 参考情報: ← 再審議のときだけ中身が入る {extra_context} 必ずJSONのみで返してください: {{"role": "...", "vote": "approve or reject", "reason": "100字以内"}} """ def melchior_node(state): return {"melchior_opinion": ask_agent("Melchior", "論理性・合理性・整合性を 最重視する", state["question"])} return json.loads(LLM[role].invoke(prompt).content) ▸ 3体分は、観点の文字列を差し替えたコピー。それだけ。 MAGI SYSTEM / SIOS 18 / 29
SECTION 04 / CODE コード③ — 集計は、ただの多数決 magi.py — 票を数える
判定はこの3パターンだけ def aggregate_first_votes_node(state): votes = [state["melchior_opinion"], 3 : 0 全会一致で可決 即決 state["balthasar_opinion"], state["casper_opinion"]] 2 : 1 多数決で可決 討議へ approve = sum(1 for v in votes if v["vote"] == "approve") 1 : 2 多数決で否決 討議へ return {"first_approve_count": approve, 0 : 3 全会一致で否決 即決 "first_decision": "approved" if approve >= 2 else "rejected"} ▸ 2/3 で可決 — 劇中の合議制をそのまま条件式にしただけ ▸ 票数で丸める — 1体が変な答えを返しても、多数決なら吸収できる ▸ LLMを信じすぎない設計 — 集約ロジックは自分で書いて握っておく MAGI SYSTEM / SIOS 19 / 29
SECTION 04 / CODE コード④ — 意見が割れたら、もう一度審議する ここが一番作っていて面白かった部分 分岐 —
割れているかどうかで行き先を変える def route_after_first_aggregate(state) -> str: # 3票一致(0 or 3)なら即決。割れたら討議へ if state["first_approve_count"] in (0, 3): return "finalize" return "debate" WHY IT WORKS 2周目は「他の2体の意見」が見える 1周目: 参考情報は空 → 自分の観点だけで判断 2周目: 3体の票と理由が参考情報に入る → それを読んで、意見を変えることがある builder.add_conditional_edges("aggregate_first_votes", route_after_first_aggregate, {"finalize": "finalize", "debate": "debate"}) 討議 — 3体の主張を1つの文字列にまとめる def debate_node(state): summary = f""" Melchior: {…["vote"]} / {…["reason"]} Balthasar: {…["vote"]} / {…["reason"]} Casper: {…["vote"]} / {…["reason"]} """ return {"debate_summary": summary} MAGI SYSTEM / SIOS ここが一番「MAGIっぽい」 劇中でも3体は意見が割れて膠着した。 割れたら討議して再投票する、という 一手間を入れるだけで、単なる多数決が 「合議」に見えるようになる。 # 要約して渡すだけ 20 / 29
SECTION 04 / UI 「それっぽさ」の9割は、画面が作っている サーバ側 — Server-Sent Events で流すだけ
@app.route('/events') def events(): q = queue.Queue() def gen(): while True: yield f"data: {q.get()}\n\n" return Response(gen(), mimetype='text/event-stream') ブラウザ側 — 受け取って色を変えるだけ var evt = new EventSource('/events'); evt.onmessage = function(e){ // thinking:on → 3パネルを点滅させる // {"agent":"melchior","vote":"approve"} // → 緑にして「承認」を表示 実際の画面。緑=承認 / 赤=否決。CSSだけで作っている ▸ WebSocketは不要 — 一方通行なのでSSEで足りる ▸ Chrome kiosk で全画面 — ブラウザのUIを消すと一気に「装置」になる }; MAGI SYSTEM / SIOS 21 / 29
SECTION 05 実機デモ 8 min ラズパイ3台が、本当に審議します 推論はすべてこの机の上で完結しています。ネットには一切出ていません 22 / 29
SECTION 05 デモの見どころ / 議題 01 3台が同時に唸り出す fan-out。LEDとファンで「並列で考えている」のが見える 審議にかける議題 「通勤中の電車の中でトイレは我慢したほうがいいですか?」
02 1体ずつ結論が確定する 推論が終わった順にパネルが緑/赤に変わる 03 割れたら再審議に入る 2:1 になると討議フェーズへ。ここが出たら当たり 04 遅さが「重々しさ」になる 「金曜の夜に本番リリースしてもよいか」 「このプロジェクトに新しい言語を採用すべきか」 「会議は原則30分にすべきか」 ★ 会場からも議題を募集します ラズパイの推論は遅い。それが逆に演出として効く ▸ 意見が割れやすい議題ほど面白い。「正解のない問い」を選ぶこと。 MAGI SYSTEM / SIOS 23 / 29
SECTION 05 / RESULT 実際に動かすとこうなる デモが動かない場合はこちらで説明します DECISION 結果: 1 :
2 で否決 BALTHASAR は承認、MELCHIOR と CASPER が否決 → 多数決で否決。 OBSERVATION 観点で結論が変わっている 「人間要因」を見る1体だけが承認。 観点の分離がちゃんと効いている。 EXPLAINABLE 理由もちゃんと返る 各パネルには reason が紐づく。 モニタにMAGI画面、手前にラズパイ3台、右のターミナルに推論ログが流れる MAGI SYSTEM / SIOS なぜその判断かを説明できる。 24 / 29
None
CONCLUSION まとめ 01 02 03 04 MAGI SYSTEM 30年前の「巨大計算機」は、15万円で机に載る SFが描いた合議制AIは、もう趣味の予算で再現できる範囲に来ている
鍵は Ollama × LangGraph の2つ ローカルLLMをHTTPサーバにして、フローをグラフで書く。それだけで多エージェントになる コードは驚くほど短い(合計800行弱) エージェント1体は関数1つ。合議は sum() 一行。今日から真似できる 「面白そう」から入ると、最新技術が勝手に身につく マルチエージェントもローカルLLMも、題材が強いと学習が続く / SIOS 28 / 29
最後までご清聴頂き ありがとうございました!!