Evaluating LLMs in the Context of a Functional Programming Course: A Comprehensive Study

本文通过构建包含代码生成、修复和解释的三大基准测试,评估了九种先进大语言模型在低资源函数式编程语言 OCaml 教学环境中的表现,发现尽管其解决作业问题的成功率低于在 Python 和 Java 等主流语言上的表现,但在修正语法类型错误及解答基础概念问题上仍具有显著效用,并提出了旨在提升模型能力、引导学生认知局限及推动领域特定推理研究的未来方向。

Yihan Zhang (McGill University, Canada), Brigitte Pientka (McGill University, Canada), Xujie Si (University of Toronto, USA)

发布于 Mon, 09 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是一份**“大语言模型(LLM)在函数式编程课堂上的期末考试成绩单”**。

想象一下,你是一位老师,手里拿着 9 位来自不同“家族”的超级 AI 学生(比如 GPT-4o、Claude、Llama 等),你想看看它们能不能帮你的学生学好一门很难的编程语言——OCaml

OCaml 不像 Python 或 Java 那样随处可见,它更像是一门**“小众的、逻辑极其严密的古典音乐”**。而这篇论文就是要把这些 AI 扔进这个“古典音乐班”,看看它们到底能不能看懂乐谱、修好走调的乐器,或者解释清楚音乐理论。

为了公平考试,作者们设计了三套考题(基准测试)

1. 第一关:写代码(λCodeGen)

  • 考题内容:给 AI 一个自然语言的作业题目(比如“写一个函数来反转列表”),让它直接写出代码。
  • AI 的表现
    • 优等生(如 o3-mini, Claude 3.7, GPT-4o):大概有 70% 的时间能写出完全正确且符合要求的代码。这就像是一个聪明的留学生,虽然母语不是中文,但能写出很地道的文章。
    • 普通生:表现就参差不齐了。有些模型(如 Llama 3.1 8B)写的代码甚至编译都跑不通(就像写了一堆乱码),或者虽然能跑,但逻辑全是错的。
    • 对比:以前这些 AI 在 Python 这种“大众语言”上能拿 90 分以上,但在 OCaml 这种“小众语言”上,分数就掉到了 70 分左右。这说明数据量少的语言,AI 学起来确实更吃力

2. 第二关:修代码(λRepair)

  • 考题内容:给 AI 一段有 bug 的学生代码,并附上报错信息,让它把代码修好。
  • AI 的表现
    • 修语法错误(Syntax):这是 AI 的强项!就像帮人纠正错别字,顶尖模型能修好 80% 以上的错误。
    • 修类型错误(Type):稍微难一点,但优等生依然能修好 70-80%
    • 修逻辑错误(Logical):这是最难的部分。就像让 AI 猜“为什么这个程序算出来的结果不对”,优等生能修好 60-70%,但普通模型就经常修不好,甚至越修越错。
    • 有趣发现:给 AI 看一个正确的例子(One-shot learning),它的修图能力就会稍微变好一点点,就像给临摹者看一张范画,它就能画得更像。

3. 第三关:讲理论(λExplain)

  • 考题内容:问一些抽象的概念题(比如“什么是尾递归?”、“变量作用域是什么?”),让 AI 用文字解释。
  • AI 的表现
    • 优等生:能讲得头头是道,正确率很高。
    • 普遍问题废话太多!即使老师明确要求“简洁回答”,AI 还是喜欢长篇大论,甚至把简单的概念绕得很复杂。这就好比一个学生考试时,明明只要写个公式,他却写了三页纸的读后感,虽然态度端正,但重点不突出。
    • 风险:对于理论问题,学生很难像检查代码那样用编译器去验证对错。如果 AI 一本正经地胡说八道(幻觉),学生很容易就被带偏了。

核心结论与启示

  1. AI 不是万能的“作弊神器”
    虽然顶尖的 AI 在 OCaml 这种高难度课程上表现不错(大概能拿 B+ 或 A-),但它们远未达到完美。如果学生完全依赖 AI 写作业,很容易得到一堆看似正确但逻辑有漏洞的代码。

  2. “通才”与“专才”的较量
    论文还测试了一个专门针对 OCaml 的旧工具(BURST)。结果发现,这个专门工具在简单任务上很稳,但遇到复杂任务就歇菜了;而通用的大 AI 虽然偶尔会犯错,但适应性更强,能处理各种复杂多变的题目。

  3. 给老师和学生的建议

    • 对学生:要把 AI 当成**“副驾驶”**而不是“自动驾驶”。你需要有批判性思维,去检查 AI 写的代码对不对,而不是直接抄。
    • 对老师:考试不能只考“写代码”,可以考**“找茬”(让 AI 写错代码,让学生去改)或者“挑刺”**(让 AI 解释概念,让学生去评估解释得对不对)。这样能逼着学生真正理解知识,而不是依赖 AI。

一句话总结
这篇论文告诉我们,大语言模型在编程学习上是个**“很有天赋但偶尔会犯迷糊的超级助教”**。在 OCaml 这种高难度课程上,它们能帮大忙,但学生必须保持清醒的头脑,不能盲目信任,否则很容易在“逻辑陷阱”里迷路。