引言

ChatGPT 和 GitHub Copilot 等大型语言模型 (LLMs) 的迅速崛起,从根本上改变了软件开发的格局。对于专业开发人员来说,这些工具是强大的生产力助推器。然而,对于计算机科学教育工作者来说,它们代表着一场迫在眉睫的危机。

在编程入门课程 (通常称为 CS1 和 CS2) 中,主要目标是教授学生编码的基础逻辑——循环、条件语句和数据结构。问题在于?LLMs 非常擅长解决这些标准问题。学生可以复制题目,将其粘贴到 ChatGPT 中,并在几秒钟内收到可运行的解决方案,从而完全绕过了学习过程。

虽然一些教育工作者主张整合这些工具,但现实情况是,如果不加检查地直接使用,可能会阻碍核心解决问题能力的发展。大学的选择非常有限: 他们可以尝试检测 AI 生成的代码 (这种方法以不可靠和容易出现误报著称) ,或者他们可以尝试对作业进行“防 LLM 化”。

本文将深入探讨一篇题为 “Impeding LLM-assisted Cheating in Introductory Programming Assignments via Adversarial Perturbation” (通过对抗性扰动阻止编程入门作业中的 LLM 辅助作弊) 的研究论文。研究人员提出了一种新颖的防御措施: 与其禁止 AI,如果我们在作业文本中加入一些人类可以阅读但 AI 模型会误解的细微变化,会发生什么?

原始提示词与扰动后的提示词对比,展示了一个小小的拼写错误如何让模型崩溃。

如上图 1 所示,一个简单的修改——删除几个字符制造拼写错误——就能导致复杂的模型性能从 100% 准确率暴跌至 0%,而指令对于人类学生来说仍然是可以理解的。这种技术被称为 对抗性扰动 (adversarial perturbation)

在这篇深度文章中,我们将梳理研究人员的三个步骤: 评估 LLMs 目前的作弊能力如何,设计“攻击”来混淆它们,以及进行真实的用户研究以观察这些手段是否真能阻止学生。

“黑盒”难题

在深入探讨方法之前,我们需要了解教育工作者面临的限制。关于 LLMs,教师通常是在“黑盒”环境下操作的。他们无法改变模型的内部权重,也无法控制公司的更新或安全护栏。教师唯一能完全控制的只有 输入——即作业提示词本身。

核心研究问题是: 教师该如何修改作业提示词,使其不太容易被基于 LLM 的方案解决,同时又不影响学生对题目的理解?

研究人员通过三个阶段系统地解决了这个问题:

  1. 基准测量: 目前的 LLMs 在大学水平的作业上表现如何?
  2. 扰动设计: 开发“毒化”提示词的技术。
  3. 实地实验: 用真实学生测试这些经过扰动的提示词。

图表显示了三个阶段: 检查性能、扰动和用户研究。

第一步: 测量基准

在了解一个系统的能力之前,你无法有效地破坏它。研究人员从亚利桑那大学的 CS1 和 CS2 课程中收集了 58 个编程作业。他们将其分为:

  • 短问题: 单个函数或类。
  • 长问题: 涉及跨多个函数或类交互的复杂任务。

他们测试了五个主要模型: CodeRL, Code Llama, Mistral, GPT-3.5 (ChatGPT) 和 GitHub Copilot。

CS1 的意外翻车

令人惊讶的是,LLMs 在第一门入门课程 (CS1) 中表现非常挣扎。事实上,像 GPT-3.5 和 CodeRL 在许多 CS1 问题上的得分为 0%。

为什么?事实证明,入门作业通常依赖于特定的、非文本的上下文,这会让基于文本的模型感到困惑。许多作业涉及 ASCII 艺术或由视觉模式定义的图形输出,而非纯粹的逻辑。

显示埃菲尔铁塔 ASCII 艺术的终端界面。

如上图 5 所示,一个要求学生打印 ASCII 埃菲尔铁塔的问题需要空间推理能力,而 LLM 很难仅从文本指令中推断出这一点。此外,这些特定作业中对文件名和类结构的严格要求也绊倒了模型。

CS2: 真正的威胁

然而,对于第二门课程 (CS2) ,结果让教育工作者更加担忧。随着问题更多地转向数据结构和算法 (标准的 CS 主题) ,模型的表现要好得多。

表格显示 LLM 性能统计数据。Copilot 表现最佳。

表 1 强调了 GitHub Copilot 是表现最强的,正确解决了超过 51% 的短问题。虽然它们在“长”问题 (需要在更大的代码库中保持上下文) 上很吃力,但这些模型的能力足以成为课程大部分内容的作弊工具。这确立了基准: 威胁是真实存在的,特别是对于标准算法问题。

第二步: 核心方法 - 设计扰动

这是论文的核心部分。研究人员需要设计提示词修改方案,以降低 LLM 的性能 (有效性) ,同时保持较低的编辑距离 (变化量) ,以便文本对学生来说仍然具有可读性。

策略: 可解释性引导的攻击

为了使攻击变得智能,研究人员不仅仅是随机删除单词。他们使用了一种称为 SHAP (SHapley Additive exPlanations) 的技术。

在机器学习中,SHAP 值告诉我们哪些特征 (在本例中为单词或 token) 对模型的预测贡献最大。通过在作业上运行代理模型 (CodeRL) ,研究人员可以识别出特定的“承重”词——即 AI 生成代码时最依赖的关键词。

一旦确定了高价值 token,研究人员就应用了几种扰动策略:

  1. 视觉对抗样本 (Unicode) : 用 Unicode 字符集中的“相似字符”替换标准字符。例如,用西里尔字母 а 替换拉丁字母 a。对人类来说,它们看起来一模一样。对 LLM 分词器来说,它们是完全不同的数据点。
  2. 同义词替换: 用同义词替换关键动词或名词 (例如,将 “calculate” 更改为 “compute” 或 “tally”) 。
  3. 拼写错误和删除: 从关键 token 中删除一个字符 (例如,grid_get_height 变为 gri_ge_heigt) 。
  4. 句子移除: 删除提供上下文的整个句子,假设人类可能推断出缺失的信息,或者这些信息对人类是多余的,但对 AI 至关重要。

可视化攻击

Unicode 攻击特别隐蔽。在下面的例子 (图 7) 中,提示词肉眼看起来很标准。然而,像 DListNode 这样的函数名中的特定字符已被替换为相似字符。

并排对比显示提示词中的 Unicode 替换。

因为 LLM 将提示词视为 token 序列,这些 (从机器角度看的) “拼写错误”切断了指令与模型内部编程概念知识库之间的联系。

测量有效性 (Efficacy)

研究人员定义了一个具体的成功指标,称为 有效性 (Efficacy) 。 它衡量应用扰动后正确率下降了多少。

有效性公式。

如果一个模型最初得分 100%,在调整提示词后得分 0%,则有效性为 100%。如果分数没有变化,则有效性为 0%。

扰动结果

自动化测试表明这些技术非常有效。

表格显示有效性分数。提示词 Unicode 和句子移除分数很高。

如表 2 所示,像 “Prompt (unicode)” (替换整个文本中的字符) 和 “Sentences (remove)” (移除句子) 这样的技术摧毁了模型的回答能力,通常能达到很高的有效性。

然而,这就存在一个权衡。我们可以通过删除一半的作业或用符号替换每个字母来破坏 AI,但这会让学生无法阅读。研究人员使用 编辑距离 (Edit Distance) 来衡量这一点——即新文本与原始文本的差异程度。

条形图显示编辑距离。提示词 Unicode 非常高。

图 3 说明了这种风险。虽然 “Prompt (unicode)” 效果很好,但它改变了文件中超过 50% 的字符,增加了学生 (或拼写检查器) 注意到不对劲的风险。理想的扰动是具有 高有效性低编辑距离 的扰动 (如定向字符删除或同义词交换) 。

第三步: 实地实验 (用户研究)

理论是一回事;现实是另一回事。即使 LLM 未通过自动化测试,聪明的学生使用 ChatGPT 可能也能发现拼写错误,修复它,并无论如何得到答案。为了测试这一点,作者招募了 30 名已经完成 CS1/CS2 的本科生。

设置:

  • 学生被付费扮演“作弊者”。
  • 他们获得了作业 (有些是原始的,有些是经过扰动的) ,并被告知使用 ChatGPT 来解决这些问题。
  • 他们必须提交聊天记录以及关于是否注意到任何异常的调查问卷。

人为因素结果

用户研究揭示了人类直觉与 AI 脆弱性之间有趣的动态关系。

1. 作弊成功率整体下降 扰动起作用了。生成解决方案的平均正确率显著下降。当结合最佳扰动技术时,研究人员成功将平均正确率降低了 77%

条形图显示各模型的得分下降情况。

2. 可检测性 vs. 实用性 研究发现 隐蔽性成功率 之间存在很强的相关性。

  • 高变动扰动: 当整个提示词充斥着 Unicode 字符时,学生立刻就注意到了。他们将文本描述为“不寻常”或“怪异”。
  • 微小扰动: 像删除单个字符或交换 token 这样的技术更难被发现。

至关重要的是,研究人员发现 可检测性并不等于可逆性 。 即使学生注意到有问题 (例如,“函数名看起来拼写错了”) ,他们通常也不知道如何修复提示词以使 ChatGPT 理解它,或者他们无论如何都相信 AI 产生的幻觉输出。

3. 学生处理策略 当面对损坏的提示词时,学生做了什么?

堆叠条形图显示学生策略。

如图 10 所示,最常见的行为是:

  • 未发现异常: 他们盲目复制了文本 (攻击者成功!) 。
  • 更新问题陈述: 他们试图在聊天中手动修复拼写错误。
  • 期望被绕过: 他们希望 AI 能自己搞定。

“Prompt (unicode)” 策略最常被注意到,导致学生试图清洗文本。然而,微妙的 “Character (remove)” (字符移除) 扰动经常被忽略,导致模型生成微妙损坏的代码,学生可能会误以为是正确的——直到他们尝试运行它。

结论与启示

这项研究凸显了我们对教育中 AI 思考方式的关键转变。与其参与“AI 检测”的军备竞赛 (在学生作业中寻找 AI 指纹) ,教育工作者可以参与 对抗性防御——设计天生就能抵抗 AI 自动化的作业。

主要结论如下:

  1. LLMs 是脆弱的: 它们依赖于特定的 token 模式。通过拼写错误、同义词或不可见字符打破这些模式,可以关闭它们的推理能力。
  2. 视觉很重要: 依赖 ASCII 艺术、图像或非文本逻辑的作业天然能抵抗基于文本的 LLMs (尽管像 GPT-4V 这样的多模态模型正在改变这一点) 。
  3. 人类介入 (Human-in-the-loop) : 学生有时可以修复这些攻击,但这需要努力和理解——具有讽刺意味的是,这迫使他们参与到材料中,部分实现了学习目标。

虽然模型将继续进化,并可能变得能够抵抗简单的 Unicode 替换或拼写错误,但这篇论文提供了一个概念验证。未来的家庭作业可能不仅仅关于我们问 什么 问题,还在于我们将 如何 提问,以确保是学生而不是机器在进行思考。