写代码是打字,用AI写代码是说话,但会说话不等于会用AI
一、一个类比,两个世界
有个流传甚广的比喻:写代码是打字,但会打字不等于会写代码;用AI写代码是说话,但会说话不等于会用AI。
这个类比足够精妙,但大多数人只停留在"学写提示词"的表层。当你真的用AI去构建生产级系统时,会发现说话只是交互介质,真正的鸿沟在于"将模糊需求转化为确定性约束"的能力。这道鸿沟不是单点技能,而是一套系统化的工程纪律,它由四个递进层级构成:
第一层:上下文的精确注入。 AI没有长期记忆,每次对话都始于空白。新手说"帮我写个登录页",AI只能猜。高手则会构建"黄金上下文":明确角色(资深后端)、技术栈(Spring Boot 3.2 + MyBatis)、业务约束(密码需二次加密且兼容旧系统)、代码风格(禁止Lombok)。这不是"说话",而是将隐性知识显性化为机器可执行的边界条件。
第二层:任务的原子化拆解。 面对"写个淘宝"的宏愿,新手得到一堆样板代码,而高手将其拆解为数十个原子任务:先定义User领域模型、再写JWT拦截器、然后设计商品快照表......每完成一步,将编译通过的结果作为下一步的强约束输入。通过分而治之,将AI有限的注意力(上下文窗口)聚焦于单点逻辑,避免其在大范围需求中"注意力涣散"。
第三层:异常的引导式排查。 当AI代码报错,新手复制粘贴错误信息,常常陷入死循环。高手则提供"三维调试信息":完整的堆栈跟踪、关键变量的运行时快照、明确的排除范围("只修改Utils包,勿动核心配置")。这种结构化的错误反馈,能将AI的单次修复准确率从20%提升至80%以上。
第四层:架构的校准与否决。 AI本质是概率模型,它倾向于输出训练数据中的"平均答案"(即最流行但未必适合你的方案)。当AI提议引入Redis做分布式缓存时,高手的反应不是照单全收,而是先做架构审视:"我们的服务是单机部署还是多实例?若为单机且QPS<100,直接用ConcurrentHashMap配合定时刷新即可;若为多实例,才需Redis保证数据一致性。"------会用AI的人,始终在"校准AI的默认倾向",而非盲目信任其生成的代码。
二、高阶能力的核心:预判与校准AI的输出分布
当一个人跨过基础门槛后,真正的分水岭在于能否预判AI的回答并主动校准其概率输出。这不是玄学,而是基于对LLM底层逻辑的深刻理解,具体体现在三个维度:
-
预判AI的"路径依赖",主动偏移其默认模板。 当你让AI写CRUD接口时,闭着眼都知道它会生成三层架构+臃肿的Service实现。高手预判到这一点,在提问前便植入硬约束:"采用贫血模型,所有校验逻辑抽离至独立的Validator组件。"------你不是在提问,而是在提前修正AI的"惯性滑行轨迹"。
-
预判AI的"时间盲区",堵死幻觉源头。 AI的训练数据截止于特定时间点,它对过时API或虚构库版本具有极高的"编造倾向"。高手知道当要求"实现Python请求重试"时,AI大概率会写一个低效的手动装饰器,而标准库urllib3.Retry配合backoff_factor算法才是更优解。于是他在提示词中注入硬边界:"若涉及2024年后更新的库,请明确注明版本号;若不确定,禁止编造,直接输出'信息缺失'。"------用确定性的指令,将AI的"概率捏造"强制转为"确定性拒绝"。
-
预判AI的"上下文遗忘曲线",实施锚点刷新。 当对话超过十轮或代码突破五百行,AI对首轮设定的"禁止Lombok"等约束必然衰减。高手不依赖AI的"记忆",而是采用状态锚点策略:每三轮回合,在提问末尾强制重申核心约束("重申:严格遵守'禁止Lombok'的初始规范"),或直接将核心规则文件(如AGENT_CONSTITUTION.md)在每轮对话中作为System Prompt固定注入。
更进一步,高手还预判AI的"能力边界"。当涉及分布式事务、高并发锁或支付金额计算时,AI生成的方案看起来"能跑",但在极端场景下必出严重逻辑漏洞。此时高手的策略是"逆向利用AI的评论能力优于生成能力"------直接发问:"请列举这个秒杀逻辑在高并发下的五个潜在死锁风险,先不要写代码。"预判到AI的"找茬"准确率远高于其"创作"准确率,便反向将其用作代码审查工具,而非代码生产工具。
把AI看作一个博学但缺乏工程常识且毫无记忆的应届生。你的每次提问,都必须预判它会摔倒在哪里、偷懒在哪里、遗忘在哪里,然后提前在那几个坐标点上铺好防滑垫。
三、运行时上下文:承认"不透明黑箱",采用"工程补偿"
在实际的Agent模式(如Cursor、Copilot)中,存在一个长期被忽视的尴尬现实:你根本看不到AI究竟读取了哪些文件。RAG机制塞入了什么、截断了什么、忽略了哪些跨文件引用,对使用者而言完全是个黑箱。这种不确定性远比AI写错代码更致命------你在盲目赌博它看到了完整的依赖链。
针对这一固有局限(注意:不是"无解",而是"在自动模式下难以透明化"),成熟的工程做法不是试图去"解决"它(因为当前智能体的决策链路确实无法实时透视),而是用严格的工程纪律去绕过和补偿:
策略一:将"模糊检索"降级为"精确注入"。 不要对AI说"在项目中找到并修改相关文件"。你手动将核心配置文件、当前报错文件、以及直接依赖的业务实体类,一次性粘贴进上下文。由你来划定AI的"可视范围",其他代码视为不存在。
策略二:将"动态计划"外挂为"静态规则"。 不要在提示词里写"先列出重构计划并等待我确认"------这会大量消耗Token并污染执行路径。将计划写在项目根目录的PLAN.md中,提示词里只需一句:"严格遵循根目录PLAN.md的步骤,逐条执行。"将"过程规划"与"即时指令"解耦。
策略三:用"编译反馈"作为分步执行的唯一触发器。 不要事前推断任务难度。先让AI修改,本地编译,将报错堆栈喂回。若报错仅涉及单文件,可让AI一次性修复;若报错涉及超过三个文件,则果断关闭Agent自动模式,切回普通Chat,仅让AI提供"单文件修改方案",跨文件的逻辑梳理与整合由人工完成。
把Agent看作一个智能但只能看清眼前两米的焊工。你要做的不是问它"你看到了什么全景",而是亲手将电焊条递到它指定的焊点,只让它焊牢那一个点。跨系统的全局逻辑梳理,当前阶段仍需以人类大脑为主力。
四、长期记忆:锚定与检索的"双轨制"
MCP(模型上下文协议)的出现,为标准化上下文管理带来了曙光。然而,当前MCP生态存在明显的注意力错位:80%的精力花在"如何向量化、如何分块、如何排序"的存储与检索技术上,仅20%关注"存储的内容本身是否准确"。
成熟的工程认知应该跳出这一对立,转向"锚定+检索"的双轨互补模型:
轨道一(确定性锚点):在项目根目录维护一组高信噪比的"黄金规则文件"。它们不依赖任何检索,直接作为System Prompt固定注入。例如:
AGENT_CONSTITUTION.md(架构宪法):写死不可逾越的红线,如"禁止使用Lombok"、"所有金额用BigDecimal",每条均为祈使句,不超过20条。
PROJECT_GLOSSARY.md(术语表):统一业务与代码的术语映射,采用表格形式,杜绝大段描述。
轨道二(动态检索网):针对微服务架构、第三方接口协议等庞大且多变的信息,必须依赖RAG。此时的重点不在"否定检索",而在于提升索引内容的"代码时效性"。例如,要求知识库中的每项技术文档必须绑定其对应的Git Commit Hash,当代码变更后,自动标记旧文档为"悬空状态"。
两者关系是互补而非替代:锚点保证了下限(不犯低级原则错误),检索网探索了上限(获取动态依赖信息)。贬低检索、仅依赖三个文件,在单体小项目中可行,但在数十个微服务交织的复杂系统中必将失效------这是原文此前犯下的"以偏概全"逻辑谬误,在此予以纠正。
五、长期记忆的内容治理:质量重于算法
回到长期记忆本身,我们必须坦诚一个残酷事实:再先进的RAG算法(重排序、HyDE等),也救不了一篇过时三个月、逻辑含混的技术文档。
针对AI消费的文档,必须遵循三条铁律来构建:
单点事实(Single Source of Truth) :同一业务概念,全库只能有一个权威定义文件,其余地方仅允许引用,禁止复述。避免AI在不同表述间产生概率摇摆。
确定性词汇(Explicit Constraints) :杜绝"尽量"、"建议"、"通常"等模棱两可用语。强制使用"必须"、"禁止"、"当且仅当"。AI是概率模型,只有确定性的语义锚点才能将其输出锁定在正确轨道。
结构化分层(Structured Layering) :将文档分为"不可变架构原则"、"可变业务规则"、"具体操作手册"三层。AI检索时按权重梯度加载,确保核心约束不被海量噪声淹没。
一个实用建议:与其花数月时间搭建复杂的知识库Wiki,不如先花一天时间整理出上述20条宪法 + 1张术语表 + 关键ADR(架构决策记录) 。这三份文件的实战效用,往往超过数百页未经验证的臃肿文档。
六、MCP的真实方向:从"图书搬运"到"事实仲裁"
基于上述双轨制理念,一个面向未来的长期记忆MCP,其核心设计哲学不应是"更快的图书搬运工",而应是"内容生命周期的事实仲裁者"。它理应具备两大务实功能:
冲突消歧:当AI同时读到资深架构师撰写的《接口设计铁律》和实习生写的《快速上线踩坑记》时,MCP应能根据预设的"事实等级标签"(如"核心架构"权重高于"临时补丁"),自动裁决优先采用前者,而非单纯依据时间戳取新。
代码指纹关联:每一份记忆条目必须绑定代码库的Git Commit Hash。当对应代码函数签名变更时,MCP主动标记该记忆为"待审核"或"悬空",宁可返回"信息缺失",也绝不允许AI拿已失效的旧知识去幻觉生成。
长期记忆的本质不是"存储",而是"维护经过验证的确定性事实"。
七、回到起点:工程纪律是唯一的护城河
回顾全文,我们走出了原文的几个认知陷阱,得到了更冷静的结论:
AI编程的核心能力,不是"说话",也不是"学提示词模板",而是"将模糊需求转化为精确的确定性指令"。
高阶玩家之所以高阶,在于他们预判AI的概率分布偏移,并主动用硬约束将其掰回正轨。
运行时的上下文黑箱是当前Agent的固有局限,我们依赖手动注入与编译反馈来补偿,而非幻想彻底透明。
长期记忆不是"检索为王",也不是"仅靠三个文件",而是"确定性锚点"与"动态检索网"的协同互补,且内容质量始终重于存储算法。
AI编程工具的核心瓶颈,从来不在大模型的技术天花板,而在于我们自身的工程纪律是否严谨。 再聪明的Agent,也理不清你混乱的文件夹;再强大的MCP,也救不了你过时三周的Wiki;再博学的LLM,也猜不透你模棱两可的需求描述。
驾驭AI的终点,终究是我们自己,对确定性、对架构、对逻辑边界的极致敬畏与把控。