从一次失败的装修说起
去年我家装修,我对设计师说了一句话:"客厅弄好看点。"
两周后看到效果图,我傻眼了——满墙的欧式雕花、金色罗马柱、水晶吊灯。设计师委屈:"你说要好看,这不挺好看的吗?"
问题出在哪?不是设计师的能力不行,而是我没说清楚"好看"到底是什么意思。我脑子里想的是日式侘寂风,他理解的是法式宫廷风。两个人各自"正确",但结果彻底跑偏。
今天我们和 AI 打交道,几乎每天都在重演这个故事。打开 IDE,敲下"帮我写个登录功能",AI 洋洋洒洒输出了三百行代码——用的框架不对,数据库结构不对,连业务逻辑都和你想的南辕北辙。于是你开始抱怨:AI 太蠢了。
但真正的问题可能是:你还不会和它说话。
先搞清楚:谁教谁?
在认知科学中,有一个经典的"信息不对称"模型。简单来说,任何两个沟通主体之间,都存在四种认知状态:
双方都明白——最简单的情况,直接对齐就行。你让一个资深后端写个 CRUD 接口,一句话的事。 双方都不明白——最危险的情况。你问 AI"下周比特币会不会涨",它给你的任何答案都不值得信赖,因为它和你一样在猜。 你不明白,AI 明白——你是学生,AI 是老师。比如你第一次接触 Rust 的所有权机制,AI 的知识储备远超于你。 你明白,AI 不明白——你是老师,AI 是学生。比如你公司内部的业务规则、产品上下文,这些 AI 一无所知。
大多数人和 AI 协作时只有一种模式:"我问你答。"但高手会在这四种状态之间灵活切身份。搞清楚自己当前在哪个位置,是有效沟通的第一步。
还有一点至关重要:**AI 永远不会主动找你聊天。**它不会在你写出一个可能导致内存泄漏的代码时弹窗提醒你"兄弟,这里有坑"。一切对话的发起权、引导权,都在你手上。所以在 AI 时代,主动性是最稀缺的能力。
当你是"老师":把脑子里的东西倒出来
假设你要让 AI 帮你重构一个复杂的订单系统。你对业务了如指掌,但 AI 对你的系统一无所知。这时候你是"老师",AI 是"学生"。
很多人在这个场景下犯的错误是:以为自己说清楚了,其实只说了一半。
物理学家理查德·费曼有一个著名的学习方法论:如果你想验证自己是否真正理解了一个概念,试着用最朴素的语言把它解释给一个外行听。如果对方听不懂,说明你自己也没完全搞明白。
这个方法反过来用在 AI 协作上,威力巨大:
第一步:你来"讲课"。 不要直接甩需求文档,试着用自己的话把问题背景、目标、约束条件逐一说清楚。把 AI 当成一个聪明但完全不了解你业务的新同事。
第二步:让 AI "复述"。 讲完之后,要求 AI 用自己的语言重新描述一遍它的理解。这一步极其关键——你会惊讶地发现,很多时候 AI 的理解和你的预期存在显著偏差。而这些偏差,往往暴露的是你自己表述中的模糊地带。
第三步:让 AI "挑刺"。 让它指出你的描述中有哪些不够清晰的地方,有哪些潜在的矛盾,甚至让它提出反对意见。
这个过程的价值不仅仅是让 AI 理解你。更重要的是,它逼你自己想清楚。很多需求之所以做出来不对,不是执行的问题,是想的时候就是糊的。
大象怎么吃?一口一口吃
当 AI 真正理解了你的意图之后,下一个问题是:怎么把一个大需求变成可执行的小任务?
软件工程中有一个基本智慧:面对复杂系统,先划边界,再逐个击破。不要试图一次性让 AI 生成一个完整的电商后台——你会得到一坨无法维护的代码,连你自己都看不懂。
但拆分也有讲究。我见过有人把一个功能拆成了 30 个子任务,每个任务只写五行代码。拆是拆了,但最后拼起来的时候,接口对不上、状态管理一团糟、命名风格五花八门。拆得太碎,整合的成本会吞噬掉拆分带来的所有好处。
所以关键在于找到那个"甜蜜点":每个子任务足够小到可以快速验证,但又足够完整到能独立运转。我把这叫做**"最小闭环"原则**——每一块拆出来的东西,都应该能独立跑起来、独立测试、独立确认。
整个流程可以概括为三个阶段:
对齐认知:用上面的方法确保 AI 真正理解你要做什么。把对齐后的共识固化成文档,作为后续所有对话的锚点。 方案选择与拆分:除非你已经胸有成竹,否则让 AI 给你多个方案,分析利弊,你来拍板。然后按"最小闭环"拆分任务。 逐步交付:一个任务一个任务地推进,每完成一个就验证一个。出了问题立刻修正,不要堆到最后。
当然,如果只是改一个按钮颜色、修一个拼写错误,就别走这套流程了。杀鸡用牛刀只会浪费时间。方法论是为复杂问题服务的,简单问题靠直觉就够了。
当你是"学生":别只要答案,要思路
换个场景。你在研究一种你不熟悉的技术,比如第一次接触向量数据库。AI 在这个领域的知识储备显然比你丰富。这时候你是"学生"。
但"学生"也分两种:一种是伸手党,"告诉我怎么做就行";另一种是真正在学习的人,"我想理解背后的原理"。
后者的效率反而更高。因为当你理解了原理,后续的决策、排错、优化都可以自主完成,而不是每走一步都要回来问 AI。
我总结了一套递进式提问框架,四个层次:
第一层:这是什么?(定义) "向量数据库的核心概念是什么?它和传统关系型数据库的本质区别在哪里?"
第二层:用在哪?(场景) "在实际项目中,哪些场景适合使用向量数据库?哪些场景不适合?"
第三层:为什么?(原理) "为什么向量数据库在语义搜索场景下性能优于传统数据库?底层的索引机制是怎样的?"
第四层:怎么做?(实践) "如果我要在现有项目中引入向量数据库,推荐的技术选型是什么?集成时需要注意哪些坑?"
注意这四层是递进的。很多人上来就问"怎么做",跳过了前三层。结果就是:按照 AI 给的步骤操作完了,一旦出问题完全不知道怎么排查,因为你只知道 How,不知道 What、Where 和 Why。
有意思的是,当你认真走完这四层提问,你会发现这四个问题的答案组合在一起,本身就是一份极好的技术方案文档。提问的过程,就是思考的过程。
追问的力量:不要满足于第一个答案
苏格拉底有一套著名的提问方法:不直接给答案,而是通过不断追问,让对方自己发现认知中的矛盾,一层层逼近本质。他管这叫"产婆术"——思想不是灌进去的,是问出来的。
这个思路用在和 AI 协作上,非常好使。
比如你想探讨"微服务架构是否适合你的团队"。如果直接问"微服务好不好",AI 多半会给你一个四平八稳的回答:有优点有缺点。这种回答等于没说。
但如果你这样追问:
"微服务的核心收益是什么?" "这些收益在团队规模小于 10 人时是否仍然成立?" "如果维护成本增加了 3 倍,但开发灵活性提升了 2 倍,这个 trade-off 在我们的场景下是否划算?" "有没有介于单体和微服务之间的中间方案?"
每一个追问都在把思考推向更深的层次。AI 在这种引导下给出的回答,质量远高于你一次性抛出的泛泛之问。
更重要的是,这个过程帮你自己想清楚了问题。很多时候你以为自己的困惑是"微服务好不好",其实真正的困惑是"我们团队当前阶段应该如何平衡开发效率和架构演进"。追问帮你找到了真问题。
代码不是写完就完了
AI 生成代码的速度远超人类,但速度快不等于质量高。AI 本质上是一个概率模型——它输出的是"最可能正确"的代码,而不是"一定正确"的代码。线上环境可不能靠概率运行。
所以核心问题是:怎么让 AI 自己证明自己写的代码是对的?
最有效的手段是先写测试,再写实现。
传统开发中,单元测试往往是代码写完之后的"善后工作",很多团队甚至直接跳过。但在 AI 协作的场景下,测试的角色完全不同——它变成了一道前置的质量闸门。
逻辑很简单:你先定义好函数的输入输出、边界条件和预期行为,让 AI 生成测试用例。然后再让 AI 实现函数。实现完成后,自动跑测试。通过了,说明基本靠谱;没通过,AI 自己修,改到通过为止。
这比你肉眼逐行 Review 高效得多。而且它把"发现问题"的时间点从 Code Review 阶段前移到了开发阶段,问题越早发现,修复成本越低。
另一个实用策略是:控制每次提交的颗粒度。
如果 AI 一次性给你生成了 800 行代码,你 Review 的时候大概率会眼花缭乱,最后象征性地扫一眼就合并了。但如果你把任务拆成 4 个子任务,每个子任务生成 200 行代码,每完成一个就提交一次——情况就完全不同了。
好处有二:
精准定位问题。如果第三个子任务出了 bug,你知道问题就在这 200 行里,不需要在 800 行代码中大海捞针。 安全回滚。如果 AI 在第四个子任务上彻底跑偏了,你可以直接回退到第三次提交,损失可控。不会出现"整个功能推倒重来"的灾难。
提交前,对着完整的 Diff 做一次全局审视也很重要。不仅要看新代码本身有没有问题,还要看它有没有对已有代码产生副作用——依赖冲突、命名污染、性能退化,这些都是 AI 不太擅长顾及的全局性问题。
管理你的对话,就像管理你的代码
最后聊一个容易被忽略但极其重要的话题:对话的上下文管理。
用一个生活中的例子来解释。
你第一次去一家咖啡馆,对店员说:"一杯咖啡。"店员问你:美式还是拿铁?冰的还是热的?要加糖吗?杯型多大?你一项一项回答,最后才拿到你想要的那杯咖啡。
第二天你又去了,同一个店员。你刚走到柜台前,他就问:"还是昨天那杯?冰美式,大杯,不加糖?"你点点头,十秒钟搞定。
第一次的交互过程,就是提示词的优化——你在不断补充信息,让指令越来越精确。第二次之所以高效,是因为店员保留了上次的上下文。
和 AI 协作也是一样的道理。三个层次:
说什么:你给 AI 的原始指令。 怎么说:你对指令的润色和结构化,使其更精确、更少歧义。 它记得什么:AI 当前对话窗口中累积的所有历史信息。
第三层最容易被忽略,也最容易出问题。
当一轮对话进行了太久,AI 的上下文里塞满了各种尝试、修改、纠正、废弃方案。这些"噪声"会严重干扰 AI 对当前意图的理解。你会发现它开始"犯傻"——其实不是它变蠢了,是上下文太脏了。
解决办法很简单但需要纪律:
及时止损。当发现对话方向明显跑偏,果断开启新对话,不要在烂泥里继续打滚。 阶段性总结。每完成一个阶段的工作,把当前的共识、决策和进展浓缩成一份简洁的摘要,作为下一轮对话的初始输入。 有意识地"喂"上下文。不要假设 AI 记得你三天前说的话。每次新对话开始时,把相关的背景信息显式地提供给它。
把上下文管理当成一种工程实践来对待。就像你不会让 Git 仓库里堆满未清理的临时文件一样,你也不应该让 AI 的对话窗口里堆满过期的噪声信息。
写在最后
和 AI 协作不是一件"会用就行"的事。它更像是学一门乐器——工具摆在那里,谁都能按出声音,但真正的演奏者知道什么时候该用力、什么时候该留白、什么时候该换个调性。
几点个人体会:
AI 是一面镜子。 它输出的质量,本质上是你输入质量的映射。如果你觉得 AI 给出的东西不行,先检查一下自己给出的东西是否足够清晰。 速度不是一切。 让 AI 全自动跑完一个功能很爽,但如果你连它写的代码都没看懂,那你不是在用工具,是在赌博。保持对代码的掌控感,比多写几行快几分钟重要得多。 这个时代最值钱的能力,是把模糊变清晰。 AI 可以帮你执行,但它不能帮你想清楚。而想清楚问题、拆解问题、精准表达问题——这才是真正的壁垒。
夜雨聆风