My AI Adoption Journey

Mitchell Hashimoto

我的 AI 采用之旅

依我的经验,采纳任何真正有意义的工具都必然会经历三个阶段:(1)低效期(2)够用期,最后则是(3)彻底改变工作流乃至生活的发现期。

大多数情况下,我不得不逼着自己熬过前两个阶段,因为我通常已经有了一套称心如意的工作流。采纳新工具本身就像一份工作,我实在不想费这个劲,但为了让自己成为本领域更全面的人,我通常还是会去做。

这篇文章记录了我如何在 AI 工具中找到价值,以及我接下来想用它尝试什么。在充斥着过度夸张、炒作观点的海洋中,我希望它能呈现一种更细腻、更克制的视角,展现我对 AI 的看法是如何随时间而改变的。

这篇博文完全由我亲手撰写,用的是我自己的话。我讨厌不得不特意声明这一点,但鉴于本文的主题,我想把话说清楚。


第一步:抛弃聊天机器人

立刻停止试图通过聊天机器人(例如网页版的 ChatGPT、Gemini 等)来完成有意义的工作。聊天机器人确有价值,也是我日常 AI 工作流的一部分,但在编程方面的用处却非常有限,因为你很大程度上是在指望它们凭借先前的训练给出正确结果,而纠正它们则需要你这个人一遍又一遍地告诉它们错在哪里。这很低效。

我想每个人对 AI 的初体验都是聊天界面。我想每个人第一次尝试用 AI 写代码,也都是让聊天界面去写代码。

在我还是重度 AI 怀疑论者的时候,我的第一个“哇”时刻是把 Zed 命令面板的截图贴给 Gemini,让它用 SwiftUI 复刻,结果它完成得非常出色,让我大为震惊。如今 Ghostty 在 macOS 上发布的命令面板,也只是在 Gemini 几秒钟内为我生成的基础上做了非常轻微的修改。

但当我试图在其他任务上复现这种表现时,却大失所望。在 brownfield projects(存量项目)的场景下,我发现聊天界面很多时候给出的结果都很差,而且我发现自己在界面之间来回复制粘贴代码和命令输出,感到非常沮丧。这显然远不如我自己动手高效。

为了找到价值,你必须使用 agent(智能体)。agent 是行业通用的术语,指能够在循环中聊天并调用外部行为的 LLM1 至少,agent 必须具备以下能力:读取文件、执行程序以及发起 HTTP 请求。


第二步:复现你自己的工作

在旅程的下一阶段,我尝试了 Claude Code。直说了吧:起初我并不觉得惊艳。我的会话就是得不到好结果。我觉得它产出的所有东西都得我去修修补补,这个过程比我自己动手还要耗时。我看了博客文章、看了视频,但依然不觉得有多厉害。

我没有放弃,而是逼着自己用 agent 的提交来复现我所有的手动提交。字面意义上把活干了两遍。我先手动完成工作,然后再与 agent 较劲,让它在质量和功能上产出完全相同的结果(当然,不能让它看到我的手动方案)。

这非常痛苦,因为它妨碍了单纯地把事情做完。但我在非 AI 工具上已经摸爬滚打够久,深知摩擦是自然的,如果不竭尽全力,我就无法得出坚定、可辩护的结论。

然而,专业能力也由此形成。我很快从第一性原理出发,自己发现了别人早已在说的那些道理,而亲身发现让我的基础理解更加牢固。

  1. 把会话拆分成独立、清晰、可执行的任务。不要试图在一个超大会话里“一步画出猫头鹰”。
  2. 对于模糊的需求,把工作拆分为独立的规划阶段和执行阶段会话。
  3. 如果你给 agent 一个验证其工作成果的办法,它十有八九会自己修正错误并防止回归。

更概括地说,我也摸清了当时 agent 擅长什么、不擅长什么,以及对于它们擅长的任务该如何获得我想要的结果。

所有这些都带来了显著的效率提升,以至于我开始自然而然地使用 agents,感觉速度并不比自己动手慢(但也并不觉得更快,因为我大多时候还是在照看一个 agent)。

这里的“留白”值得重申:这部分效率提升来自于懂得何时不去求助于 agent。对很可能失败的任务使用 agent 显然是巨大的时间浪费,而拥有避开这种陷阱的知识本身就能节省时间2

在这个阶段,我已经从 agents 身上获得了足够的价值,很乐意在工作流中使用它们,但仍不觉得看到了净效率增益。不过我并不在意,此时我已经满足于把 AI 当作一件工具。


第三步:日终 Agent

为了尝试找到一些效率,我接着开启了一种新模式:每天留出最后 30 分钟来启动一个或多个 agents。我的假设是,或许如果 agent 能在我本来就无法工作的时间里取得一些积极进展,我就能获得一些效率。基本上就是:与其试图在拥有的时间里做更多,不如试图在没有的时间里做更多。

和之前的任务类似,我起初发现这既不成功又很烦人。但是,我很快又发现了几类非常有帮助的工作:

  • 深度研究会话,我会让 agents 去调研某个领域,例如找出特定语言中具有特定许可证类型的所有库,并为每一个生成多页的总结,涵盖其优缺点、开发活跃度、社区口碑等。
  • 让多个 agents 并行尝试我有的一些模糊想法,但我没时间着手。我并不指望它们能产出可直接发布的东西,但或许能在我第二天着手任务时,揭示一些未知的未知。
  • Issue 和 PR 的分拣/审查。agents 很擅长使用 gh(GitHub CLI),所以我手动写了个脚本,快速并行启动一批来分拣 issue。我绝不会让 agents 去回复,我只想要第二天的报告,以此来引导我去关注高价值或低投入的任务。

说清楚一点,我并没有像其他人那样让 agents 整夜循环运行。大多数情况下,agents 在不到半小时内就完成了任务。但是,在工作日的后半段,我通常已经疲惫、脱离了心流状态,发现自己个人效率很低,所以把精力转向启动这些 agents,反而让我在第二天早上获得了一个“热启动”,比原本更快地进入工作状态。

我很满意,也开始觉得自己比使用 AI 之前做得更多了,哪怕只是多了一点点。


第四步:把十拿九稳的活外包出去

到这个阶段,我已经非常清楚我的 AI 擅长和不擅长哪些任务。对于某些任务,我非常确信 AI 能给出基本正确的解决方案。所以旅程的下一步是:让 agents 去做所有那些工作,而我则去处理其他任务。

更具体地说,我每天开始工作时,会拿出前一晚 triage agents 的结果,手动筛选出那些 agent 几乎肯定能很好解决的 issue,然后让它们在后台继续运行(一次一个,而非并行)。

与此同时,我会去做别的事。我没有去刷社交媒体(并不比不用 AI 时更多),也没有看视频等等。我处于自己原有的、正常的、AI 出现之前的深度思考模式中,去做我想做或必须做的事。

在这个阶段非常重要的一点是:关闭 agent 的桌面通知。上下文切换的成本非常高。为了保持高效,我发现作为人类,我的职责是掌控何时去打断 agent,而不是反过来。别让 agent 来通知你。在工作的自然间隙,再切换过去查看它,然后继续。

重要的是,我认为“去做别的事”有助于抵消那篇被广为宣传的 Anthropic 技能形成论文所指出的问题。毕竟,这是一种权衡:你把任务委托给 agent,就不会在这些任务上形成技能,但与此同时,你在继续手动处理的任务上仍会自然地形成技能。

到此时,我已经坚定地进入了“再也回不去”的境地。我觉得自己更高效了,但即便不是,我最喜欢的一点是,我现在可以把编码和思考集中在我真正热爱的事情上,同时仍能妥善完成那些我不喜欢的任务。


第五步:打造驾驭系统

有冒着说废话的风险:当 agents 第一次就产出正确结果,或至少产出只需极少修补的结果时,效率要高得多。实现这一点最可靠的方法,就是给 agent 提供快速、高质量的工具,让它能自动知道自己何时错了。

我不知道业界是否已经对这种做法有了广泛接受的术语,但我已经习惯称之为“harness engineering(驾驭工程)”。它的理念是,每当你发现 agent 犯了错误,就花时间去设计一个解决方案,确保 agent 再也不会犯同样的错误。我没必要在这里发明新词;如果已有别的称呼,我很乐意跟随。

这有两种形式:

  1. 更完善的隐式提示(AGENTS.md)。对于一些简单问题,比如 agent 反复运行错误的命令或找到错误的 API,更新 AGENTS.md(或等效文件)。这里有一个来自 Ghostty 的例子。该文件中的每一行都是基于一次糟糕的 agent 行为而写下的,而它们几乎完全解决了所有这些问题。

  2. 实打实的、编程式的工具。例如,用于截图、运行筛选后的测试等的脚本。这通常会配合对 AGENTS.md 的修改,让它知道这些工具的存在。

这就是我目前所处的位置。每当我看到 agent 做了件坏事,我都会认真地努力去防止它再做同样的坏事。反之,我也在认真努力让 agents 能够验证自己正在做正确的事。


第六步:始终让一个 Agent 保持运行

与第五步同时进行的是,我也在朝着始终让一个 agent 保持运行的目标努力。如果没有 agent 在运行,我就会问自己“现在有没有什么事是 agent 可以为我做的?”

我特别喜欢将其与更慢、更深思熟虑的模型结合起来,比如 Amp 的 deep mode(基本上就是 GPT-5.2-Codex),它可能要花 30 多分钟来做一些小的改动。但好处是,它往往能产出非常好的结果。

我(目前还)没有同时运行多个 agents,而且现在也不太想这么做。我发现保持一个 agent 运行对我目前来说是一个很好的平衡,既能让我从事自己喜欢的深度手动工作,又能兼顾照看我那个有点笨却又神奇地富有成效的机器人朋友。

“始终让一个 agent 保持运行”这个目标目前还只是个目标。我想说,现在在一个正常工作日里,我大概只有 10% 到 20% 的时间能有效地让一个后台 agent 保持运行。但是,我正在积极努力改进这一点。

我不想为了运行 agents 而运行 agents。只有当存在我认为真正对我有帮助的任务时,我才想运行它们。实现这一目标的部分挑战在于改进我自己的工作流和工具,以便拥有一连串可委托的高质量工作可做。而这一点,即便没有 AI,也很重要!


当下

这就是我目前的状态。

通过这段旅程,我个人已经达到了一个能够成功运用现代 AI 工具的阶段,并且我相信自己正以一种恰当、克制且立足现实的视角来看待它。我真的不太在意 AI 是否会长久存在3,我只是一个软件工匠,只想出于对这门手艺的热爱去构建东西。

整个领域变化如此之快,我确信很快再回头看这篇文章时,就会嘲笑自己的天真。但是,正如人们所说,如果你不能为过去的自己感到尴尬,那你大概就没有在成长。我只希望自己能朝着正确的方向成长!

我在此没有任何利益纠葛4,当然,除了实用性之外,也还有其他理由让人选择不使用 AI。我完全尊重每个人在这方面的个人决定。我不是来劝服你的!对于感兴趣的人,我只是想分享我探索这些新工具的个人方法,并让大家一窥我通常是如何对待新工具的,无论是否与 AI 相关。

脚注

  1. 像 Opus 和 Codex 这样的现代编程模型经过专门训练,更倾向于使用工具,而非像对话模型那样。

  2. 由于模型创新的步伐非常快,在这一点上我不得不不断重新审视自己的先验判断。

  3. 然而,技能形成问题,尤其是在那些对基础掌握不牢的初级人员身上,让我深感担忧。

  4. 我没有在任何 AI 公司工作、投资或担任顾问。

原文由 Mitchell Hashimoto 发布

本文章由 muse-spark-1.2-contributor 进行翻译