LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

仅凭ai真的能做好复杂项目吗?

admin
2026年3月31日 11:21 本文热度 30

导读

用了claude code进行了一个fastapi+react的项目开发,还上了spec-kit,发现逻辑、规划、任务都设计的很好,但是在执行完成后的东西各种低级错误和bug,还得花大精力调,如果不了解技术栈的具体使用,这样根本没法开展新的项目,还是有不小的障碍。想问问各位大佬有没有什么好的建议?是我没用对吗?

我认识一个人叫老陈。

他在一家中型软件公司做技术总监。四十二岁,头发开始秃,戴一副很普通的黑框眼镜,说话很快,有一种被长期deadline训练出来的急迫感。他手下管着三十几个人。

2023年底,他做了一个决定。他决定在他负责的一个核心项目里,大规模引入AI。

他跟我说这件事的时候,声音里有一种我没见过的兴奋。他说:这次不一样了。这次真的不一样了。

我说:哪里不一样。

他说:以前的工具是工具。这次是同事。

那个项目做什么不重要。你只需要知道,它足够复杂。

涉及十几个模块,几十万行代码,三个外部系统的对接,两年半的历史债务。团队里有老人,有新人,有人负责前端,有人负责后端,有人只负责跟甲方打交道然后把需求翻译成人话带回来。

这种项目,任何一个环节出问题,都会卡住后面所有的人。

老陈说,他想用AI把这个链条的每一个环节都加速一遍。需求分析,代码生成,测试,文档,review。全线提速。

他做了一个计划。他把这个计划发给我看,有二十几页。

我看完说:你预计节省多少时间。

他说:保守估计,整体效率提升百分之四十。

我没说话。

他说:你不信。

我说:我不知道。

我第一次见老陈是在一个技术沙龙。那是2019年,他在台上讲微服务改造讲得很细,每一个技术决策背后都有具体的原因,不是那种读了PPT就能讲的东西,是真的踩过坑之后的东西。

我后来跟他聊,他说,他这辈子最怕的不是技术问题,是技术问题背后的人。

我说:什么意思。

他说:你解决了技术问题,你以为完了。但技术问题背后有人,那些人有习惯,有利益,有不愿意改变的理由。你把系统升级了,但使用系统的人没有升级。然后你发现问题还在。只是长在了一个新的地方。

我记住了这句话。后来见了很多次,发现他一直是这样的人——知道系统是由人构成的,不只是代码。

所以当他说AI是同事,我知道他说的不只是技术判断。他在说一种期待。

项目启动三个月后,我去他公司拜访。

他在一个会议室里等我。桌上放着三个屏幕,全是打开的对话窗口。他身后的白板上写满了东西,有流程图,有待办事项,有几行被划掉又重新写的字。

他看起来比三个月前瘦了一点。

我问:怎么样。

他说:比我想的复杂。

我说:哪里复杂。

他把椅子转过来,看着我。

他说:你知道AI最擅长什么吗。

我说:你说。

他说:它最擅长把一个已经想清楚的问题,快速地、准确地、漂亮地处理掉。

他停了一下。

他说:问题是,复杂项目里,大多数问题都还没想清楚。

我后来花了很多时间想他这句话。

一个复杂项目,它的复杂性来自哪里?

不是来自技术本身的难度。技术难度是可以学的,可以搜索的,可以一步一步解决的。真正的复杂性来自——你不知道问题是什么。

甲方说要一个”智能化的数据看板”。什么叫智能化?没有人说得清楚。你去问,他说就是智能一点。你去做,他看了说不对,不是这个感觉。你问是哪里不对,他说说不上来,就是感觉不对。

这不是需求不清晰的问题。这是有些东西在被说清楚之前,根本不存在。它需要在来回拉扯的过程里,慢慢地成形。

老陈说:我让AI写需求文档,它写得很好。条目清晰,逻辑严密,每一条都有根据。然后我把文档发给甲方,甲方说,对,就是这个。然后我们按文档做,做完了,甲方说不对。

我说:为什么。

他说:因为他们看到文档的时候说对,是因为文档写得足够合理,他们找不到反驳的理由。但合理不等于他们想要的。他们想要的,他们自己也不知道,要看到做出来的东西,才能知道那不是。

他说:AI帮我把这个过程加速了。我们更快地到达了”做错了”这个结论。

老陈的团队里有个人叫小魏。二十六岁,来了两年,是那种一眼就能看出来在技术上有天赋的人。老陈很看重他。

AI引入之后,小魏是用得最积极的一个。他用AI写代码,用AI review,用AI生成测试案例。他的产出量翻了将近一倍。

老陈开始很高兴。

然后有一天出了一个bug。一个很隐蔽的bug,藏在一个不常走的逻辑分支里,在特定的条件下会触发,触发了之后数据会出现细微的偏差,偏差不大,但是会积累。

找到这个bug花了将近两周。

老陈把小魏叫来。他说:这段代码你review过吗。

小魏说:AI review过了,没有问题。

老陈说:你自己看过吗。

小魏沉默了一下。他说:我看了,但AI说没问题,我就……

老陈没有让他说完。

他说:你相信它比相信自己多。

小魏没有说话。

我问老陈,那个bug后来怎么解决的。

他说:解决了。一个老员工发现的。那个老员工做了八年,他一眼就觉得这里哪里不对。说不出来,就是不对。然后顺着感觉往下查,查出来了。

我说:AI没查出来?

他说:我们也让AI查了。AI给了三个可能的方向,都不是。

我说:为什么。

他说:因为AI是从已知的模式里找答案。这个bug不在任何已知的模式里。它是这个项目特有的,跟我们特有的业务逻辑,特有的历史决策,特有的数据结构纠缠在一起的。它只能被一个在这里待了很久的人感觉到。

他说:那种感觉没有办法被训练。它是时间积累的。

这让我想起一个词。

隐性知识。Tacit Knowledge。是迈克尔·波兰尼1966年提出的概念。他说:我们知道的比我们能说出来的多。

一个老工人能听出机器的声音哪里不对。一个有经验的医生能感觉到这个病人有什么地方不正常,但他说不出来是哪里。一个在同一个项目待了八年的工程师,能感觉到这段代码有问题。

这种知识不能被语言化。不能被文档化。不能被训练进任何一个模型。

它只存在于那个人的身体里。他离开了,它就消失了。

AI能处理的,是显性知识。能被说出来的,能被写下来的,能被标注的。它在这个范围里,几乎无所不能。

但复杂项目里,最关键的那些判断,往往不在这个范围里。

四个月后,我再去见老陈。

他看起来更累了。但眼睛里有一种和之前不同的东西。不是失望,是一种被重新校准过的清醒。

我说:你现在怎么看。

他说:AI没有我想的那么有用。但也没有我后来以为的那么没用。

我说:说具体点。

他想了一会儿。

他说:它有用的地方,比我预期的有用。写代码,生成测试,处理重复的文档工作,这些它做得比人快,比人稳定,不会累,不会因为下午困了而犯低级错误。

他说:但它的边界比我预期的清晰。边界就是:它能处理已经被定义好的问题。问题越定义清楚,它越有用。问题越模糊,它越没用。

他说:然后你会发现,复杂项目里,定义问题这件事,才是最难的。不是解决问题。是搞清楚问题是什么。

我说:这件事AI做不了?

他说:它能帮你做。它能给你一百个可能的问题定义,逻辑都是通的,语言都是漂亮的。但你不知道哪一个是真的。你要自己判断。

他说:这个判断,它给不了你。

我后来想,为什么给不了。

不是因为AI不够聪明。是因为判断需要立场。

你选择相信哪个问题定义,背后是你的判断,你的经验,你愿意承担的风险,你对这件事的理解,你跟团队的关系,你对甲方的了解。这些东西综合在一起,形成一个”感觉”,然后你说:就是这个方向。

这个感觉是你的。它不能被外包。

你可以问AI,它会给你分析,给你利弊,给你建议。但你听完之后,还是要自己说:我选这个。

然后承担后果。

AI不承担后果。它回答完就结束了。下一个问题问来,它重新开始,不记得上一个问题是什么,不在意上一个判断对不对。

这不是缺点。这是它的本质。

但复杂项目需要有人记得。需要有人在意。需要有人因为之前的决定承担了什么,而在下一个决定里更谨慎,或者更果断。

这个”有人”,不能是AI。

老陈后来给我讲了一件事。

项目进行到中期,有一个关键的技术选型需要做决定。两个方向,各有利弊。团队里有人支持A,有人支持B,争了两周,没有结论。

老陈把两个方案都详细地喂给了AI,让它分析。

AI给了一个很完整的分析。它最后说,综合各方面因素,建议选择方案A。理由是一二三四五。

老陈看完,让团队也看。团队里支持A的人说,你看,AI也这么说。支持B的人说,你看,AI只是根据你提供的信息在分析,你提供信息的方式已经带了倾向。

两个人说得都对。

老陈说,那一刻,他突然意识到,他们在用AI争论,其实是在继续用另一种形式争论。AI成了一面镜子,每个人在里面看到自己想看到的东西。

最后他自己拍板选了B。

我说:为什么选B。

他说:感觉。

我说:说具体点。

他沉默了一下。他说:我在这个行业做了十几年。我见过很多项目。方案A从技术上看更合理,但它有一个假设,它假设我们的团队能在两个月内掌握一个新的框架。我知道我的团队,我知道这个假设太乐观了。AI不知道我的团队。

他说:这是AI永远缺少的那块拼图。它不认识我的团队。它不知道小魏最近状态不好,不知道老王下个月要请假,不知道我们跟甲方的关系正处于一个微妙的阶段,任何延误都会被放大。

他说:它只知道我告诉它的事情。我告诉它的,永远少于实际存在的事情。

项目最后做完了。

比原计划晚了三个月。预算超了一些。但做完了,甲方签字了,系统上线了,跑起来了。

老陈说:AI确实帮了忙。代码量大的地方,节省了很多时间。文档的地方,省了很多人力。测试的覆盖率比以前高。

他说:但那三个月,不是因为AI没帮上忙。是因为有几个关键决策,我犹豫了太久。我犹豫,是因为我在等一个确定的答案。我问AI,AI给我分析,我看完觉得还是不确定,我再问,它再分析,我还是不确定。

他说:我在等一个它给不了的东西。

我说:什么东西。

他说:确定性。

他说:复杂项目没有确定性。你只能在不确定里做判断,然后推进,然后根据结果调整。这个过程需要你接受不确定,不是消除不确定。

他说:我以为AI能帮我消除不确定。然后我在这个幻觉里浪费了很多时间。

我后来想到一个比喻。

AI是一个极好的副驾驶。

它懂路,它能看地图,它能告诉你前面有什么,它能帮你计算走哪条路最快,它不会累,不会走神,随时都能给你信息。

但它不能开车。

不是技术上不能。是它不在车里。它感觉不到这辆车今天的状态,感觉不到路面的颠簸,感觉不到油门的松紧,感觉不到坐在后座的人在等什么。

开车的人要自己判断:现在是踩油门的时候,还是踩刹车的时候。

这个判断需要你在场。

AI永远不在场。它在别的地方。它同时在一万个地方。它不在你这个项目里。

我最后一次见老陈是在去年冬天。

他们公司接了一个新项目,比上一个大。他又在做AI引入的计划。

我说:你还做?

他说:当然做。它确实有用。

我说:你上次说它没你想的有用。

他说:没我想的有用,但比不用强。我只是不再期待它能替我做决定了。

他看了看窗外。外面是深圳的冬天,没有什么冬天的感觉。阳光很大,街上的人穿着薄外套。

他说:你知道吗,我们团队里有个很年轻的员工,刚来三个月,特别依赖AI。什么都问AI,AI说什么他做什么。

我说:小魏?

他说:不是小魏,小魏后来好多了。是个新来的,叫阿坤。

他说:我有时候看着阿坤,会想一件事。他用AI用得这么顺,他在这个过程里有没有在积累什么。还是说,他只是在执行,执行,执行,然后有一天,需要他做判断的时候,他没有判断力。因为判断力是在跌跌撞撞里练出来的,不是在一路顺畅里练出来的。

他说:AI让很多事情变得顺畅。我不知道这是不是好事。

我说:你会去管他吗。

他说:我让他做了一些没有AI参考的决定。故意的。

我说:他怎么样。

老陈没有立刻回答。

他端起茶杯,喝了一口,放下。

他说:他很慌。他不知道该怎么办。他来问我,我说你自己想。他想了很久,给了我一个答案。

我说:答案对吗。

老陈说:不重要。

他说:重要的是他想了。

那天我走的时候,他送我到电梯口。

他说:你问我AI能不能做好复杂项目。

我说:你怎么看。

他说:能做很多事情。很重要的事情。

他停了一下。

他说:但复杂项目最后总会走到一个时刻。所有的工具都用完了,所有的分析都做完了,所有的数据都摆在那里了。然后要有一个人站出来说,我们就这么干。

他说:那个人,得是个人。

电梯来了。我进去,门关上。

我透过那条越来越窄的缝看着他。他已经转身走了,走回他那堆打开的屏幕里,走回那个复杂的、没有确定性的、只有人才能扛下去的项目里。

门关上了。


该文章在 2026/3/31 11:22:36 编辑过

全部评论1

admin
2026年3月31日 11:23
作者:NGINX洪志道
链接:https://www.zhihu.com/question/1999041081275355787/answer/2005805531269469208
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我用亲身经历回答这个问题。

我在 nginx团队工作。前段时间做了一个实验:让 AI 从零写一个 C 项目——用 C + QuickJS 实现的可编程 HTTP 压测工具,涉及 epoll事件驱动、多线程、TLS加密、红黑树定时器嵌入式 JS 引擎。然后在不手写任何代码的前提下,纯粹通过指导 AI 来重构它的架构。

整个过程写了十篇文章,有完整的代码变更记录。结论不是”能”或”不能”,是比这复杂得多的东西。

AI 写完,我惊讶了两次

第一次惊讶:它真的能跑。

两千行 C 代码,一天写完。能编译,能跑,测试通过。命名准确,前缀一致——十三个源文件上百个函数,js_ 前缀没有一处遗漏。在 C 这种没有命名空间的语言里,这个纪律性比很多人类项目都好。

性能也是真的。纯 C 的 epoll 事件循环、非阻塞 I/O、多线程各跑各的实例,实测 140K+ QPS,跟 wrk同一量级。这不是玩具。

第二次惊讶:看完整体之后,说不清哪里不对,但就是不舒服。

每个函数独立看都没问题。但文件之间的关系、模块之间的边界、依赖的方向——没有整体设计。所有东西都能跑,但你感觉它们不是被”设计”在一起的,是被”堆”在一起的。

AI 写的代码像一栋没有图纸的房子——每面墙砌得都不错,但你走进去会迷路。

“能跑”和”做好”是两回事

如果”做好”的标准是”功能能跑、测试通过”——AI 做到了。

但如果”做好”包括”代码改得动、加功能不用理解半个系统、bug 真的能被发现”——AI 没做到。

我后来对两个版本做了逐维度评分。AI 自己写的版本 59 分,经过我指导重构的版本 85 分(满分 105)。

涨的不是功能。功能完整度 8/10,重构前后没变。可读性 8/10,也没变。AI 本来就做得好的维度,不需要人。

涨的全是架构维度:异步设计从 7 涨到 14,抽象质量从 5 涨到 9,可维护性从 4 涨到 7,代码组织从 5 涨到 8。

26 分的差距,每一分都是架构。

最危险的事:一切看起来正常

整个过程中最让我震动的不是架构问题,是下面这件事。

我修完 fetch 的并发 bug 之后,测试全过。继续 review 代码,发现 bench 模式的 worker 线程里根本跑不起 fetch。每一次请求都失败了。

但测试报告:16576 次请求,0 错误,通过。

原因:代码把每次调用无条件计入”成功”,测试只看这个数字。

AI 写的代码不检查错误,AI 写的测试不验证错误。它们有一致的盲区——完美地互相配合,制造了”一切正常”的假象。

这不是偶然。实现和测试是同一个模型生成的,盲区是一致的。你从任何一边都看不出问题。只有人从外部 review,才能打破这个闭环。

想象一下:如果我没 review,这个项目就带着”16576 次全失败”的 bug 上线了,而所有测试都是绿的。

这就是”仅凭 AI”最大的风险——不是代码写不出来,是出了问题你不知道。

方向对了,AI 的执行力是惊人的

但故事还有另一面。

重构过程中我发现,一旦人给出准确的方向,AI 的执行力远超人类。

我说了一句话:”每个线程有且只有一个 epoll。”

就这一句。AI 立刻知道该怎么做了——用 thread-local 存储重写所有 epoll 接口,去掉每个调用点的 fd 参数。涉及十几处分散在不同文件的修改,一次做完,编译零警告。

我说”这个字段不该在 conn 里,它属于一个叫 http_peer 的新概念”——AI 创建新结构体,搬移字段,更新所有引用,6 个文件 20 多处改动,没有一处遗漏。

我给 fetch 一个新的架构方向——全局事件循环 + pending Promise—AI 一次改对了,9 个文件,fetch 的并发性能从 905ms 变成 302ms。

人工做这种跨文件的改动,20 处修改总有可能漏一处。AI 不会。

但每一次的前提都是:我给了它一个准确的判断。

没有那句话,AI 在原地打转——它会给你列出几种方案,但不会替你拍板。有了那句话,它比任何人类工程师都执行得更快更可靠。

那到底能不能”仅凭 AI”?

说说我的结论。

能,如果你的标准是”能跑”。 AI 确实能在一天之内写出两千行 C 系统级代码,涉及 epoll、TLS、多线程、嵌入式 JS 引擎,编译通过,测试通过,性能达标。这在几年前不可想象。

不能,如果你的标准是”做好”。 AI 写的代码能跑但改不动,测试能过但验不对,架构能用但不能长期维护。59 分和 85 分的差距,就是”能跑”和”做好”的距离。

但更准确的回答是:“仅凭 AI”本身就是个伪命题。

因为你没法把人完全拿走。AI 不会主动发现架构问题,不会主动打破代码和测试的共同盲区,不会在”一切看起来正常”的时候说”这里不对”。它有知识,但没有判断。它能列出所有设计模式,但面对一团纠缠的代码,它不会说”先改这个,这个解决了那个才能动”。

真正有效的方式是:人定方向,AI 执行。

我发现问题 → 想清楚方向 → 告诉 AI → review 结果 → 纠正细节。这个循环贯穿了整个项目。十次重构,每次都是这个模式。没有一次是 AI 自己发起的。

那人的作用到底是什么?

这个项目让我想清楚了一件事:AI 时代,人的价值不在写代码,在做判断。

判断什么?

  • 判断哪里不对。 AI 的 fetch 是伪异步,每个调用创建独立的 epoll 实例——这不是某一行代码写错了,是整个 I/O 模型就不对。AI 不知道这是问题。我知道,因为在 nginx 团队做了多年事件驱动架构。
  • 判断该往哪走。 “全局事件循环 + pending Promise”——这一句话定义了整个异步架构的方向。AI 拿到这句话,9 个文件一次改对。但这句话本身需要经验。
  • 判断什么时候该怀疑。 测试全绿,功能能跑——这时候绝大多数人会觉得”可以了”。但我继续 review,发现了 16576 次全失败的 bug。不是因为我更聪明,是因为经验告诉我”看起来太顺利的时候往往有问题”。

你的一个判断,AI 能帮你落到几十个文件的每一行代码上。判断越准确,杠杆越大。

反过来说:如果判断是错的,AI 会非常高效地把错误铺满整个项目。

一个反直觉的结论

很多人觉得 AI 能写代码了,架构就不重要了。

恰恰相反。

AI 让写代码变得越容易,架构就变得越重要。

为什么?因为写代码的成本趋近于零,但管理复杂度的成本没有变。AI 写代码的速度远快于人类,如果没有架构来管理复杂度,AI 写得越快,系统就越快变成一团无法维护的意大利面。

在 jsbench 上我亲眼看到了这个过程。AI 一天写出两千行能跑的代码,但复杂度失控了:连接层嵌着 HTTP 解析器,fetch 是伪异步,定时器三套实现,请求类型拆成两个。功能都能跑,但代码改不动。

没有架构的 AI 代码,是一台高效的技术债生成器。

有架构的 AI 代码,是你的整个团队。

这个差距到底有多大?我后来专门设计了一个实验来验证——架构不同,加同一个功能的代价差了多少。完整过程在这里:AI 编程不缺能力,缺架构

实用建议

如果你正在用 AI 做项目,几条经验:

1. AI 写完之后,先看架构维度。 功能能不能跑、命名好不好——这些 AI 通常做得不错。把注意力放在模块之间的依赖方向、该有的概念有没有被表达成类型、复杂度有没有被隔离。这些是 AI 最容易丢分的地方。

2. 给约束,不给方案。 不要告诉 AI”把这个函数拆成三个”。告诉它”这一层不应该知道上面那一层的存在”。约束定义方向,AI 自己能推导出所有具体改动。一句准确的约束,AI 能落到几十个文件上。

3. Review 测试本身。 AI 写的测试和代码有一致的盲区。确保测试验证的是真正的结果,不只是”有输出”。

4. 用最强的模型。 架构级的改动需要理解上下文、保持跨文件一致。模型越强,做得越好。这个差别非常大。

5. 多实践,多看专业的代码,多跟专业的人交流。 判断力不是凭空来的。我的架构判断很大程度上来自阅读 nginx、njs 这些项目的源码,和在团队里跟顶级工程师一起工作磨出来的。AI 能放大能力,但能力本身的来源是实践、代码和人。

所以,回到这个问题

仅凭 AI 真的能做好复杂项目吗?

我的回答:AI 能写出复杂项目的代码,但写不出复杂项目的架构。 代码是砖墙,架构是图纸。AI 砌墙又快又好,但图纸还得人画。

好消息是,你不需要自己砌墙了。你只需要画好图纸,AI 能帮你把每一面墙砌到位。

未来的程序员不是写代码的人,是做判断的人。


该评论在 2026/3/31 11:24:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved