共青团中央主管 中国青年报主办

2025年4月9日 星期三

首页 >我的大学 >正文

赛博助教会遇到Accepted吗?

来源:北大青年2025年04月01日

一位轻松可达的随身助教


“Waiting……”


旋转的加载圈、静止的页面,投映在白色屏幕的目光殷切而不安。


一圈、两圈、三圈……计数突然中止——“Wrong Answer”赫然显现,仿佛一道晴天霹雳,使眼中的期望一下扑了个空:怎么会?已经修改了那么多遍,到底错在哪里呢?


当思瑶终于鼓起勇气,带着问题找到计算概论课程的助教时,助教猛地深吸一口气,仿佛要把出窍的灵魂安置回身体。她忐忑不安地看着助教:我的问题是不是太蠢了,让助教都无言以对?要是有一个“赛博助教”能指出代码的bug在哪,让我在OpenJudge(在线编程评测平台)上顺利获得“Accepted”,那该多好啊。


“这是一个很普遍的问题,已经有不下10位同学来问过了。”助教耐心地解答了思瑶的疑惑后,无奈地感叹道。


在计算概论C(以下简称计概C)的课上,文科的同学们也学习着以前只有理工科同学才接触到的Python编程以及计算机的前沿技术。然而,对文科生来说,代码的语句符号、语法结构还十分生疏,在课上,有关编程的问题层出不穷。小到语句功能,大到数学逻辑,这些围绕着基础知识、具有高度重复性的提问,也使课程的助教应接不暇。


“有没有可能基于同学们的问题搭建一个答疑知识库呢?”


担任了三年计概C课程助教、同时也是赛博助教开发者的韩宇栋曾将这个想法付诸实践。他介绍说,有了这个知识库,每当同学们遇到困难,只需输入关键词,便可以检索相应的详细解答。然而,知识库要求长期广泛的数据积累,从零开始的尝试很难吸引更多同学的参与,最后也就无疾而终了。


2022年,ChatGPT的问世带来了转机,其出色的编程能力立即得到了计算机研究者的关注。“大语言模型将已有的人类知识浓缩到了一个大模型中,像DeepSeek-r1这样的开源模型,大小大概就是671B。也就是说,在1T的笔记本中,能装下2.5个这样的人类知识集合。”韩宇栋在提到人工智能热潮时形象地解释道。


北京大学人工智能研究院助理教授、本班计概C课程的主讲老师马郓立即抓住了大语言模型的这种优势,带领其助教团队,将计概C的教学与ChatGPT结合,利用它丰厚的知识储备与出色的问答能力,开发出了一款专用于解决计概C课程代码问题的“赛博助教”。可以说,赛博助教的诞生,是现实需求和时代际遇的交汇。



如其名字一般简单直接,赛博助教的使用十分便捷:只需将OpenJudge平台上程序提交记录网页的URL粘贴到输入框中,再点击任意功能按钮,便能获得相应的回复。


代码有问题、出现“Wrong Answer”?

点“修Bug”一键解决错误。


这段为什么这样写?

点“解释并添加注释”详细获知每条语句的功能。


想学点新知识、换种做题思路?

点“换种写法”解锁更巧妙的解题方法。


这些巧妙的功能大大省去了询问大语言模型(如ChatGPT)时编写prompt的烦恼。Prompt,也就是向大语言模型输入的“提示词”,是获得理想回答的关键。与人类对他人信息的处理不同,大语言模型难以关联相关语境来补充理解用户的提问。在模糊问题面前,它往往无法直接给出令人满意的答案。因此,设计prompt成为大语言模型应用领域的研究重点。赛博助教的研发正是从此处着手,帮助同学们设计合适的提示词,从而让赛博助教更像一个“真人”。


“`我想让你在学校担任助教,向初学者教授《计算概论》。你将使用 Python 编程语言为学生们提交的错误代码展开答疑、改正。请使用中文(简体)做出所有回答。你的所有回答将会被以 Markdown 形式渲染,所以对于代码块,你必须使用 Markdown 语法包裹。\n\n问题描述:${problem}\n\n错误信息:${data.error}\n\n代码:${data.code}`”


这就是赛博助教程序中发送给ChatGPT的提示词,“担任助教”、“初学者”、“Python编程语言”等关键词给大语言模型提供了一个准确、严谨的互动情境,让同学们能够更高效地与它交流。


与其说赛博助教是一个新的工具,不如说它更像是一剂催化剂——降低了凝结着人类智慧的大语言模型与代码学习者之间交流的壁垒,让人工智能更像人、更智能,给同学们的学习与助教的工作带来极大便利。然而,新工具的出现,也必将把许多新的问题带到阳光下审视,即便是一个小小的课程学习助手,也在折射着这个时代无法回避的命题:机器面前,人将如何安置自身?


“Accepted” or “Wrong Answer”?


作为编程时的得力助手,赛博助教能准确识别学生代码中的细节错误,尤其是初学者易忽视的拼写错误、令人困扰的中英文符号混用问题,以及语句缩进和末尾符号等格式问题。这不仅省去了反复检查的时间,还能帮助同学们查漏补缺,助力代码顺利通过测试,点亮“Accepted”的绿灯。


然而,随着题目难度逐渐增加,在复杂问题面前,赛博助教的表现便不那么尽如人意了。面对多样化的条件与微妙的边界情况,大语言模型往往难以进行逻辑推理(reasoning)、生成环环相扣的思维链,难以得出有效的解决方案。


一只八哥鸟看到马路上行驶的汽车能压碎坚硬的物品,便联想到如果将松子放在那里等待汽车碾碎,就能使它露出果仁,这就是所谓的逻辑推理,很多生物体都具备这样的推理能力。但现有的通过大数据训练大模型所得到的人工智能却难以完成这样的思维迁移,或许可以说,在某种程度上坐拥人类海量知识的人工智能在解决实际问题时可能还不如一只八哥鸟聪明。在复杂的代码问题前,它有时甚至无法完全理解题目的含义,更别提有条理、有逻辑地拆解问题了。


同时,尽管对prompt做了精心的设计,在面对学生各式各样的代码时,赛博助教依然无法避免“错误放大器”的负面作用。作为一种普遍的局限,它使大语言模型通常无法对信息的正误做出判断,容易在外界的反复确认下对事实产生错误认知。


例如说,人人都知道世界上最高的山峰是珠穆朗玛峰,这是不容更改的真理,然而当人们多次告诉ChatGPT它是世界第二高峰后,ChatGPT便会认可这个观点,甚至在其上“做起文章”。因此,面对来自学生可能蕴含着错误的代码,赛博助教也难免像一片飘荡的叶片,被卷入错误的漩涡。


赛博助教“善解人意”吗?




“只需将URL粘入框中,点击‘修Bug’,便会输出一串结果,非常高效便捷。”黄洪(化名)同学对赛博助教使用的便利性深有感触,相比通用的大语言模型所需的复杂指令和反复沟通,赛博助教“粘贴即解”的独特设计,为许多学生提供了便利,越来越成为同学们第一时间的求助对象。


一次,在判断“输入的三条线段能否构成三角形”时,黄洪一下就想到利用选择结构来判断三边所应满足的条件,快速敲下5行代码,心想这次一定能顺利通过。然而,出乎他意料的是,这段代码竟依然存在“Compile Error”(编译错误),他只得再次逐行检查,变量、缩进、语法规则,无所缺漏,最终不禁怀疑起自己来:“难道是我和代码八字不合?”


百思不得其解,他想到了赛博助教,或许它能为自己指点迷津。选中、复制再粘贴,短短几秒,赛博助教的反馈浮现在屏幕上:“if语句后面必须加一个冒号来表示条件语句的开始”。一瞬间,他恍然大悟,原来是漏了那关键的冒号,又一拍脑袋,感叹自己竟没能看出如此明显的错误。终于,代码顺利运行,望着屏幕上漂亮的输出结果,黄洪感到如释重负。


回忆起这次使用赛博助教的经历,他分享道:“赛博助教的使用好像一个‘记忆机制’,以后写if语句,我总会记得在后面加上一个冒号。”



除了帮同学们加深处理细节时的印象,赛博助教还能为理解新知铺垫基础。“一次做练习的时候,赛博助教使用了一个名为set()的函数。我一开始有点懵,因为印象里老师并没有讲过这个,”高凯旋(化名)同学分享道,“不过它解释得还挺清楚,说这个函数可以用来查重,还能用来创建集合。”


在题目中她需要对N个随机数进行去重,然而她所使用的循环方法可能导致索引数值过大,使对应列表中的元素“爆表”,引向“Runtime Error”(运行错误)。据此,赛博助教给出了set()函数,呈现了一种更简单高效的办法,它能通过集合的唯一性,自动删去重复的元素。


在提及此后自己对set()函数的掌握时,高凯旋补充道:“后来课上讲到了这个函数,因为之前有过赛博助教的指导,我已经使用得比较熟练了,有一种提前‘解锁新技能’的感觉。”说着,她不由露出了笑容。



这些与赛博助教的积极互动,正是赛博助教对学生学习的一种助推力。对于初学者来说,赛博助教既是一台细致的错误检查器,又是一位热心讨论、启发新知的好友。


然而,便利之外,学生在使用它的过程中也经历着无奈与“崩溃”的瞬间。它们的出现并非偶然,而呈现出一些共同的特点。


一些时候,赛博助教是个太过惜字如金的医生,同学们很难与之进行真正意义上的“对话”,可谓“哑巴做计概,有惑问不出”。它对于错误的描述并不精确与深入。它只会给出一句“存在逻辑问题”,却不肯细究问题出在哪一步,如同医生只告诉你“有病”,却不告知你具体病症或治疗方法。面对如此“简明扼要”的诊断,学生们只能摸着石头过河,甚至为找出错误所在耗尽耐心。李南陆同学直言:“赛博助教只指出问题,却没法帮我一步步分析,感觉像是在让我解决一个‘看不见的敌人’。”


而赛博助教更不是无所不知的全能生,也常在困难问题面前乱了阵脚。一道经典的“约瑟夫问题”(见下图)绊住了一众学生,也将赛博助教拒之门外。所谓“约瑟夫问题”,简而言之,便是一群猴子排排站,每一轮站在某个特殊位置的猴子会被淘汰,依次类推,题目便要求找出最后剩下的猴子编号。在代码中,每轮都可能有猴子被解题者安排错位置或被数漏,解题者往往还会因为没搞清楚“从哪里开始数”或者“数到最后怎么办”,或是陷入死循环,或是获得一个无比奇怪的结果,最终恨不得自己也变成“猴子”:“我让赛博助教debug,结果17次出错!它就在两个错误版本里来回横跳,完全不对,我只能去问人类助教。”



最终,来自助教学长学姐的耐心解答,总是同学们最坚实的后盾,帮助他们解开谜团,指明方向。即使赛博助教在一定程度上填补了大语言模型与人类沟通的沟壑,但终究不如真实人类之间的交流那样畅通无阻,也不能使编程的学习从此高枕无忧。赛博助教真的“善解人意”吗?或许这个问号得暂且保留。


搭建自己的船舶,离港远航


保持开放的态度,积极拥抱技术发展带来的新变化,正是马郓老师在ChatGPT问世之初就利用它开发赛博助教并引入教学的初衷。同时,马老师也坚持,作为使用技术的人,必须培养起相应的综合素质与技能,才能用好代表新质生产力的工具,创造有益的成果。


具体怎么做?马老师坚定地说,“一直在探索”。


引入赛博助教便意味着面临学生产生依赖、不再自己思考的风险。对此,马老师展开了一场试验。在2023年秋季学期,他在第一节课上便将赛博助教作为实用又新奇的助手介绍给同学,并手把手讲授使用它的方法。到了2024年秋季学期,马老师则在讲完了基础语句、基本程序结构等基本知识后才将赛博助教引入,此时的时间已接近期中。


两种不同的尝试,带来了学生表现的明显差异。在2023年秋季学期的期中自测中,结果并不理想。许多同学一题也没有做对,只能在考后纷纷后悔,感到自己不该对赛博助教如此依赖,以至连编程的基本技能都没能掌握。而到了2024年秋季学期,针对相同的期中自测题目,每人平均都能做出两道题。“从完成题目数量的分布上来看,基础这部分打牢了。”马老师欣慰地说道。


适当推迟赛博助教的引入时机,有利于巩固学生对基础的掌握,使赛博助教更好地发挥作用,这是马老师通过实践总结出的经验。正如同赛博助教页面上的寄语所写:“A ship in harbor is safe. But that is not what ships are built for. ”他不仅希望赛博助教能为学生带去学习上的帮助,更希望学生在问题面前保持独立思考的能力,建造自己的航船,启程远航。


而如果说赛博助教的引入只是出征的号角,对大语言模型的推介与讲授,更是一场充满挑战的探险。


面对2024秋季学期计概C课程的教学变革:30%的课时需要涉及人工智能,10%的总成绩将用于评定学生使用人工智能完成大作业的情况,马老师激动地说:“这是个新课题,整个教学组都在探索,是很大的变革。”


在课程设计上,他将有关大语言模型的新板块放到了学期的最后几周,详细地讲解了大语言模型背后的原理、使用技巧、局限与应对的方法,特别以赛博助教为例,阐释赛博助教的工作原理与开发过程。在马老师看来,学生只有理解了人工智能背后的工作原理,才能从根本上认识到新技术的优势与缺陷、能力的范围与边界,从而采取合适的态度去运用人工智能。最终,他说道,“其实人人都可以把赛博助教开发出来,大家都可以开发满足自己需求的各种助手。”学以致用,在掌握原理与方法后自主创造,正是马老师对学生们的期望。



在基础的编程教学中也是如此。马老师在谈到文件读取的操作时说到,从文本中读取内容有readline()与readlines()两种方法,前者是从文件中一行一行读取内容,后者则是将所有内容一次性读取。乍看之下,这样的差别似乎无关紧要,却涉及了对计算机外存与内存性质的深入理解。


内存的速度快,但容量有限;外存速度慢,容量却可以很大。计算机程序的运行都在内存之中,因此它总需要先从外存将数据读入内存,才能进行后续操作。当文件大小为8GB,而内存只有4GB时,readlines()语句便失去了效力,应该使用readline()逐行读取。可若文件很小,例如只有1MB时,使用readline()的效率则反而不如readlines()高了。


因此,面对多变的实际情况,学生需要懂得背后的原理才能灵活地运用知识,才能在人机交互中与机器协同合作、共克难关。死记硬背的方法,或是一成不变的套路与模板已然不再适用,解锁新局的钥匙藏在更深的原理、规律,以及激发创造的思想与洞见之中。


面对AI带来的更高挑战,马老师不断思考着对学生培养的新要求。而最终,一切思考都指向对更本质的概念的叩问——何谓“学习”?何谓“学会”?人工智能为人的生活带来了前所未有的冲击,却也提供了全新的坐标体系,此前有关人之为人的定义都等待着一场更加深入的探寻。


什么叫做解决困惑?怎样才是真正的掌握?师者如何言传身教、立德树人?这些问题都没有简单的答案,却推动着人们不断去思考,不断去探求事物背后的真谛。而人之为人不可替代的价值也恰在不懈的追求中得到体现。


马老师的探索已然卓有成就,而他依然一往直前,“这些经验仍是当前的认知,后续定会变化,而我们会随着这个认识不断地运用,不断地结合,不断地改进。


人工智能时代下人还有必要继续学习吗?马老师的回答永远是肯定的,人始终是启发思想、判断价值的意义赋予者,是持续思考、能动创造的创新自主者。在大语言模型的风潮之中,如同赛博助教这般的新工具如雨后春笋,涌入于视野,活跃在指尖。人们劈开这春笋,把笋壳丢给思维的火焰,在其照耀下,看清代码纤毫;也含下笋芯,在其滋养中,渐成挺拔竹竿,屹立于破石青山。


“仿生人会梦到电子羊吗?”今天的我们得以窥见,正是我们为人工智能注入了新的活力、新的意义、新的梦想。许多年后,当我们回望这一刻会发现,赛博助教获得“Accepted”不是终点,而是人类认知边界不断拓展的全新起点。

【责任编辑:曹竞  编辑:毕若旭】
合作伙伴

北京中青在线网络信息技术有限公司版权所有 声明:本网站内容未经书面授权不得转载与镜像
中青在线、中国青年报地址 Add:北京市朝阳区东三环北路19号中青大厦 邮编 P.C. 100020