Martin Fowler:技术债、认知债与意图债
摘要
Martin Fowler 反思 AI 对代码质量的影响,指出人类的“懒惰”反而促成清晰抽象,而 LLM 则可能用不必要的复杂性把系统拖胖。
查看缓存全文
缓存时间: 2026/04/22 17:32
相似文章
引用布莱恩·坎特里尔
布莱恩·坎特里尔批评LLM缺乏人类懒惰带来的优化约束,认为LLM会不必要地使系统复杂化而非改进,并强调人类时间限制推动了高效抽象的发展。
@unclebobmartin:晨袍咆哮:AI 编码比你强,接受现实吧
软件工程思想领袖 Robert C. Martin(Uncle Bob)在社交媒体发文称,AI 的编码能力已全面超越人类,并呼吁开发者正视这一事实。
@ItsRoboki: https://x.com/ItsRoboki/status/2046220862546960563
# AI 智能体术语不过是新瓶装旧酒 如果你是一位经验丰富的软件工程师,却对 AI 智能体(AI Agent)的世界感到困惑,原因很可能不是技术太复杂——而是行话太多。 欢迎了解**"词汇税"**:这是一种因新造术语而产生的认知负担,让你误以为自己面对的是全新的概念,而实际上不过是你已经熟悉的老朋友换了身行头。 --- ## 什么是词汇税 每隔几年,技术圈都会经历一轮术语洗牌。某个领域起飞了,新词汇随之涌现,旧有的工程概念被重新包装,贴上新标签。 这并不总是有意为之的炒作。有时候,新词汇确实能承载细微的差别,或者为特定社区提供更精准的表达。但很多时候,它制造的困惑远比带来的清晰要多。 词汇税的本质就是:**你为了弄懂这些词在说什么,而不得不付出额外的认知成本**。 AI 智能体领域目前正在大量征收这笔税。 --- ## 逐一拆解那些花哨术语 ### "Orchestrator"(编排器) 这个词让人联想到某种神秘的 AI 大脑,在幕后统筹全局。 实际上?它就是一个**控制流管理器**。它决定先调用哪个函数,根据结果走哪条分支,什么时候结束循环。你在写业务逻辑的第一天就做过这件事。 换个说法:`main()` 函数加上一些条件判断。 --- ### "Harness"(执行框架) AI 圈子喜欢说某个模型被"装进了一个 harness"。 这翻译过来就是:**一个包装类或运行时环境**,负责管理模型调用的生命周期——处理输入输出、捕获错误、维护状态。 换个说法:适配器模式(Adapter Pattern)加上一个 try/catch 块。 --- ### "Memory Layer"(记忆层) 这个词听起来像是给 AI 装上了某种类人的记忆系统。 实际上它就是**存储和检索机制**。短期记忆是会话上下文(session context),长期记忆是数据库查询,语义记忆是向量搜索。 换个说法:缓存 + 数据库 + 搜索索引。 --- ### "Tool Use"(工具调用) 模型"学会了使用工具",这句话读起来颇具魔幻色彩。 脱下这层外衣,它就是:**函数调用**。模型输出一个结构化的请求,系统解析它,执行对应的函数,把结果返回给模型。 换个说法:API 调用的调度与执行。 --- ### "Agentic Loop"(智能体循环) 这个术语让整个架构听起来像是某种自主意识的涌现。 它的本质是:**一个 while 循环**,每次迭代都会:获取当前状态 → 决定下一步行动 → 执行行动 → 更新状态 → 判断是否结束。 换个说法:事件循环(Event Loop),或者任何一个游戏引擎里的主循环。 --- ### "Grounding"(落地/锚定) "模型需要被 grounded"——这句话在 AI 文章里频繁出现。 它的意思是:**把模型的输出与可验证的外部数据绑定**,防止它胡说八道(即"幻觉")。RAG(检索增强生成)是最常见的实现方式。 换个说法:数据验证 + 外部数据源注入。 --- ### "Reflection"(反思) 听起来像是 AI 在进行哲学沉思。 实际操作是:**让模型评估自己的上一个输出**,判断是否满足要求,如果不满足则重新生成。这是一个带有评判步骤的迭代优化循环。 换个说法:带校验逻辑的重试机制(retry with validation)。 --- ### "Chain"(链) LangChain 里的"链",以及各种"prompt chain"。 这就是**函数组合(function composition)**,或者说是管道(pipeline)。输出 A 作为输入传给 B,B 的输出传给 C。 换个说法:Unix 管道。`cat file | grep keyword | sort | uniq` --- ## 那么,是不是什么都没变? 当然不是。有几件事确实是新的,或者至少是在规模和能力上发生了质变: 1. **不确定性变成了一等公民**:传统函数给定相同输入,输出是确定的。LLM 不是。这要求你在架构层面认真对待概率性行为,而不只是在边界情况里处理它。 2. **自然语言成为了接口**:当接口是自然语言时,你没办法写一个传统意义上完整的类型规范。这对系统边界的设计提出了新要求。 3. **上下文窗口是有限资源**:你需要像管理内存一样精心管理上下文,这是一种在普通 Web 开发里不太常见的约束。 4. **涌现行为(Emergent Behavior)确实存在**:模型组合起来之后,有时会产生你没有显式编程的行为。这既是能力,也是风险。 --- ## 如何用已有知识来理解 AI 智能体 这里有一个简单的映射框架,供有经验的工程师参考: | AI 智能体术语 | 等价的工程概念 | |---|---| | Orchestrator | 控制流 / 状态机 | | Memory Layer | 缓存 + 数据库 | | Tool | 可调用函数 / API | | Agentic Loop | 事件循环 / 主循环 | | RAG | 查询 + 上下文注入 | | Reflection | 带校验的重试 | | Chain / Pipeline | 函数组合 / Unix 管道 | | Prompt Template | 带参数的字符串模板 | | Agent | 带状态的服务 + 决策逻辑 | --- ## 写在最后 词汇税不是阴谋,但它有真实的代价。它让有经验的工程师低估自己已有的能力,让新人觉得这个领域比实际上更难进入。 下次当你遇到一个陌生的 AI 术语,不妨先问自己:**"如果我是五年前,没有这个词,我会怎么描述这件事?"** 大多数时候,你会发现你早就认识它了。 AI 智能体领域确实有令人兴奋的新东西。但其中最难的部分,往往不是理解那些新概念——而是先剥掉裹在旧概念外面的那层新皮。
Tim Davis – 概率化工程与 24/7 员工
Modular 负责人 Tim Davis 分享了打造自主代码编写系统 Compound Loop 的经验。他指出,软件开发正从确定性范式向概率化系统演进,AI 智能体的介入催生了“全天候(24/7)员工”模式:人类操作者的角色从直接编码转向任务协调。与此同时,技术岗位的分工也在发生重构,逐渐分化为高杠杆价值的核心岗位与侧重 AI Agent 调度的基础性工作。
引用 Andreas Påhlsson-Notini 的话
Andreas Påhlsson-Notini 批评当前 AI agent 表现出令人沮丧的“人性”——注意力涣散、来回讨价还价。