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
A2Aのクライアントを自作する
Search
Ryunosuke Iwai
June 25, 2025
Technology
610
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A2Aのクライアントを自作する
2025/06/25
#さくらのAI Meetup「Agent2Agent(A2A)」
Ryunosuke Iwai
June 25, 2025
More Decks by Ryunosuke Iwai
See All by Ryunosuke Iwai
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
460
バッチ処理のSLOをどう設計するか
rynsuke
11
2.2k
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
rynsuke
3
4.5k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
2.6k
Notionではじめるライフハックのススメ
rynsuke
24
2.2k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
12k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.8k
Other Decks in Technology
See All in Technology
現場を動かすAIエージェント#2_製造業現場でのAI活用から見た、ハマる罠と実践知
kintotechdev
2
170
AIコーディングはじめました
miso
0
150
`go get`したらELFが降ってきた件
taiyow
0
170
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
5
680
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
600
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
530
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
160
2拠点SRE活動始めてみた | sogaoh's LT @ ホンマでっかSRE勉強会 #3
sogaoh
PRO
0
240
生き様としてのSRE
hokkai7go
1
170
IoTとは〜? 数字で見るSORACOM UG【SORACOM UG Explorer 2026】
soracom
PRO
0
180
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
160
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
1
200
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
330
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
970
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
We Have a Design System, Now What?
morganepeng
55
8.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
エンジニアに許された特別な時間の終わり
watany
109
250k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Practical Orchestrator
shlominoach
192
12k
Evolving SEO for Evolving Search Engines
ryanjones
0
350
Transcript
A2Aのクライアント を自作する 2025/06/25 #さくらのAI Meetup「Agent2Agent(A2A)」 @ryunosuke
A2A開発あるある言います
ぼくの考えた最強のA2Aエージェントを 作ったぞ!
None
あんまりテンション上がらん...
人間のようにLINEやSlackで お喋りできるようにしたい!
本日はそんな 「A2Aクライアント」 を自作してみる話です
目次 1. A2Aの設計思想についておさらい 2. A2Aクライアントの実装におけるポイント 3. A2Aが普及した未来の話
Ryunosuke Iwai / @ryunosuke 経歴 株式会社メルカリ、Cloudbase株式会社 現在、フリーランスとして活動中 技術領域 SRE
/ インフラ / バックエンド / アーキテクチャ 主にデータパイプラインの設計など Go, Python, terraform, Datadog, Cloud, Github Actions 趣味 LLMにFactorioを遊ばせてみた
A2Aの設計思想
Towards Multi-Agent https://a2aproject.github.io/A2A/latest/#a2a-and-mcp-complementary-protocols A2Aの設計思想
Host Agent & Remote Agent https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの設計思想
Host Agent & Remote Agent https://github.com/a2aproject/a2a-samples/tree/main/demo Agent to Agent A2Aの設計思想
Host Agent & Remote Agent https://github.com/a2aproject/a2a-samples/tree/main/demo User to Agent A2Aの設計思想
広義のA2Aクライアント A2Aの設計思想
広義のA2Aクライアント • Agent to Agent、User to Agentの双方を含む • A2Aサーバーに対して接続を行うクライアントの立場を表す言葉 •
ツールキットが公式SDKによって提供されている ◦ https://github.com/a2aproject/a2a-python A2Aの設計思想
広義のA2Aクライアント https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの設計思想
広義のA2Aクライアント https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの設計思想
• User to Agentのみ • 人間が(ホストエージェントに対して)接続を行うためのクライアントインターフェース • U2Aクライアント、エンドユーザークライアントと呼んでも良いかも 狭義のA2Aクライアント A2Aの設計思想
狭義のA2Aクライアント https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの設計思想
ここまでのまとめ • Multi-Agentのための仕組みであるA2Aの世界では、エージェントがサーバーにも、 クライアントにもなりうる • CLIやLINE, SlackはUser to Agentに対応する狭義のクライアント •
ユーザーと直接やり取りするエージェントをホストと呼ぶことも A2Aの設計思想
U2Aクライアントを実装する
リッチなクライアントを使いたい時の方法 • デモとしてWebベースのチャットUIが公開されている • 今後はデファクトのA2AチャットUIも出てきそう Google A2Aのデモを動かす - Hiroyuki Eto
U2Aクライアントを実装する
今回はLINE / Slackに乗っかりつつ クライアントを自作してみる
ゴール • A2Aエージェントに接続し、LINEやSlackでやり取りできるチャットボットアプリケー ションを作る • 関連するA2Aの諸概念や実装の勘所を理解する U2Aクライアントを実装する
None
A2A接続の基本 1. メッセージを送る 2. ストリームを開く 3. ストリームに届くイベントを処理する U2Aクライアントを実装する
pip install a2a-sdk
A2A接続の基本 U2Aクライアントを実装する
シンプル ◎
考えるべきこと • エージェントに送るメッセージを作る • スレッディング • エージェントからのイベントを適切に処理する U2Aクライアントを実装する
エージェントに送るメッセージを作る • 何をトリガーにするか? • どんなメッセージを送るか? U2Aクライアントを実装する
エージェントに送るメッセージを作る • 何をトリガーにするか? ◦ ユーザーからのメッセージを受け取った時 • どんなメッセージを送るか? ◦ 対応するデータ形式で U2Aクライアントを実装する
メッセージのトリガー A2Aに送るメッセージを作る
メッセージの変換 A2Aに送るメッセージを作る
a2a.Part • A2Aでは3つのデータ型が用意されている ◦ TextPart: text ◦ DataPart: json ◦
FilePart (FileWithBytes, FileWithUri): 画像などその他全て • ユーザーからのメッセージを適切なPartに変換し、メッセージにして返す ◦ 画像のダウンロードなど A2Aに送るメッセージを作る
補足 • テキスト以外のメッセージ形式をサポートしているかどうかは、 AgentCardの inputModes / outputModes で明記される • サポートしていないエージェントに対してはテキストにフォールバックするのが
理想 A2Aに送るメッセージを作る
スレッディング • メッセージがどのタスクに紐付けられるべきなのかを判断する ◦ task_id ◦ context_id U2Aクライアントを実装する
Slackの場合 • 1スレッド = 1タスクとするのが自然 • 簡単 スレッディング
None
Slackの場合 スレッディング
LINEの場合 • スレッドの概念がないため、明確なスレッディングが難しい ◦ タスクのステータスが使えそうだが、A2Aではタスクが完了した後も会話を 続けて処理を修正することができるため、避けたい • 基本は1ユーザー1タスク • クイックリプライを使ってタスクの完了を明示するなどが考えられる
スレッディング
None
まとめ • プラットフォームの仕様に合わせて適切にメッセージとタスクを対応づける • わかっていないこと:task_idとcontext_idの関係 ◦ 1つのcontext内に複数のtaskが入る? ◦ とはいえmessage
historyを持っているのはtaskなので、スレッドとcontext を紐づけるのも難しい スレッディング
イベントの処理 • streamで流れてくるイベントは次の4つ ◦ Message ◦ TaskStatusUpdateEvent ◦ TaskArtifactUpdateEvent ◦
Task • それぞれについて、適切に処理する ◦ 多くの場合、メッセージを変換してユーザーに送信すること U2Aクライアントを実装する
Message • エージェントのメッセージを表す • プラットフォームのメッセージ形式に変換し、送信する ◦ エージェントへのメッセージ作成の逆 ◦ FileWithBytesの場合、データのアップロード等も必要になる イベントの処理
None
TaskStatusUpdateEvent • Taskのステータス更新 (working etc.) を表す • Messageがくっついているので、同様に処理する イベントの処理
TaskArtifactUpdateEvent • Taskの成果物であるArtifactの更新を表す • partsで構成されているので、Messageと大枠は同じだが、 nameやdescriptionの付加情報をどう扱うか イベントの処理
メッセージの送信 • 基本的にはstreamで流れてくるイベントを随時処理し、メッセージとして送信すれば 良い • 悩ましいところ ◦ 固定の英文メッセージなどを垂れ流しにするかどうか ◦
MessageとArtifactの表現方法の区別 イベントの処理
考えるべきことまとめ • エージェントに送るメッセージを作る ◦ トリガーとメッセージの変換 • スレッディング ◦ task_idとcontext_id •
エージェントからのイベントを適切に処理する ◦ 4つのイベント (Message / TaskStatusUpdateEvent / TaskArtifactUpdateEvent / Task) の適切なハンドリング イベントの処理
この3つを抑えれば クライアントは作れる!
• https://github.com/ryukez/a2a-client-toolkit • LINE / Slack のクライアント実装を同梱したPythonライブラリ • 実装中のところも多いですが、参考になれば幸いです a2a-client-toolkit
U2Aクライアントを実装する
• A2Aで動いているものであればなんでもつなげるのが、標準規格の強み • a2a-samplesに実装例がたくさん上がっているので、色々接続してみると面白いで す ◦ https://github.com/a2aproject/a2a-samples 色んなエージェントにつないで遊ぶ U2Aクライアントを実装する
None
A2Aの未来
この図をもう一度 https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの未来
この図をもう一度 https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの未来
A2Aは、次世代のサーバー規格になる • これまでのサーバーがHTMLを配信していたように、これからはサーバーがエー ジェントを配信するようになる ◦ エージェント時代のindex.html = Agent Card •
A2Aは、「エージェントのインターネット」を実現する技術 ◦ ネットサーフィンは、エージェントサーフィンへ ◦ いろんなエージェントに「聞き込み」をしながら情報を集める A2Aの未来
パーソナルブラウザとしてのホストエージェント • エージェントインターネットの時代に、現在のブラウザの役割を果たすのがホスト エージェント • データだけをインターネットで収集して、HTMLは手元で動的にレンダリングするよう な世界が来るかもしれない • 1人1人がパーソナライズされたホストエージェントを持つ世界へ A2Aの未来
様々な媒体でのA2A接続 https://github.com/a2aproject/a2a-samples/tree/main/demo A2Aの未来
様々な媒体でのA2A接続 • A2Aクライアントを通じて、様々な媒体でエージェントにアクセスすることができるよ うになる ◦ うまくスレッディングの設計をすれば、別媒体で同じタスクを共有することも(例 :「Slackで頼んでたあの件どうなった?」) ◦ ユーザーからのアクションだけでなく、イベントトリガー(例:カレンダーの更新 など)をもとに処理を実行することも
• より生活に密着したアシスタントへ、そのための共通規格としてのA2A A2Aの未来
EoF