今天有两个问题,都出在同一个方向:AI执行完成,结果体积很大,系统在读取这个结果时出了错。
这是AI系统里最难发现的一类问题——执行链走完了,但信息在中转点悄悄丢了,而系统表面上“没有报错”。
一、结果读了一半,没有报错
第一种情况:结果是完整生成的,但读取逻辑只读了一部分,后面的内容被截断。下游拿到的是一个不完整的结构,但解析没有报错——它悄悄“成功”了,只是数据已经缺失。另一种情况更隐蔽:结果被包在一层包装结构里,解析逻辑只处理了外层就停了,内层的核心内容根本没有被触达,下游拿到的只是一个空壳。
这两个问题在常规测试中都不会暴露——截断需要大数据量触发,多层嵌套需要特定结构才会出现。只有在真实生产环境面对大结果集时,才会出现“任务标记完成、结果标记返回、一切正常,但下游用到这份数据时出现莫名其妙异常”的现象。
修法是在读取侧加上长度校验和递归展开逻辑,遇到截断或不完整结构时主动报错,而不是静默通过。
二、从“能换”到“安全换”
数据库凭据的轮换,之前能做到“切换到新凭据”。这次把轮换本身做成了受控事务——来源校验、过渡态管理、旧凭据失效时机全部纳入了流程。
来源校验是事后补的。如果不限制谁有权触发轮换,这个接口本身会变成一个攻击面。很多系统支持“能换”,但“换的过程是安全的”是另一件事。
三、每次必崩的定时任务
修了一个定时任务,每次调度都会失败。根因是运行容器里缺少一个配置,导致启动时导入失败,任务根本跑不起来。
这个问题只影响定时任务,不影响主服务流量,没有触发告警。等人工注意到的时候,它已经悄悄崩了很多次。
修法只有一行配置,但发现它的成本不低——需要有人主动去翻调度日志。影响路径不在日常流量上的问题,靠错误告警发现不了,只能靠主动巡检。
四、UX的减法
连接器与技能的设置入口做了整合,把两个分散的页面收在一起,同时补强了授权信息的展示——让用户在配置前就能看清授权范围和影响边界。
UX的加法很容易推:有需求、有截止日期、有人盯。减法难做,因为它需要有人先承认“现在这个流程是绕的”。这次能推进,是因为有人愿意把它当成一个真正的问题提出来,而不是当作历史遗留接受下来。
这轮改动,修了两个让结果静默丢失的读取问题,让凭据轮换从“能换”变成“安全换”,让一个反复失败的定时任务不再每次必崩,让设置页的导航少绕一圈。
自动化测试能覆盖常规场景,但截断边界和多层嵌套这类问题,只有真实生产环境才会暴露。主动巡检比测试覆盖率先发现它们——它不依赖事先知道问题在哪里。
这,是第七十六天。
《从0到1:企业级AI项目迭代日记》记录一个企业级 AI 项目从创意、架构到落地的真实过程。不讲神话,只记录进化。
如果你也在做企业 AI 落地,欢迎留言来聊。或者,把这篇转发给一个正在踩同样坑的朋友。