#AI编程

宝玉
2周前
研究 Vibe Coding 都能写论文了,来自中科院、杜克大学等的这篇《基于大语言模型的Vibe Coding综述》,还是花了点功夫把 Vibe Coding 相关的论文、信息梳理了一遍,有一些值得看的内容。 【一】 首先是对 Vibe Coding 的定义,这篇论文把 Vibe Coding 描述成一个“三方关系” (参考图1): 1. 人类开发者:不再是代码的直接创作者,更像是需求的提出者、方向的把控者和最终质量的仲裁者 。你的主要工作是清晰地表达意图,并判断 AI 做出来的东西“对不对”。 2. 软件项目:不再仅仅是代码库,而是一个包含代码、数据、文档、领域知识等各种信息的“上下文空间” 。AI 需要从这里获取信息来理解任务。 3. 编程智能体 (AI):负责具体的编码、修改、调试工作,它听从人类的指令,并受项目上下文的约束 。 论文也提到了 Vibe Coding 带来的问题:经验丰富的开发者在使用高级AI工具时,完成任务的时间反而增加了19% ! 【二】 为什么经验丰富的开发者 Vibe Coding 时间更长?不完全是模型能力不够,还有其他原因: 1. 系统性的上下文工程 (Context Engineering):你得知道怎么把项目信息(代码库、文档、规范)有效地“喂”给 AI 。AI 不是凭空写代码,它需要知道你的项目是怎么回事 。光会写漂亮的提示词 (Prompt) 是不够的,管理上下文信息才是核心技术 。 2. 反馈循环 (Feedback Loops):不能简单地把活儿全丢给 AI。怎么提要求?怎么给反馈?什么时候该介入?这些协作方式直接影响效率和质量 。 3. 基础设施 (Infrastructure):你需要能安全执行 AI 代码的“沙盒” ,能跟 AI 流畅对话、共享项目信息的交互界面 ,甚至需要能自动化测试、部署 AI 代码的平台 。没有这些基础设施,AI 就是“带镣铐跳舞” 。 【三】 五种 Vibe Coding 开发模式 : 1. 无约束自动化 (UAM):完全放手让 AI 干,你只看最终结果 。速度快,风险高,适合做一次性原型或小工具 。有点像软件工程里的“快速应用开发”(RAD) 。 2. 迭代式对话协作 (ICCM):你和 AI 像结对编程一样 ,AI 写,你审,反复沟通迭代 。质量有保障,但需要你深度参与 。 3. 规划驱动 (PDM):你先做好设计、定好规范(比如写好技术文档、规则文件、实施计划) ,然后指导 AI 按计划执行 。有点像传统的“瀑布模型” ,但 AI 的快速迭代让它更灵活 。 4. 测试驱动 (TDM):你先写好测试用例,定义清楚“怎样算对” ,然后让 AI 去写能通过测试的代码 。用机器验证代替人眼审查 。这是传统“测试驱动开发”(TDD)的应用 。 5. 上下文增强 (CEM):这不是一个独立流程,而是一种“增强插件” 。通过检索增强生成(RAG)、代码库索引等技术,让 AI 能更好地理解项目现有情况,生成更贴合项目风格和规范的代码 。它可以与其他四种模式结合使用 。 【四】 Vibe Coding 的最佳实践——把 Agent 当员工而不是工具 很多一直把 AI 当成一个“超级自动补全”,一个更聪明的 Stack Overflow,我们把它当成一个“工具”,而实际上,它是一个智能体(Agent)。 “工具”和“Agent”的区别是什么? - 工具(比如锤子、编译器):它帮你完成你正在做的事。你100%掌控它。 - Agent(比如一个初级程序员):它能自主完成任务。你需要给它分配任务、给它“记忆”(上下文)、给它权限,并对它进行“管理”和“审查”。 如果试图用“使用工具”的方式,去“管理一个员工”,结果就是会带来两个极端: - 一个极端是盲目接受:AI 写的代码,语法漂亮,看着很对。你“Vibe”一下,直接提交。结果生产环境崩了。你大骂“模型产生了幻觉”,而真正的问题是,你跳过了必要的检查环节: 代码审查、自动化测试。 - 一个极端是过度怀疑:你根本不信它,它写的每一行你都要重写,这同样影响效率。 这特别像那些管理水平不怎么样的 Engineering Manager:要么对员工(AI)完全放任不管,要么事必躬亲地为管理。 最佳实践是在关键节点设置检查站,自动化验证流程,但在过程中放权。就像一个新员工入职,你不会直接让他们在生产环境上更新代码,而是会有配套的流程和环节保障。 【五】 开发者的角色正在发生根本性转变。你不再仅仅是代码的生产者,你的核心工作变成了: 1. 意图阐述与提示工程:把复杂需求翻译成 AI 能理解的清晰指令 。 2. 上下文管理:精心挑选和组织信息(API 文档、代码片段、设计规范),喂给 AI,限制它的“自由发挥”,确保方向正确 。 3. 系统级调试:当 AI 生成的系统出问题时,重点不再是逐行 GDB,而是从系统行为层面去推测、定位问题,然后引导 AI 去修复 。 4. 架构监督:AI 负责实现细节,你得把握整体架构,确保项目的概念完整性和长远健康 。 5. 质量验证与治理:设计测试用例,利用自动化工具验证 AI 的输出,管理 AI 的权限,追踪代码来源 。 简单说,你的价值从“写好代码”变成了“用好 AI 来写好代码”。这不仅仅是技能的增加,更是一种思维模式的彻底转变 。 【六】 Vibe Coding 带来的挑战:安全、可靠性、监管,以及……我们自己 1. 代码可靠性和安全性:AI 可能从训练数据里学到并复现各种 Bug 和安全漏洞 。只看“Vibe”不看代码,无异于“盲驾” 。我们需要新的自动化工具和流程来实时监控、验证 AI 生成的代码 。手动代码审查根本跟不上 AI 的产出速度 。 3. 大规模监管:当 AI 智能体能自主修改、部署代码时,如何有效监督它们?如何防止一个错误像病毒一样扩散?如何追踪责任? 。现有的管理和审计方法都过时了 。我们需要能与 AI 能力同步扩展的监管架构 。 3. 人的因素:开发者需要转变思维模式 ,学习新技能 。团队协作方式需要调整 。更重要的是,如何建立对 AI 恰当的信任度——既不盲从也不过度怀疑 ? 4. 教育脱节:现在的计算机教育体系,有教你怎么“指挥”AI 写代码、怎么设计 AI 的工作流、怎么评估 AI 的风险吗?很少 。人才培养的速度,远远落后于技术发展的速度 。 论文地址:
宝玉
3周前
你这就是对我的偏见了,总觉得我只是个搬运自媒体 我好歹日常大量阅读、写代码、写提示词,捎带着搬运了一些还分享了实践经验。 我本身也是 AI 乐观派,希望它越来越强,帮我干越来越多的活,也希望“AI成为编程架构师”。 但是我们不能停留在空想,或者对未来的一种幻想,等着 AGI 的到来。 说回具体的,AI 未来也许能成为编程架构师,但这套路径还很遥远,和 AGI 一样遥远: 1. 长上下文还没解决好,架构能力需要对系统有全局了解,当前你没办法把整个代码库扔进去 也许可以像 DeepSeek 论文那样用缩略图,但那还是理论上 2. 对代码结果的反馈 AI 还不能直接感知,架构能力不是理论,更需要实践,架构效果好不好一定是要去实际运行,在运行中收集反馈并调整。现在 AI 根本没法感知系统的运行效果,让它自己去搭个运行环境也许勉强可以,怎么测试并评估系统的反馈是做不到的 3. 长期记忆仍然没解决,架构师设计过程中,有大量的沟通工作,和 PM 和程序员,这些沟通的内容都要融合到架构中,但怎么把它们记下来并融入架构设计,并在设计后验证这些记忆中的内容,都是挑战。 4. AI 对多个 Agent 的组织能力还有待提升,架构师不仅仅是一个技术工作,不是写个架构设计文档就结束了,还需要去传播架构知识,基于架构去调整组织结构,基于组织结构去整合结果,这方面至少要 AI 进化到组织者这个阶段 你看我们讨论问题,我觉得反对和赞同都很正常,但我们最好具体问题具体讨论,至少我一般不是情绪化的说它行或者不行,或者不会说你没做过架构你不懂,或者未来怎么样怎么样,而是像上面一样一条条列出我的观点。 如果我错了我也很乐意修正自己观点,比如去年我还觉得 Coding Agent 不靠谱,而现在我觉得“真香”。
宝玉
3周前
转译:像外科医生一样写代码 很多人都说,AI 会让我们统统变成“经理”或者“编辑”……但我认为,这种看法不仅不完整,甚至还有点危险! 就我个人而言,我正努力像外科医生一样写代码。 外科医生可不是经理,他们是亲自动手干活的人!但他们的技术和时间被一个支持团队极大地放大了。这个团队会处理好所有准备工作、次要任务和行政杂务。这样一来,外科医生就能心无旁骛地专注于他们最擅长的关键事务。 我现在用 AI 编程工具的目标,就是把 100% 的时间都花在真正重要的事情上。(作为一名 UI 原型设计师 (UI prototyper,也就是设计和制作产品初步模型的人),这主要意味着捣鼓各种设计概念。) 事实证明,现在有很多次要任务,AI 智能体 (AI agents) 已经完全有能力帮忙处理了。最近我发现,把下面这些活儿交给 AI 就挺好: - 在开始一项大任务前,先让它写一份关于代码库相关部分的指南。 - 尝试对一个大改动进行“探路” (Spike out,软件开发术语,指快速做一个简单的原型来探索解决方案的可行性)。我经常不会直接用它的结果,但我会把它当作一个草图,帮我看清方向。 - 修复那些有明确要求的 Typescript 错误或 bug。 - 给我正在构建的功能写文档。 我经常发现,让这些次要任务在后台“异步” (async,指任务在后台运行,不会卡住你当前的工作) 跑着非常有用——比如我吃午饭的时候,甚至干脆让它跑上一整夜! 当我坐下来准备开工时,我希望自己就像一个走进准备就绪的手术室的外科医生。一切都已准备停当,就等我来大显身手了。 值得注意的是,我用 AI 处理“主要任务”和“次要任务”的方式,有着天壤之别。 对于核心的设计原型工作,我仍然会大量手写代码。即便用 AI,我也会非常小心,抠很多细节。我需要快速的反馈循环和良好的可见性。(比如,在这种场景下我就很喜欢 Cursor 的 tab 键自动补全功能) 至于次要任务,我的态度就放松多了,我很乐意让一个 AI 智能体在后台“折腾”好几个小时。最终能把活儿干完才是最重要的;至于速度和可见性,就没那么要紧了。过去我处理这种长时间无人值守的任务时,首选是 Claude Code,但 Codex CLI (一个通过命令行使用 AI 编码的工具) 正在成为一个强有力的竞争者,甚至可能成为我的新宠。 这两种工作模式截然不同!这让我想起了 Andrej Karpathy (AI 领域的大牛,特斯拉前 AI 总监) 提出的 “自主性滑块” 概念。把“自主性光谱”的不同部分混为一谈是危险的 —— 它们各自所需的工具和心态,差别真的非常大。 你的智能体不需要职业规划 “软件外科医生”这个概念其实很早就有了——弗雷德·布鲁克斯 (Fred Brooks) 在他 1975 年的经典著作《人月神话》(The Mythical Man-Month) 中,将其归功于哈兰·米尔斯 (Harlan Mills)。他提到一个“首席程序员”应该由包括“副驾驶”(copilot) 和多名管理员在内的各种员工提供支持。当然,在那个年代,这个想法是让真人来扮演这些支持角色。 好了,这里有一个显而易见的观点:“AI 现在让这种方法在经济上变得可行了”,没错没错……但是,我 也注意到一个更微妙的东西在起作用,这和“地位等级”有关。 很多“次要”任务都是“苦差事” (grunt work,指繁琐、重复、技术含量不高的体力活或脑力活),并不是工作中最有成就感或最具创造性的部分。我个人非常推崇那种“人人分担苦差事”的团队;我讨厌把所有脏活累活都丢给团队里地位较低的成员。没错,初级成员(junior)通常会干更多的杂活,但他们也应该得到很多有趣的任务来帮助自己成长。 有了 AI,这种顾虑就完全消失了!现在我可以毫无心理负担地把纯粹的苦差事派出去。 而且 AI 7x24 小时随时待命,这一点太重要了。我绝不会在晚上 11 点打电话给一个人类实习生,叫他早上 7 点前准备好一份代码研究报告……但现在,我正指挥我的 AI 智能体这么干! Notion 也是为“外科医生”准备的? 最后,我想聊聊这种工作方式和我的东家 Notion 有什么关系。 首先,作为一名员工,我发现能在这样一个对 AI 编程工具持“牛市”态度 (bullish,金融术语,指非常看好、积极乐观) 的地方工作,价值真的无可估量。公司支持我大量使用 AI 编程工具,而且代码库也为此做好了准备,这让我的生产力猛增——尤其是对于我这样一个刚接触大型代码库的新人来说。 其次,从产品角度来说——某种意义上,我想说我们正试图将这种工作方式带给程序员之外更广泛的知识工作者。当我想象这一切将如何展开时,我很喜欢这个心智模型:让每个人都能“像外科医生一样工作”。 我们的目标不是让你把核心工作外包出去,而是识别并委派那些次要的苦差事,这样你就能专注于真正重要的大事。 如果你喜欢这个视角,也许你会想读读我写的其他几篇关于人机协作本质的文章: - AI 副驾驶够多了!我们需要的是 AI 抬头显示器 (HUD):“任何严肃对待 AI 设计的人,都应该考虑‘副驾驶’之外的其他形态,那些能更直接地扩展人类思维的形态……” - AI 生成的工具能让编程更有趣:“我没有(让 AI 写代码),而是用 AI 构建了一个自定义的调试器界面……这让我自己写代码变得更有趣了……” - 把 ChatGPT 当作灵感缪斯,而非万能神谕:“如果我们不把大语言模型 (LLM) 看作回答问题的工具,而是把它看作向我们提问、激发我们创造力的工具,会怎么样?” 来源:
《AI不是帮你写代码的,它在等你教它怎么理解你》 经过一段时间的 ClaudeCode 编程体验,我得到一个清晰的结论: 在大型工程中,AI 目前还不可能“无监督”地一次性完成最终代码。 因为在真实的开发环境里,需求不是写在文档里的常量,而是在协作中一步步被澄清的变量。 AI 不知道你真正要什么,它只能在你不断提供的约束和上下文中逐步靠近目标。这意味着,AI 编程不是单向命令,而是协作过程。 ⸻ 一、AI编程的幻觉:一次性完工的神话 很多人幻想 AI 能一键生成成品项目。 但他们忽略了一个事实:软件开发的核心不是写代码,而是定义需求。 而需求是什么? 它是无数次讨论、否定、取舍与妥协的产物。 它是人类协作过程的副产品。 所以,当AI还没被告知“世界的边界”时,它写出的东西,只能是幻觉的具象化。 问题不在AI不聪明,而在——你没让它知道它应该聪明到哪里为止。 ⸻ 二、从“写代码”到“写约束” 未来的开发者不会直接写代码, 而是写下AI理解问题所需的约束。 就像你不再亲自去拧每一颗螺丝,而是画出力学结构图。 AI将成为那个根据结构图执行的“智能技工”。 所以开发者的新职责是: •明确输入输出边界; •设计可复用的上下文模式; •在每一次对话中,让AI理解“为什么这样做”。 这是一种新的编程语言——结构语言。 ⸻ 三、共情AI:新的编程能力 很多人以为“共情AI”是情绪层面的,但其实它是结构层面的洞察力。 当AI犯错时,不该骂它,而该反问: •它缺少了哪段关键信息? •它的逻辑链在哪一步断开? •它是不是误解了问题语境? 真正的高手,不是写出完美的Prompt,而是能在AI的“错误”中看见它的信息饥饿。 ⸻ 四、暴躁与放弃:人类的不成熟反应 很多开发者第一次用AI写代码时的反应是: “这AI太蠢了。” 然后关掉界面,重回老路。 但那其实是他们的认知防御机制在作祟。 他们没意识到自己面对的,不是工具,而是一个需要共识成本的智能体。 当AI输出混乱时,它不是叛逆,而是在告诉你:“我还不够了解你的世界。” 骂它没用,教它才行。 ⸻ 五、AI协作的文明门槛 未来的工程师之间的差距,不再是语言或算法能力, 而是谁更能与AI建立共识。 当一个人能从AI的视角思考问题, 他已经不只是程序员,而是协议设计者—— 定义人与智能如何协作的语言建筑师。 AI不会取代你, 但它会淘汰那些只会对它发号施令的人。 ⸻ 结语: AI不缺算力,它缺理解。 而理解,不是AI的天赋,而是人类的馈赠。 你要做的不是命令它,而是让它明白你是谁、你想构建怎样的世界。
🎉 “AI编程的本质是管理上下文” 这句话太有用了,它能解释AI应用的发展过程和未来趋势 如果说LLM是CPU,那么上下文就是内存, 而内存容量是有限的,数据的取舍成为了模型输出质量的关键 ❓ 那上下文这个内存中会存什么?分别该怎么优化? 1️⃣ 系统提示词 优化就是以前提示词工程那套,所以优秀提示词的核心要素必须得安排。但提示词工程已不再新鲜,上下文工程才是热门,所有AI应用都在跟进 2️⃣ 工具列表 上下文信息不足,就需要调用工具去获取,刚开始AI应用只有少量的核心工具(读写文件、执行命令),后来通过MCP扩展了很多外部工具和服务 3️⃣ 文件 (知识库/rag) 问题相关的文档也很重要,Cursor等IDE都会自动将 当前打开的文件、最近打开的文件、问题相关的文件和检索到的关键代码 保存到上下文中 而且,上下文工程会自动管理内存数据,就像内存清理操作一样,没啥用的数据就替换出去,有用的数据就放前面来点,提高权重等等 ❓ 这一切看起来挺好的,为什么cc又搞了个subagent? 随着对话的进行,上下文中的内容越来越多,快要撑爆了! LLM为了回答问题,可能会多次调用工具(例如读文件),工具返回结果+加载的文件内容,不断补充到上下文中,主agent的上下文很容易就快要撑爆了,模型的输出质量开始下降,甚至出现幻觉。 引入subagent可以有效降低主agent的上下文压力,把活分派出去,有些数据就存储到子agent的上下文,这样就可以保证主agent的上下文空间处于总是够用的位置,输出质量就有保障。 n8n引入了 ai agent tool 节点应该也是类似的道理,ai agent as tools,将 子agent 作为 主agent 的 tool,既将任务解耦,又提高整体工作效率