
我从来没掩饰过这一点:我并不是 AI 编程的狂热爱好者。从一开始,Copilot 的行内自动补全给我的体验就不好。它总让我觉得有点侵扰,每次弹出来的建议都会打断我的思路,让我很烦躁。在那之后,我就对 AI 编程助手失去了兴趣,最多也就用来搜搜资料或者生成一点小代码片段。
最近我开始尝试用 AI 智能体来编程。我有 GitHub Copilot Pro 的学生许可证,就把它集成到 Zed 编辑器里来辅助我写代码。说实话,体验比当年用自动补全的时候好多了(到现在我还是把自动补全关着的),但我还是觉得不太自在。这种感觉有点难形容,就好像是在错误的抽象层级上工作。我的应用代码在浏览器里运行,但 AI 智能体却在我的 IDE 里看着静态代码。我的应用只有在运行时才是真正“活着”的。当它跑起来的时候,它会去查询数据库、往终端输出日志、在复杂又动态的 UI 上处理数据。我觉得智能体应该待在我的应用里,看着 UI 被操作,读取日志,分析数据库查询,这才是它该在的地方。
“发现” Tidewave
我平时会尽量关注 Elixir 社区的动态。虽然日常工作中不用 Elixir,但只要有空我就会试着用它写点东西(其实这个博客就是用 Elixir 写的)。如果我没记错的话,去年 José Valim(Elixir 的创造者)发布了一款叫 Tidewave 的产品。当时因为跟 AI 相关,我也没太在意。
时间回到现在,在尝试 Copilot Pro 的时候,我突然想起了 Tidewave。它的定位是把你手头的 AI 智能体变成一个“全栈开发者”,直接在你运行中的应用里工作(只需要把 Tidewave 作为开发依赖加进去就行)。实际上,它就像一个带可视化界面的 MCP 服务器,让你的 AI 智能体能看到你眼前的一切。智能体可以在你的应用里自由操作、直观地发现错误、查询数据库、测试改动——所有这些都不需要你手动去描述错误或者复制粘贴界面信息。
我装好并试用了试用版之后,立刻就感受到了它的不同。我让它做了几个小的 UI 功能,它写好之后直接在浏览器里用 JavaScript 测试了一遍。它还能实时读取我的运行日志,在错误出现的时候理解问题并修复。之前那种在错误抽象层级上工作的奇怪感觉一下子就消失了。我太喜欢了,第二天就订阅了专业版,想继续试试它到底能做到什么程度。
我用 Tidewave 的工作流
虽然现在还处于尝试阶段,但我已经摸索出了一套自己觉得顺手的流程。我把 Tidewave 和 GitHub Copilot 连在了一起,目前在用 Gemini 3.1 Pro 这个模型——主要是因为在专业版订阅里它算是目前能用到的最好的顶级模型了(微软在这个订阅档位里把 Sonnet 和 Opus 的访问权限去掉了)。
我会在 Zed 里打开项目代码,然后在终端里把应用跑起来。浏览器这边,Tidewave 会在我运行的应用旁边提供一个聊天窗口,我就在里面跟它说我想做什么。我还可以直接在页面上点选 DOM 元素,给智能体更多上下文,然后看着它像真人用户一样在 UI 上测试应用,整个过程都是实时的。等它实现完了,我再回到 Zed 里检查改动、做重构。总的来说,AI 写的代码质量还行,但代码本身和结构还是得我手动去调整,不然很快就会乱成一团。等到一切都规整、干净了,我再把改动 commit 上去。
这一周只要有空,我基本就是这么过来的。整个过程挺愉快也挺好玩的。我好像终于找到了一种用 AI 但又不会跟自己的代码疏离的方式。通过手动重构和维护项目结构,我既能保持写代码的手感,也能时刻清楚应用的状态。
我看到很多人已经在用自主智能体搞开发了,有的甚至同时跑好几个智能体。我觉得我大概永远也做不到那种程度。我还是更喜欢自己写代码、自己理解应用、自己参与整个构建过程。在这个新时代,写代码不用 AI 确实有可能会变成一种“过时”的程序员,我也确实不想这样。但我有自己的底线。我永远不会放弃成为创作过程中最重要的那个角色。
由人工智能翻译。我还在学习中文