夜雨聆风学习资料网

ARTICLE · 1085397

AI 管审稿台账:改一处,另两处还挂着旧结论

AI 管审稿台账:改一处,另两处还挂着旧结论
匿名 · 电力电子方向在读博士 · IEEE 期刊审稿人

我用 AI 管一个自建的科研事务台账:投稿与审稿的邮件自动进库、自动判级、自动建卡、自动建待办。省事是真的省事,但它有一类失败特别隐蔽:一个判断改了,只有一处跟着变。

台账不会报错,也不会给你个红叉。它只会前后矛盾地继续跑:邮件已经归了档,审稿卡还写着"审稿中",催办事项照旧躺在首页到截止日。这篇把这类"改一处漏两处"的具体场景摊开,讲清让 AI 动台账时该写进要求里的那几条。

(与前面写过的邮箱合并那篇不同层:那篇管"同一封信进两次",这篇管"改完一个判断之后,谁还没跟上"。)

核心判断:让 AI 管台账,它可以替你执行改动,但"一个判断的完整影响面"必须你写在前面。写不全,它就会只改你指的那一处,而且不报错。

一、一个判断,会同时落在三处

台账里最典型的一次订正,是某封审稿邮件判错了档:编辑已经取消了这次审稿,机器却读成了"需要处理"。这一改,牵动三处。

落点
含义
漏改的后果
邮件记录
这封信是"高-需通知"还是"低-归档"
首页待办区一直挂着这条
审稿卡
这件事是"审稿中"还是"已取消"
截止日当天还在被催
待办事项
那条催办还在不在
用户面前多一条早该消失的事

只改邮件记录是最常见的一版:库里的级别对了,卡和待办还是旧的。用户看到的是"处理了,但没处理干净"。所以订正类操作的正确描述不是"把这封邮件改成低",而是"把这封邮件降级,同时把对应的卡置为已取消并清空截止日,再把关联待办置为已完成并留一行说明"。

还有一层更靠外:状态改进了数据,前端没跟上。 一个新的状态值要同时在三个地方被认出来,否则用户看到的还是旧的:
  1. 筛选按钮的候选列表里有没有这个状态;
  2. 状态徽章的配色表里有没有这一档;
  3. 所有"把这条算作待办"的统计和排除逻辑里,有没有把它排除掉。

这三处少任何一处,用户脑子里的台账和库里的台账就不是同一本。用户看不到的状态变更,等于没改。

二、改不中那一行,比没改更危险

AI 生成更新语句时,最顺手的写法是"拿邮件正文里抽出来的那个号当条件"。问题在于,邮件里的编号常带返修轮次后缀,而台账里存的是不带后缀的那个号。

拿什么定位
实际结果
邮件里抽出来的号(带轮次后缀)
命中 0 行,静默失败
台账自己的主键
命中 1 行,可断言
只凭"我改过了"的日志
无从判断,日志本来就写的是成功

多数数据库驱动不会因为"命中 0 行"而报错,它只是更新了零条记录。脚本照常打印"更新完成"。等几天后你发现状态没变,会以为是别的原因。

修法就两条,写进要求里就会生效:
  1. 所有跨表更新一律按台账自己的主键定位,不用邮件里抽来的外部号;
  2. 执行后断言影响行数恰好为 1,日志里打印的是真实行数,不是"成功"两个字。
三、AI 写匹配逻辑最爱漏的一支:空键

台账里有"还没有编号的占位卡"这种东西。它的关联键本来是空集,但如果代码在拼键列表时把它退化成含一个空字符串的列表,而判据又写成"任意一个键出现在文本里就算命中",那么空字符串命中一切,这张卡会关联到全库的每一封邮件。

实测下来,那张卡的关联记录数变成了全库邮件总数(1900 多封),而真实相关的只有 8 封。症状是它的时间线里塞满了别的期刊的邀请、感谢和决定信,看着像数据乱了,其实是判据的一支边界没堵。

边界输入
直觉结果
实际结果
键列表为空
命中 0 条
取决于是"空列表"还是"含空串的列表"
键列表 = 含一个空串
同上
命中全部记录

这类边界,AI 默认不会主动告诉你。要它自己说清楚:"列表为空、字符串为空、字段缺失这三种情况,分别会命中多少行。"

四、还有两条容易被忽略的约束

一是共享函数改一处,波及全库。 从邮件里抽标题、抽刊名、抽截止日的函数是全库共用的,改一个正则等于改 1900 多封邮件的解析结果。所以改完必须用旧版把全库跑一遍,逐条比"从有变无""从对变错",而且先判哪些差异是惰性的(那个字段本来就没人消费)。一次小修会顺手把十几条当时不显形的差异一起翻出来,其中还夹着一条回归。

二是每天必响的告警会淹掉真错误。 巡检报的每一类问题,先问一句"它会不会在正常库里每天都响"。会响的要么找到病根,要么降级成"只进报告、不进推送"。判据很简单:不产生任何显示后果的项,才配得上低一档;只要有显示后果,就必须留在告警里。之前有近一个月,晨报里天天挂着同一类元数据提醒,真正要人管的错误反而被埋在下面。

五、坑与边界
环节
要不要交给 AI
边界在哪
收信、抽字段、建卡、建待办
交
抽错要能被巡检抓出来,别只看建了几条
定义"一个判断的完整影响面"
人写
机器只执行你写下的那几条更新
按主键定位 + 校验影响行数
必须写进要求
不写它就只会打印"成功"
判级口径(什么算高优先)
人定
口径不能从库里的现状反推
改动后的验收
人核对
读回加看一眼页面,别信日志
几条真实踩过的:
  • 写接口返回成功,不等于落库成功。
     曾有第二条写入通道被废弃之后仍在被写:写接口一路返回成功,只有读接口才报错,于是"交办的事录进去了、页面上却没有"持续了好几天。凡写入口都要有"写后读回"这一步。
  • 改规则前,先证明你的自测抓得住旧 bug。
     回归用例一套 21 条,新版本 21/21 全过;把上一版模块载进来再跑一遍,如果不合格的比例很低,说明这套用例根本没覆盖那个病。只跑新版本的"全过"没有信息量。
  • 批量订正要留批次标记。
     每次回填在备注末尾写一个批次号,出问题才能按标记精确圈定这一批回滚,不误伤别批次和人工订正过的记录。
  • 口径要对着人的口径改,不能对着库里的现状改。
     库里长什么样是历史(很可能是上一版模型判的),不是标准。曾经因为"库里的现状是这样"把口径做窄了一版,事后还得改回来。
六、可执行清单
  1. 让 AI 动台账之前,先把"一个判断的完整影响面"写下来:哪几张表、哪几个字段,一处不能少。
  2. 所有跨表更新按主键定位,并断言影响行数,日志打印真实行数。
  3. 让 AI 逐个说清楚空列表、空字符串、字段缺失这三种输入分别会命中多少行。
  4. 改完必须读回,并且看一眼页面。用户看不到的状态变更等于没改。
  5. 改共享的抽取或判级函数,先存旧版全量对拍,差异逐条归因,别无差别接受。

台账类工作最像的不是写代码,是记账。账能对上,靠的不是记性好,而是每一笔改动都写全了。你在"改一处漏两处"上踩过什么?欢迎在后台说说。

相关学习资料