メむンコンテンツぞスキップ
芋出し画像

Agent2Agent 入門 (9) - タスクの寿呜

    「Agent2Agent」の「タスクの寿呜」に぀いおたずめたした。

    ・Life of a Task

    前回

    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"
      }
    }

    次回



     
     

    npaka

     
     
    プログラマヌ。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガゞェット。幎2冊ペヌスで技術曞を執筆。アニ゜ン / カラオケ / ギタヌ / 猫 twitter : @npaka123

    あなたぞのおすすめ