限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

我用大模型砌“屎山雕花”:5 天肝出几万行代码!产品经理的 AI 编程翻车记

  • 2025-07-02
    北京
  • 本文字数:7269 字

    阅读完需:约 24 分钟

我用大模型砌“屎山雕花”:5天肝出几万行代码!产品经理的AI编程翻车记

作者 | 松子(李博源)


五天,两万多行代码,重构三次。


我,一个基本不懂技术的产品经理,竟然用大模型"雕刻"出了一套看似能跑的房子。说实话,当我看着屏幕上密密麻麻的代码时,心情挺复杂的。



从 MCP 开始的“万能车床”


我先来讲讲最初接触 MCP 技术的经历。


为了解决工具接入能力不足的问题,Anthropic 公司推出了类似 MCP(Model Context Protocol)的协议,定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型。可以把 MCP 想象成大模型的 USB 接口。



MCP 功能出现后,春节无聊的我抱着试试看的心态搭建了两个应用——百度搜索、股票搜索与分析。将股票封装了一套 web 服务并通过 mcp 调用。


Sample1 :百度搜索服务接口定义示例 { “name”: “baidu_search”, “description”: “使用百度搜索 API 获取网络信息”, “functions”: [ { “name”: “search”, “description”: “根据关键词执行百度搜索”, “parameters”: { “type”: “object”, “properties”: { “query”: { “type”: “string”, “description”: “搜索关键词” }, “limit”: { “type”: “number”, “description”: “返回结果数量上限” } }, “required”: [“query”] } } ] } `


Sample 2 股票分析:当分析师提出"帮我分析最近三个月电动汽车行业的销售趋势"这样的请求时,MCP 协议使 AI 能够自动发现并调用这些服务。


提示词:


调用百度搜索完成一个 2024 年 Q4 的国内手机出货调研分析报告,并做一个可视化分析专题,将结果用 html 保存到本地文件 download/mcp 目录下面,命名为手机出货量分析。





过程中,自己也没想到没想到,这一试就停不下来了。那种感觉,就像是突然获得了超能力。以前需要"确定产品逻辑 -> 设计 -> 研发"的漫长流程,现在变成了:


  • 把想法告诉 AI

  • AI 直接产出高保真的交互原型

  • 甚至是功能完备的产品 demo


原本需要几周等待的工作,几个小时就能搞定。瞬间感觉当一个产品经理掌握了大模型中高层次技能,确实有种"超蓝变身"的感觉。


深入"屎山":两万行代码的诞生


有了第一次成功的经验后,我开始更大胆的尝试。在短时间内,我用大模型构建了一个某知识库应用可运行 demo ,就是在这种背景下诞生的。


Python 文件 193 个,共 31278 行代码;JavaScript 文件 96 个,共 9731 行;HTML 文件 136 个,共 23024 行,17 个智能体 …


看着这些数字,连我自己都震惊了。


一个从来没碰过代码的人,竟然能在 5 天内"写"出这么多代码?



到 5 月份的今天我已经用该能力完成了 3 个“屎山”演示的构建 。但问题是:这真的是"编程"吗?



PS: 这个是我写的几千行提示词其中的三句与根目录项目的控制文件


AI 编程的甜蜜陷阱


门槛降低了,但天花板更高了


刚开始,我以为 AI 编程就是"自然语言编程"。想要什么功能,直接告诉 AI 就行。


结果发现,这 TM 是个巨大的误解。


当代码量超过几千行时,你会遇到这些问题:


架构选择的困境:前端用 Vue、React 还是纯 CLI?后端选 Go、Python 还是 Rust?数据库用 MySQL 还是 PostgreSQL?


对于我这种非工程师背景的人来说,这些选择就像是在外语考试中选择 ABCD,完全靠蒙。


有次我问 AI:“用什么数据库比较好?”


AI 回答得很专业:MySQL 适合简单应用,PostgreSQL 功能更强大,Redis 适合缓存…


但它不会告诉我:你这个应用根本用不着复杂的数据库功能,SQLite 就够了。


版本管理的缺失:大部分人都在"Vibe Coding"——凭感觉写代码,但不做版本管理。就好像在深山老林里瞎转悠,不留回头路的标记。


我就是典型的反面教材。写到 1/3 重构了四次,另外过程中突然想改架构,直接就在原文件上改。结果改着改着,连自己都不知道哪些功能还能用。


等代码写到一半发现方向错了,想回滚?对不起,没路了。AI 告诉我一大堆东西,我回复了一句话:我不懂技术不知道如何改…


安全性的盲区:AI 联网后,投毒者可能通过各种方式污染生成结果。缺少 Code Review 的代码,安全性就有天然缺口。


我后来用大模型检查代码时发现,AI 生成的 API 调用居然把敏感信息以明文方式传输 。


还有其他很多,感觉就是坐在“屎山上雕刻”。哈哈,这个比喻很形象。


从"能跑"到"能用"的巨大鸿沟


更扎心的是,当你兴冲冲地写完几万行代码后,发现:


  • 70% 的功能是重复的(不同页面写了相似逻辑)

  • 性能问题一大堆(数据库查询效率低下)

  • 用户体验惨不忍睹(界面逻辑混乱)

  • 维护成本极高(找个 bug 要翻好几千行代码)


这就是"屎山"的本质:看起来很宏伟,实际上摇摇欲坠。


比如我做的某个搜索功能,AI 很贴心地为每个搜索请求都创建了新的数据库连接。结果并发一高,服务器直接爆了。


还有个更离谱的:AI 为了实现"智能推荐",把所有数据都加载到内存里进行计算。1000 条数据没问题,10000 条数据就卡死了。


调试成了最大的噩梦


写代码容易,调试难。


当你的应用出现 bug 时,你面临的不是一个错误,而是一连串连锁反应:


  • 前端报错:“Cannot read property of undefined”

  • 后端日志:“Database connection timeout”

  • 用户反馈:“页面白屏了”


作为一个不懂技术的产品经理,我的调试过程基本上是这样的:


  • 把错误信息复制给 AI

  • AI 给出一个"可能的解决方案"

  • 照搬 AI 的代码

  • 告诉 AI 说我不懂代码,你直接给我修改。

  • 引发新的 bug

  • 回到步骤 1


最长的一次调试,我花了整整一天时间,就为了修复一个表单提交的问题。


还有个更离谱的,为了修改几个 bug 2 天的 token 消耗了 xxx, 我看完 emo 了。



ps: 这是我调试 bug 的内容


我看到后台 log 有返回数据了(这是之前 bug:有一个报错, 就是在智能问答中,发去了消息成功(不管开关是否使用知识库都是同样问题),但是智能问答页面上的智能小助手还是… 没有正确把这个结果在前端显示。)


:127.0.0.1 - - [01/Apr/2025 09:27:06] "POST /smart-qa/ask/stream HTTP/1.1" 200 - 2025-04-01 09:27:07,020 [WARNING] app.services.stream_parser: 未知事件类型: message_end, 数据: {'event': 'message_end', 'conversation_id': 'ffdb0ce0-84a9-4647-a31c-811d2915825a', 'message_id': 'a0da8019-48cc-46e4-8438-2b8e5811706f', 'created_at': 1743470825, 'task_id': '1eb185a0-74f2-4359-b339-6b83fc2a89e1', 'id': 'a0da8019-48cc-46e4-8438-2b8e5811706f', 'metadata': {'retriever_resources': [{'dataset_id'.=
复制代码


坐在屎山雕刻了“三朵花”的顿悟


第一次重构:发现架构的重要性


第一版代码写完后,我发现前后端耦合得一塌糊涂。一个简单的功能修改,需要同时改动十几个文件。


更要命的是,我根本不知道哪些文件之间有依赖关系。


有次想调整一个按钮的颜色,结果把整个用户管理模块搞崩了。后来才发现,那个 CSS 文件居然还控制着数据表格的样式。


这时我才意识到:AI 具备的是执行能力,不是架构思维。


它可以帮你写出符合语法的代码,但不知道什么时候该分层,什么时候该解耦。


第二次重构:学会与 AI 协作


吸取教训后,我开始尝试更科学的方法:


从高层到低层逐步提示:先描述整体目标,再细化到数据模型、API 设计,最后才是具体实现。


比如我会先说:“我要做一个知识库系统,支持文档上传、搜索、分类”,然后再具体到"用户表需要哪些字段"、“搜索接口怎么设计”。


先写测试用例:明确预期功能,让 AI 根据失败的测试生成代码。这比用自然语言描述需求靠谱多了。


说实话,写测试用例对我这种产品经理来说也是个挑战。但逼着自己写,确实能把需求想得更清楚。


制定规则文件:为项目创建编码规范,包含使用的库、命名规则、架构模式。


我的规则文件长这样:


  • 前端统一用 Vue 3 + Element Plus

  • 后端统一用 Python Flask

  • 数据库字段命名用下划线分隔

  • API 响应格式统一用 JSON

  • 错误处理统一返回 error_code 和 message


使用工作空间:把前后端代码放在同一个环境里,让 AI 理解全貌。


这个真的很重要。AI 能看到整个项目结构后,生成的代码一致性明显提高了。


第三次重构:接受"屎山"的现实


第三次重构时,我终于想通了一个问题:


也许"屎山"就是 AI 编程的必经之路。


为什么这么说?


四、"屎山"存在的合理性


快速试错的价值


传统开发流程下,一个 feature 从需求到上线,至少需要 2-4 周。而 AI 编程可以让你在 2-4 小时内看到可运行的原型。


哪怕是"屎山",也能让你快速验证想法、收集反馈、调整方向。


在产品早期,这种快速迭代的价值远大于代码质量。


我用 AI 做的第一个搜索功能,虽然性能一塌糊涂,但至少让我确定了用户确实需要这个功能。如果按传统流程,光是写需求文档就得一周。


学习成本的权衡


对于非技术背景的产品经理来说,学会使用 AI 编程的成本,远低于学会传统编程。


即使生成的是"屎山",也比完全不会编程要强。


至少你能:


  • 快速验证产品想法

  • 和技术团队更好地沟通

  • 理解技术实现的复杂度


现在我和开发同学讨论需求时,再也不会说出"这个功能很简单,加个按钮就行"这种话了。


渐进式优化的可能


"屎山"不是终点,而是起点。


有了可运行的原型后,你可以:


  • 找专业开发者进行代码 review

  • 逐步重构核心模块

  • 基于用户反馈确定优化重点


这比从零开始要高效得多。


而且,很多时候"屎山"的存在本身就是价值。它证明了这个想法是可行的,只是实现得不够优雅而已。


五、那些踩过的坑


过度依赖 AI 的判断


刚开始用 AI 编程时,我几乎把所有决策都交给了 AI。


AI 说用 Redis 做缓存,我就用 Redis;AI 说需要微服务架构,我就拆分服务。


结果搞出了一个 over-engineering 的怪物:为了实现一个简单的 CRUD 操作,竟然用了 6 个不同的服务。


后来我意识到,AI 的建议往往是"理论上最佳",但不一定适合你的具体场景。


忽视性能和安全


AI 生成的代码在功能上通常没问题,但在性能和安全方面经常有坑。


比如我发现 AI 特别喜欢用嵌套循环解决问题,N²的时间复杂度张口就来。还有就是对用户输入基本不做验证,SQL 注入的风险很高。


这些问题,如果没有专业知识,很难发现。


代码复用率极低


AI 每次生成代码时,都倾向于写"完整"的解决方案,很少复用已有代码。


结果就是同样的逻辑在项目里出现 N 遍,每遍还略有不同。改个公共功能,要改十几个地方。


AI 编程的正确姿势


混合使用不同 AI 模型


经过这次折腾,我总结出一套相对靠谱的方法:


  • 某模型用于规划功能和架构设计

  • 某模型快速生成代码实现

  • 某模型处理复杂的逻辑问题


PS(某模型请对着自行对号入座,2333)


每个模型都有自己的长处,组合使用效果更好。


遵循软件工程基本原则


AI 再强,也改变不了软件工程的基本规律:


  • 模块化设计:将复杂问题拆分成小块

  • 关注点分离:UI 逻辑和业务逻辑分开

  • 版本控制:每个阶段都要有回滚能力


这些原则,AI 不会主动提醒你,需要人来把控。


我现在的习惯是:每实现一个功能,就提交一次代码。出问题了至少能回到上个稳定版本。


理性看待"屎山"的价值


说到底,"屎山"只是一个过程,不是目标。


关键是要明确你的预期:


  • 如果是验证想法的 MVP,"屎山"完全可以接受

  • 如果是要长期维护的产品,就需要专业团队介入

  • 如果是学习技术的工具,"屎山"反而是很好的教材


客户沟通的新姿势


从"纸上谈兵"到现场演示


最让我兴奋的是,AI 编程彻底改变了我和客户的沟通方式。


以前的流程是这样的:


  • 和客户开会,听需求

  • 回去写 PRD,画原型图

  • 再约客户确认需求

  • 技术评估,出设计稿

  • 再和客户沟通修改意见


现在?完全不一样了。


上周和某电商客户的会议就是个典型例子:


客户说想要一个智能客服系统,能自动回答用户问题,还要支持多轮对话。


以前我只能拿着纸笔记录,然后说"我们回去研究下技术方案"。


现在我直接说:“您稍等,我现在就给您做一个 demo。”


然后当场用 AI 写了个简单的客服界面:


  • 前端用 Vue + Element Plus,界面很酷炫

  • 后端调用 GPT API,实现智能对话

  • 加了几个预设的 FAQ,看起来很专业


半小时后,一个能跑的客服 demo 就出来了。客户当场就能体验,输入问题,AI 回答,多轮对话,样样都有。


客户的反应?


“哇,这个界面不错,但是能不能把这个按钮换个颜色?” “回答的语气能不能更亲切一点?” “能不能加个转人工的功能?”


你看,这才是真正的需求沟通。不是你想象客户要什么,而是客户真正用了之后告诉你要什么。


掌握的几个"装逼"技巧


经过这几个月的摸索,我总结出几个屡试不爽的客户沟通技巧:


技巧一:现场造轮子


客户说需求时,我会边听边在电脑上敲代码。看起来像在记录,实际上是在用 AI 快速搭建原型。


等客户说完,我的 demo 基本也做好了。


关键是要掌握好节奏:太快了显得不真实,太慢了失去惊喜感。我一般控制在 15-30 分钟。


技巧二:从小功能开始


不要一上来就做复杂系统,先从一个小功能入手。比如智能客服,我先做个简单的问答界面,让客户看到 AI 能回答问题。


然后根据客户反应,逐步加功能:多轮对话、知识库检索、转人工…


这样客户能看到整个产品是如何"生长"出来的。


技巧三:预埋几个"彩蛋"


在 demo 里提前准备几个小惊喜。比如客户问到某个功能时,我会说"巧了,我刚好做了这个",然后展示一个看起来很复杂的功能。


实际上这些功能可能就是几行代码调用个 API,但视觉效果很震撼。


技巧四:让客户参与


最重要的是让客户觉得这个产品是"我们一起"设计的。


“您觉得这个按钮放哪里比较好?” “您希望这个颜色更深一点还是浅一点?” “这个功能的名字您觉得叫什么比较合适?”


然后现场修改,让客户看到自己的想法立即变成现实。


这种参与感是传统 PPT 和原型图永远无法提供的。


我的产品原型矩阵


经过最近几个月的折腾,我已经用 AI 构建了好几个产品的可运行原型:


  • 智能客服系统:支持多轮对话,FAQ 自动匹配

  • 文档知识库:内容类几个垂直领域的文档模版与结构自动分割、自动解析,智能搜索和问答

  • 数据分析平台:各类文档导入,自动提取数据并做分析,自动生成图表和分析报告以及工程项目相关风险。

  • 会议纪要助手:语音转文字,自动提取关键信息,与流程集成

  • 内容审核工具:文本合规检查,敏感信息识别


以及合同审核与风险分析等…


当然了,每个原型都不算完美,但都能跑,都能让客户直观地感受到产品的价值。最关键的是,这些原型让我在客户面前的话语权完全不一样了。


以前客户会质疑:"你们真的能做出来吗?"现在客户会说:"这个功能不错,但我还想要…"从质疑能力,到讨论需求,这是质的飞跃。


AI 编程改变了什么


产品经理的能力边界


以前产品经理的工作止步于 PRD,现在可以直接做出可交互的原型。


这种变化不只是效率提升,更是思维方式的转变。当你能快速实现想法时,你会更大胆地去试错。


团队协作方式


有了 AI 编程能力后,我和技术团队的沟通方式完全变了。


以前:


  • 我:这个功能能做吗?

  • 技术:应该可以,但需要评估下

  • 我:大概多长时间?

  • 技术:暂时不好说,先调研下


现在:


  • 我:我做了个原型,你看看技术实现有什么问题

  • 技术:整体思路没问题,但这里的性能需要优化

  • 我:好的,我先改改,你再看看


效率提升不是一点点。


对技术的理解深度


虽然写出的是"屎山",但这个过程让我对技术有了更深的理解。


现在看技术方案时,我能大概判断实现的复杂度,也能理解为什么某些需求"看起来简单,做起来复杂"。


意外的商业价值


说个更实在的:这种能力直接提升了我的商业价值。


以前和客户谈项目,我需要带着技术同事,还要准备各种材料。现在我一个人就能搞定前期的需求确认和 demo 演示。


客户签约率明显提升了。不是因为我的销售能力变强了,而是因为客户能直观地看到产品的效果。


"眼见为实"这四个字,在 ToB 销售中太重要了。


最近有个客户直接说:“你们这个 demo 做得不错,我们想直接基于这个原型来开发。”


当然,我很诚实地告诉他这只是个原型,真正的产品开发还需要专业团队。但至少,我们拿到了这个项目。


从"屎山"到"产品矩阵"


现在回头看,那些被我称为"屎山"的代码,其实构成了我的产品能力矩阵。


每个原型都像是一个"技能点",让我能够快速应对不同类型的客户需求:


  • 需要智能客服的,我有现成的 demo

  • 需要数据分析的,我能现场做个图表

  • 需要文档处理的,我有知识库原型

  • 需要工作流的,我有审批系统模板


这些原型的技术质量可能不高,但组合起来的威力很大。


就像游戏里的技能树,单个技能可能很普通,但全部点满后就是另一个维度的存在。


写在最后


这段时间的 AI 编程经历,让我对技术有了全新的认知。


以前总觉得编程是工程师的专利,现在发现:在 AI 时代,编程正在成为一种新的表达方式。


就像当年的 PS 让设计门槛降低,AI 正在让编程门槛降低。


虽然我写出的是"屎山",但这座"屎山"让我:


  • 理解了产品实现的复杂度

  • 学会了和 AI 协作的方式

  • 获得了快速原型的能力

  • 对技术有了更深的敬畏


更重要的是,它改变了我对产品开发的思维方式。


现在的产品经理,如果还停留在"写 PRD 交给研发"的模式,很可能会被时代抛弃。


未来的产品经理 = 产品经理 + 设计师 + 初级开发者。


而 AI,就是那个让这种融合成为可能的工具。


当然,这不意味着产品经理要替代工程师。专业的事情还是需要专业的人来做。


但至少,我们可以在"想法"和"实现"之间,建立一座更短的桥梁。


至于"屎山"?能跑就行。反正后面还有重构的机会。


而且说不定,过几年 AI 进步了,连重构都不用人操心了。


(这篇文章的观点可能仅从非技术角度阐述,但当下的折腾是最真实的。如果你也想尝试 AI 编程,建议先从小项目开始。别像我一样,一上来就奔着几万行代码去。)


该如何从屎山上下呢?请听下回分解。


后记:写完这篇文章,我突然想起一个问题:当 AI 能生成完美代码的那一天,"屎山"还会存在吗?也许不会,但至少现在,"屎山"是我们通向未来的必经之路。


有感兴趣的可以进一步交流。


作者简介:


松子(李博源),BI& 数据产品老兵一枚,漂过几个大厂,23 年开始在 AI 大模型领域创业,现某厂 AI 及产品副总经理。


今日好文推荐


手撕900万行屎山代码、少干28万小时!AI 编程大刀挥向“古老”编程语言


18天光速打脸!OpenAI刚夸TypeScript最合适,转头就用Rust重写Codex CLI


“不用 Cursor和 ChatGPT、手写代码的开发者,怕不是疯了?”


谷歌突袭发布AI应用,无需Wi-Fi、手机就能跑大模型!网友实测两极分化


活动推荐


6 月 27~28 日的 AICon 北京站将继续聚焦 AI 技术的前沿突破与产业落地,围绕 AI Agent 构建、多模态应用、大模型推理性能优化、数据智能实践、AI 产品创新等热门议题,深入探讨技术与应用融合的最新趋势。欢迎持续关注,和我们一起探索 AI 应用的无限可能!



2025-07-02 12:194797

评论

发布
暂无评论

Python的GIL

yunson

Python GIL

7 天开发后台系统技术小结

老魚

程序员 全栈 建站

国外低代码平台趟过那些坑,对国内低代码企业有哪些启示?

DT极客

四年三次获奖,PostgreSQL再度荣获“年度数据库”桂冠!

PostgreSQLChina

数据库 postgresql 开源

纵观 ActiveX 平台的兴衰史,看开发控件的技术演变

葡萄城技术团队

SpreadJS activex

获奖名单|七日更挑战成功!

InfoQ写作社区官方

奖品 七日更 热门活动

2020年11期券商App行情刷新及交易体验评测报告

博睿数据

APM 数据 AIOPS 证券

智慧公安防控管理平台搭建,重点人员管控系统解决方案

t13823115967

智慧公安

有没有听说过通达快递?

escray

极客时间 极客大学 课程作业 大作业 架构师训练营第 1 期

敏捷团队的质量保障赋能

BY林子

质量保障 质量赋能 敏捷测试

OpenKruise 2021 规划曝光:More than workloads

阿里巴巴云原生

阿里云 开源 容器 云原生 调度器

区块链数字货币交易所开发的简介

对冲基金的子基金模式vs集中管理

9527

深度解析!滴滴内部开源Spring IoC和AOP源码小册

Java架构追梦

Java spring 架构 aop ioc

Flink SQL 实战:双流 join 场景应用

Apache Flink

flink 流计算

漫画 | 带你领略前端发展史的江湖恩怨情仇

苏南

程序员 大前端 漫画 时代发展

软件测试--中间件介绍

测试人生路

软件测试 中间件

数字货币交易所开发的功能与特点

如何防止短信验证码接口被恶意调用攻击?

香芋味的猫丶

短信 短信防刷 接口安全 验证码

Linux进程知识干货|收藏

赖猫

c++ Linux 后台开发 运维

云原生2.0时代,华为云DevOps立体运维实践

华为云开发者联盟

DevOps 运维 云原生 华为云

测开之函数进阶· 第7篇《装饰器装饰类,通用装饰器,有啥区别呢?》

清菡软件测试

测试

千里公路建设尽收眼底,3D可视化监测管养运,领导都惊呆了

一只数据鲸鱼

物联网 数据可视化 3D可视化 公路建设 智慧交通

智慧社区管理平台建设,智慧平安小区整体解决方案

t13823115967

智慧社区安防系统平台开发

程序员修炼之路:你该知道的 7 个必经阶段

阿里巴巴云原生

阿里云 程序员 云原生 自我思考 成长笔记

这道面试题,出错率90%

田维常

面试

LINUX SHELL脚本攻略

田维常

电商平台如何激发内容生态

马踏飞机747

内容 内容分发网络 电商

架构师训练营 - 大作业二

Pudding

区块链app开发要多少钱?如何根据项目需求了解价格?

我参与阿里巴巴 ASoC-Seata 的一些感悟

阿里巴巴云原生

阿里云 开发者 云原生 感悟 seata

我用大模型砌“屎山雕花”:5天肝出几万行代码!产品经理的AI编程翻车记_生成式 AI_松子(李博源)_InfoQ精选文章