用Cursor写一个Python爬虫,它直接给我上了asyncio+aiohttp+协程,虽然能跑,但我自己根本没法维护,改个选择器都得问它。最近在做一个Django项目,它又自动给我生成了一堆抽象类和mixin,我查了半天才明白大概意思。我不是反对用AI,但总感觉代码风格越来越陌生,像是在给机器打工而不是我在用工具。想问下大家,这种情况是应该硬着头皮读AI生成的代码、逼自己跟上节奏,还是应该更严格地限制它的输出风格?有没有什么好的prompt策略能让它写出的代码更“像我”写的?
AI编程工具写出的代码,我越来越看不懂了,正常吗?
全部回复
共 11 条这太正常了,我上次让它写个脚本,它给我套了三层装饰器,我看了半小时直接放弃重构了。后来我学乖了,在prompt里明确写“禁止使用协程,禁止自定义类,只准用最简单的requests和循环”,它立马老实很多。你试试给它喂一段你自己写的旧代码当风格模板,要求它模仿,会比单纯说“写简单点”管用。至于读不读得懂,我觉得核心逻辑还是得自己过一遍,不然出bug都不知道去哪查。
这题我太有同感了,之前用Copilot写个数据处理脚本,它给我整了一堆生成器表达式和functools.partial,我盯着看了十分钟才反应过来是在干嘛。后来我学乖了,在prompt里直接写“用最朴素的for循环,禁止推导式,禁止装饰器”,效果立竿见影。其实关键不是硬啃它的代码,而是你得先想清楚自己能不能在三天后改得动,要是没把握,就让它按你的习惯来,工具是死的,人活的。
说实话我也遇到过这情况,后来发现问题不在AI而在于没给它立规矩。我现在会在prompt里明确写“优先用标准库”、“不要过度设计”、“注释每段逻辑”,效果立竿见影。另外,它写的抽象类我一般直接要求它改成平铺直叙的写法,毕竟维护成本才是大头。
说实话我也有这感觉,现在写完代码第一件事是问AI每段啥意思,感觉像在带新人。
可以在prompt里加一句“用最朴素的写法,别整花活”,能好不少。
说实话这问题我太有同感了,上个月用copilot写个数据清洗脚本,它给我整了个pipeline加策略模式,我盯着看了半小时才反应过来是在干嘛。我觉得硬着头皮读代码这事儿得分情况,如果是核心业务逻辑那必须搞懂,但像爬虫选择器这种边角料,能跑就行,真没必要为了“看懂”去学它的花活。我现在的做法是开个新项目或者写独立函数时,直接跟它说“不要用任何设计模式,不要抽象类,用最直白的循环和if”,然后生成完我再自己refactor一遍,把关键变量名改成我习惯的命名风格。prompt里加一句“请以初级工程师的代码风格输出”特别管用,它会收敛很多。另外我建议你把AI当结对编程的实习生,它给方案你review,而不是当外包大爷全盘接收,不然代码风格迟早被带偏。还有个小技巧,让它在注释里写清楚每段逻辑的“为什么”,比让它写“是什么”有用多了,这样就算它用了你不熟的语法,你至少能快速抓住意图。
这题我太有共鸣了,之前也差点被它生成的抽象工厂搞崩溃。后来我干脆在项目里建了个docs/coding-rules.md,把“禁止过度设计”“优先用requests”这种硬规矩直接丢给AI,让它照着写。你试试在prompt里加一句“用最基础的语法,别整花活”,输出会亲民很多,虽然偶尔还是得自己上手改,但至少能看懂它在干啥。
这太正常了,AI的默认风格就是追求“优雅”和“完备”,根本不管你的维护成本。我后来直接在prompt里加了一句“用最直白的同步代码,禁止使用协程和设计模式”,世界瞬间清净了。你还可以让它给你写个注释版,把每段逻辑用大白话解释一遍,比硬啃源码效率高多了。
我也有这感觉,让它生成代码前先丢一段自己写的旧代码进去,指定风格,输出能顺眼不少。
让它把注释和类型标注写全,比自己硬啃省事多了,不然真成给机器打工了。
这问题太真实了,我一般让它先给个简化版方案,再加约束条件让它别炫技。
这问题我太有共鸣了,前阵子用Copilot写个简单的数据清洗脚本,它给我整出一套pandas的链式调用加lambda嵌套,跑是能跑,但我想加个去重逻辑愣是看了十分钟才找到该往哪塞。其实核心矛盾在于AI默认追求的是“最优解”而不是“可维护解”,它觉得asyncio快就上了,根本不管团队里有没有人熟悉协程。我后来试过在prompt里直接贴一段自己以前写的代码,说“请严格模仿这个风格,不要用任何我没用过的库或语法”,效果还行,至少生成的东西能看懂七八成。但说实话,每次都要贴范例也挺累的,而且遇到复杂需求它还是会偷偷塞点“高级货”。我觉得完全硬着头皮读AI代码不现实,毕竟你才是代码的负责人,看不懂就是技术债。不如反过来想,把AI当个草稿生成器,它写完你按自己风格重写一遍,慢慢它也能从你的修改里学到点东西。至于prompt策略,可以试试加一句“假设维护者只懂基础Python,请用最直白的写法”,比单纯说“简单点”管用。
我一般会让它先按我平时的写法来,比如先说清楚“用requests+bs4,别上异步”,再让它写。不然默认就爱堆新特性,看着头大。Django那堆mixin确实烦,我后来干脆让它先写最直白的函数视图,跑通了再自己重构。你可以试试在prompt里塞一段自己以前写的代码当风格样例,比光说“简单点”管用。