上个月,Anthropic 在发布全球首个混合推理模型 Claude 3.7 Sonnet 的同时,还推出了一款重磅 AI 代理编程工具——Claude Code。它不仅能搜索和读取代码,还能编辑文件、编写和运行测试、提交代码并推送至 GitHub,甚至支持命令行操作。简单来说,开发者可以直接把大量工程任务交给 Claude Code 处理。
这类工具的出现,引发了不少开发团队的关注:它究竟能在实际开发中发挥多大作用?为此,来自德州奥斯汀的初创公司 Coder 进行了三项案例测试,Claude Code 的真实表现如何?让我们一探究竟。
以下为译文:
Claude Code 一发布,我们就迫不及待地想看看它到底能干啥。这一次不是玩具级的简单测试,而是检测这款工具能否胜任我们的实际开发工作。于是,我们把开源项目和内部代码库里的 GitHub 问题交给它处理,这些问题分别来自社区用户和 Coder 工程师,看看它到底能不能解决真正的工程难题。
本文介绍了其中三个实验。我们会拆解每个实验的过程,看看 Claude Code 能做到什么程度,遇到了哪些困难,以及我们从中学到了什么。我们并没有精心挑选出成功的案例故事,而是完整展现了 Claude Code 的表现——无论是成功、失败,还是介于两者之间的情况。
Claude Code 在某些任务上表现惊艳,有些地方则摔了跟头。但总体来说,它已经足够好用,以至于一些开发者已经把它当成日常工具。更难能可贵的是,我们只给了它 GitHub 问题的链接和一点提示,它就能自己去探索代码库,搞清楚该怎么解决问题。
任务 1:给内部管理面板新增排序功能
📌 记录人:Hugo,Coder 的增长工程师,负责核心产品和内部工具的前后端开发。
任务概述:
我们有一个用 Next.js 构建的内部管理面板,大约 2 万行代码,主要用于显示客户创建的 GitHub 问题。现在,我们希望新增一个功能,让这些问题可以按照创建时间和更新时间排序。
结果:
我给 Claude Code 提了个需求,Prompt 是 “允许 /customer-issues 按创建/更新时间排序”,没想到的是,它直接把活干了。
它自己找到了相关代码文件,在 UI 里加了个切换按钮,让用户可以选择排序方式,还实现了排序逻辑——整个过程完全不需要额外指导。
我检查了代码,补充了一句“能不能加个选项,让用户选择升序还是降序?”,它立马就改好了。唯一的问题是它把 “升序” 和 “降序” 的定义搞反了,我手动改了一行代码就搞定了。
测试 UI 时,我还意外发现了一个原本就存在的 bug——每次 React 重新渲染时,问题列表的数据对象都会被修改,导致部分文本重复显示。我把这个 bug 在浏览器里的表现描述给 Claude Code,并提到怀疑是对象被修改导致的。Claude Code 很快找到了问题代码并修复了 bug。最后,我让它提交一个 PR,它也顺利完成了。
最终,这次改动涉及新增 114 行代码,删除 28 行,只修改了一个文件。
经验总结:
✅ 本来没抱太大希望,但 Claude Code 的结果完全超出预期。之前用过 Cursor 里的 AI 代码助手,感觉建议都不太靠谱。但 Claude Code 这次几乎是“无缝”完成任务,效果让我很惊喜。
✅ 比我自己写代码还快。上文提到的管理面板这部分代码不是我写的,我本来还要先熟悉一下,但 Claude Code 直接找到了关键部分,反而比我更快搞定。
✅ 它的成功离不开几个关键因素:任务本身比较简单、代码库相对较小、用了 Next.js 和 React 这些成熟的框架。
✅ 这次体验让我对它更有信心,尤其适合处理清晰的小任务。不过,任务如果不明确,或者代码库特别庞大复杂,它的表现就会逊色不少。
成本 & 时间:
💰 成本:不到 5 美元
⏳ 时间:Claude Code 干活 5 分钟,我审核和测试花了 40 分钟
下次会怎么做:
几乎没啥需要改进的,Claude Code 表现相当出色!
任务 2:macOS 原生开发
📌 记录人:Thomas Kosiewski,高级软件工程师,负责 Coder 的网络团队,涉及后端和 macOS 原生开发。
任务概述:
在处理 Apple 的权限和签名流程时(https://github.com/coder/coder-desktop-macos/pull/105 ),我们遇到了一个奇怪的问题:macOS 似乎会丢失已绑定的证书,或者有某些未知的后台进程在悄悄搞事。这个问题其实早年就有人在 Apple 论坛上提过,但 Apple 一向神秘,很多人找不到根源问题在哪。
我们让 AI 来试试,主要是想看看它能不能找到一些隐藏在 Apple 文档深处的线索,或者挖出一些已经被遗忘的老旧 API,这些东西连人都不太容易搜到。
结果:
经过多轮交互,Claude Code 最终写出了能在 macOS 上编译并运行的代码。考虑到 Swift 这些年经历了不少语言变动,这已经算是个不小的成就了。
不过,这次任务涉及的系统层面较多,还需要大量手动操作 macOS(比如禁用和删除网络扩展),所以整体来看,Claude Code 贡献了大约 30%,剩下 70% 还是得靠我手动验证和引导。
经验总结:
✅ Claude 居然能找到删除 macOS 网络扩展的 API,实在出乎意料。这些 API 既没啥官方文档,也很难搜索到,它能挖出来本身就挺神奇的。而且,生成一段能正常运行的代码本身就是个不小的成就。
✅ 让 Claude 来调整 UI 还挺省事。只要给个指令,就能让它把按钮或错误提示挪到另一个标签页,再挪回来,完全不用自己手动改,这让 UI 调整和重构变得轻松不少。
❌ 代码质量一般,适合 PoC,但不适合直接上生产。代码能跑,但离真正的生产级代码还有不小的距离。Claude 有时候会忽略已有的委托(delegates),甚至重复实现已经存在的功能。有一次,它还声称自己实现了某个功能,但实际根本没写。
成本 & 时间:
💰 成本:大约 10 美元
⏳ 时间:Claude 处理 API 花了 30 分钟,整个过程总共花了 90 分钟
下次会怎么做?
如果想让 Claude Code 直接写出“生产可用”的代码,可能需要提供更完整的上下文,并研究如何让它在代码质量上更稳定。这方面还有很多未知数,但它已经非常适合快速验证想法,至于真正落地,那就是另一回事了。
任务 3:Go 语言后端开发
📌 记录人:Cian,Coder 的资深工程师,主要负责后端开发,熟悉容器编排工具,也是这部分代码的作者。过去偶尔会用 AI 工具。
任务概述:
修改一个 JSON REST API 端点,让它在执行预定义命令时,返回不同的命令输出部分:https://github.com/coder/coder/pull/16866
初始提示:
”agent/agentcontainers 包中定义了一个 DockerCLILister,其中的一个功能是列出正在运行的容器。但当前实现有个 bug——WorkspaceAgentListContainersResponse 返回的端口不对。它应该返回容器外部可访问的端口,但现在返回的是容器内部的端口。”
结果:
AI 解决了一部分问题,但需要多次重新提示,明确要求它从 NetworkSettings.Ports 里获取数据,并去重映射到相同容器端口的主机端口(这里其实还有一些细节问题,连我一开始也没注意到)。
此外,还得手动告诉它要加测试覆盖率(用默认配置),这可能可以通过调整提示词来改进。而且,它在修改代码后,需要手动提示才能重新运行整个包的测试。
另一个明显的问题是,它有点喜欢写过于复杂的代码(可以看看 commit 077d5a 代码变更),特别是在测试中对比期望输出和实际输出时,逻辑显得不够直截了当。
最终,我发现现有的测试数据不足,没法确保 AI 生成的代码是正确的,所以干脆开了个新的 PR,专门补充测试数据。这可能有助于 AI 生成更准确的代码。
经验总结:
AI 这次表现不如预期,它似乎只是尝试了最基本的解决方案,并没有太多考虑正确性。
涉及外部 API 或依赖外部工具的任务对 AI 来说更难,如果事先提供示例数据,并明确要求 AI 处理这些测试用例,可能会有所帮助,但也可能导致 AI 过度拟合(即代码只针对特定测试用例有效)。
AI 倾向于最小改动,而不是正确修复。比如,如果修改某个测试用例会暴露代码 bug,AI 更倾向于改测试用例,而不是修复实际代码。这次需要明确提示 AI 不准改测试代码,才能让它调整正确的部分。
成本 & 时间:
💰 成本:2.65 美元
⏳ 时间:总时长约 1 小时(包括初始设置),API 交互时间约 7 分 34 秒
下次会怎么做?
尽可能提前提供具体的测试用例,或者教 AI 生成有效的测试数据。
让 AI 在每次修改代码后自动运行整个包的测试,建立一个正向反馈循环。
强制采用 TDD(测试驱动开发)。先让 AI 添加能复现 bug 的测试用例,同时禁止修改被测试代码;然后再让它修复代码,并禁止修改测试代码。
提醒 AI 在最后进行代码重构(这是 TDD 里最容易被忽略的部分)。
总结
这些实验让我们对 AI 代理的能力有了更清晰的认识。Claude Code 在熟悉的框架(如 React、Next.js)中处理小型、明确的任务表现不错,但遇到需要更深入推理、系统复杂度高或 API 文档不完整的情况时,就会变得吃力。
让 AI 在 Coder 的隔离工作区中运行,确保它能安全地试验代码,而不会影响真正的代码库,这一点很重要。尽管 AI 仍然需要人工监督,但现在已经有人开始把它当作日常工具来加速工作了。
此外,我们对 AI 的使用成本也有了更直观的了解。如果你打算大规模引入 AI,知道它适合什么任务、成本如何、如何安全控制它的工作,才是关键。AI 不是魔法,但如果放在合适的环境里,它确实有用,并且进步很快。