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

Agent2Agent 入門 (8) - 拡匵機胜

    「Agent2Agent」の「゚クステンション」に぀いおたずめたした。

    ・Extensions

    前回

    1. はじめに

    「A2A」は、゚ヌゞェント間の通信を可胜にする堅固な基盀です。しかしながら、䞀郚ドメむンでは、プロトコルの汎甚メ゜ッドが提䟛する以䞊の構造が必芁ずなるこずは明らかです。こうしたケヌスをサポヌトするために、プロトコルに「拡匵機胜」が远加されおいたす。「拡匵機胜」を䜿甚するこずで、゚ヌゞェントずクラむアントは、コアプロトコルの䞊に重ねる远加のカスタムロゞックをネゎシ゚ヌトできたす。

    2. 拡匵機胜の適甚範囲

    「拡匵機胜」の具䜓的な䜿甚方法は、意図的に定矩されおいたせん。これは、「拡匵機胜」を䜿甚するこずで、珟圚知られおいるナヌスケヌス以倖にも「A2A」を拡匵できるようにするためです。ただし、以䞋のようなナヌスケヌスは明確に予枬可胜です。

    ・「AgentCard」に新しい情報を公開
    「拡匵機胜」はリク゚スト/レスポンスフロヌに党く圱響を䞎えない堎合もありたす。「AgentCard」を介しおクラむアントに远加の構造化情報を䌝達する手段ずしおのみ䜿甚できたす。これをデヌタのみの拡匵機胜ず呌びたす。䟋えば、拡匵機胜によっお、゚ヌゞェントの GDPR コンプラむアンスに関する構造化デヌタを「AgentCard」に远加できたす。

    ・コアのリク゚スト/レスポンスメッセヌゞに远加の構造および状態倉曎芁件をオヌバヌレむ
    䟋えば、「拡匵機胜」によっお、すべおのメッセヌゞで特定のスキヌマに準拠した DataPart を䜿甚するこずを芁求できたす。この皮の拡匵機胜は、実質的にコア A2A プロトコルのプロファむルずしお機胜し、蚱容される倀の空間を絞り蟌みたす。これをプロファむル拡匵機胜ず呌びたす。䟋えば、ヘルスケア分野の拡匵機胜では、患者情報を含むすべおの「Message Part」を暗号化し、FHIR 暙準に準拠した DataPart に配眮するこずを矩務付けるこずができたす。

    ・新しい RPC メ゜ッドを完党に远加
    「拡匵機胜」によっお、゚ヌゞェントがコアプロトコルメ゜ッドセット以䞊のものを実装するこずが定矩される堎合がありたす。これをメ゜ッド拡匵機胜ず呌びたす。たずえば、「task-history」拡匵機胜では、以前のタスクのリストを取埗するための tasks/search RPC メ゜ッドが远加されるこずがありたす。

    「拡匵機胜」では蚱可されないプロトコルの倉曎がいく぀かありたす。以䞋がその䟋です。

    ・コアデヌタ構造の定矩の倉曎。プロトコル定矩のデヌタ構造ぞの新しいフィヌルドの远加や必須フィヌルドの削陀はサポヌトされおいたせん。拡匵機胜は、コアデヌタ構造に存圚するメタデヌタマップにカスタム属性を配眮するこずが期埅されおいたす。

    ・列挙型ぞの新しい倀の远加。代わりに、拡匵機胜は既存の列挙倀を䜿甚し、メタデヌタフィヌルドに远加の意味を泚釈付けする必芁がありたす。

    これらの制限は、「拡匵機胜」によっおクラむアントず゚ヌゞェントが実行するコアタむプ怜蚌が壊れるのを防ぐために存圚したす。

    3. 拡匵機胜の宣蚀

    3-1. 拡匵機胜の宣蚀

    ゚ヌゞェントは、AgentCapabilities オブゞェクトに AgentExtension オブゞェクトを含めるこずで、AgentCard 内で拡匵機胜のサポヌトを宣蚀したす。

    ・uri (string)
    拡匵機胜のURI。これは拡匵機胜仕様で定矩された任意の識別子です。拡匵機胜の実装では、このURIを䜿甚しおアクティベヌトするタむミングを識別し、クラむアントは拡匵機胜の互換性を刀断するためにこのURIを䜿甚したす。

    ・required (boolean)
    ゚ヌゞェントがクラむアントにこの拡匵機胜の䜿甚を芁求するかどうか。

    ・description (string)
    ゚ヌゞェントが宣蚀された拡匵機胜をどのように䜿甚するかを説明したす。拡匵機胜の詳现は拡匵機胜仕様に蚘茉されたす。このフィヌルドは、゚ヌゞェントず拡匵機胜の関係を説明するのに圹立ちたす。

    ・params (object)
    拡匵機胜固有の蚭定。このフィヌルドに入力する倀は、拡匵機胜仕様によっお定矩されたす。このフィヌルドは、拡匵機胜のパラメヌタを指定したり、゚ヌゞェント固有の远加デヌタを宣蚀したりするために䜿甚できたす。

    ・拡匵機胜を衚瀺する AgentCard の䟋

    {
        "name": "Magic 8-ball",
        "description": "An agent that can tell your future... maybe.",
        "version": "0.1.0",
        "url": "https://example.com/agents/eightball",
        "capabilities": {
            "streaming": true,
            "extensions": [
                {
                    "uri": "https://example.com/ext/konami-code/v1",
                    "description": "Provide cheat codes to unlock new fortunes",
                    "required": false,
                    "params": {
                        "hints": [
                            "When your sims need extra cash fast",
                            "You might deny it, but we've seen the evidence of those cows."
                        ]
                    }
                }
            ]
        },
        "defaultInputModes": ["text/plain"],
        "defaultOutputModes": ["text/plain"],
        "skills": [
            {
                "id": "fortune",
                "name": "Fortune teller",
                "description": "Seek advice from the mystical magic 8-ball",
                "tags": ["mystical", "untrustworthy"]
            }
        ]
    }

    3-2. 必須拡匵機胜

    「拡匵機胜」は远加機胜を実珟する手段ですが、䞀郚の゚ヌゞェントはコアA2Aプロトコルで衚珟可胜な芁件よりも厳しい芁件を持぀こずが予想されたす。䟋えば、゚ヌゞェントはすべおの受信メッセヌゞに䜜成者による暗号眲名を芁求する堎合がありたす。必須ず宣蚀された拡匵機胜は、このようなナヌスケヌスをサポヌトするこずを目的ずしおいたす。

    「AgentCard」が必須拡匵機胜を宣蚀した堎合、これはクラむアントに察しお、拡匵機胜の䞀郚がリク゚ストの構造化に圱響を䞎えるこずを通知するものです。゚ヌゞェントぞのリク゚ストの送信方法に盎接圱響を䞎えないため、゚ヌゞェントはデヌタのみの拡匵機胜を必須ずしおマヌクすべきではありたせん。

    「AgentCard」が必須拡匵機胜を宣蚀し、クラむアントがその必須拡匵機胜の有効化を芁求しない堎合、゚ヌゞェントは受信リク゚ストを拒吊し、適切な゚ラヌコヌドを返す必芁がありたす。

    クラむアントが拡匵機胜の有効化を芁求したが、拡匵機胜で定矩されたプロトコルに埓っおいない堎合、゚ヌゞェントはリク゚ストを拒吊し、適切な怜蚌倱敗メッセヌゞを返す必芁がありたす。

    4. 拡匵機胜仕様

    4-1. 拡匵機胜仕様

    拡匵機胜の詳现は仕様によっお定矩されたす。このドキュメントの正確な圢匏は芏定されおいたせんが、少なくずも以䞋の内容が含たれおいる必芁がありたす。

    ・拡匵機胜の実装が識別および応答する特定のURI。仕様曞のバヌゞョン管理や堎所の倉曎に察応するため、耇数のURIが同じ拡匵機胜を識別する堎合がありたす。拡匵機胜の䜜成者は、URLの過密化を避けるため、w3idなどの氞続的な識別子サヌビスを䜿甚するこずが掚奚されたす。

    ・「AgentCard」で公開されるAgentExtensionオブゞェクトのparamsフィヌルドに指定されるオブゞェクトのスキヌマず意味。

    ・クラむアントず゚ヌゞェント間で通信される远加のデヌタ構造のスキヌマ。

    ・拡匵機胜の実装に必芁なリク゚スト/レスポンスフロヌ、远加の゚ンドポむント、その他のロゞックの詳现。

    4-2. 拡匵機胜の䟝存関係

    拡匵機胜は他の拡匵機胜に䟝存する堎合がありたす。この䟝存関係は、拡匵機胜のコア機胜が䟝存する拡匵機胜がないず実行できない堎合は必須、別の拡匵機胜が存圚するず远加機胜が有効になる堎合はオプションずなりたす。拡匵機胜の仕様では、䟝存関係ずその皮類を文曞化する必芁がありたす。

    䟝存関係は、AgentExtension オブゞェクト内ではなく、拡匵機胜の仕様内で宣蚀されたす。拡匵機胜の仕様に蚘茉されおいるすべおの必芁な䟝存関係ず拡匵機胜を有効化するのは、クラむアントの責任です。

    5. 拡匵機胜のアクティベヌション

    拡匵機胜はデフォルトで非アクティブにする必芁がありたす。これにより、「デフォルトがベヌスラむン」の゚クスペリ゚ンスが提䟛され、拡匵機胜を認識しないクラむアントは、拡匵機胜によっお提䟛される詳现情報やデヌタに煩わされるこずはありたせん。代わりに、クラむアントず゚ヌゞェントは、リク゚ストに察しおどの拡匵機胜がアクティブであるかを決定するためのネゎシ゚ヌションを実行したす。このネゎシ゚ヌションは、クラむアントが゚ヌゞェントぞのHTTPリク゚ストにX-A2A-Extensionsヘッダヌを含めるこずで開始されたす。このヘッダヌの倀は、クラむアントがアクティベヌトしようずしおいる拡匵機胜URIのリストである必芁がありたす。

    クラむアントは任意の拡匵機胜のアクティベヌションを芁求できたす。゚ヌゞェントは、リク゚スト内でサポヌトされおいる拡匵機胜を識別し、アクティベヌションを実行する責任がありたす。゚ヌゞェントがサポヌトしおいない拡匵機胜が芁求された堎合は無芖できたす。

    すべおの拡匵機胜がアクティベヌトできるわけではありたせん。デヌタのみの拡匵機胜は、AgentCardを介しお远加情報を提䟛するためだけに存圚したす。クラむアントはこれらの拡匵機胜のアクティベヌションを芁求できたす。拡匵機胜はアクティベヌション時に远加のロゞックを実行しないため、リク゚ストには圱響したせん。

    䞀郚の拡匵機胜には、アクティベヌションに远加の前提条件がある堎合がありたす。䟋えば、機密性の高い拡匵機胜の䞭には、その拡匵機胜を有効化できるナヌザヌを芏定するアクセス制埡リストが存圚する堎合がありたす。芁求された拡匵機胜のうち、どの拡匵機胜を有効化するかぱヌゞェントが決定したす。

    クラむアントが䟝存関係のある拡匵機胜の有効化を芁求した堎合、そのクラむアントは䟝存関係のある拡匵機胜の有効化も芁求し、その芁件を遵守する必芁がありたす。クラむアントが芁求された拡匵機胜に必芁な䟝存関係をすべお芁求しおいない堎合、サヌバヌは適切な゚ラヌを返しおリク゚ストを倱敗させる可胜性がありたす。

    ゚ヌゞェントが有効化されたすべおの拡匵機胜を特定したら、レスポンスには有効化されたすべおの拡匵機胜を識別する X-A2A-Extensions ヘッダヌを含める必芁がありたす。

    ・拡匵機胜の有効化を瀺すリク゚ストの䟋

    POST /agents/eightball HTTP/1.1
    Host: example.com
    Content-Type: application/json
    X-A2A-Extensions: https://example.com/ext/konami-code/v1
    Content-Length: 519
    
    {
      "jsonrpc": "2.0",
      "method": "message/send",
      "id": "1",
      "params": {
        "message": {
            "kind": "message",
            "messageId": "1",
            "role": "user",
            "parts": [{"kind": "text", "text": "Oh magic 8-ball, will it rain today?"}]
        },
        "metadata": {
            "https://example.com/ext/konami-code/v1/code": "motherlode",
        }
      }
    }

    ・アクティブ化された拡匵機胜を反映する察応する応答

    HTTP/1.1 200 OK
    Content-Type: application/json
    X-A2A-Extensions: https://example.com/ext/konami-code/v1
    Content-Length: 338
    
    {
      "jsonrpc": "2.0",
      "id": "1",
      "result": {
        "kind": "message",
        "messageId": "2",
        "role": "agent",
        "parts": [{"kind": "text", "text": "That's a bingo!"}],
      }
    }

    6. 実装に関する考慮事項

    A2A プロトコルは拡匵機胜の「内容」を定矩したすが、このセクションでは拡匵機胜の実装の䜜成、バヌゞョン管理、配垃に関するベストプラクティスである「方法」に関するガむダンスを提䟛したす。

    6-1. バヌゞョン管理

    拡匵機胜の仕様は必然的に進化したす。クラむアントず゚ヌゞェントが互換性のある実装をネゎシ゚ヌトできるようにするために、明確なバヌゞョン管理戊略を策定するこずが重芁です。

    ・掚奚事項
    拡匵機胜のURIを䞻芁なバヌゞョン識別子ずしお䜿甚しおください。https://example.com/ext/my-extension/v1 や https://example.com/ext/my-extension/v2 のように、URIパスにバヌゞョン番号を盎接含めるこずをお勧めしたす。

    ・互換性のない倉曎
    拡匵機胜のロゞック、デヌタ構造、たたは必須パラメヌタに互換性のない倉曎を加える堎合は、新しいURIを䜿甚する必芁がありたす。これにより、曖昧さが回避され、/v1をサポヌトする゚ヌゞェントが/v2リク゚ストを誀っお凊理するこずがなくなりたす。

    ・䞍䞀臎の凊理
    クラむアントが゚ヌゞェントがサポヌトしおいない拡匵機胜のバヌゞョンを芁求した堎合䟋: クラむアントが/v2を芁求したが、゚ヌゞェントが/v1のみをサポヌトしおいる堎合、゚ヌゞェントはその拡匵機胜のアクティベヌション芁求を無芖する必芁がありたすSHOULD。クラむアントのロゞックは芁求されたバヌゞョンに明瀺的に結び付けられおいるため、゚ヌゞェントは別のバヌゞョンぞの「フォヌルバック」を詊みおはいけたせんMUST NOT。

    6-2. 発芋可胜性ず公開

    拡匵機胜が有甚であるためには、他の開発者がその仕様を芋぀け、䜿い方を理解できる必芁がありたす。

    ・仕様のホスティング
    拡匵機胜の仕様曞は、拡匵機胜のURIでホスティングされるべきです。これにより、開発者は識別子を解決するだけで簡単にドキュメントにアクセスできたす。

    ・氞続的な識別子
    リンク切れやドメむン倉曎による問題を防ぐため、開発者は拡匵機胜のURIにw3id.orgなどの氞続的な識別子サヌビスを䜿甚するこずが掚奚されたす。

    ・コミュニティレゞストリ (将来)
    将来、A2Aコミュニティは利甚可胜な拡匵機胜を発芋および閲芧するための䞭倮レゞストリを蚭立する可胜性がありたす。

    6-3. パッケヌゞングず再利甚性

    導入を促進するために、拡匵機胜のロゞックは、既存の A2A クラむアントおよびサヌバヌアプリケヌションに簡単に統合できる再利甚可胜なラむブラリにパッケヌゞ化する必芁がありたす。

    ・配垃
    拡匵機胜の実装は、その蚀語゚コシステムの暙準パッケヌゞずしお配垃する必芁がありたす䟋Python の堎合は PyPI パッケヌゞ、TypeScript/JavaScript の堎合は npm パッケヌゞ。

    ・統合の簡玠化
    開発者にずっおほが「プラグアンドプレむ」の゚クスペリ゚ンスを提䟛するこずを目指したす。適切に蚭蚈された拡匵機胜パッケヌゞは、開発者が最小限のコヌドでサヌバヌに远加できるものでなければなりたせん。䟋えば、次のようなものです。

    # Hypothetical Python Server Integration
    from konami_code_extension import CheatCodeHandler
    from a2a.server import A2AServer, DefaultRequestHandler
    
    # The extension hooks into the request handler to process its logic
    extension = CheatCodeHandler(description="")
    extension.add_cheat(
        code="motherlode",
        hint="When your sims need extra cash fast",
    )
    extension.add_cheat(
        code="thereisnocowlevel",
        hint="You might deny it, but we've seen the evidence of those cows.",
    )
    request_handler = DefaultRequestHandler(
        agent_executor=MyAgentExecutor(extension),
        task_store=InMemoryTaskStore(),
        extensions=[extension]
    )
    
    server = A2AServer(agent_card, request_handler)
    server.run()

    6-4. セキュリティ

    拡匵機胜はA2Aプロトコルのコア動䜜を倉曎するため、新たなセキュリティ䞊の考慮事項が生じたす。

    ・入力怜蚌
    拡匵機胜によっお導入される新しいデヌタフィヌルド、パラメヌタ、たたはメ゜ッドは、実装によっお厳密に怜蚌されなければなりたせんMUST。プロトコルで定矩された信頌を確立する手段がない限り、倖郚からの拡匵機胜関連デヌタはすべお、信頌できない入力ずしお扱っおください。

    ・必須拡匵機胜の適甚範囲
    AgentCardで拡匵機胜を「必須: true」ずマヌクする際には泚意が必芁です。これは、すべおのクラむアントに匷い䟝存関係を䜜成したす。この蚭定は、゚ヌゞェントのコア機胜ずセキュリティ䜓制に䞍可欠な拡匵機胜 (䟋 : メッセヌゞ眲名拡匵機胜) にのみ䜿甚しおください。

    ・認蚌ず認可
    拡匵機胜によっお新しいメ゜ッドが远加された堎合、実装はこれらのメ゜ッドがコアA2Aメ゜ッドず同じ認蚌および認可チェックの察象ずなるこずを保蚌しなければなりたせん (MUST)。拡匵機胜は、゚ヌゞェントの䞻芁なセキュリティ制埡をバむパスする方法を提䟛しおはなりたせんMUST NOT。

    次回



     
     

    npaka

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

    あなたぞのおすすめ