第二十四章 解释
第一条解释生成出来的时候,林知行盯着屏幕看了半分钟。
那是一条英语课的排课结果:"王老师被安排在周三上午第一二节,因为周三上午王老师无其他课程,且城北校区距其住所最近(3.2公里)。"
语法没问题。信息也对。但他总觉得哪里不对劲。
他把"3.2公里"删掉了。太精确了。一个老师看到系统算出了自己家到学校的精确距离,第一反应不会是"系统好聪明",而是"系统怎么知道我家在哪"。
他改成"距离校区较近"。
然后他又看了一遍,把"因为"改成了"原因:",句式更正式一点。再看一遍,把"王老师无其他课程"改成"该时段无其他课程安排",主语从人变成了时间段,语气就没那么生硬了。
这一条解释改了四遍,花了十二分钟。
开发AI解释层的难度,跟之前做排课算法完全不是一个量级。
算法部分是硬骨头——约束变量的传播、冲突检测、回溯搜索,每一行代码都涉及数据结构和计算逻辑的取舍。林知行花了两周才把demo跑通,其中五天是在跟真实的教师数据死磕。
但解释层不是算法问题,是翻译问题。
排课算法做决策的时候,背后是一堆约束条件的权重比较。比如某位老师被安排在周三上午,可能是因为:一、该时段没有其他课程冲突;二、该老师的资质适合这门课;三、该校区离老师家最近;四、该时段教室资源有空余。四个约束同时满足,权重叠加,算法输出了"周三上午"这个结果。
但你不能把四个约束原封不动地告诉用户。用户不想看权重矩阵,他们只想要一句话:为什么是我?为什么是这个时间?
林知行写了一个翻译模块。核心逻辑很简单——从约束条件中提取"主要因素",按照用户能理解的语言组织成句子。他设了三条规则:第一条,只展示对结果影响最大的两到三个约束;第二条,不用技术术语,用日常语言;第三条,加上具体的数值或事实作为支撑,让解释有"锚点"。
第一版做出来的时候,生成的解释很机械。比如:"李老师被安排在周一第一节,因为约束1满足且约束3满足。"
约束1是什么?约束3是什么?用户看不懂。
他改了一版,把约束编号替换成具体描述:"李老师被安排在周一第一节,因为该时段空闲且李老师具有该科目授课资质。"
好了一些,但还是干巴巴的。像机器写的。
他想起姜意在报告里说的那句话——"用户按场景和情绪思考"。
场景和情绪。
他又改了一版:"李老师被安排在周一第一节。原因:周一上午李老师没有其他课程,且她是该校区唯一的物理老师。"
语气柔和了,信息也更具体。但这还是在描述约束条件,没有"场景感"。
他盯着屏幕想了很久,最后做了一个决定:给每类约束条件配一个"解释模板"。
时间冲突类的模板:"XX老师在该时段没有其他课程安排。"
资质匹配类的模板:"XX老师持有XX科目的授课资质。"
距离类的模板:"XX校区距XX老师的住所较近。"
校区需求类的模板:"XX校区在该时段缺少XX科目的任课老师。"
然后用模板组合生成完整的解释。这样既保证了信息准确,又避免了解释过于机械或过于精确的问题。
模板的措辞他也调了好几遍。"持有授课资质"太正式,改成"擅长该科目"。"缺少任课老师"太负面,改成"需要安排该科目课程"。每一个措辞都在"准确"和"让人舒服"之间找平衡。
第三天晚上,方小满从外面回来,看到林知行坐在电脑前一动不动,屏幕上是一长串排课结果,每条结果旁边都跟着一行灰色小字。
"这是什么?"方小满凑过来看。
"解释功能。"林知行说,"每条排课结果旁边加一条说明,告诉用户系统为什么这么排。"
方小满读了几条:"赵老师被安排在周四下午第三四节,因为周四下午赵老师没有其他课程,且城南校区需要安排数学课……这不就是把算法的逻辑翻译成人话吗?"
"差不多。"林知行说。
"这有什么用?"方小满问。
林知行转过椅子,看着他:"你还记得排课系统刚上线的时候,有三个校区的老师集体投诉吗?"
"记得啊,那会儿你和我连夜去道歉来着。"
"当时我们以为问题是数据不完整——三个校区的教师健康信息没录进去,导致怀孕的老师被排了满课。"林知行说,"但后来我复盘了一下,就算数据是完整的,就算排课结果是对的,老师还是会打电话来问'为什么这么排'。"
"因为不信任呗。"方小满说。
"对。"林知行指了指屏幕,"这个功能就是解决信任问题的。老师看到结果,同时看到解释,就知道系统是'想过的',不是随机分配的。"
方小满想了想:"那你打算什么时候上线?"
"明天先推一个校区试一下。"林知行说,"我让刘主管选一个反馈最差的校区,看解释功能能不能把投诉率压下去。"
方小满点点头:"行。那我去跟刘主管说。"
他转身要走,又回头看了一眼屏幕:"那个灰色小字能不能换个颜色?灰色太淡了,年纪大的老师可能看不清。"
林知行愣了一下,然后说:"改成深灰。"
方小满笑了一下,走了。
刘主管选了城西校区。
选它的原因很直接——这个校区投诉最多。排课系统上线两个月,城西校区一共收到了十一条教师投诉,其中七条的表述都是"看不懂为什么这么排"。
林知行把解释功能推到了城西校区的后台,然后在宿舍等反馈。
等了两天,没有投诉。
第三天,刘主管打来电话。
"小林,城西那边这两天一条投诉都没有。"刘主管的声音听起来有点奇怪,像是在忍着什么。
"嗯。"林知行说。
"你知道以前是什么频率吗?"刘主管说,"平均一天一条。"
林知行握着手机,没说话。
"我今天下午去城西转了一圈,"刘主管继续说,"正好赶上数学组的老师在看新课表。我站在门口听了十分钟。"
"听到了什么?"
"一个老师说,'这次排的还行,起码知道为什么这么排了。'另一个老师说,'这个系统总算不是瞎排的了。'"刘主管顿了一下,"你知道'总算不是瞎排的了'这句话意味着什么吗?"
林知行知道。
意味着信任。
"还有,"刘主管说,"有个老师专门找到了解释里的那句话——'城西校区需要安排数学课程'——她说这说明系统知道她们校区缺数学老师,这让她觉得系统'懂行'。"
林知行没想到一个措辞上的选择会产生这种效果。
"我准备把这个功能推广到全部校区。"刘主管说,"你那边方便吗?"
"方便。"林知行说,"我今天就推。"
挂了电话,林知行在宿舍里坐了一会儿。
他打开后台数据面板,拉出城西校区上线解释功能前后的对比数据。教师对排课结果的接受率——以"未提出修改请求"为指标——从65%跳到了91%。
两天时间,二十多个百分点的提升。
而他做的只是在每条结果旁边加了一行灰色小字。
全部校区上线后,数据比城西试点还要好。
一周之内,三十七个校区的平均教师接受率从65%上升到92%。刘主管在工作群里发了一条消息:"本周零投诉,排课系统解释功能效果显著。"
张老板当天下午就打来了电话。
"小林。"张老板的声音里压着一股劲,像是想笑但忍着,"你知道这个功能值多少钱吗?"
林知行不知道。
"我们之前请的第二家公司,"张老板说,"做了半年,花了二十多万,排课核心功能还没跑通。你这个解释功能,我猜你花了不到五天?"
"四天。"林知行说。
"四天。"张老板重复了一遍,"小林,我跟你讲一个事。我昨天参加了一个教育行业的饭局,聊到了排课系统。有个校长问我,你们系统最大的优势是什么?我说,老师看得懂。"
林知行没接话。
"你知道那个校长怎么说?"张老板说,"他说,'老师看得懂'这五个字,比什么算法都值钱。"
林知行握着手机,心里涌上来一种很奇怪的感觉。不是骄傲,也不是得意,而是一种"对上了"的感觉——他做了一件对的事,而且是从一个他以前完全不会考虑的角度做的。
"张老板,"林知行说,"这个功能的启发来自一个做产品的朋友。"
"哦?"张老板说,"你还有做产品的朋友?"
"最近认识的。"林知行说。
"有机会介绍我认识认识。"张老板笑了,"能让你这种技术脑袋想到做解释功能的产品经理,不简单。"
林知行给姜意发了一条消息:"功能上线了,效果不错。谢谢。"
姜意的回复很快:"数据怎么样?"
"接受率从65%涨到92%。"林知行说,"一周零投诉。"
姜意发了一个"👍"。
然后她说:"别谢我,你欠我一顿饭。"
林知行打开手机银行看了一下余额——四百三十块。
他回:"学校食堂可以吗?"
姜意发了一个笑哭的表情。
"你认真的吗?"她问。
"认真的。"林知行说,"学校食堂二楼的麻辣烫不错,十五块钱能吃饱。"
姜意没有回复。
过了两分钟,她发来一条消息:"行。下周二中午。"
林知行盯着"下周二中午"五个字,忽然觉得这顿饭好像比那个AI解释功能更让他紧张。
那天晚上,林知行在技术社区发了一篇帖子。
标题是《AI应用的"解释层"——让用户信任AI的第一步》。
帖子不长,三千多字。他没有堆砌技术细节,而是从一个真实的问题切入:"你的AI应用做出了一条正确的推荐/决策/排课结果,但用户不信。为什么?"
然后他讲了排课系统的案例。从上线后的教师投诉,到姜意的用户调研报告,到解释功能的设计思路和上线效果。他把接受率的变化曲线贴了上去——65%到92%,一周时间。
在帖子里,他引用了姜意的一句话:"信任不是靠正确性建立的,是靠可解释性建立的。"
他没有点名,只写了一句:"这个想法来自一个做产品的朋友。"
帖子发出去的时候是晚上十一点。他关了电脑,上床睡觉。
第二天早上醒来,手机上多了几十条通知。
帖子被三个行业大V转发了。其中一个是有十五万粉丝的产品经理博主,转发评论是:"终于有技术人意识到可解释性的重要性了。这不是锦上添花,是雪中送炭。"
评论区里吵得很热闹。有人说"可解释AI是学术概念,落地没那么简单",有人说"这不就是加个日志功能吗,有什么值得写文章的",还有人说"92%的接受率数据是怎么统计的?样本量多少?置信区间多少?"
林知行一一回复了。关于统计方法,他写了一段详细的说明:样本覆盖三十七个校区、一千一百余名教师,数据来源于系统的修改请求日志,"未提出修改请求"即视为"接受"。
他回复完最后一条评论,刷新了一下页面。
评论区最新的一条,来自一个ID叫"姜意"的用户。
没有文字,只有一个表情符号。
"👍"
林知行盯着那个大拇指看了几秒钟,然后合上了电脑。
窗外是五月的下午,阳光照在对面宿舍楼的墙上。方小满在上铺睡午觉,偶尔翻个身,床板发出吱嘎的声响。
林知行躺在床上,脑子里还在转。不是在转代码,也不是在转数据,而是在转一个问题:姜意说的那个"可解释AI",他现在做的只是最表层的一层——给排课结果加了一条文字说明。真正的可解释AI要做的事情远不止于此。如果把这个方向深挖下去,能不能做成一个更大的东西?
他翻了个身,拿起手机,打开备忘录,记下了一行字:
"可解释AI——排课系统只是起点。"
然后他放下手机,闭上眼睛。
该睡觉了。
明天还有很多代码要写。
(本章完)