我整理了一份“AI代码征兆集”,列出了一些容易识别出 AI 生成代码的特征。当然,辨别人写的代码和 AI 写的代码每天都在变得更困难,但目前还是能找到一些共通的“红旗”特征,尤其是出现在 ChatGPT、Claude、DeepSeek 生成的代码中。
一、注释风格我当然希望所有学生都能像 ChatGPT 一样写出详尽的注释——但现实是,他们做不到。
过度详细的注释,或风格怪异的注释,可能意味着是 AI 写的。
比如,DeepSeek 很喜欢用三引号 """ 写多行注释,即使那根本不是真正的 docstring,也没有标明参数或返回值:
这种注释方式我觉得非常不自然,因为在我的课堂上我们讲的是用 # 来做单行注释,而 """ 是专门用于 docstring 的。
另外,如果在注释中出现像“≡”这样的特殊字符,也可能是 AI 写的。除非我打算让很多人看到这段代码,不然我自己写代码时几乎不会特地去找这些符号。我相信学生们也一样。
二、Lambda 表达式
别误会,我本人很喜欢 lambda 表达式,也认为它们是 Python 的一项精巧设计。不过,lambda 的本意是写一些临时、一次性的小函数,比如传入 map()、filter()、sorted() 这种函数中。
如果 lambda 被用错了、滥用了,或出现在学习进度尚未涉及的时候,就很可能是 AI 写的。
比如,如果在我们还没系统学习 lambda 的时候,学生交上这样一段代码,我很容易就能闻出 ChatGPT 的味道:
三、库的使用方式
库导入的位置问题
如果库的 import 没写在文件开头,而是“散落”在代码中某处,这可能是 AI 写的。
虽然这种情况我只遇到过几次,但如果你课堂上强调过“所有导入要放在文件开头”,那看到这种代码就要警觉。
使用的库本身
使用一个没有必要的库,尤其是还没在课堂中讲到的库,也可能是 AI 参与的痕迹。
还是看之前那段 lambda 代码:
四、命名与格式不一致
这个问题就比较直观了。如果你布置作业时明确写了某个变量或字段的名字,但学生交上来的代码却用了一堆“规范但不符合你的要求”的变量名——那很可能是 AI 写的。
比如这段代码是求小于 n 的所有素数,变量命名都非常标准:
五、逻辑错误
最明显的“红旗”,当然是逻辑错误。但要区分是学生的水平不够,还是 AI 理解出了问题,其实很难。
LLM 本质上是基于概率建模的系统,它们根据上下文生成“可能合理”的下一个词或代码块,而不是“真正理解”问题。这导致它们在处理需要严密推理或逻辑严谨的问题时,经常会出现错误。比如:索引出错、不处理边界情况、算错结果等等。
如果代码中存在不符合逻辑的错误,尤其是算法推导出错,那就很可能是 AI 写的。
理想情况下,认真负责任的学生会在交作业前检查并修复这些问题。但现实是,很多学生交上来的代码根本跑不通,甚至直接报错。
最后一点建议
我们很难用一套“绝对规则”来判断一段代码是不是 AI 写的,所以我建议大家在教学时以“探索式”的态度去沟通,而不是质疑或指责。如果我怀疑某位学生对 AI 依赖过度,我可能会请他在白板上现场讲讲解决思路,或者让他解释自己写的代码是怎么来的。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/13095/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取