☰
AI编程与Agentic工程:从提示词到Linux底层能力
2026/10/31 14:08:48 网站建设 项目流程

1. 从DHH的几个判断看AI辅助开发的真实面貌

DHH这个名字,在开发者圈子里不需要过多介绍。Ruby on Rails的缔造者、37signals的联合创始人、Basecamp与HEY的核心开发者,最近他在AI编程这个话题上连续输出了一批观点,配合“Agentic工程”“Vibe Coding”这些热词反复出现,再结合Linux未来的讨论,说实话,这套组合拳打下来,信息量比大多数AI工具评测要大得多。

先说说他到底在讲什么。DHH的核心态度可以浓缩成几个判断:AI写代码这件事已经真实地进入了生产环境,不是demo、不是玩具;AI生成代码的最大问题不是“写得不对”,而是“你根本不知道它为什么这么写”,所以人类工程师的审查能力反而变得更加值钱;而所谓的Agent化开发,他更多强调“让AI干活、但别让它做决定”,权责边界必须画清楚。

为什么他的观点值得关注?因为他既不是卖AI工具的厂商,也不是纯技术象牙塔里的研究者。37signals是一家真实盈利的软件公司,DHH在HEY、Basecamp这类实际产品里用AI辅助开发,他的结论来自具体项目的真实摩擦,而不是PPT。这一点非常关键——AI编程话题下,太多人要么是厂商布道师,要么是还没写过几行生产代码的评论员,DHH属于少有的“亲自下场、拿真项目说话”的一类。

这篇文章我想把这些观点拆开揉碎,结合我自己在不同规模项目里用AI辅助开发的经历,把“AI编程到底改变了什么、没改变什么”“Agentic工程的正确打开方式是什么”“Vibe Coding为什么能火又为什么危险”这几个问题讲透,最后聊聊Linux在这个浪潮里的位置。

2. AI编程工具选型与核心工作流重设计

2.1 从补全到生成:AI编程工具的能力边界

现在说“AI编程”,早就不只是IDE里那个会自动补全括号的函数了。以GitHub Copilot为代表的第一代工具,本质是“更聪明的自动补全”,它根据上下文推荐下一段代码。到了ChatGPT时代,尤其是GPT-4之后,工具形态从“补全”变成了“生成”——你描述需求,它直接给你一个完整函数、一个测试用例、甚至一个项目的骨架。

这两者的差别是质变。自动补全的假设是“代码逻辑由人决定,AI只负责减少打字量”;生成的假设是“需求可以被描述,AI负责把描述变成结构”。后者意味着体力活被大幅替代,但同时也意味着一个新的问题浮出水面:描述本身的质量,决定了生成代码的质量。

我实测下来,这一代AI编程工具的能力边界大概是这样:

  • 结构化程度高的代码(API封装、CRUD、配置文件、ORM模型)生成质量极高,基本能到“直接可用的80%”
  • 算法逻辑复杂、依赖大量上下文推断的代码,生成质量迅速下降,容易出现“看起来对、跑起来错”的情况
  • 代码重构和跨文件修改,AI的表现取决于项目结构和上下文利用方式,差距极大
  • 写测试是AI的强项,尤其是边界条件和异常路径的覆盖,比很多初级工程师记得还全

DHH在一次访谈里说的那个比喻我很认同:AI写代码的能力已经相当于一个“积极性很高的初级开发者”,它能在几分钟内完成一个初级工程师需要一天才能做完的活,但你必须给它明确的验收标准。这句话里藏着两个关键点:第一,它确实能干活;第二,它依然是“初级”,你需要审。

2.2 提示词工程:描述需求才是真正的门槛

顺着上面的话说,AI编程的核心技能已经从“怎么写代码”变成了“怎么描述需求”。这就是“ai编程提示词”这个东西为什么能成为搜索热词的原因——大家都在找那把能把AI潜力撬出来的钥匙。

我总结了一套在实际项目里验证过的提示词写法,拆开来看其实不玄:

第一,背景信息要给足。不要只说“写一个用户登录接口”,要说清楚“这是一个Rails API项目,用户模型已存在,使用Devise管理认证,登录成功后需要返回JWT token,token有效期设为24小时”。给AI的上下文每多一层,输出质量就上一个台阶。

第二,约束条件要显式化。不用的库、不动的文件、必须遵守的命名规范、需要兼容的Ruby版本——这些统统写在提示词里。AI不像人,它不会主动问你“这个项目里有没有现成的工具函数”,你必须在指令里堵住它的自由发挥空间。

第三,要求AI先解释思路再写代码。这是个很实用的技巧:在提示词里加上“先说明你的实现思路,确认后再写代码”。这会强制AI进行“思维链”推理,输出质量在复杂任务上会有肉眼可见的提升。

我自己最常用的一套模板是这样的:

项目背景:[项目类型、技术栈、关键依赖] 当前状态:[已有代码结构、相关文件、待修改位置] 任务描述:[要做什么,输入输出是什么] 约束条件:[禁止事项、必须遵守的规范、兼容性要求] 验收标准:[如何判断完成,有没有测试要求] 输出格式:[代码文件路径、是否解释思路、是否需要测试用例]

这套模板看起来简单,但它把“上下文、任务、约束、验收”四件事一分为二,AI的幻觉率会明显下降。如果你现在还在用一句话命令AI写代码,我建议你先在提示词上花半小时,收益比换工具大得多。

2.3 代码审查前置:人机协作的新岗位

AI辅助开发普及之后,团队里最稀缺的能力不是“写代码的能力”,而是“判断代码好坏的能力”。DHH有一个很有名的观点:AI生成代码带来的最大威胁不是失业,而是一大批开发者逐渐失去“为什么这样写是对的”的判断力。

我自己的体会是,代码审查这件事必须前置到AI生成的那一刻,而不是等AI写完再审查。具体做法是:

  • 每次让AI生成代码,先要求它输出实现思路,而不是直接给代码
  • 对关键路径的代码,必须要求AI给出测试用例,甚至先写测试再写实现
  • 任何AI生成的代码合并前,必须经过一次完整的走查,不能直接信任测试通过

这些规则会牺牲一部分效率,但换来的是代码库的可维护性。前面说AI像“积极性很高的初级开发者”,你对初级开发者不会说“你写的我都不看直接上生产”,对AI也一样。

3. Agentic工程实战:智能体协作的正确打开方式

3.1 什么是Agentic工程,以及它和单次问答的区别

Agentic工程(有时也叫智能体工程)是最近半年到一年集中爆发的一个概念。简单说,它解决的不再是“给AI一个任务让它生成一段代码”,而是“给AI一个目标,让它在多步骤、多工具、多决策的场景里自主推进”。

用生活化的类比来解释:单次问答像是你请了一个顾问,问一句答一句;Agentic工程像是你雇了一个实习生,给他一个目标,他自己去查资料、写方案、做实验、汇报进展、根据反馈迭代。

这个差别决定了工作方式完全不同。单次问答的输入是“问题+上下文”,输出是“答案”;Agentic工程的输入是“目标+边界条件”,中间会经历反复的探索、试错、修正,最后输出的是“结果+过程记录”。

目前市面上的Agent工具形态各异,有的在IDE里(比如Cursor的Agent模式),有的在命令行里(比如各类CLI agent),有的作为独立应用存在。但无论形态怎么变,背后的核心机制是一致的:大模型调用工具、读取反馈、根据反馈调整计划、多次迭代直到达成目标。

3.2 划清权责边界:为什么不能让AI自主决定

这里就到了DHH观点最有争议也最有价值的部分。他在不同场合反复强调:AI可以执行任务,但不要让它做决策。具体到Agentic工程里,我的理解是:

执行层面的自主性可以放开。代码重构、测试编写、日志分析、数据迁移脚本这类“怎么做已经明确”的任务,完全可以交给Agent去执行,它会做得又快又不出错。决策层面的自主性必须收回。要不要引入这个依赖、这个重构方向对不对、架构上该选哪个方案,这些涉及“为什么要这么做”的问题,必须由人来做决定。

原因很简单:AI的“决策”本质上是概率预测,它没有产品意识、没有商业语境、没有长期维护的体感。它可能会做出“看起来合理但商业上是灾难”“技术上正确但产品上跑偏”的决定,而且它会非常自信地执行下去。

3.3 一个Agentic工程的落地样本

我最近在做的一个嵌入式Linux项目里,比较系统地用了Agent来辅助,做一个复盘。

项目背景是一个边缘网关设备,ARM架构,资源受限,需要把采集的数据经过协议转换后上云。我们的Agent任务设置是这样的:给它一个明确的代码库,告诉它需要在哪个模块增加MQTT断线重连功能,并且要求它先分析现有代码结构,输出改造方案,等确认后才执行修改。

Agent的表现相当有意思。它花了几分钟读代码,输出了一个改造方案,方案里不仅指出了要改的位置,还提出了一个我们没有注意到的点——现有的数据缓冲队列在断线重连时可能溢出。这个发现是有价值的,因为它在“读代码”这件事上比人快得多、全得多。

但接下来它暴露了问题:在具体实现重连逻辑时,它引入了一个新的第三方库来管理定时器。这个库功能确实强大,但对于一个资源受限的嵌入式系统,多一个依赖意味着多一层维护成本和潜在的系统调用开销。我们审完之后决定不用这个库,直接用系统自带的timer接口实现。

这就是Agentic工程里最典型的场景:AI负责探索和初稿,人负责决策和把关。它提了一个方向,你判断方向是否合适,如果不合适,你给出修正让它继续。这个“人机协作、AI执行、人做决策”的模式,在效率上的提升是明显的,如果换成传统开发方式,光读那套历史包袱很重的代码库就要一上午。

3.4 Agent失败模式与防御策略

Agent系统用多了,会遇到几类反复出现的失败模式,列出来供你参考:

第一类是“过度自信执行型”。Agent在中间步骤遇到障碍时,倾向于自己编造一个解决方案继续往下走,哪怕这个方案和最初的约束条件矛盾。应对方法是设置检查点,每个大步骤让Agent输出中间结果,人确认后再继续。

第二类是“上下文丢失型”。Agent处理多轮交互时,早期的目标和约束会被慢慢遗忘,越到后期越容易出现偏离。应对方法是在提示词里定期重述约束,或者用结构化格式(比如固定的“记忆块”)让Agent持续回看原始目标。

第三类是“工具滥用型”。Agent会倾向于调用各种工具库来“简化问题”,在嵌入式或资源受限场景里这是致命的。应对方法是在约束条件里明确列出“禁止引入新依赖”“只能在现有技术栈内实现”。

这些防御策略看起来就是在给AI“上紧箍咒”,但实际经验告诉我,这些都是必要的。Agent的自主性是工具,不是目的,不能用自主性换取可控性。

4. Vibe Coding的现象拆解:为什么火、有什么坑

4.1 Vibe Coding的准确含义与误读

“Vibe Coding”这个术语,是Andrej Karpathy在2025年初提出的,火得极快。他的原意是描述一种编程方式:你完全沉浸在“氛围”里,放弃对细节的过度关注,凭直觉推进,遇到问题就让AI帮忙解决,而不是自己死磕每个技术细节。

这个词被大量传播之后,含义发生了偏移。很多人把Vibe Coding理解为“用AI写代码,自己完全不懂代码也行”,甚至有人把它当成“零基础也能当程序员”的宣言。搜索热词里“vibe coding下载”这种词都能出现,说明很多人以为Vibe Coding是一个可以下载安装的软件——这个误解本身就说明问题了。

我理解Karpathy的原意,更多是“放下对代码的执念,把精力放在产品体验和直觉判断上”,它讨论的是有经验的开发者如何调整心态,而不是“不懂技术的人如何变成开发者”。这个区别很关键:前者是在已有能力基础上换一种工作方式,后者是绕开基础能力直接追求结果。

4.2 Vibe Coding的适用场景与危险场景

实测下来,Vibe Coding方式在特定场景下确实高效:

  • 原型验证阶段:你需要快速验证一个想法有没有戏,这时候“让AI快速生成、手动调整、再生成”的循环非常高效
  • 个人项目、小工具、脚本类代码:出了问题自己修,修不好扔掉重来,代价低
  • 非核心业务的内部工具:能用就行,没人在意代码风格
  • 学习探索阶段:通过AI生成代码来理解某类技术是怎么实现的

但在这些场景里,Vibe Coding是灾难:

  • 生产环境的核心业务系统
  • 需要长期维护、多人协作的代码库
  • 涉及支付、安全、数据合规的模块
  • 任何“出了问题会出大事”的场景

这两个清单的差异不是技术层面的,而是风险层面的。Vibe Coding本质上是“用更高的返工概率换取前期的速度”,在风险承受力高的场景划算,在风险承受力低的场景致命。

4.3 Vibe Coding的隐性成本

顺着风险话题说,很多鼓吹Vibe Coding的人不会提它的隐性成本。我在多个项目里看到了同样的规律:

第一是技术债的快速堆积。AI生成的代码质量参差不齐,风格不一致,没有人为逻辑连贯性负责。三个月后你回头看这段代码,会发现它已经变成了一个没人完全理解的“代码沼泽”。

第二是调试难度的上升。同类问题,手写代码你大概率知道问题出在哪个模块,AI生成的代码你可能连它是怎么拼装起来的都不清楚。排错时间的增加,会慢慢吞噬掉前期省下的时间。

第三是能力的逐步退化。这是最隐蔽也最危险的成本——习惯Vibe Coding之后,开发者对底层机制的理解会逐渐淡化,遇到文档查不到、AI也不知道的问题就会卡死。

4.4 一句话评价

Vibe Coding像是一种“创意状态”,适合在有安全网的环境里探索,不适合作为生产环境的默认工作方式。它和Agentic工程的关系不是替代,而是上下游:Vibe Coding负责发散探索,Agentic工程负责结构化交付,人负责判断什么该发散、什么该收敛。

5. Linux在AI编程时代的位置与前景分析

5.1 为什么AI编程浪潮反而让Linux更重要

话题转回Linux。搜索热词里Linux相关的高频词极其丰富:linux常用命令、linux面试题、linux系统安装、嵌入式linux、linux进程间通信、linux部署中间件……这说明Linux的学习和使用需求依然旺盛,而且这个需求正在被AI编程浪潮反向放大。

背后逻辑其实很清晰:AI生成的代码跑在哪里?绝大多数跑在Linux服务器上。AI训练模型的算力集群用什么系统?绝大多数是Linux。AI开发工具链(Docker、Kubernetes、Jupyter Notebook、各种CI/CD工具)的原生环境是什么?答案是Linux。

有人说“AI会让我们不再需要学技术”,现实恰好相反:AI让我们更容易地写代码,但这些代码要运行、要部署、要维护,依然离不开Linux技能。AI编程没有消灭Linux需求,反而把Linux从“运维工程师的工具”变成了“所有AI应用开发者的底层能力”。

5.2 Linux与AI开发工作流的实际交集

我自己在AI辅助开发的实际工作流里体会到,Linux能力和AI应用成效是直接相关的:

  • Agent类的工具,绝大多数要在Linux环境下跑得最顺畅,Windows下的兼容性问题层出不穷
  • 数据预处理、模型推理、日志分析这些AI辅助开发里常见的任务,Linux命令行工具的效率和能力远超图形界面
  • Docker容器化是AI应用交付的主流方式,而Docker的核心操作都是在Linux内核能力之上实现的
  • 无论你用Cursor还是Copilot还是其他AI工具,最终代码要跑起来、要调试,大概率还是SSH到一台Linux服务器上操作

这些交集意味着,Linux技能是AI时代开发者的硬通货,不是所谓的“过气技能”。

5.3 嵌入式Linux是AI落地的最佳载体之一

热搜词里嵌入式Linux相关的内容非常多,这背后是AI向边缘端渗透的大趋势。云端AI的能力再强,数据要实时处理、网络不稳定时要本地决策、隐私数据不能出设备,这些场景都会导向边缘计算,而边缘设备上的系统,绝大多数是嵌入式Linux。

在嵌入式Linux里做AI,和纯云端的玩法完全不同。第一是算力约束,你没有一个强大的GPU集群兜底,必须在CPU、内存、存储都受限的环境里把AI推理跑起来。第二是实时性约束,很多场景对延迟有硬性要求,模型再准,推理慢到实时性不达标就完蛋。第三是稳定性约束,设备部署后可能几年不重启,运行时的稳定性和内存泄漏控制是生死线。

DHH虽然没有深入谈嵌入式Linux,但他强调的“AI是工具、工程判断是核心”这个思路,恰好也是嵌入式AI开发里的真理。模型选型、量化方案、推理框架调优、边缘场景的corner case处理,这些都不是AI自己做的——AI负责加速实现,人负责决定方向。

5.4 Linux未来的挑战和确定性

Linux会消失吗?这个话题每隔几年都会有人拿出来讲。但现实情况是,Linux的生态不仅没有萎缩,反而在AI时代获得了新的增长极。

从服务器端看,Linux在云原生和AI基础设施领域的地位,比五年前更加稳固。从桌面端看,虽然消费级市场依然是Windows和macOS的天下,但Linux桌面在开发者群体中的渗透率持续上升。从嵌入式看,物联网设备、边缘网关、车载系统、智能硬件,到处是Linux的身影。

Linux面临的挑战也不是没有。国产发行版的热潮带来了一些生态碎片化的问题;桌面体验和软件生态依然是短板;驱动兼容性在老设备上依然头疼。但从整体趋势看,Linux在AI基础设施层面的地位不降反升,这个确定性很高。

6. 常见问题与避坑心得

6.1 AI编程最容易被忽视的五个坑

我自己用过不同种类的AI编程工具,也在多个项目里踩过不少坑,整理出来给你:

第一个坑是盲目信任测试。AI生成的代码如果带测试,这些测试往往是AI“自己验证自己”,很容易出现“测试和代码一起错”的情况。我的习惯是:关键代码的测试自己写,或者至少测试用例里加上几个AI没想到的边界输入。

第二个坑是忽略版本兼容性。AI训练数据里的库版本和理解的最新版本之间可能存在差异,它会用旧API给你生成代码,跑在新版本上直接报错。解决方案是提示词里写清楚版本信息,并且养成“生成完先跑一遍依赖检查”的习惯。

第三个坑是项目上下文缺失。AI工具如果只看到当前打开的文件,它给的答案大概率是片面的。最好的做法是给工具足够的仓库级上下文,或者手动把相关的文件内容、接口定义贴进去。

第四个坑是重构时的“连带破坏”。AI重构一个函数时,往往只关注这个函数本身,不去扫描它被哪些地方调用。结果就是函数改好了,调用它的地方全挂了。提示词里明确要求“列出所有受影响的调用点并验证”能大幅减少这个问题。

第五个坑是让AI直接改生产代码。这个基本属于事故高发区,AI在没有完整上下文的情况下修改生产代码,等同于一个不看文档的新人直接改线上。任何AI修改,先在本地、在分支里完整跑通了再合并。

6.2 Linux工作流里AI能帮你做的事和不能做的事

AI在Linux工作流里的帮助,主要体现在这几个方面:解读日志(一个grep加一个AI解释,效率提升极其明显)、生成shell脚本、解释报错信息、分析进程状态、排查系统问题。

比较典型的一个例子:系统出现性能问题时,以前你是扛着top、vmstat、iostat的输出一个个对照,现在可以把输出直接给AI,让它帮你判断瓶颈方向。AI虽然不能替代你理解系统机制,但在模式匹配和常见问题速查上,比搜索引擎好用得多。

但AI在Linux上也有明显的不能:复杂内核问题的追踪、驱动开发和调试、分布式系统里跨节点的疑难杂症,这些领域AI能给的帮助非常有限,需要靠真正的底层理解。所以我的建议是,别因为用了AI就把基础技能扔掉,AI越普及,深度能力越稀缺。

6.3 实操经验:AI辅助Linux运维诊断的一个真实案例

分享一个实际案例。之前维护的一台服务器,内存占用持续走高,找不到原因。传统做法是SSH上去,用free查内存、用ps按内存排序、查进程日志,一套组合拳打下来,效率还是低,因为系统里跑的服务太多。

这次我换了个思路。先用free输出当前内存状态,再用ps aux按内存占用排个序,把输出存下来,然后把这些信息丢给AI分析。AI很快指出,有一个进程的内存使用比正常值高了一个量级,而它对应的服务近期没有更新过,建议排查它是否有内存泄漏。

顺着AI给的线索,我们查了那个服务的日志,发现确实有一个bug导致连接清理逻辑失效。这次诊断流程,AI节省的时间主要在于模式识别:它在几秒钟内识别出了一个人类需要一条条看、对照经验判断才能发现的异常点。

6.4 快速排查速查表

做运维或开发时间长了,会积累一套自己的排查路径。加上AI辅助后,这套路径的效率提高了很多,整理成表格供你参考:

场景传统手段AI辅助方式效果
服务异常退出journalctl查日志、dmesg看内核信息把日志片段给AI,让它提炼错误类型和可能原因AI能快速匹配已知故障模式
性能瓶颈top/vmstat/iostat逐项对照把系统状态输出给AI,请求瓶颈分析AI擅长多指标联合判断
配置错误手动对比配置项和经验判断把配置文件给AI,要求它按最佳实践审查能发现遗漏的约束项
进程异常ps/htop逐一排查提供进程列表和资源占用,AI找出异常特征模式识别优于人眼逐一排查

当然AI给的分析还需要人来复核,给它当辅助可以,完全不设防地照单全收,迟早出事。

7. 写在最后的一点个人体会

聊了这么多AI编程、Agentic工程、Vibe Coding和Linux的话题,最后说一点我个人最真实的体会。

技术工具迭代得越来越快,今天的热词明天可能就过时了,但有一件事不会变:工具替代的是重复劳动,不是判断力。DHH的观点里最打动我的不是他对AI有多乐观,也不是他有多保守,而是他始终在强调——工程师的价值在于知道“什么是好的”、知道“为什么这样做”,而不是在于“能多快地写出代码”。

我自己在这段时间的实践里,最大的变化是:从把AI当成“搜索引擎的增强版”,进化到把AI当成“一个需要管理的团队成员”。它干活快、态度好、从不抱怨,但需要你给它明确的目标、清晰的边界、持续的过程监督。管理AI这件事本身,正在成为开发者技能树里一门新的必修课。

至于Linux,我的立场很朴素:只要服务还在跑、容器还在起、数据还在存,Linux就是那个绕不开的底座。AI时代,编程的门槛确实在降低,但深度理解底层系统的能力,反而因为稀缺变得更加值钱。有句话说得好:“潮水退去才知道谁在裸泳。”AI这个潮水正在涌来,愿我们都能在它退去之后,依然站得住。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询