Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ラズパイ×ローカルLLMで“MAGIシステム”を作る 〜3体のAIによる合議制マルチエージェン...
Search
Noriyuki TAKEI
August 01, 2026
Technology
89
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
魔法少女がClaude Codeを監視する / ccportal-deck
noriyukitakei
0
64
魔法少女がClaude Codeを監視する / ccportal-deck
noriyukitakei
3
140
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
500
第50回 Tokyo Jazug Night/react-deepdive
noriyukitakei
0
110
RAG構築のためのAzure OpenAI Serviceリファレンスアーキテクチャ詳解/wakarimiragarchitecture
noriyukitakei
0
320
生成AI時代の検索手法〜スターウォーズの登場人物で紐解くベクトル/セマンティック/ハイブリッド検索〜/wakarimiaisearch
noriyukitakei
0
120
Prompt flowでブログ記事紹介ツイートアプリをラクチン開発/wakarimipromptflow
noriyukitakei
0
79
世界一わかりみの深いAzure OpenAI Service/wakarimiaoai
noriyukitakei
1
950
AIとペアプロ!! ChatGPTとGitHub Copilotで ToDoアプリを爆速ライブコーディング/wakarimigithubcopilot
noriyukitakei
0
120
Other Decks in Technology
See All in Technology
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.4k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
1
280
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
650
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
190
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
250
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
180
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
260
あるけみー式LTスライド作成術
alchemy1115
1
170
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
210
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
AIで仕事のやり方を変える
matsu7874
3
1k
Sigmaで作る業務アプリ
kazushiro_honma
0
110
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
Side Projects
sachag
456
43k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
310
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
270
A Soul's Torment
seathinner
7
3.6k
How STYLIGHT went responsive
nonsquared
100
6.3k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Documentation Writing (for coders)
carmenintech
77
5.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Music & Morning Musume
bryan
47
7.4k
It's Worth the Effort
3n
188
29k
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
最後までご清聴頂き ありがとうございました!!