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
390
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
330
バッチ処理のSLOをどう設計するか
rynsuke
11
1.8k
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
rynsuke
3
3.9k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
2k
Notionではじめるライフハックのススメ
rynsuke
24
1.7k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
11k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.4k
Other Decks in Technology
See All in Technology
仕様は“書く”より“語る” - 分断を超えたチーム開発の実践 / 20251115 Naoki Takahashi
shift_evolve
PRO
1
460
設計は最強のプロンプト - AI時代に武器にすべきスキルとは?-
kenichirokimura
1
350
AIでテストプロセスを自動化しよう251113.pdf
sakatakazunori
0
110
メタプログラミングRuby問題集の活用
willnet
2
790
クレジットカードの不正を防止する技術
yutadayo
16
6.8k
LINE公式アカウントの技術スタックと開発の裏側
lycorptech_jp
PRO
0
350
"おまじない"はもう卒業! デバッガで探るSpring Bootの裏側と「学び方」の学び方
takeuchi_132917
0
120
re:Invent完全攻略ガイド
junjikoide
1
280
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
8
2.3k
やり方は一つだけじゃない、正解だけを目指さず寄り道やその先まで自分流に楽しむ趣味プログラミングの探求 2025-11-15 YAPC::Fukuoka
sugyan
1
450
決済システムの信頼性を支える技術と運用の実践
ykagano
0
490
旧から新へ: 大規模ウェブクローラの Perl から Go への移行 / YAPC::Fukuoka 2025
motemen
2
780
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Designing for humans not robots
tammielis
254
26k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
For a Future-Friendly Web
brad_frost
180
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
970
KATA
mclloyd
PRO
32
15k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
320
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