ai-agents-for-beginners

使用 Agentic Protocols(MCP、A2A 和 NLWeb)

Agentic Protocols

隨著 AI 代理的使用日益增長,對於能夠確保標準化、安全性以及支持開放創新的協議需求也越來越高。在本課程中,我們將介紹三種旨在滿足這些需求的協議——模型上下文協議(MCP)、代理對代理(A2A)以及自然語言網絡(NLWeb)。

簡介

在本課程中,我們將探討:

MCP 如何讓 AI 代理訪問外部工具和數據以完成用戶任務。

A2A 如何促進不同 AI 代理之間的通信與協作。

NLWeb 如何為任何網站帶來自然語言界面,使 AI 代理能夠發現並與內容互動。

學習目標

識別 MCP、A2A 和 NLWeb 在 AI 代理背景下的核心目的和優勢。

解釋 每種協議如何促進 LLM、工具和其他代理之間的通信與互動。

認識 每種協議在構建複雜代理系統中所扮演的不同角色。

模型上下文協議

模型上下文協議(MCP) 是一種開放標準,為應用程序提供了一種標準化方式,向 LLM 提供上下文和工具。這使得 AI 代理能夠以一致的方式連接到不同的數據源和工具,充當“通用適配器”。

讓我們來看看 MCP 的組成部分、與直接 API 使用相比的優勢,以及 AI 代理如何使用 MCP 服務器的示例。

MCP 核心組成部分

MCP 基於 客戶端-服務器架構,其核心組成部分包括:

主機 是 LLM 應用程序(例如像 VSCode 這樣的代碼編輯器),負責啟動與 MCP 服務器的連接。

客戶端 是主機應用程序中的組件,維護與服務器的一對一連接。

服務器 是輕量級程序,負責提供特定功能。

協議中包含三個核心原語,這些是 MCP 服務器的功能:

工具:這些是 AI 代理可以調用以執行操作的離散功能或操作。例如,天氣服務可能提供“獲取天氣”工具,或者電子商務服務器可能提供“購買產品”工具。MCP 服務器會在其功能列表中廣告每個工具的名稱、描述以及輸入/輸出結構。

資源:這些是 MCP 服務器可以提供的只讀數據項或文檔,客戶端可以按需檢索它們。示例包括文件內容、數據庫記錄或日誌文件。資源可以是文本(如代碼或 JSON)或二進制(如圖像或 PDF)。

提示:這些是預定義模板,提供建議的提示,允許更複雜的工作流程。

MCP 的優勢

MCP 為 AI 代理提供了顯著的優勢:

動態工具發現:代理可以動態接收服務器提供的可用工具列表以及工具的描述。這與傳統 API 形成對比,後者通常需要靜態編碼進行集成,意味著任何 API 更改都需要更新代碼。MCP 提供了一種“僅需一次集成”的方法,從而提高了適應性。

跨 LLM 的互操作性:MCP 可在不同的 LLM 上運行,提供靈活性以切換核心模型以評估更好的性能。

標準化安全性:MCP 包括標準身份驗證方法,當添加對其他 MCP 服務器的訪問時,這提高了可擴展性。這比管理不同的密鑰和身份驗證類型的傳統 API 更簡單。

MCP 示例

MCP Diagram

假設用戶希望使用 MCP 驅動的 AI 助手預訂航班。

  1. 連接:AI 助手(MCP 客戶端)連接到航空公司提供的 MCP 服務器。

  2. 工具發現:客戶端詢問航空公司的 MCP 服務器,“你有哪些可用工具?”服務器回應提供工具,例如“搜索航班”和“預訂航班”。

  3. 工具調用:然後你向 AI 助手提出要求,“請搜索從波特蘭到檀香山的航班。”AI 助手使用其 LLM 確定需要調用“搜索航班”工具,並將相關參數(出發地、目的地)傳遞給 MCP 服務器。

  4. 執行與回應:MCP 服務器作為封裝器,實際調用航空公司的內部預訂 API。然後接收航班信息(例如 JSON 數據),並將其發送回 AI 助手。

  5. 進一步互動:AI 助手展示航班選項。一旦你選擇了航班,助手可能會調用同一 MCP 服務器上的“預訂航班”工具,完成預訂。

代理對代理協議(A2A)

雖然 MCP 專注於將 LLM 連接到工具,代理對代理協議(A2A) 更進一步,促進不同 AI 代理之間的通信與協作。A2A 連接來自不同組織、環境和技術堆棧的 AI 代理,以完成共享任務。

我們將探討 A2A 的組成部分和優勢,以及它如何應用於我們的旅行應用程序。

A2A 核心組成部分

A2A 專注於促進代理之間的通信,並讓它們協作完成用戶的子任務。協議的每個組成部分都為此做出了貢獻:

代理卡片

類似於 MCP 服務器共享工具列表,代理卡片包含:

代理執行器

代理執行器負責將用戶聊天的上下文傳遞給遠程代理,遠程代理需要這些上下文來理解需要完成的任務。在 A2A 服務器中,代理使用自己的大型語言模型(LLM)解析傳入請求並使用其內部工具執行任務。

工件

一旦遠程代理完成了請求的任務,其工作成果就會被創建為工件。工件包含代理完成工作的結果完成的描述以及通過協議傳遞的文本上下文。工件發送後,與遠程代理的連接將關閉,直到再次需要。

事件隊列

此組件用於處理更新和傳遞消息。在生產環境中,事件隊列對於代理系統尤為重要,防止代理之間的連接在任務完成之前被關閉,特別是當任務完成時間可能較長時。

A2A 的優勢

增強協作:它使來自不同供應商和平台的代理能夠互動、共享上下文並協作工作,促進跨傳統上分離系統的無縫自動化。

模型選擇靈活性:每個 A2A 代理可以決定使用哪個 LLM 來處理其請求,允許每個代理使用優化或微調的模型,而不像某些 MCP 場景中僅限於單一 LLM 連接。

內置身份驗證:身份驗證直接集成到 A2A 協議中,為代理交互提供了強大的安全框架。

A2A 示例

A2A Diagram

讓我們擴展旅行預訂場景,但這次使用 A2A。

  1. 用戶向多代理提出請求:用戶與“旅行代理”A2A 客戶端/代理互動,可能會說:“請為下週安排一次檀香山的完整旅行,包括航班、酒店和租車。”

  2. 旅行代理的編排:旅行代理收到這個複雜請求。它使用其 LLM 推理任務,並確定需要與其他專業代理互動。

  3. 代理間通信:旅行代理然後使用 A2A 協議連接到下游代理,例如由不同公司創建的“航空代理”、“酒店代理”和“租車代理”。

  4. 委派任務執行:旅行代理向這些專業代理發送具體任務(例如“查找檀香山的航班”、“預訂酒店”、“租車”)。每個專業代理運行自己的 LLM 並使用自己的工具(這些工具可能本身是 MCP 服務器),完成其特定部分的預訂。

  5. 綜合回應:一旦所有下游代理完成任務,旅行代理匯總結果(航班詳情、酒店確認、租車預訂),並以綜合的聊天式回應發送回用戶。

自然語言網絡(NLWeb)

網站一直是用戶訪問互聯網信息和數據的主要方式。

讓我們看看 NLWeb 的不同組成部分、NLWeb 的優勢,以及通過我們的旅行應用程序來了解 NLWeb 的工作示例。

NLWeb 的組成部分

NLWeb 示例

NLWeb

考慮我們的旅行預訂網站,但這次由 NLWeb 驅動。

  1. 數據攝取:旅行網站的現有產品目錄(例如航班列表、酒店描述、旅遊套餐)使用 Schema.org 格式化或通過 RSS 提要加載。NLWeb 的工具攝取這些結構化數據,創建嵌入,並將它們存儲在本地或遠程向量數據庫中。

  2. 自然語言查詢(人類):用戶訪問網站,並且不需要導航菜單,而是輸入到聊天界面:“幫我找到檀香山適合家庭入住且有游泳池的酒店,下週入住。”

  3. NLWeb 處理:NLWeb 應用程序接收到此查詢。它將查詢發送到 LLM 進行理解,同時搜索其向量數據庫以查找相關的酒店列表。

  4. 準確結果:LLM 幫助解釋數據庫的搜索結果,根據“適合家庭”、“游泳池”和“檀香山”的標準識別最佳匹配,然後格式化自然語言回應。關鍵是,回應引用網站目錄中的實際酒店,避免虛構信息。

  5. AI 代理互動:由於 NLWeb 充當 MCP 服務器,外部 AI 旅行代理也可以連接到該網站的 NLWeb 實例。AI 代理可以使用 ask MCP 方法直接查詢網站:ask("檀香山地區有沒有酒店推薦的素食餐廳?")。NLWeb 實例將處理此查詢,利用其餐廳信息數據庫(如果已加載),並返回結構化的 JSON 回應。

有關 MCP/A2A/NLWeb 的更多問題?

加入 Azure AI Foundry Discord,與其他學習者交流,參加辦公時間並解答你的 AI 代理問題。

資源


免責聲明
本文件已使用人工智能翻譯服務 Co-op Translator 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。