【ITニュース解説】What is ACP ?
2025年09月03日に「Dev.to」が公開したITニュース「What is ACP ?」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
AIエージェント間の通信を標準化する「ACP」は、異なるシステムのエージェント同士がフレームワークや言語に関わらず、リアルタイムでスムーズに連携できるオープンな通信ルールだ。これにより、大規模で柔軟なAIシステムの開発が容易になる。
ITニュース解説
ACP(Agent Communication Protocol)は、AIエージェントと呼ばれるプログラムたちが互いにスムーズに情報交換し、協力し合えるように作られた共通の仕組みである。これは、異なるプログラミング言語や開発ツール、実行環境で作られたAIエージェントであっても、このACPを使うことで、お互いを認識し、メッセージを送り合い、リアルタイムで連携できるようになることを可能にする。ACPは、Webサイト間の通信で広く使われているHTTPプロトコルと同様に、AIエージェントの世界における基本的な通信手段を目指して開発された、軽量で効率的なオープン標準だと言える。このプロトコルは、個々のエージェントが持つ独自の技術的な詳細を隠し、エージェント同士が対話するための統一された窓口を提供する。これにより、様々なAIエージェントを組み合わせて、より大きなシステムを構築したり、機能を柔軟に追加したり、システムの規模を拡大したりすることが容易になる。
現代のAIシステムでは、情報を検索したり、推論したり、データを分類したり、特定のツールを操作したりと、様々な役割を担う専門的なAIエージェントが数多く活用されている。しかし、これらのエージェントは、LangChainやCrewAIといった独自の開発環境の中で作られることが多く、異なる環境で作られたエージェント同士を連携させるのは非常に難しいという課題があった。ACPは、このようなエージェント間の壁を取り除くために開発された。具体的には、エージェント間の通信方法を統一することで、どのエージェントも同じルールで会話できるようになる。また、テキストだけでなく、画像データやAIが理解しやすい形式のデータ(埋め込みベクトルなど)といった多様な形式のメッセージを送受信できる「マルチモーダルメッセージング」にも対応している。さらに、クラウドサービスに依存せず、自分のコンピューター上やローカルなネットワーク内でエージェントの連携を管理できる「ローカルファーストオーケストレーション」をサポートし、異なる組織が開発したエージェント同士でも互いを簡単に見つけて協力し合える仕組みを提供する。
ACPは、AIエージェントがどのように配置され、動作するかについて、いくつかの柔軟な設計パターンを提供している。一つは「単一エージェントサーバー」で、エージェントを利用する側のプログラムであるクライアントが、RESTインターフェースと呼ばれるWeb APIを通じて、一つのエージェントと通信するシンプルな構成だ。これは小規模なテストやデバッグに適している。次に「マルチエージェントサーバー」では、一つのサーバーの中に複数のエージェントが共存し、それぞれのエージェントは識別情報に基づいて通信の宛先として指定される。これにより、より多くのエージェントを効率的に管理できる構成となる。「分散マルチサーバー」は、複数のサーバーがそれぞれ独立してエージェントをホストする形式で、システムを大きく拡張したり、一部のサーバーに障害が起きてもシステム全体が停止しないようにしたり、柔軟な配置を可能にする。そして「ルーターエージェントパターン」は、中央に配置されたルーター役のエージェントが、受け取った複雑なタスクを小さな部分に分解し、それぞれの専門エージェントに振り分け、最終的な結果を統合する役割を担う。これにより、複数のエージェントが並行して作業を進めたり、高度な連携を実現したりできる。
ACPでは、エージェントとやり取りするための具体的な命令の窓口として、RESTfulなエンドポイントを最小限の数で定義している。これらのエンドポイントは、Webアプリケーションでよく使われるAPIと同じように機能する。エージェントの「実行ライフサイクル」に関するエンドポイントとして、新しいエージェントの処理を開始する/runs(POSTメソッド)、特定の処理の現在の状態や結果を取得する/runs/{run_id}(GETメソッド)、一時停止中の処理を再開する/runs/{run_id}(POSTメソッド)、そして進行中の処理をキャンセルする/runs/{run_id}/cancel(POSTメソッド)がある。ここで{run_id}は、各処理に割り当てられる一意の識別子を意味する。また、「エージェントのメタデータと発見」に関するエンドポイントとして、利用可能なエージェントのリストを取得する/agents(GETメソッド)や、特定のエージェントの詳細情報を取得する/agents/{agent_id}(GETメソッド)がある。さらに、「メッセージ交換」のためのエンドポイントとして、特定のエージェントにメッセージを送信する/agents/{agent_id}/messages(POSTメソッド)や、送信したメッセージへの応答を取得する/agents/{agent_id}/messages/{message_id}/response(GETメソッド)も用意されている。
ACPはいくつかの重要な特徴を持っている。まず、特定の開発フレームワークに縛られない「フレームワーク非依存性」があるため、LangChainやCrewAI、AutoGenといった既存のツールだけでなく、独自に作成したAIエージェントでも問題なく連携できる。次に、「RESTベース」であるため、一般的なWeb通信プロトコルであるHTTPを利用し、開発者にとって馴染みやすく、既存のWeb技術との相性が良い。通信の方式も、要求が送られたらすぐに結果を返す「同期通信」と、要求を送った後にバックグラウンドで処理を進めて後から結果を通知する「非同期通信」の両方に対応している。エージェントが過去の会話内容を記憶して続ける「ステートフル」な運用と、毎回独立したやり取りをする「ステートレス」な運用の両方をサポートし、柔軟なシステム設計を可能にする。また、リアルタイムでの対話を実現する「ストリーミング」機能も持ち、エージェントがオンラインかオフラインかに関わらず、互いを発見できる「発見メカニズム」も提供される。さらに、「オープンガバナンス」という特徴があり、特定の企業だけでなく、多くの開発者コミュニティによって開発が進められ、標準化されていくことで、常に進化し続ける仕組みになっている。
Pythonを使ったACPサーバーの簡単な実装例では、「SreeniParrotAgent」という名前のAIエージェントが紹介されている。このエージェントは、ACP SDK(ソフトウェア開発キット)であるacp_sdkを使って構築され、受け取ったメッセージをそのまま30秒間待った後に、クライアントに返すというシンプルな動作をする。これは、AIエージェントが何らかの処理を行うのに時間がかかる状況をシミュレーションしたものだ。Server()という一行でACPサーバーのインスタンスを作成し、@server.agentという特別な記述(デコレーターと呼ばれる)を使って、SreeniParrotAgentという名前と「受け取ったメッセージを繰り返すエージェント」という説明、そしてバージョンや作者といったメタデータをこのエージェントに設定している。そして、async def SreeniParrotAgent(messages: list)という非同期関数の中で、クライアントから送られてきたメッセージをループ処理し、asyncio.sleep(30)で30秒間処理を停止させる。その後、yield MessagePart(...)を使って、受け取ったメッセージの内容を「output」としてクライアントに返す仕組みになっている。これにより、クライアントはエージェントが30秒間処理をした後に応答を返すことを体験できる。
ACPクライアントの例では、Pythonのrequestsライブラリを使って、先に説明したACPサーバーの様々なエンドポイントが実際にどのように使われるかを示している。このクライアントは、まずサーバーが稼働しているかを確認する/pingエンドポイントを呼び出す。次に、/agentsエンドポイントを使って利用可能なエージェントのリストを取得し、さらに/agents/{agent_id}エンドポイントを使って「SreeniParrotAgent」の詳細情報を読み取る。最も重要なのは、エージェントに処理を開始させる/runsエンドポイントの利用例である。ここでは、example_payloadというデータ(辞書形式)に、「SreeniParrotAgent」に「Hello, World!」というテキストメッセージを送るよう指示する情報が格納されている。クライアントはこのペイロードを/runsにPOSTリクエストとして送信し、新しい「実行(run)」を開始する。この実行が開始されると、サーバーはrun_idと呼ばれる一意の識別子を返す。クライアントはこのrun_idを使って、/runs/{run_id}エンドポイントから実行の現在の状態や「SreeniParrotAgent」から返された出力メッセージを読み取ることができる。さらに、resume_payloadを使って、既存の実行に追加のメッセージを送信し、処理を再開する/runs/{run_id}(POSTメソッド)の例も含まれており、エージェントとの継続的な対話の仕組みが示されている。
このように、ACPはAIエージェント間の通信に関する重要な課題を解決し、AIシステムの開発において大きな進歩をもたらすものと期待されている。このプロトコルが提供するフレームワークに依存しないアプローチは、より堅牢で、拡張性が高く、そして多くのエージェントが協調して動作するAIシステムの構築を可能にする。ステートフル(状態を記憶する)とステートレス(状態を記憶しない)の両方の運用をサポートし、RESTベースのアーキテクチャを持つACPは、現代のマイクロサービスやイベント駆動型のシステムにAIエージェントを組み込む上で理想的な選択肢となるだろう。AI技術がこれからも進化を続ける中で、ACPがコミュニティ主導で開発され、標準化されていくことで、常に新しいニーズに対応し、適応し続けることが期待される。システムエンジニアを目指す開発者にとって、ACPはAIエージェント間の断片化された現状を克服し、よりダイナミックなAIソリューションを創造するための強固な基盤を提供するものとなる。