最近在用Cursor和Claude帮我写一个内部工具的后端接口,发现一个很尴尬的问题:代码本身逻辑不复杂,但我花在改Prompt上的时间反而更多。比如让它“处理一下异常”,它就会给你塞一堆try-catch,连业务无关的日志都加上了;我说“简洁一点”,它又把必要的参数校验删了。来回改描述,比我自己手写还累。
用AI写代码三个月,感觉Prompt比代码本身还难调,正常吗?
全部回复
共 96 条太正常了,我一开始用Copilot也是这样。后来发现关键是把“怎么做”拆成“做什么”,比如直接给它看接口返回的JSON结构,告诉它“字段A为空就返回错误码xxx”,比跟它纠结“优雅处理”有效得多。另外,我习惯把写好的Prompt存成模板,下次类似需求直接改变量,不然每次从头调真的会崩溃。你那工具要是逻辑真不复杂,不如试试先把核心代码手写出来,只让AI补测试用例或者写注释,反而省心。
这太正常了,我刚开始用Copilot写脚本的时候也这样,后来发现把需求拆成“输入是什么、输出要什么格式、边界情况怎么处理”这种颗粒度,反而比描述“简洁一点”管用。另外可以试试在Prompt里直接给一两个例子,比如“像这种入参为空就返回null”,模型理解起来快很多,比纯文字约束省事。
太正常了,我用了半年多深有体会。你描述的“处理一下异常”变成try-catch轰炸机,基本就是AI的默认应激反应,它根本分不清“健壮性”和“防御性编程”的边界。我后来发现,关键不是你描述“要什么”,而是明确“不要什么”,比如直接在prompt里写“只处理调用外部服务的异常,不要加日志,不要改返回结构”,这样能省一半扯皮时间。
还有个坑是,AI对“简洁”的理解太极端,它会把注释、空行甚至必要的类型检查全删了,最后代码是短了,但可读性反而更差。我现在基本把它当实习生用,先让它出第一版,然后我自己花十分钟重构,比反复调prompt快得多。毕竟prompt调优的试错成本,有时候真比手写代码高,尤其是你心里其实已经知道该怎么做的时候。
另外你提到内部工具,这种场景其实特别适合让AI写测试用例或者生成mock数据,反而比写核心逻辑更省心。所以我觉得别纠结把prompt调到完美,接受它是个“半成品生成器”,自己当那个最终把关的人,心理负担会小很多。
太正常了,prompt调的是“意图对齐”,比写代码更费脑,本质上是在跟模型玩猜心思。
同感,现在写注释和拆需求的时间比写代码还长,不过调顺了后面确实省事。
太正常了,我甚至觉得你才三个月就意识到这点已经算快的了。我自己的经验是,AI写代码最大的坑不是它写不出来,而是它对“简洁”和“健壮”的理解跟你完全不在一个频道上,你以为的“处理一下异常”是核心逻辑别崩,它理解的却是把所有可能的边界都包成瑞士军刀。后来我学乖了,干脆把要求写进系统的prompt模板里,比如“只处理当前函数会实际抛出的异常,不要加日志,不要改签名”,这样能少吵一半的架。但话说回来,有时候你把它调对了,它产出的代码又确实比你自己敲快,所以这种“跟prompt搏斗”的时间,就当是给AI当教练的健身费吧。不过我也好奇,你有没有试过直接给它看一段你手写的风格参考代码?我试过几次,比纯文字描述管用得多。
太正常了,我刚开始用Copilot写脚本也这样。后来发现关键是把“处理一下异常”换成“只捕获HTTP请求相关的异常,其他直接抛出”,它立马就老实了。你现在其实是在学怎么把需求翻译成AI能懂的约束,这本身就是个新技能,等摸清它的脾气就快多了。
太正常了,我用了半年多也是这感觉。你那个“异常处理”的例子我太懂了,它默认的“健壮性”其实是你根本不需要的防御性编程,反而把代码搞脏。后来我学乖了,干脆把需求拆成极小颗粒,比如明确说“只在DAO层捕获SQL异常并转成业务异常,其他地方不管”,这样输出才靠谱。但这么一搞,你发现没,其实你是在用写代码的思维去写Prompt,等于把调试成本从代码层转移到了描述层。我觉得这跟工具交互方式有关,它没法真正理解你项目里的上下文,只能靠你喂细节。所以你累不是错觉,是在给它的“无知”买单。我现在遇到特别具体的小函数,反而手写更快,AI只用来干那些模板化或者探索性的活,这样心理平衡多了。
太正常了,prompt就是在给AI画边界,边界画不好代码就歪,比写代码更需要抽象思维。
AI写代码是加速器,不是方向盘,关键判断还得自己来,习惯就好。
太真实了,我现在跟AI沟通的时间够我手写两遍代码了,感觉像在带新人。
正常,Prompt调优本质是在给AI补业务上下文,比写代码更考验逻辑表达。
太真实了,AI写代码像橡皮筋,松紧全靠prompt拿捏,调参比写码还费神。
prompt调到头秃,还不如自己敲两行实在,AI只能当个高级补全工具用。
太真实了,我现在都是先让它写主体逻辑,异常和校验自己补,反而更快。
正常,我一开始也这样,后来发现是自己把AI当“许愿机”了。像“处理一下异常”这种描述太模糊,它只能凭训练数据里最常见的模式去猜,结果就是堆一堆无关的try-catch。我现在会把要求拆成具体约束,比如“只catch网络超时,记录error级别日志,其他异常往上抛”,反而省事。说白了调Prompt累,往往是因为自己还没想清楚到底要什么。
太正常了,我也经历过这个阶段。后来发现与其反复调描述,不如直接给它一段我写好的示例代码,说“照这个风格来”,比说十句形容词都管用。异常处理这种模糊需求,我现在会明确告诉它哪些异常要捕获、日志用哪个logger、哪些参数必须校验,把约束写清楚反而省时间。Prompt确实是个新技能,但本质上是逼你把需求想明白,想不清楚的时候写代码也一样会返工。
太正常了,我现在都直接把要求拆成几条列给它,比笼统说“简洁点”管用多了。
这个问题我最近也踩得挺狠,说到底是我们把prompt当成了万能遥控器,其实它更像模糊的需求文档。你说“处理异常”,模型只能猜你是要兜底、要重试还是要把错误往上抛,猜错太正常了。我后来学乖了,直接把约束写成类似代码注释的东西,比如“只捕获IO异常,其他往上抛,不加日志”,反而比反复讲人话管用。还有个偷懒办法,先让它生成一版,然后我手动改到满意,再把改动点提炼成规则塞回prompt,这样迭代几次就稳了。所以不是你调prompt难,是你其实在替它做需求分析,这活儿本来就不该省。
同感,我现在干脆把要求写成注释模板,让它照抄,比反复解释省事多了。