ACP协议详解
你在编辑器里跟 AI 说「帮我把这个函数改改」,AI 真的去读了文件、改了代码。这件事背后至少有三个角色:编辑器、AI 程序,以及读文件改文件的那些能力。ACP(Agent Client Protocol)管的是第一段——编辑器和 AI 程序之间怎么说话。
你在编辑器里跟 AI 说「帮我把这个函数改改」,AI 真的去读了文件、改了代码。这件事背后至少有三个角色:编辑器、AI 程序,以及读文件改文件的那些能力。ACP(Agent Client Protocol)管的是第一段——编辑器和 AI 程序之间怎么说话。
已有 Clash、ClashX、Clash Verge 或 mihomo 订阅,想在 iPhone 的 Quantumult X 里复用同一批节点,但不想把订阅地址交给公共转换站——本文演示如何在同一 Wi-Fi 下,用 Mac 临时充当本地 Subconverter,把 Clash 订阅转成 Quantumult X 可用的服务器资源。
目标不是把 Mac 变成代理网关。Mac 只在「刷新订阅」时参与;节点测速、日常代理、App 流量仍由 iPhone 直连远程节点。
单表过了千万行,查询变慢、索引胀、删旧数据删到手酸,这几件事经常一块来。PostgreSQL 分区表的思路很直接:应用里还是查一张 orders,库在底下拆成很多小表;查某个月,就只碰那个月的小表。
下文用一张 orders 走完全程:先搞清它长什么样,再定分区键和粒度,然后建表、插入、查询,看 EXPLAIN 为啥变快,最后说运维和迁移。环境按 PostgreSQL 14+。
我以前对 Terraform 的默认理解很简单:业务仓库里放 .tf 文件,CI 跑 terraform plan,合并后再跑 terraform apply。Atlantis、Terraform Cloud、Spacelift 大多都是这个路子。
Runway 不是这么做的。
业务方只写 runway.yaml。Terraform 模块跟 Go server 一起被编进二进制里。部署时,server 解压模块、拼出一份临时的根 .tf,再启动一个 Terraform 子进程去 apply。
所以这里说“把 Terraform 当库用”,不是说 Go 代码里真的 import terraform。它的意思是:Terraform 仍然是执行引擎,但模块版本、调用时机、输入生成、日志输出,都被平台代码接管了。
这篇记录我读这套设计时真正卡住的几个点:模块怎么塞进二进制,为什么解压目录不能随机,为什么 HCL 只是字符串模板,跨 stack 引用为什么一会儿走 Terraform、一会儿走 Go 代码。
我一开始把 db: postgresql 理解成一个动作:写进 runway.yaml,再跑一次 runway deploy,平台就会帮我建库,并把连接串注入到容器里。
结果不是这样。
部署成功了,容器也起来了,但应用里读 os.Getenv("DATABASE_URL"),拿到的是空字符串。这个问题最烦的地方是:它不是报错,而是“看起来都正常,只是少了一个变量”。
顺着代码查下去才发现,那行 YAML 只是被解析了,并没有参与部署请求。换句话说,它像一句写在配置里的备注:人看得懂,程序不一定理它。
这篇先不写成“Runway PaaS 机制大全”。我只记录一件事:一个应用最终拿到 DATABASE_URL,中间到底经过了哪些地方;又有哪些地方我一开始想错了。
Agent 看起来很神秘:它能读代码、改文件、跑命令,遇到错误还能换一种方式重试。但把最小实现拆开,核心并不复杂——一个能工作的 Agent,最小内核只有三件事:模型、循环、工具。
这篇文章不停留在概念层面。读完以后,你应该能看懂任何 Agent 框架的核心循环,能判断一个 SDK 帮你封装了什么、省掉了什么、藏了什么坑。