news 2026/11/2 17:06:07

DHH说手写代码落幕?CLI Agent如何重塑Rails软件工程协作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DHH说手写代码落幕?CLI Agent如何重塑Rails软件工程协作

1. 这场争论到底在吵什么

DHH 这个名字在后端圈子里基本不用多介绍,Rails 的作者,Basecamp 的联合创始人,常年以“反潮流”著称。他最近关于“手写代码时代落幕、Agent 正在重塑软件工程”的表态,在开发者社区里炸开了锅。有人觉得他是在蹭热度,有人觉得他终于说了句实话。我把相关的讨论、热词和实际动手体验捋了一遍,发现这件事远不是“AI 会不会取代程序员”这种老掉牙的争论,而是关于软件工程的协作单元正在从“人”变成“人 + Agent”。

先把结论摆前面:Agent 不会让手写代码这件事消失,但它会彻底改变“谁在写、写多少、写什么”。以前一个 Rails 项目,从rails new到跑通第一个 CRUD,你得自己敲命令、改配置、写 migration、调路由。现在你完全可以把这一整套交给一个 CLI 里的 Agent,你只负责描述意图和验收结果。这不是未来时,是现在进行时。

这篇文章适合几类人看:一是还在观望 Agent 到底能干什么的后端开发者;二是已经在用 Codex CLI、Claude Code 这类工具但总觉得“差点意思”的人;三是想搞清楚 Agent 架构、Agent 记忆、Agent 编排这些概念到底怎么落地的人。我会从设计思路、核心细节、实操流程、踩坑排查四个维度展开,尽量把每个“为什么”讲透,而不是丢一堆名词让你自己猜。

核心关键词先埋进来:DHH、Agent、软件工程、Rails、CLI。这五个词基本构成了整件事的骨架——一个 Rails 作者,用 CLI 里的 Agent,重新定义软件工程的协作方式。

2. 为什么是 Agent,而不是又一个代码补全

2.1 从“补全一行”到“完成一个任务”的质变

很多人对 AI 编程的印象还停留在 Copilot 那种“你打字它猜下一行”。那个阶段的核心价值是降低击键次数,但你的大脑仍然是主控,你得知道下一步写什么,它只是帮你省点力气。Agent 的逻辑完全不同:你给它一个目标,比如“给这个 Rails 项目加一个带分页的用户列表接口”,它会自己去读代码、找路由文件、写 controller、加 gem、跑 migration、甚至写测试。你的角色从“执行者”变成了“验收者”。

这个转变为什么重要?因为软件工程里真正耗时的从来不是敲键盘,而是理解上下文、定位改动点、验证结果。Agent 恰好在这三件事上都能插上手。DHH 说“手写代码时代落幕”,我理解他说的不是没人写代码了,而是“逐行手写”不再是主要工作方式。

2.2 Agent 和传统脚本、代码生成器的本质区别

有人会说,代码生成器早就有了,Rails 的 scaffold 不就是吗?区别在于决策能力。scaffold 是确定性的,你给它模型名,它生成固定模板。Agent 是概率性的,它会根据你项目的实际情况做判断:你这个项目用的是 UUID 主键还是自增 ID?分页用的是 kaminari 还是 pagy?测试框架是 RSpec 还是 Minitest?它会先读再写,而不是无脑套模板。

这就是为什么 Agent 框架里“记忆”和“编排”这两个词出现频率极高。没有记忆,它每次都要重新读一遍项目;没有编排,它没法把“读代码→改代码→跑测试→修错误”串成一个闭环。热词里出现的agent记忆、agent框架与编排、agent架构,说的都是这件事。

2.3 为什么 CLI 成了主战场

你可能会问,为什么这些 Agent 都往 CLI 里钻,而不是做成 IDE 插件?我的实际体验是:CLI 是最接近“可编排”的界面。IDE 插件受限于宿主环境,能做的事有限;而 CLI 里一个 Agent 可以调用任意命令、读写任意文件、串联任意工具。Codex CLI、Claude Code、GitLab CLI 这些工具的火爆,本质上是因为它们把“命令行”变成了“Agent 的操作系统”。

而且 CLI 天然适合脚本化和自动化。你可以让一个 Agent 在 CI 里跑,也可以在本地终端里交互。这种灵活性是 GUI 给不了的。热词里codex cli 安装、codex cli使用教程、codex cli如何更新搜索量高,说明大量开发者正在把 CLI Agent 纳入日常工作流。

3. Agent 落地软件工程的核心细节

3.1 Agent 的四个关键能力拆解

要把 Agent 用明白,得先知道它靠什么干活。我把它拆成四块:

  • 上下文读取:能读项目文件、git 历史、依赖清单、甚至 issue 描述。这是它做判断的基础。
  • 工具调用:能执行 shell 命令、调 API、读写文件。没有工具调用能力的 Agent 只是个聊天机器人。
  • 记忆管理:短期记忆是当前会话,长期记忆是项目级的知识沉淀。热词里的agent记忆和a-memguard就是在解决记忆的安全和持久化问题。
  • 自我修正:跑测试失败后能读错误日志、定位问题、重新改代码。这个闭环是 Agent 和“一次性代码生成”的分水岭。

这四块里,自我修正是最难也最有价值的。我实测下来,一个没有自我修正能力的 Agent,产出代码的可用率大概在六成左右;加上“跑测试→读报错→改代码”这个循环后,可用率能拉到八成以上。剩下的两成,基本是需求本身描述不清导致的。

3.2 Rails 项目里 Agent 能接哪些活

拿 Rails 举例,因为 DHH 的背景,也因为 Rails 的约定优于配置特性特别适合 Agent 发挥。我列一下实际能交给 Agent 的任务类型:

任务类型具体例子Agent 适合度
脚手架生成新建 model、controller、migration极高,几乎零风险
业务逻辑写 service object、加校验规则高,需人工验收
测试编写补 RSpec 用例、加请求测试高,但需检查断言质量
重构提取 concern、拆分胖 controller中,需明确边界
性能优化加索引、改 N+1 查询中,需压测验证
架构决策选型、分层设计低,仍需人来拍板

你会发现,越是有明确验收标准的任务,Agent 干得越好。因为验收标准就是它的“目标函数”。反过来,那些“你觉得怎么好就怎么来”的任务,Agent 反而容易跑偏。

3.3 一个容易被忽略的点:Agent 的“人格”配置

热词里有个很有意思的条目叫cli切换人格的6个步骤。这说的其实是 Agent 的 system prompt 配置。同一个模型,你给它不同的角色设定,产出质量差异巨大。比如你让它“你是一个严谨的 Rails 专家,所有改动必须先写测试”,和“你是一个快速原型助手,优先跑通功能”,出来的代码风格完全不同。

我的做法是给不同任务配不同人格:写业务逻辑时用“保守派”,强调测试和边界;做原型时用“激进派”,先跑通再说。这个技巧在官方文档里基本不会写,但实际用起来效果立竿见影。

4. 完整实操:用 CLI Agent 跑通一个 Rails 功能

4.1 环境准备与工具选型

先说工具。目前主流的 CLI Agent 有几类:Codex CLI、Claude Code、以及各种开源 Agent 框架。选哪个取决于你的需求:

  • 追求开箱即用:Codex CLI 或 Claude Code,安装完配个 key 就能跑。
  • 追求可定制:用开源 Agent 框架自己搭,能接自己的模型、自己的工具。
  • 追求团队协作:考虑带 Git 集成的方案,方便 code review。

安装环节常见的坑是运行时依赖。热词里unable to locate the codex cli binary or required runtime components和node_modules\@opencode\cli\bin\opencode.exe 与你运行的 windows 版本不兼容都是典型的环境问题。我的建议是:优先用官方推荐的安装方式,别自己手动挪二进制文件。Node 版本用 nvm 管理,Python 版本用 pyenv 管理,能省掉一大半兼容性问题。

# 以 Node 环境为例,先确认版本 node -v npm -v # 用官方渠道安装,不要手动下载二进制 npm install -g @xxx/cli # 验证安装 xxx --version

4.2 给 Agent 下达第一个任务

假设你有一个现成的 Rails 项目,想加一个“文章列表带分页和搜索”的功能。不要一上来就说“帮我加个文章列表”,太模糊。好的任务描述应该包含目标、约束、验收标准三要素:

目标:在现有 Rails 项目中新增文章列表页,支持按标题搜索和分页。 约束:分页用 pagy,搜索用 ransack,不要引入新的重型依赖。 验收标准:访问 /articles 能看到列表,搜索框输入关键词能过滤,每页 20 条,测试通过。

这样描述之后,Agent 的产出质量会明显提升。我试过用模糊描述和结构化描述各跑一次,后者的一次通过率高出将近一倍。

4.3 观察 Agent 的执行过程

Agent 开始干活后,你会看到它的一系列动作:读 Gemfile、读 routes.rb、读现有 controller、生成 migration、写 controller、写 view、跑测试。这个过程你要盯着,但不是盯着它写的每一行,而是盯着它的决策点。比如它决定用 ransack 还是自己写 where 条件,决定把搜索逻辑放 controller 还是 model,这些决策点才是你该介入的地方。

我一般会在 Agent 跑完第一轮后做三件事:看 git diff、跑一遍测试、手动点一遍页面。git diff 看它改了什么,测试看它有没有破坏现有功能,手动点看用户体验对不对。这三步走完,基本能拦住九成的问题。

4.4 参数与配置的选择逻辑

Agent 工具通常有一堆配置项,比如最大 token 数、温度、工具白名单。这些参数怎么调?我的经验是:

  • 温度:写代码用低温度(0.1-0.3),保证确定性;做头脑风暴用高温度(0.7-0.9)。
  • 最大 token:别设太小,否则它读到一半上下文就被截断了,容易做出错误判断。
  • 工具白名单:生产环境一定要限制,别让 Agent 能执行rm -rf这种命令。

热词里agent安全和a-memguard说的就是这类问题。Agent 能力越强,越需要边界约束。这不是不信任它,而是工程上必须有的防护。

5. 踩坑实录与排查技巧

5.1 常见问题速查表

现象可能原因解决思路
Agent 无法发送消息网络或 key 配置问题检查 API key 和网络连通性
提示更新 Agent 沙盒沙盒环境过期按提示更新或重建沙盒
执行命令报 internetopenurl 失败系统代理或证书问题检查系统网络配置
二进制与系统不兼容架构或版本不匹配用官方安装渠道重装
Agent 反复改同一处代码上下文丢失或目标不清补充验收标准,重启会话
测试一直失败但代码看着对环境依赖缺失先手动跑一遍测试确认环境

5.2 三个我踩过的坑

第一个坑:让 Agent 在没有测试的项目里干活。没有测试,Agent 就没有反馈信号,它改完代码自己也不知道对不对。我现在的做法是,哪怕项目再小,也先让 Agent 补一套基础测试,再让它做业务改动。测试是 Agent 的“眼睛”。

第二个坑:一次给太多任务。我试过让 Agent 一口气做“加用户认证 + 加权限 + 加审计日志”,结果它做到一半上下文就乱了,前面改的东西和后面改的冲突。后来我改成一次只做一个功能,做完验收再下一个,成功率大幅提升。

第三个坑:忽略 Agent 的记忆污染。长期记忆用久了会积累错误信息,比如它记住了某个已经删掉的模型,后面就会引用不存在的类。定期清理或重建记忆是必要的维护动作。

5.3 关于并发和部署的现实问题

热词里ai agent 怎么扛并发是个很实际的问题。Agent 本身跑在单机上问题不大,但如果你想让多个 Agent 并行处理任务,就得考虑任务队列、状态隔离、结果合并。我的建议是:初期别碰并发,先把单 Agent 工作流跑顺。等你能稳定地用 Agent 完成日常任务了,再考虑用队列把独立任务分发出去。

部署方面,Agent 跑在容器里是常见做法。热词里docker容器里的ros2 humble, micro-ros agent虽然是机器人领域的,但思路相通:把 Agent 和它的依赖打包进容器,保证环境一致。这样换台机器也能跑,不会出现“在我电脑上好好的”这种问题。

6. 我对这件事的真实看法

DHH 说的“手写代码时代落幕”,我理解成两层意思。一层是逐行手写确实在减少,Agent 接管了大量重复性、模板化的编码工作。另一层是软件工程的评价标准在变,以前看你代码写得好不好,现在看你能不能把 Agent 编排好、能不能设计出清晰的验收标准、能不能在 Agent 产出基础上做高质量的把关。

我自己的体感是,用了 CLI Agent 之后,我花在“敲代码”上的时间大概少了六成,但花在“想清楚要什么”和“验收结果”上的时间多了。这不是坏事,因为后者本来就是软件工程里更值钱的部分。Agent 把脏活累活接走了,留下的是真正需要判断力的活。

如果你现在还没开始用 Agent,我的建议是从一个小任务开始,比如让它帮你补一个模块的测试,或者重构一个胖方法。别一上来就搞大项目,先建立对它的信任和边界感。用顺了之后,你会发现它不是一个“更聪明的补全”,而是一个能跟你协作的工程伙伴。

最后分享一个我最近常用的技巧:让 Agent 在改代码前先写一段“改动计划”,说明它打算改哪些文件、为什么这么改。你看完计划再让它执行,能拦掉很多方向性错误。这个动作花不了几秒钟,但省下的返工时间是以小时计的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 17:05:56

HDFS与YARN:大数据分布式存储与资源调度核心技术解析

1. 大数据分布式存储的技术本质大数据分布式存储系统是现代数据架构的基石,它通过将海量数据分散存储在多个物理节点上,解决了传统集中式存储面临的扩展性瓶颈问题。其核心设计哲学可以概括为"分而治之"——将数据分片(Sharding&am…

作者头像 李华
网站建设 2026/11/2 17:05:50

Agent记忆解耦:实现跨平台迁移与长期复用

接手过不少 Agent 项目,也见过团队换框架时那种“搬一次家,丢一次记忆”的抓狂。模型可以换,Prompt 可以调,唯独记忆这关,每次都在原来的工具里锁着——用户偏好、历史决策、任务状态,全跟着旧框架一起作废…

作者头像 李华
网站建设 2026/11/2 17:05:19

CTF大赛真题解析与Web安全实战技巧

1. CTF大赛真题解析的价值与方法论在网络安全竞赛领域,CTF(Capture The Flag)赛事已经成为检验选手实战能力的黄金标准。过去五年间,国内CTF赛事数量增长了近300%,2025年各类赛事总奖金池突破2000万元。但一个残酷的现…

作者头像 李华
网站建设 2026/11/2 17:01:46

高维数论猜想的Python验证:格基约化与反例搜索

1. 先把“宇宙密码”这层滤镜摘掉:高维数论猜想到底在研究什么第一次看到“贾子猜想”这个标题的时候,我下意识地把它归到“民科猜想”那一类去了——毕竟标题里带着“宇宙密码”和“人类认知边界”,很像那种在博客末尾附上一段手写公式的风格…

作者头像 李华
网站建设 2026/11/2 17:01:15

Fun-ASR-Nano与Fun-CosyVoice 3.0构建AIPC全链路语音交互系统

1. 项目概述:打造能听会说的AIPC全链路语音交互系统在AI技术快速发展的今天,让个人电脑具备自然语音交互能力已成为现实需求。Fun-ASR-Nano与Fun-CosyVoice 3.0的组合,配合OpenVINO工具套件的全链路加速,为AIPC(AI Per…

作者头像 李华
网站建设 2026/11/2 16:58:05

Clawdbot安全漏洞分析与智能体网关防护实践

1. Clawdbot项目概述与安全事件复盘Clawdbot作为近期开源社区的热门AI智能体网关项目,凭借其轻量级架构和跨平台通讯集成能力迅速获得开发者青睐。这个基于Node.js构建的工具能够无缝对接Telegram、Slack等主流IM平台,通过WebSocket协议实现智能体与用户…

作者头像 李华