第八章 第一单
方小满带回消息的时候,林知行正在宿舍里看一段Python的教学视频。
"谈成了。"方小满把钥匙扔在桌上,一屁股坐到林知行床边,"张老板说可以试试,让你下周去演示。"
林知行暂停了视频。
"他怎么说的?"
"他说,'小方啊,你那个朋友要是真能把AI搞进我的题库里,我请你们吃饭。'"方小满学着张老板的语气,带点本地口音,"但他说了,先看效果,效果好了再说合作的事。"
"那就是免费做。"
"废话,你第一天接活?"方小满从口袋里摸出一包烟,抽出一根点上,"第一个客户,不免费谁理你?"
林知行没说话。他知道这个逻辑,但真轮到自己头上,还是有点不舒服。
"他具体要什么?"
方小满吐了一口烟。"智能题库。他说他们机构现在出题全靠老师手动,每次考试前几个老师轮流出题,质量参差不齐。他想搞个系统,输入知识点,自动生成题目。"
"什么学科?"
"初高中数学。"
林知行点了点头。数学,他最熟的学科之一。公式、定理、解题步骤,这些东西在他脑子里有清晰的结构。
"什么时候去演示?"
"下周三。"
林知行看了一眼手机。今天周五。
五天。
他把视频关掉,打开浏览器,开始搜"AI生成数学题"。
方小满走后,林知行把宿舍门反锁了。
他需要五天,但他打算用三天做完demo,剩下两天用来测试和修bug。
这个节奏他熟。上次帮淘宝卖家写文案,也是一个下午搞定,剩下的时间用来微调。区别在于,那次是一百条文案,这次是一个完整的系统。
他打开电脑,新建了一个文档,开始拆解需求。
第一层:用户输入。
用户输入什么?知识点。比如"一元二次方程""三角函数""概率统计"。
第二层:题目生成。
AI根据知识点生成题目。这一步他可以用ChatGPT的API,让它根据prompt生成数学题。
第三层:答案生成。
每道题需要配套的答案和解题过程。
第四层:难度分级。
题目要有难度区分,简单、中等、困难。
四层。他把这四层画在纸上,像画一棵树的分支。每一层都是一个子问题,每个子问题可以独立解决,最后再组装起来。
复杂度不高。O(n),线性的。
他松了一口气。
第一天晚上,他搞定了用户输入界面。用HTML和CSS写了一个简单的网页,一个输入框,一个按钮,一个显示区域。样式很丑,但能用。
第二天,他开始接入ChatGPT的API。这一步他最熟,上次帮淘宝卖家写文案就是这么干的。他写了一个prompt,让AI根据输入的知识点生成五道选择题,每道题四个选项,附带正确答案和解题过程。
试了一下,能跑。
他输入"一元二次方程",AI生成了五道题。他看了看,题目是对的,答案也是对的。
他又输入"三角函数",生成的题目也没问题。
他继续试了几个知识点,效果都不错。
第三天,他加上了难度分级。简单题直接生成,中等题加入干扰项,困难题加入多个知识点的交叉。然后他开始整理界面,把显示区域做得好看一点,加上题号、选项的排版、答案的折叠显示。
下午三点,demo基本成型。
他测试了一遍,输入"概率统计",系统生成了五道题,题目、选项、答案都对。他复制下来,发给方小满看。
方小满回了一条语音:"牛逼。"
林知行盯着屏幕,心跳比平时快了一点。
三天。从零到一。一个完整的demo。
他靠在椅背上,摘下眼镜揉了揉眼睛。窗外的天已经暗了,路灯亮起来。他看了一眼时间,晚上七点多。
还有两天时间测试。
他重新戴上眼镜,开始测试各种边界情况。输入为空,系统返回什么?输入超长,会不会卡死?输入一个不存在的知识点,比如"量子力学",会怎样?
前两个问题他处理了,加了错误提示。第三个问题,他让AI返回"暂不支持该知识点"。
看起来没问题。
他又测了几个学科的知识点,数学的、物理的、化学的,效果都还行。
晚上十一点,他终于停下来。三天的高强度编码让他眼睛酸涩,脖子僵硬。他站起来伸了个懒腰,听到自己的脊椎咔咔响。
方小满已经睡了,打鼾的声音很有节奏。
林知行走到窗边,推开窗户。夜风灌进来,带着深秋的凉意。楼下路灯照着空荡荡的篮球场,远处是学校围墙外的居民楼,零星几扇窗户还亮着灯。
他想起方小满说的那句话:这事能成。
也许吧。
周三下午两点,方小满带着林知行走进了蓝天教育的办公楼。
说是办公楼,其实是一栋三层的旧商铺改装的。一楼是前台和咨询区,二楼是教室,三楼是办公室和仓库。楼梯很窄,墙壁上的涂料有点发黄,但每层楼都打扫得很干净。
张老板在三楼的办公室等他们。
他五十出头,头发花白,戴着一副金边眼镜,穿着一件深蓝色的polo衫。办公桌上摆着一盆绿萝,墙上挂着几面锦旗,都是学生家长送的。
"小方,这就是你说的那个朋友?"张老板站起来,笑着伸出手。
"张叔,这是我同学林知行。"方小满介绍道,"AI这块,他比我懂。"
林知行握了握张老板的手。手心有点粗糙,是那种长期握粉笔的手。
"张总好。"
"坐坐坐。"张老板招呼他们坐下,自己也坐回椅子上,"小方跟我说了,你们想帮我搞个智能题库?"
"对。"林知行把笔记本电脑放在茶几上,打开demo的网页,"我做了一个简单的演示,您看看效果。"
张老板点点头,示意他继续。
林知行深吸了一口气。
"您看,这个系统很简单。您输入一个知识点,比如'一元二次方程',系统会自动生成五道选择题,每道题四个选项,附带正确答案和解题过程。"
他在输入框里打了"一元二次方程",点了生成按钮。
屏幕上很快出现了五道题。他把电脑转向张老板。
张老板弯下腰,仔细看了看题目。
第一题:已知方程x²-5x+6=0,求方程的两个根。 A. x₁=2, x₂=3 B. x₁=1, x₂=6 C. x₁=-2, x₂=-3 D. x₁=2, x₂=-3
第二题:若一元二次方程ax²+bx+c=0有两个相等的实数根,则判别式Δ=____。 A. Δ>0 B. Δ=0 C. Δ<0 D. Δ≥0
张老板看完前两题,点了点头。
"看起来不错。"
林知行的心跳加速了一点。他继续说:"您还可以选择难度等级,简单、中等、困难。"
"试试困难的。"
林知行把难度调到"困难",重新生成。
新的题目出现在屏幕上。
第三题:已知关于x的方程(m-1)x²+2mx+m+3=0有两个不相等的实数根,求m的取值范围。
林知行看着这道题,感觉哪里不对,但一时说不上来。
张老板盯着题目看了一会儿,眉头微微皱了起来。
"这个……"他指着题目,"这个题有问题。"
"什么问题?"林知行的心跳漏了一拍。
"你看,"张老板指着题目里的(m-1),"这里m-1不能等于0,否则就不是一元二次方程了。但题目没说m≠1的条件。"
林知行的脑子飞速转起来。
对。一元二次方程的定义是二次项系数不为零。题目里(m-1)是二次项系数,如果m=1,方程就变成一次方程了。但题目没提这个限制条件。
他写的prompt里,没有告诉AI这个前提。
"还有,"张老板指着最后一题,"你看这个。"
第四题:若方程x²-2x+k=0的两根x₁、x₂满足x₁²+x₂²=10,求k的值。
林知行看着这道题,心里咯噔了一下。
这道题的答案他能算出来,但他不确定AI生成的答案对不对。他看了一眼答案区域,AI给出的答案是k=3。
他心算了一下。
x₁²+x₂² = (x₁+x₂)² - 2x₁x₂
根据韦达定理,x₁+x₂=2,x₁x₂=k
所以 4 - 2k = 10,解得 k = -3
AI的答案是错的。
不是3,是-3。
林知行的手指在键盘上僵住了。
张老板抬起头,看着他。眼神没有嘲笑,没有失望,只有一种平静的审视。
"小林,"张老板说,"你这个想法是好的,AI生成题目,这个方向是对的。但你这个东西……"
他顿了一下。
"差火候。"
林知行的喉咙发紧。
"题目看起来像那么回事,但仔细一看,要么条件不完整,要么答案算错。这种东西拿给老师用,老师不敢用的。"
张老板的语气很温和,像是在跟学生讲题。但每一个字都像针一样扎在林知行的神经上。
"做教育,最重要的是准确。一道错题,可能会影响几十个学生的理解。AI可以帮老师省时间,但不能帮老师犯错。"
林知行盯着屏幕,一句话也说不出来。
方小满在旁边打圆场:"张叔,这只是个demo,后面还可以改。"
"我知道是demo,"张老板笑了笑,"我说的是方向。你们想做教育场景的AI,思路是对的。但做教育和做别的不一样,准确性是底线。你们回去再打磨打磨,如果能做到题目和答案都准确,我们再谈。"
林知行点了点头,把电脑合上。
"谢谢张总。"
"不客气,"张老板站起来,"小方是我看着长大的孩子,他带来的朋友,我信得过。但信得过归信得过,产品是产品。你们回去好好想想。"
方小满拉着林知行告辞了。
走出蓝天教育的办公楼,方小满一路上都在说话。
"没事,demo嘛,哪有一次就成功的。张老板人好,他说了'再打磨打磨',意思就是还有机会……"
林知行没听进去。
他满脑子都是那道题:k=3,还是k=-3?
AI算错了。
不,不是AI算错了。是他没有告诉AI要怎么算。
他把题目生成当成文本生成,以为只要输入知识点,AI就能自动生成正确的题目。但他忘了,数学题不是文本,是逻辑。每一道题都有前提条件,每一个答案都要经过严格的推导。
他只给了AI一个笼统的指令:"生成关于一元二次方程的数学题"。但没有告诉它:
二次项系数不能为零。
判别式的符号决定根的性质。
韦达定理的使用条件。
他把数学题当成了商品文案。
商品文案可以有错别字,可以有语法错误,只要大致意思对就行。但数学题不行。一个符号错了,整道题就废了。
林知行的脚踩在人行道上,步子越来越快,把方小满甩在后面。
"喂,你慢点!"方小满在后面喊。
林知行停下来,转身看着方小满。
"我得回去。"
"回哪?"
"宿舍。我得重做。"
方小满走上来,拍了拍他的肩膀。
"先吃饭,吃完饭再说。"
"不饿。"
"你中午就没吃。"
"我说了不饿。"林知行的声音比他预想的要硬。
方小满看着他,没再说话。
林知行转身走了。
回到宿舍,林知行把门反锁,坐在桌前,打开了电脑。
他盯着那个demo页面看了很久,然后把它最小化,打开了浏览器。
他开始搜"AI生成数学题的准确率"。
搜出来的结果不多,但有一篇论文引起了他的注意。论文标题是《基于大语言模型的数学题目生成与校验方法研究》,作者是清华的几个研究生。
他下载了论文,从头到尾读了一遍。
论文的核心观点是:大语言模型生成数学题时,容易出现两类错误——第一类是条件遗漏,比如一元二次方程没提二次项系数不为零;第二类是计算错误,比如用韦达定理时符号搞错。
解决方法是:在生成题目后,加入一个校验层。校验层会自动检查题目是否符合数学规则,答案是否正确。
校验层。
林知行的眼睛亮了。
他又搜了几篇相关的论文和开源项目,发现有人做过类似的系统。他们的做法是:先用AI生成题目,然后用一个规则引擎检查题目的合法性,再用一个计算引擎验证答案的正确性。
两层校验。
第一层是规则校验,检查题目是否符合数学定义和定理。
第二层是计算校验,把题目里的数值代入公式,重新算一遍答案,看是否和AI生成的答案一致。
林知行开始在纸上画流程图。
用户输入知识点 → AI生成题目 → 规则校验 → 计算校验 → 输出
如果校验不通过,就重新生成,或者丢弃那道题。
这个方案比他之前的demo复杂很多,但他觉得这才是正确的方向。
他开始写代码。
先写规则校验。他查了一元二次方程的定义,把所有前置条件都列出来:二次项系数不为零、判别式的符号决定根的性质、韦达定理的使用条件……
然后写计算校验。他用Python的sympy库,把题目里的方程解析出来,代入求根公式,计算出答案,和AI生成的答案对比。
这一写就是通宵。
凌晨四点,他终于把规则校验的框架搭好了。计算校验的部分还没写完,但已经能跑了。
他测试了一下,输入"一元二次方程",生成五道题。其中两道被规则校验拦截了,因为条件不完整。剩下三道通过了规则校验,进入计算校验。计算校验发现一道题的答案是错的,把它丢弃了。
最后输出两道题。
两道。
数量太少了。
但这两道题,他检查了一遍,题目是对的,答案也是对的。
林知行靠在椅背上,盯着屏幕。
窗外已经亮了。他看了一眼时间,早上六点十分。
方小满的床是空的,不知道什么时候出去的。
林知行站起来,走到窗边。阳光照在对面宿舍楼的墙上,反射出刺眼的白光。他眯了眯眼睛,感觉脑袋昏昏沉沉的,但心里比昨天踏实了一点。
他知道自己错在哪里了。
他把题目生成当成了文本生成,以为AI可以像写文案一样写数学题。但数学题不是文本,是逻辑。逻辑需要规则,规则需要校验,校验需要工具。
他之前只做了一层——生成。他缺了两层——规则校验和计算校验。
三层。完整的系统需要三层。
他在纸上写下三个字:
生成。校验。输出。
然后在"校验"下面画了一条线,写了两个小字:
准确。
这是教育场景的底线。
张老板说得对。做教育和做别的不一样。一道错题,可能会影响几十个学生的理解。AI可以帮老师省时间,但不能帮老师犯错。
林知行坐回电脑前,打开编辑器。
他还有很多工作要做。
但他知道方向了。
不是生成,是校验。