对 AI 时代技术选型的思考
大家好,我是 luckySnail。最近在做两件事:一是调整负责项目的技术栈,让 AI Agent 更容易在里面干活、并且自己验证干得对不对;二是优化我的工具链,让这台 16G 内存的电脑少卡死几次。每次 Docker Desktop、Chrome 和编辑器同时打开的时候,风扇总是比我先进入工作状态,不一会电脑就发烧的不行。。。
我主要写 TypeScript,所以下面的经验都围绕它展开。用其他语言的朋友也可以参考,技术是相通的,当然坑也是hh。
Agent 对技术选型的影响
coding Agent 普及之前,技术选型的时候需要考虑团队成员是否能接受,是否有资深的工程师兜底。但是现在,首先要看这个编程语言是否小众,它是否被大众广泛使用,资料是否非常丰富,Agent 能不能在各种环境下里独立跑起来、干完活后再证明自己改对了?选择的变化来自下面几点:
0)工具调用 & 上下文
对 Agent 来说,除了模型底座,最重要的两个东西就是 工具 和 上下文。所以我们选择的技术 & 使用的工具,不仅要考虑自己开发的体验,也要保证 Agent 能够很好的使用。
对于工具调用:我们选择的工具链应该性能更好,错误能够结构化输出,这样每次调用更省时,出问题也能根据结构化日志进行排查。
对于上下文:应该使用简单,无聊,资料丰富,不需要额外知识补充的技术,这样能有效的减少上下文占用和错误导致的上下文消耗
下面是 DeepSeek harness 的执行,可以看到执行过程就是 工具调用 => 组装上下文 => 思考 的循环,对比多个对话,我发现 harness 80% 时间都在工具调用,所以当 Agent 很慢的时候可以看看是不是项目工程化的问题
1)干活的地方搬到了云端沙箱
陈皓在《左耳听风》里说:技术一直在往后端移动,前端最后只剩一个浏览器或手机。现在开发这件事本身也在走这条路。Meta 9 月 8 日发布的个人 Agent Muse,就是在云端给每个用户开一个独立的虚拟机干活。编程 Agent 也一样:代码在云端沙箱里写、跑、测,人在手机上提需求、看预览、点合并。这已经是普遍现象了,守在电脑旁开发将成为过去式
2)框架开始重视 Agent 的开发体验
框架作者显然也意识到了。Next.js 16.2 开始把与版本匹配的文档打包进 node_modules,并自动生成 AGENTS.md 让 Agent 去读,而不是凭训练数据里的旧知识瞎写。16.3 又号称把开发时的内存占用降了最多 90%。Vite+ 的 vp run 也已经支持在 Codex CLI 和 Claude Code 的沙箱里运行。TypeScript 7 专门提供了 --singleThreaded 选项,照顾资源受限的环境
“对 Agent 友好”正在变成和“性能好”“生态大”并列的卖点。
3)Agent Harness 在往“元编程”进化
Harness 是包在模型外面的那层东西:工具、权限、沙箱、上下文、验证流程。模型决定 Agent 有多聪明,harness 决定它能干多少活。
被迫开源的 ZCode 代码里确实有值得学习的东西:动态工作流的源码 @zcode/dynamic-workflow。它给模型提供了一套 TypeScript API,再配上基于 TypeScript 编译器的分析能力。模型直接用代码进行流程编排。然后交给 Coding Agent 编译、类型和静态分析,执行,中途失败从记录里恢复
对 TS 开发者来说,TypeScript 正在成为人、Agent 和 harness 之间的通用语言。那么做技术选择的时候,应该优先选强类型、能被编译器静态检查的技术,这对不嫌麻烦的 Agent 来说是优势
技术选择新原则
技术圈有句老话:做技术选型时,尽可能选无聊的技术。出自 Dan McKinley 2015 年的文章 Choose Boring Technology。他说每个团队只有大约三枚“创新代币”,要花在真正让产品与众不同的地方,其余一律用成熟、无聊、坑都被别人踩过的东西。到了 AI 时代,这句话反而更对了。所以选择技术时:
- 无聊优先:创新代币只花在产品的差异化上,基础设施能多无聊就多无聊。
- 轻松跑起来:
clone、install、dev、test,最好这四步就能把项目跑起来并跑完测试 - 反馈要快:Agent 每次收尾都在编译和测试,如果构建工具快那么 Agent 也能更快的完成任务
- 环境一致:开发、测试、生产的行为尽量相同,这样 Agent 能够在 dev / beta 完成测试验证闭环
- 结果可验证:本地可以搭建 CLI 让 Agent 测试逻辑,线上有 beta 环境可以发布预览链接测试
- 配置友好:选择性能好,内存占用少的技术栈,这样无论是本地还是云端都可以开发验证,在手机上也可以随时开干
技术选型 & 最佳实践
下面是我目前在 TS 全栈项目里的选择。每一层都写了为什么选它,以及什么情况下该换掉它。 • 运行时:Bun。启动和安装都快,这样 Agent 每一轮执行命令更快。它不算“无聊”的技术,但是真的很好用,推荐 • 包管理:pnpm workspace。快、省硬盘,前后端放在一个仓库里,Agent 能够看到项目全貌,避免上下文缺失 • 工具链:Vite+。一个 vp 命令管开发、检查、测试和构建(Vite+ Beta)。它还在 beta,求稳就分开装 Vite、Vitest、Oxlint 和 Oxfmt。 • 类型检查:TypeScript 7。Go 重写,完整构建通常快 8 到 12 倍。并且能够节省很大的内存占用 • 前端:Vite + React + TanStack Router / Query。启动快、概念少、路由类型安全。需要 SEO 和服务端渲染时,再换 Next.js 或 TanStack Start。 • UI:Tailwind CSS + shadcn/ui。Agent 最熟,生成的界面最稳定。Ant Design 也是很好的选择。 • 后端:Hono + Zod。超快,超轻量,部署友好,而且可以开发各种自定义中间件。开发轻量后端首选,如果是生产级后端,fastify 是最佳选择 • 数据库:PostgreSQL + Drizzle。开发和单测用 PGlite,CI 用真实 PG,三处都是同一种数据库。小工具、单机部署推荐用 SQLite,部署 cloudflare 很方便 • 测试:Vitest + Playwright。单测快,端到端测试还能自动截图给人验收。 几个小细节: • Oxfmt 还没到 1.0。格式化结果可能随版本变化,记得在 package.json 里锁死版本,不然每次升级都是一次全仓库的重新格式化。 • Next.js 推荐基于 OpenNext。它目前依然是最好的框架之一,但是历史包袱太重。需要 SEO 就用 • PGlite 是 WebAssembly 版的真 Postgres。npm install 就能在 Node 进程里跑,不需要 Docker,特别适合沙箱。它是单连接的,所以 CI 里还要跑一遍真实 PG 兜底。
常用工具的省内存平替
下面是我以前爱用的工具,但是内存占用高的一些APP和平替
- VS Code / Cursor:使用 Zed 平替,Zed 真的快,但是它插件生态和主题都不及 VSCode
- Docker Desktop:使用 Colima 平替,有了 Agent 后,不需要 GUI,CLI 更好
- iTerm2:使用 Ghostty 平替,更加美观好看,并且是GPU渲染
- raycast:使用 popMind 平替,免费开源,简洁干净,我自己开发的,已经爽用半年,BYOK 接入最新的大模型,一键划词翻译,解释。搜索应用等等全都一站式集成
总结
在进行技术选择的时候,由于开发的主体改变了,所以技术的稳定性、资料是否丰富、文档是否健全、性能和速度是否快 是我首要关心的点。选择合适的技术能够避免很多问题,尤其是真实线上的项目,不仅仅考虑以上内容,还需要考虑部署成本,迁移成本,花费成本等等
希望这篇文章对你有帮助,也感谢你的阅读