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
44
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
250
バッチ処理のSLOをどう設計するか
rynsuke
10
1.6k
スタートアップにおける、チーム拡大を見据えたコンポーネント分割の取り組み
rynsuke
3
3.6k
Error Tracking for Logsを用いたバッチ処理のエラー監視
rynsuke
3
1.7k
Notionではじめるライフハックのススメ
rynsuke
24
1.5k
「Datadog入れてみたらAWSの料金が爆発した話」@ゆるSRE勉強会 #1
rynsuke
12
11k
LLM Meetup Tokyo #2 手続きを記憶するコマンド型エージェントの実装
rynsuke
3
3.2k
Other Decks in Technology
See All in Technology
Definition of Done
kawaguti
PRO
5
400
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全
opelab
4
480
API の仕様から紐解く「MCP 入門」 ~MCP の「コンテキスト」って何だ?~
cdataj
0
170
TODAY 看世界(?) 是我們在看扣啦!
line_developers_tw
PRO
0
800
Абьюзим random_bytes(). Фёдор Кулаков, разработчик Lamoda Tech
lamodatech
0
170
AWS全冠したので振りかえってみる
tajimon
0
150
"SaaS is Dead" は本当か!? 生成AI時代の医療 Vertical SaaS のリアル
kakehashi
PRO
3
250
JSX - 歴史を振り返り、⾯⽩がって、エモくなろう
pal4de
3
1k
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
24
9k
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.3k
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
280
2025/6/21 日本学術会議公開シンポジウム発表資料
keisuke198619
2
440
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Embracing the Ebb and Flow
colly
86
4.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Gamification - CAS2011
davidbonilla
81
5.3k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Being A Developer After 40
akosma
90
590k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
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