18 分钟从空文件敲出一个能读写文件、开终端的 ACP 代理
Building an ACP-Compatible Agent Live — Bennet Fenner, Zed · Bennet Fenner
全片 18 分钟·真正值得盯屏约 9 分钟·3 个必看点
- 0:14 – 2:40听
为什么是编辑器厂商来定这个协议
命令行编码代理井喷之后,编辑器一侧需要一个通用接入口。作者把 ACP 类比成代理界的语言服务器协议:一套开源的 JSON-RPC 约定,让任意代理和任意客户端对话。
ACP 解决的不是模型能力问题,而是「每接一个代理就要重写一遍集成」的重复劳动。
这段基本是站着讲来龙去脉,画面停在标题页,通勤路上听音频不损失信息。▶ 跳到 0:14讲者 · Bennet Fenner - 2:40 – 4:42听
所有编码代理其实是同一个循环
模型接口本身没有记忆,每一轮都要把完整对话重新发过去;模型要么回一段文本结束回合,要么请求调用工具,本地执行完把结果送回去继续转。作者强调一个能用的代理只需要两个工具:读文件,以及给出路径、旧文本、新文本做替换的编辑文件。
把「编码代理」的神秘感拆掉——它就是一个循环加两个工具,其余都是外围工程。
讲的是概念骨架,屏幕上只有一段简短的工具定义,听清楚循环怎么转就够了。▶ 跳到 2:40讲者 · Bennet Fenner - 4:42 – 7:30略
四个方法就能让代理开口说 ACP
改用官方 TypeScript 库后,代理只要实现四件事:握手时回应支持的协议版本和自身能力、认证(这里直接跳过)、新建会话时生成一个会话 ID 并绑定工作目录、以及接收提示词内容并驱动工具循环,再加上一个取消的支持。
接入成本比想象低得多——四个方法,外加一个能被中断的约定。
屏幕是一个个方法壳子被填上,结构比细节重要;扫一眼每个方法的名字和它负责的那件事,语音跟着听即可。▶ 跳到 4:42讲者 · Bennet Fenner - 7:30 – 9:20看
第一次跑通:能收到消息,但界面是空的
调试面板里可以看到客户端发来新建会话请求、代理回一个会话 ID、然后收到提示词。可界面上什么都没显示,原因是代理拿到模型输出后没往回推。修法是在流式文本事件里,每收到一块文本就带着会话 ID 推一条消息片段出去。
界面上的每一个字都不是自动出现的,得由代理主动一块块推给客户端。
左边是原始协议消息在滚动、右边是聊天界面从空白变成有字,这种前后对照只有看画面才成立。▶ 跳到 7:30讲者 · Bennet Fenner - 9:20 – 13:00看
工具调用要报两次,差异对比交给客户端算
一次工具调用在协议里分两步:开始时先声明,附上标题、供界面配图标的说明、进行中的状态、以及涉及的代码位置;结束后再补一条把状态和结果写回去。文件改动同理,代理只负责把旧文本和新文本发出去,怎么算差异、怎么渲染由客户端决定。
代理不做界面,只描述发生了什么——展示层的活全归客户端。
代码写完立刻切到界面看效果:工具调用条目带着图标出现、文件改动以红绿对照的形式呈现,代码与呈现的对应关系是这段的重点。▶ 跳到 9:20讲者 · Bennet Fenner - 13:00 – 14:30看
读写文件跑通,顺带踩了个坑
读文件的调用已经能正常显示,但出现了输出内容重复的连接问题,现场排查后按同样的模式给编辑文件补上回写,最终成功让代理往文件里插入一条注释。这里还提到一个细节:走协议提供的读文件通道,能读到编辑器里尚未保存的改动。
经由客户端读文件而不是直接读磁盘,才能看到用户此刻正在编辑但还没保存的内容。
重复输出的异常和修复后的正常效果都体现在界面上,跳着听会错过问题现象本身。▶ 跳到 13:00讲者 · Bennet Fenner - 14:30 – 16:05看
让代理照着文档给自己装终端
既然代理已经会读会写,那就直接让它照着协议文档给自己加一个终端工具——生成的代码编译通过,随即跑了一条等待命令,输出实时滚在编辑器的终端面板里。协议里的终端能力由客户端声明并代为创建管理。
读写文件这两个工具一到位,代理就能自我扩展;能力声明机制让客户端把终端这种重资源代管起来。
从提出要求到代码生成、编译、命令输出滚动,整个自举过程是连续的屏幕动作,文字复述会完全失真。▶ 跳到 14:30讲者 · Bennet Fenner - 16:05 – 18:03听
生态现状与传输方式问答
目前既有把已有代理翻译成 ACP 的适配层,也有代理在命令行里原生内置了 ACP 模式;客户端一侧约四十个实现,覆盖主流 IDE 和笔记软件。传输目前走标准输入输出,远程传输方案由外部团队在推进。作者也提醒:演示代码全部由代理生成,别拿去上生产。
协议已有真实生态,但跨机器的远程场景还没定型——现在只能本地进程间通信。
纯问答,没有可看的画面,关心生态成熟度和落地风险的人听完这段再决定要不要接入。▶ 跳到 16:05讲者 · Bennet Fenner