
Agent2Agent å ¥é (9) - ã¿ã¹ã¯ã®å¯¿åœ
ãAgent2Agentãã®ãã¿ã¹ã¯ã®å¯¿åœãã«ã€ããŠãŸãšããŸããã
åå
1. ã¯ããã«
ãšãŒãžã§ã³ãã«ã¡ãã»ãŒãžãéä¿¡ããããšããšãŒãžã§ã³ãã¯ä»¥äžã®ããããã§å¿çã§ããŸãã
ã»ç¶æ ã®ãªãã¡ãã»ãŒãžã
ã»ç¶æ ã®ããã¿ã¹ã¯ãšã0å以äžã®TaskStatusUpdateEventãŸãã¯TaskArtifactUpdateEventã
å¿çãã¡ãã»ãŒãžã®å Žåãã€ã³ã¿ã©ã¯ã·ã§ã³ã¯å®äºããŸããäžæ¹ãã¿ã¹ã¯ã¯äžæç¶æ  (input-required or auth-required) ãŸãã¯çµäºç¶æ  (completed, cancelled, rejected or failed) ã«ãªããŸã§æŽæ°ãç¶ããŸãã
2. ã³ã³ããã¹ã
contextId ã¯ã倿°ã®ã¿ã¹ã¯ãšç¬ç«ããã¡ãã»ãŒãžãè«ççã«æ§æããŸãããšãŒãžã§ã³ãå®è£ è ã¯ãcontextId ãå©çšããŠããããã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ã㊠llm ã³ã³ããã¹ãã管çã§ããŸãã
ã¡ãã»ãŒãžãåããŠéä¿¡ããããšããšãŒãžã§ã³ã㯠contextId ãè¿ä¿¡ããŸãããšãŒãžã§ã³ããã¿ã¹ã¯ã§å¿çããå Žåã¯ãtaskId ãä»äžãããŸããã¯ã©ã€ã¢ã³ãã¯ãåŸç¶ã®ã¡ãã»ãŒãžãéä¿¡ããéã«åã contextID ãæ·»ä»ããããšã§ãåãã³ã³ããã¹ãå ã§ååã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãç¶ç¶ããŠããããšããšãŒãžã§ã³ãã«éç¥ã§ããŸãããŸããã¯ã©ã€ã¢ã³ãã¯ãªãã·ã§ã³ã§ taskID ãæ·»ä»ããããšã§ãã¡ãã»ãŒãžãç¹å®ã®ã¿ã¹ã¯ã®ç¶ç¶ã§ããããšã瀺ãããšãã§ããŸãã
contextId ã«ãããç®æšéæã«åããã³ã©ãã¬ãŒã·ã§ã³ããè€æ°ã®ã¿ã¹ã¯éã§ 1 ã€ã®ã»ãã·ã§ã³ãå ±æããããšãå¯èœã«ãªããŸãã
3. ãšãŒãžã§ã³ã: ã¡ãã»ãŒãžãŸãã¯ã¿ã¹ã¯
ã¡ãã»ãŒãžã¯ãé·æéã®åŠçã飿ºãå¿ èŠãšããªããäºçްãªããåãã«äœ¿çšã§ããŸãããšãŒãžã§ã³ãã¯ã¡ãã»ãŒãžã䜿çšããŠã¿ã¹ã¯ã®å諟ã亀æžã§ããŸãããšãŒãžã§ã³ãã¯ãåä¿¡ã¡ãã»ãŒãžã®æå³ããµããŒãå¯Ÿè±¡ã®æ©èœã«ãããã³ã°ãããšãã¿ã¹ã¯ã§å¿çã§ããŸãã
ãããã£ãŠãæŠå¿µçã«ã¯ããšãŒãžã§ã³ãã«ã¯3ã€ã®ã¬ãã«ããããŸãã
(1) åžžã«ã¡ãã»ãŒãžã®ã¿ã§å¿ç
è€éãªç¶æ 管çãé·æéå®è¡ã¯è¡ãããcontextIDã䜿çšããŠã¡ãã»ãŒãžãçµã³ä»ããŸãããšãŒãžã§ã³ãã¯ãLLMåŒã³åºããšã·ã³ãã«ãªããŒã«ãçŽæ¥ã©ããããå¯èœæ§ãé«ãã§ãã
(2) ã¿ã¹ã¯ãçæãã远跡å¯èœãªããéèŠãªäœæ¥ãè¡ããé·æéã«ããã£ãŠå®è¡
(3) ã¡ãã»ãŒãžãšã¿ã¹ã¯ãçæ
ã¡ãã»ãŒãžã䜿çšããŠããšãŒãžã§ã³ãã®æ©èœãšã¿ã¹ã¯ã®äœæ¥ç¯å²ãããŽã·ãšãŒãããŸãããã®åŸãã¿ã¹ã¯ãéä¿¡ããŠå®è¡ã远跡ãã远å ã®å ¥åãå¿ èŠããšã©ãŒåŠçãªã©ãã¿ã¹ã¯ã®ç¶æ ã«ã€ããŠé£æºããŸãã
ãšãŒãžã§ã³ãã¯ãåžžã«ã¿ã¹ã¯ ãªããžã§ã¯ãã§è¿ä¿¡ããåçŽãªå¿çãå®äºç¶æ ã®ã¿ã¹ã¯ãšããŠã¢ãã«åããããšãéžæã§ããŸãã
4. ã¿ã¹ã¯ã®æ¹è¯ãšãã©ããŒã¢ãã
4-1. ã¿ã¹ã¯ã®æ¹è¯ãšãã©ããŒã¢ãã
ã¯ã©ã€ã¢ã³ãã¯ãã¿ã¹ã¯ã®çµæã«åºã¥ããŠæ°ããªè³ªåã§ãã©ããŒã¢ããããããã¿ã¹ã¯ã®çµæãæ¹è¯ããããããå ŽåããããŸããããã¯ãå ã®ã¿ã¹ã¯ãšåãã³ã³ããã¹ãIDã䜿çšããŠå¥ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãéå§ããããšã§ã¢ãã«åã§ããŸããã¯ã©ã€ã¢ã³ãã¯ãMessageãªããžã§ã¯ãã®referenceTaskIdsã䜿çšããŠå ã®ã¿ã¹ã¯ãžã®åç §ãæäŸããããšã§ããšãŒãžã§ã³ãã«ããã«ãã³ããäžããããšãã§ããŸãããšãŒãžã§ã³ãã¯ãæ°ããã¿ã¹ã¯ãŸãã¯ã¡ãã»ãŒãžãäœæããŸãã
ã¿ã¹ã¯ãçµäºç¶æ  (completed, cancelled, rejected or failed) ã«éãããšãåéããããšã¯ã§ããŸãããããã«ã¯ããã€ãã®å©ç¹ããããŸãã
ã»ã¿ã¹ã¯ã®äžå€æ§
ã¯ã©ã€ã¢ã³ãã¯ãã¿ã¹ã¯ãšãã®é¢é£ç¶æ
ãææç©ãã¡ãã»ãŒãžã確å®ã«åç
§ã§ããŸããããã«ãããå
¥åãšåºåã®æç¢ºãªãããã³ã°ãå®çŸããŸããã¯ã©ã€ã¢ã³ããã©ã³ããŒããŒããã¿ã¹ã¯å®è¡ã«ãããã³ã°ããã®ã«åœ¹ç«ã¡ãŸãã
ã»æç¢ºãªäœæ¥åäœ
ãã¹ãŠã®æ°èŠãªã¯ãšã¹ãããªãã¡ã€ã³ã¡ã³ãããŸãã¯ãã©ããŒã¢ããã¯åå¥ã®ã¿ã¹ã¯ãšãªããèšåž³ãç°¡çŽ åãããšãŒãžã§ã³ãã®äœæ¥ããã现ãã远跡ã§ããŸãã
ã»åææç©ã¯ããŠãããã¿ã¹ã¯ã«ãã¬ãŒã¹ã§ããŸãã
ã»ãã®äœæ¥åäœã¯ã芪ãšãŒãžã§ã³ãããšãŒãžã§ã³ããªããã£ãã€ã¶ãŒãªã©ã®ä»ã®ã·ã¹ãã ããããããã现ããåç §ã§ããŸãããªã¹ã¿ãŒãå¯èœãªã¿ã¹ã¯ã§ã¯ãåŸç¶ã®ãªãã¡ã€ã³ã¡ã³ãããã¹ãŠãŸãšããŠåŠçããããããäœããã®ã¡ãã»ãŒãžã€ã³ããã¯ã¹ç¯å²ã«é Œãå¿ èŠãçããŸãã
ã»ãã容æãªå®è£
ãšãŒãžã§ã³ãéçºè
ã¯ãã¿ãŒããã«ç¶æ
ã®ã¿ã¹ã¯ãåç
§ãããªã¯ãšã¹ãã«å¯ŸããŠã¯ãåžžã«æ°ããã¿ã¹ã¯ãäœæãããšããã·ã³ãã«ãªã«ãŒã«ã«åŸããŸãã
4-2. 䞊è¡ãã©ããŒã¢ãã
ãšãŒãžã§ã³ããåãã³ã³ããã¹ãIDå ã§éä¿¡ããããã©ããŒã¢ããã¡ãã»ãŒãžããšã«ãåå¥ã®äžŠè¡ã¿ã¹ã¯ãäœæããããšã§ã䞊è¡äœæ¥ããµããŒããããŸããããã«ãããã¯ã©ã€ã¢ã³ãã¯åã ã®ãµãã¿ã¹ã¯ã远跡ããåææ¡ä»¶ãšãªãã¿ã¹ã¯ãå®äºãããšããã«æ°ããäŸåã¿ã¹ã¯ãäœæã§ããŸãã
ã»äŸ
Task 1: Book a flight to Helsinki.
(After Task 1 finishes)
Task 2: Based on Task 1, book a hotel.
Task 3: Based on Task 1, book a snowmobile activity.
(After Task 2 finishes, while Task 3 is still in progress)
Task 4: Based on Task 2, add a spa reservation to the hotel booking.4-3. 以åã®ã¢ãŒãã£ãã¡ã¯ãã®åç §
ãšãŒãžã§ã³ãã¯ãåç §å ã®ã¿ã¹ã¯ãŸãã¯ã³ã³ããã¹ãIDããé¢é£ããã¢ãŒãã£ãã¡ã¯ããæšè«ãã圹å²ãæ ããŸãããµãŒãã³ã°ãšãŒãžã§ã³ãã¯ãææ§ãã解決ããããäžè¶³ããŠããæ å ±ãç¹å®ãããããã®ã«æé©ã§ãã
ææ§ããããå Žå (äŸ : ãªã¯ãšã¹ãã«è€æ°ã®ã¢ãŒãã£ãã¡ã¯ããé©åããå¯èœæ§ãããå Žå)ããšãŒãžã§ã³ãã¯å ¥åå¿ é ç¶æ ãè¿ããŠã¯ã©ã€ã¢ã³ãã«èª¬æãæ±ããŸããã¯ã©ã€ã¢ã³ãã¯ã¬ã¹ãã³ã¹ã§ã¢ãŒãã£ãã¡ã¯ããæå®ã§ããŸããã¯ã©ã€ã¢ã³ãã¯ãªãã·ã§ã³ã§ãããŒãã¡ã¿ããŒã¿ã«ã¢ãŒãã£ãã¡ã¯ãåç § {artifactId, taskId} ãå ¥åã§ããŸããããã«ãããåŸç¶ã¿ã¹ã¯ã®å ¥åãšä»¥åã«çæãããã¢ãŒãã£ãã¡ã¯ããé¢é£ä»ããããšãã§ããŸãã
ãã®ã¢ãããŒãã«ãããã¯ã©ã€ã¢ã³ãã®å®è£ ãã·ã³ãã«ã«ããããšãã§ããŸãã
4-4. ã¢ãŒãã£ãã¡ã¯ãã®å€æŽã®è¿œè·¡
ãã©ããŒã¢ããããªãã¡ã€ã³ã¡ã³ãã«ãã£ãŠãå€ãã¢ãŒãã£ãã¡ã¯ãã倿Žãããæ°ããã¢ãŒãã£ãã¡ã¯ããçæãããå ŽåããããŸãããã®é¢é£æ§ãææ¡ããã¢ãŒãã£ãã¡ã¯ãã®ãã¹ãŠã®å€æŽã远跡ããããšã§ãå°æ¥ã®ã³ã³ããã¹ãã§ã¯ææ°ã®ã³ããŒã®ã¿ã䜿çšãããããã«ããããšãæãŸããã§ããããããã¯ãææ°ã®ã¢ãŒãã£ãã¡ã¯ããå é ãšãããªã³ã¯ãªã¹ãã®ãããªãã®ã§ãã
ããããã¯ã©ã€ã¢ã³ãã¯æãé©ããŠãããçµæãšããŠäœãèæ ®ããããå®éã«æ±ºå®ããŸãããããŠãå®éã«ã¯å€æŽãæåŠããããšãã§ããŸãããããã£ãŠããµãŒãã³ã°ãšãŒãžã§ã³ãã¯ãã®é¢é£æ§ãææãã¹ãã§ã¯ãªããA2Aãããã³ã«ä»æ§ã®äžéšã§ããå¿ èŠã¯ãããŸããããµãŒãã³ã°ãšãŒãžã§ã³ãã¯ãå ã®ã¢ãŒãã£ãã¡ã¯ãã«åºã¥ããŠãªãã¡ã€ã³ã¡ã³ããçæããéã«ãåãã¢ãŒãã£ãã¡ã¯ãåãç¶æããå¿ èŠããããŸãã
ãã©ããŒã¢ãããŸãã¯ãªãã¡ã€ã³ã¡ã³ãã®ã¿ã¹ã¯ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ãææ°ã®ãã¢ãŒãã£ãã¡ã¯ããã€ãŸããªãã¡ã€ã³ã¡ã³ãã®å¯Ÿè±¡ãšãªãã¢ãŒãã£ãã¡ã¯ããåç §ããã®ãæé©ã§ããã¢ãŒãã£ãã¡ã¯ãã®åç §ãæç€ºçã«æå®ãããŠããªãå ŽåããµãŒãã³ã°ãšãŒãžã§ã³ãã¯æ¬¡ã®æäœãå®è¡ã§ããŸãã
ã³ã³ããã¹ãã䜿çšããŠææ°ã®ã¢ãŒãã£ãã¡ã¯ããç¹å®ããããŸãã¯ããããŸãããã³ã³ããã¹ãããµããŒããããŠããªãå Žåã¯ããšãŒãžã§ã³ãã¯ãå ¥åå¿ é ãã䜿çšã§ããŸãã
4-5. ãã©ããŒã¢ããã®äŸ
ã»ã¯ã©ã€ã¢ã³ãããšãŒãžã§ã³ãã«ã¡ãã»ãŒãžãéä¿¡
{
"jsonrpc": "2.0",
"id": "req-001",
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [
{
"kind": "text",
"text": "Generate an image of a sailboat on the ocean."
}
],
"messageId": "msg-user-001"
}
}
}ã»ãšãŒãžã§ã³ããããŒãã®ç»åã§å¿ç
{
"jsonrpc": "2.0",
"id": "req-001",
"result": {
"id": "task-boat-gen-123",
"contextId": "ctx-conversation-abc",
"status": {
"state": "completed",
},
"artifacts": [
{
"artifactId": "artifact-boat-v1-xyz",
"name": "sailboat_image.png",
"description": "A generated image of a sailboat on the ocean.",
"parts": [
{
"kind": "file",
"file": {
"name": "sailboat_image.png",
"mimeType": "image/png",
"bytes": "<base64_encoded_png_data_of_a_sailboat>"
}
}
]
}
],
"kind": "task"
}
}ã»ã¯ã©ã€ã¢ã³ããããŒããèµ€ãå¡ãããšãèŠæ±
以åã®ã¿ã¹ã¯IDãåç
§ããåãã³ã³ããã¹ãIDã䜿çšããŸãã
{
"jsonrpc": "2.0",
"id": "req-002",
"method": "message/send",
"params": {
"message": {
"role": "user",
"messageId": "msg-user-002",
"contextId": "ctx-conversation-abc", // Same contextId
"referenceTaskIds": ["task-boat-gen-123"] // Optional: Referencing the previous task
"parts": [
{
"kind": "text",
"text": "That's great! Can you make the sailboat red?"
// Optional: In case the agent asked for actual relevant artifact.
// Client could provide the artifact data in parts.
// Also it could add metadata to the part to
// reference the specific artifact.
// "metadata": {
// "referenceArtifacts: [
// {
// "artifactId": "artifact-boat-v1-xyz",
// "taskId": "task-boat-gen-123"
// }
// ]
// }
}
],
}
}
}ã»ãšãŒãžã§ã³ããæ°ããã€ã¡ãŒãžã¢ãŒãã£ãã¡ã¯ãã§å¿ç
ã»åãã³ã³ããã¹ãIDã§æ°ããã¿ã¹ã¯ãäœæããŸãã
ã»ããŒãã®ã€ã¡ãŒãžã¢ãŒãã£ãã¡ã¯ãã¯åãååã§ãããã¢ãŒãã£ãã¡ã¯ãIDãæ°ããã§ãã
{
"jsonrpc": "2.0",
"id": "req-002",
"result": {
"id": "task-boat-color-456", // New task ID
"contextId": "ctx-conversation-abc", // Same contextId
"status": {
"state": "completed",
},
"artifacts": [
{
"artifactId": "artifact-boat-v2-red-pqr", // New artifactId
"name": "sailboat_image.png", // Same name as the original artifact
"description": "A generated image of a red sailboat on the ocean.",
"parts": [
{
"kind": "file",
"file": {
"name": "sailboat_image.png",
"mimeType": "image/png",
"bytes": "<base64_encoded_png_data_of_a_RED_sailboat>"
}
}
]
}
],
"kind": "task"
}
}