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
A2Aのクライアントを自作する
Search
Ryunosuke Iwai
June 25, 2025
Technology
1
240
A2Aのクライアントを自作する
2025/06/25
#さくらのAI Meetup「Agent2Agent(A2A)」
Ryunosuke Iwai
June 25, 2025
Tweet
Share
More Decks by Ryunosuke Iwai
See All by Ryunosuke Iwai
2024/08/19 PEK Recap | データで振り返るPEK2024
rynsuke
2
260
バッチ処理のSLOをどう設計するか
rynsuke
10
1.7k
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
rynsuke
3
3.6k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
1.7k
Notionではじめるライフハックのススメ
rynsuke
24
1.6k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
11k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.2k
Other Decks in Technology
See All in Technology
ロールが細分化された組織でSREは何をするか?
tgidgd
1
200
Lakebaseを使ったAIエージェントを実装してみる
kameitomohiro
0
180
ソフトウェアテストのAI活用_ver1.25
fumisuke
1
560
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
1.1k
話題の MCP と巡る OCI RAG ソリューションの旅 - Select AI with RAG と Generative AI Agents ディープダイブ
oracle4engineer
PRO
5
110
〜『世界中の家族のこころのインフラ』を目指して”次の10年”へ〜 SREが導いたグローバルサービスの信頼性向上戦略とその舞台裏 / Towards the Next Decade: Enhancing Global Service Reliability
kohbis
3
1.1k
マルチプロダクト環境におけるSREの役割 / SRE NEXT 2025 lunch session
sugamasao
1
410
TLSから見るSREの未来
atpons
2
250
TableauLangchainとは何か?
cielo1985
1
150
SEQUENCE object comparison - db tech showcase 2025 LT2
nori_shinoda
0
280
大量配信システムにおけるSLOの実践:「見えない」信頼性をSLOで可視化
plaidtech
PRO
0
290
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
980
Featured
See All Featured
Side Projects
sachag
455
42k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Agile that works and the tools we love
rasmusluckow
329
21k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Building Adaptive Systems
keathley
43
2.7k
Bash Introduction
62gerente
613
210k
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