Building an ACP-Compatible Agent Live — Bennet Fenner, Zed
三句話摘要
Agent Client Protocol (ACP):統一AI編碼代理與編輯器通信的開源JSON RPC協議。 ACP透過統一的JSON RPC協議,使AI代理與編輯器實現無縫集成,開發者可快速構建支援多種客戶端的智能編碼代理,解決行業碎片化問題。 統一介面解決碎片化問題
重點整理
重點- 1
統一介面解決碎片化問題
- 2
Zed面臨的核心痛點是每個AI模型供應商都推出自己的編碼代理,導致編輯器需要為每個代理單獨開發整合方案。ACP透過定義統一的JSON RPC協議,讓任何代理都能與任何支持ACP的客戶端通信,已有超過40個客戶端和多個主流代理支持該協議。
- 3
基於Session和非同步Updates的設計
- 4
ACP引入session概念,每次客戶端連接建立新的session並獲得唯一ID。代理不再侷限於傳統request-response模式,可透過session updates在任何時候向客戶端發送notifications,包括文本chunks、工具調用進展、執行結果等,特別適合流式處理。
- 5
代理透過Capabilities存取客戶端資源
- 6
ACP允許客戶端透過capabilities協商來宣告其支援的功能(如檔案系統proxy、終端管理等)。代理可利用這些能力存取編輯器buffer中未保存的內容,執行shell命令,甚至為自己動態添加新工具,大幅增強代理的互動性和靈活性。
- 7
最少四個核心函數實現完整代理
- 8
實現ACP代理只需要四個函數:initialize(協商協議版本)、create_session(生成session ID)、prompt(運行代理循環和工具調用)、cancel(支持取消操作),大幅降低開發複雜度。
實用技巧與重點
乾貨- 官方資源:
- 網站:agentclientprotocol.com
- 技術基礎:JSON RPC協議
- 已支持的代理:
- OpenCode(內建ACP模式)
- Cursor(內建ACP模式)
- 其他代理通過adapter支持
- 已支持的客戶端(40+):
- OpenClaw(同時是客戶端和代理)
- JetBrains
- Obsidian
- Zed
- 核心概念與API:
- Session:每次連接的對話執行緒
- Session Updates類型:agent_message_chunk、tool_call、tool_call_update
- 代理需實現的四個函數:initialize、create_session、prompt、cancel
- Capabilities:檔案系統proxy、終端管理
- 支援的操作:
- 檔案系統:readFile(native)、proxy through ACP(編輯器buffer)
- 文本流:real-time streaming chunks
- 工具調用:初始化→執行→返回結果
- 終端:命令執行與輸出流式傳輸
結論
結論“ACP透過統一的JSON RPC協議,使AI代理與編輯器實現無縫集成,開發者可快速構建支援多種客戶端的智能編碼代理,解決行業碎片化問題。”
完整解析
詳細Zed是用Rust編寫的AI編碼編輯器,在去年面臨了一個日益嚴重的問題。隨著Claude、Gemini、OpenCode等主流AI模型供應商都開始推出自己的編碼代理和CLI工具,編輯器需要為每個代理單獨開發支援,導致集成工作碎片化且難以維護。Zed團隊認識到業界需要一個統一的協議,於是決定創建Agent Client Protocol (ACP)。
ACP的設計理念源自MCP和LSP的成功,採用JSON RPC作為通信基礎。其核心目標是建立一套統一的interface,使任何AI代理都能與任何支持ACP的客戶端(編輯器、IDE等)進行通信。這個想法獲得了業界廣泛支持——目前已有超過40個客戶端實現ACP支持,包括OpenClaw、JetBrains和Obsidian等知名編輯工具。許多代理也在參與,有的通過adapter將其原生協議轉換為ACP,有的直接在CLI中內建ACP模式。
在會議現場,講者Bennett進行了一場實時演示,展示如何從零開始在15分鐘內構建一個ACP兼容的編碼代理。他從一個最小化的TypeScript代理開始,該代理只支持讀檔案和編輯檔案兩個基本工具。實現ACP支持只需要四個核心函數:initialize用於協商協議版本和功能、create_session用於為每個客戶端連接生成唯一的session ID並初始化內部狀態、prompt用於接收用戶提示並運行代理循環(調用LLM、處理工具調用等)、cancel用於支持取消操作。
ACP的創新設計在於其session和非同步updates的機制。傳統的request-response模式中,客戶端必須等待代理的完整回應。但ACP允許代理在任何時候透過session updates向客戶端發送notifications,包括文本chunks(用於流式輸出)、tool_call updates(標記工具執行的開始和完成)等。這對於長時間運行的操作和實時反饋至關重要。
演示中,Bennett首先展示了如何整合Anthropic API的流式輸出。每當收到一個文本chunk時,代理發送一個type為agent_message_chunk的session update到客戶端,客戶端(Zed編輯器)即時顯示這些chunks。隨後,他為檔案操作添加了工具調用支持,分別在工具執行開始和結束時發送tool_call和tool_call_update,客戶端據此顯示工具執行的進度和結果。
特別值得注意的是ACP對Capabilities的支持。客戶端可以向代理宣告其支持的功能,例如檔案系統proxy和終端管理。檔案系統proxy允許代理存取編輯器buffer中未保存的內容,而不僅限於磁盤上的檔案——這對於編輯器的使用場景至關重要。演示的最後,Bennett展示了一個自舉(bootstrap)例子:他要求代理讀取自己的源碼,然後自動為自己添加一個新的終端工具來執行shell命令。代理成功地修改了自己的代碼,這清楚地展示了ACP的強大和靈活性。整個過程證明了實現一個功能完整的、支持流式輸出、多種工具調用和終端管理的AI編碼代理,並不需要複雜的工程工作。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。


