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
Reach American Airlines®️ Instantly: 19 Calling Methods for Fast Support in the USA
flyamerican
1
180
ビジネス職が分析も担う事業部制組織でのデータ活用の仕組みづくり / Enabling Data Analytics in Business-Led Divisional Organizations
zaimy
1
320
TLSから見るSREの未来
atpons
2
260
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.7k
衛星運用をソフトウェアエンジニアに依頼したときにできあがるもの
sankichi92
1
250
事例で学ぶ!B2B SaaSにおけるSREの実践例/SRE for B2B SaaS: A Real-World Case Study
bitkey
1
360
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
39k
〜『世界中の家族のこころのインフラ』を目指して”次の10年”へ〜 SREが導いたグローバルサービスの信頼性向上戦略とその舞台裏 / Towards the Next Decade: Enhancing Global Service Reliability
kohbis
3
1.2k
AIエージェントが書くのなら直接CloudFormationを書かせればいいじゃないですか何故AWS CDKを使う必要があるのさ
watany
18
7.2k
ソフトウェアテストのAI活用_ver1.25
fumisuke
1
570
shake-upを科学する
rsakata
7
950
「Chatwork」のEKS環境を支えるhelmfileを使用したマニフェスト管理術
hanayo04
1
270
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
970
4 Signs Your Business is Dying
shpigford
184
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
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