课程章节介绍
那我们今天来讲讲如何用平台事件,也就是AiJobRunStatusEvents,来监控一个作业是不是完成了。你可能要问,为什么需要监控作业完成?其实很多时候,AI作业是异步运行的,你不能傻傻地在那儿等着,得有个自动化的方式,知道它什么时候处理好了,然后去拿结果,对吧?
我们要用的这个事件叫AiJobRunStatusEvents。它很聪明,每次作业的状态发生变化时,比如从“处理中”变成“已完成”或者“失败”,它就会自动触发一条事件消息。那我们怎么抓住这个事件呢?用Apex触发器来订阅它。不过要小心,这个事件可能会因为状态转换被触发多次,所以我们只需要处理那些真正“已完成”的事件。所以在触发器里,第一步就得过滤,只处理状态是“已完成”的。
一旦确认作业真的完成了,触发器里就要去查找对应的AiJobRunProject记录,这个记录里包含了完整的作业信息和最终的响应。接下来,我们要从请求输入里提取原始记录的ID。这里有个约定俗成的做法:在发起AI作业时,把源记录的ID放在输入的某个字段中,遵循“前置惯例”,也就是提前商量好的那套规矩。然后我们就能从这个输入里拿到当初是哪个记录发起的这个作业。
接着看作业的响应结果。响应内容通常被包装在一个叫“Inbox Response”的键里面,就像个信封。我们需要从这个信封里把LLM(大语言模型)生成的文本内容解出来。这样我们就拿到了最终要写回的结果。
比如,我们可能要把这个AI生成的文本作为一个CaseComment,加到对应的案例记录上。所以最后一步就是把提取出来的文本内容写回Salesforce的记录里去。
在做整个流程时,还有几个生产环境必须考虑的事情,非常关键。首先,平台事件是会重传的,网络波动或者其他原因,同一个事件可能被投递多次。如果没有做重复数据消除,就可能给同一个案例重复添加评论。所以一定要根据作业的唯一标识做去重检查。
其次,不仅要处理成功完成的项目,还要处理失败的项目。作业有可能执行出错,如果你只盯着“已完成”,那失败的就没人管了,可能就一直晾在那儿。所以要同时处理失败状态,记录日志或者做补救措施。
还有,写回操作如果量比较大,不要直接在触发器里做,这会影响性能。最好把它卸载到一个异步的、批量处理的地方,比如Express处理(这里可能指Queueable或未来的框架),这样主流程不会被拖慢。
最后,也是最重要的一点:所有的代码一定要捕获异常。因为未捕获的异常会导致事件订阅被禁用。Salesforce平台有个规则,如果在9次尝试中都有未处理的错误,它就会把这个订阅关掉,之后的事件就再也不会触发了,这样会造成监控完全失效。所以,用try-catch包装好,把错误记录下来,不要让它抛出去。
总结一下,就是用AiJobRunStatusEvents监听作业完成,过滤“已完成”事件,找到作业记录,从输入里拿源记录ID,从响应信封里解析出LLM文本,再写回目标记录。同时,一定要记得去重、处理失败、异步卸载写回、捕获所有异常。这几个生产考虑,少了哪一个都可能在线上出问题,一定要记牢。