Skip to content

第五章 答辩翻车

周三下午两点,教学楼四楼的机房。

林知行坐在第三排靠窗的位置,笔记本电脑打开,屏幕上是他的课程设计——一个基于AI的智能问答系统。界面很简陋,白底黑字,一个输入框,一个输出框,下面有个"提交"按钮。

方小满坐在他旁边,胳膊肘怼了他一下:"紧张不?"

"还行。"林知行说。

"还行是啥意思?"方小满压低声音,"你那系统能跑通吧?"

"能跑通。"林知行重复了一遍这句话,像是说给自己听。

他确实检查过。昨晚他又跑了一遍测试,输入了十几组问题,系统都能给出还算合理的回答。虽然回答的质量参差不齐,但至少不会报错。

答辩的规则很简单:每个同学上去演示自己的课程设计,然后老师提问。提问环节大概五分钟,答不上来就扣分。

林知行排在第七个。前面六个同学已经演示完了,有做图书管理系统的,有做学生选课系统的,有做简易计算器的。老师问的问题都很基础,什么"你这个数据库怎么设计的""这个功能的实现逻辑是什么""有没有考虑过异常情况"。

大部分同学答得磕磕绊绊,但老师也没太为难,点点头就过去了。

轮到林知行。

他站起来,走到讲台旁边的演示电脑前,把U盘插进去,打开自己的程序。

"我的课程设计是一个基于AI的智能问答系统。"他开口,声音有点干,"用户输入问题,系统会调用AI接口生成回答,并显示在界面上。"

他演示了一遍。输入"今天天气怎么样",系统返回"抱歉,我无法获取实时天气信息"。输入"1+1等于几",系统返回"1+1等于2"。输入"介绍一下你自己",系统返回"我是一个AI助手,可以回答各种问题"。

演示很顺利,系统没有报错。

林知行松了口气,看向讲台上的老师。

老师姓刘,五十出头,头发花白,戴一副金丝眼镜,是计算机系的老教授。他教了二十多年数据结构和算法,对学生的要求一直很严格。

刘老师没说话,只是看着屏幕,手指在桌上轻轻敲着。

"你这个AI接口,是怎么调用的?"他问。

林知行答:"用Python的requests库,向AI的API发送请求,然后解析返回的JSON数据。"

"请求参数怎么构造的?"

"把用户输入的问题作为参数,传给API的对话接口。"

"返回的数据怎么处理的?"

"解析JSON,提取回答文本,显示在界面上。"

刘老师点了点头,没说好也没说不好。

"你这个系统,有没有考虑过输入为空的情况?"

林知行愣了一下。输入为空?他好像没测试过这个。

"我……我可以试一下。"他说。

他把输入框清空,点了一下"提交"。

屏幕卡了一下,然后弹出一个错误提示:AttributeError: 'NoneType' object has no attribute 'strip'。

林知行的脸瞬间涨红了。

"这是什么错误?"刘老师问。

林知行盯着屏幕,脑子里飞速运转。AttributeError,意思是NoneType没有strip属性。也就是说,当他输入为空的时候,某个变量变成了None,然后他试图对这个None调用strip方法,所以报错了。

"是……是空值处理的问题。"他说,"我没想到用户会输入空值。"

"没想到?"刘老师的语气没什么起伏,"一个问答系统,你不考虑用户输入为空的情况?"

林知行没接话。

"再试一个。"刘老师说,"输入一个很长的问题,超过500个字符。"

林知行的手指在键盘上敲着,复制粘贴了一段很长的文本进去,点"提交"。

屏幕又卡了一下,然后又弹出一个错误提示:ConnectionError: API request timed out.

"这又是什么?"刘老师问。

"是……是请求超时。"林知行的声音越来越小,"输入太长,AI处理时间太长,超过了默认的超时时间。"

"你有没有设置超时时间?"

"没有。"

"有没有做异常捕获?"

"没有。"

刘老师没再问。他站起来,走到林知行旁边,看着屏幕。

"你这个系统,"他说,"看起来能跑,但经不起测。"

林知行没接话。他的脸还在发烫,手指攥着鼠标,指节发白。

"你知道为什么吗?"刘老师问。

林知行摇头。

"因为你只学了怎么调用AI,没学怎么写程序。"刘老师的声音不大,但每个字都清清楚楚,"AI能帮你生成回答,但不能帮你处理异常。AI能帮你完成任务,但不能帮你写出健壮的代码。"

他顿了一下,说:"工具谁都会用,但你连基本功都没有。"

教室里很安静。

林知行站在那里,脸涨得通红,耳朵嗡嗡响。他想说什么,但张不开嘴。他想解释,但不知道怎么解释。

"坐下吧。"刘老师说。

林知行走回座位,坐下,把笔记本电脑合上。

方小满在旁边戳了他一下,他没反应。

接下来的答辩他一个字都没听进去。脑子里一直在转那句话:工具谁都会用,但你连基本功都没有。

基本功。

什么是基本功?

是异常处理?是边界条件?是代码的健壮性?

还是说,是他这个人本身就没有基本功?

他想起自己用AI完成课程设计的那个晚上。凌晨三点,系统跑通,他兴奋得睡不着。他觉得自己找到了一条捷径,一条不用写太多代码就能完成任务的捷径。

但他没想过,这条捷径的尽头是什么。

是答辩现场的两个错误提示。

是老师的一句话。

是他的脸涨得通红。

五点半,答辩结束。同学们陆续离开机房,三三两两地聊着天。

林知行还坐在位置上没动。方小满在旁边等他,没说话。

"走吧。"林知行终于开口,声音有点哑。

两人走出机房,沿着走廊往楼梯口走。走廊里人不多,大部分同学已经走了。

方小满突然开口:"那老师说得不对。"

林知行没接话。

"他凭什么那么说?"方小满的声音有点大,"工具谁都会用?他用过吗?他会用ChatGPT吗?他知道怎么跟AI对话吗?"

林知行停下脚步。

"他连ChatGPT都没用过吧?"方小满继续说,"凭什么说工具谁都会用?"

"小满。"林知行叫了他一声。

"干嘛?"

"他说得对。"

方小满愣住了。

"他说得对。"林知行重复了一遍,"我没有基本功。"

"你……"

"我只会用AI,不会写程序。"林知行说,"我连输入为空都没想过,连超时处理都没做。这不叫基本功,这叫偷懒。"

方小满张了张嘴,想说什么,但没说出来。

两人站在走廊里,夕阳从窗户照进来,把影子拉得很长。

"走吧。"林知行说,"回宿舍。"

两人继续往前走,没再说话。

回到宿舍,林知行把笔记本电脑放在桌上,打开,盯着屏幕上的代码看了很久。

代码是他用AI生成的,然后他稍微改了改,就交上去了。他没仔细看过每一行代码,没想过每个函数的边界条件,没测试过各种异常情况。

他只是觉得,系统能跑,就行了。

但现在他知道了,能跑和写得好是两回事。

能跑,只是最低要求。

写得好,才是基本功。

方小满在旁边坐下,看着他。

"你别想太多。"他说,"答辩过了就行,分数又不重要。"

林知行没接话。

"而且你那个系统确实能跑啊,"方小满继续说,"大部分同学的系统还跑不通呢。你比他们强多了。"

"比他们强有什么用?"林知行说。

方小满愣了一下。

"比他们强,不代表我自己强。"林知行说,"我只是用了AI,他们没用而已。如果他们也用AI,可能比我做得更好。"

方小满没接话。

林知行关掉电脑,靠在椅背上,看着天花板。

天花板是白色的,日光灯管嵌在里面,发出嗡嗡的声音。和图书馆的天花板一样。

他想起昨天在图书馆赚到450块的那个下午。他觉得自己找到了一条路,一条用AI赚钱的路。

但现在他发现,这条路没那么好走。

他会用AI,但不会写程序。

他会拆解任务,但不会处理细节。

他能找到捷径,但捷径的尽头可能是悬崖。

"小满。"他突然开口。

"嗯?"

"你说,我是不是真的不行?"

方小满看着他,没说话。

"我是说,"林知行顿了一下,"我是不是真的没有基本功?"

方小满沉默了一会儿,说:"我不知道。"

林知行点了点头。

"但我知道一件事。"方小满说。

"什么?"

"你比大部分人都聪明。"方小满说,"你只是还没学会怎么用你的聪明。"

林知行看着他,没接话。

方小满站起来,拍了拍他的肩膀。

"别想了,去吃饭。"他说,"饿死了。"

林知行没动。

"走啊。"方小满催促。

林知行站起来,跟着他往外走。

走到门口的时候,他回头看了一眼桌上的笔记本电脑。

屏幕上还亮着,代码编辑器的光标在闪。

他转过头,关上门,跟着方小满往食堂走。

夕阳已经落下去了,天边还剩一点橘红色的光。路灯亮起来,照出两人的影子。

林知行走在方小满后面,脑子里还在转那句话。

工具谁都会用,但你连基本功都没有。

他不知道这句话会在他脑子里转多久。

但他知道,从今天开始,他得学点真东西了。