← 返回知识库

AI 工作流

定时任务跑起来了,可它悄悄没干活:四个坑和验收办法

定时任务最坑的地方是它不报错。它按时启动、按时输出一句“已完成”,而产出是空的。把这段任务单发给 AI,先把四件事写清楚。

本文目录 按章节阅读

导读

定时任务最坑的地方是它不报错。它按时启动,按时输出一句“已完成”,你扫一眼就过去了,而这一轮的产出其实是空的。

这类问题全出在“任务以外的地方”:发给谁、依赖什么、启动的时候手里有什么、没数据的时候怎么办。这四件事任务描述里不写,它就只能自己猜。

下面这段整块发给你的 AI,让它先把这四件事交代清楚,再上线。

把这段话整段发给你的 AI

复制下面整块,原样发给它:

左右滑动查看完整代码

帮我上线一个定时任务。在你动手之前,先把下面四件事写清楚给我确认。

一、投递目标。这个任务产出的内容发到哪里,写出具体的目标标识(群或对话的 id),不要写“发回原处”这种相对说法。
二、依赖清单。逐项列出这个任务依赖的东西:脚本路径、数据源、账号、以及它要读的那些说明文件。每项后面写一句“怎么检查它还在”。
三、启动状态。这个任务每次启动时是一个全新的会话,手里没有任何上一次的记忆。所以任务描述必须自包含,请把要用的路径、命令、输出格式、失败怎么办全部写进任务描述里。
四、没有产出的时候怎么办。明确写:如果这一轮真的没有新内容,输出什么。如果取不到数据,输出什么。这两种情况不能长得一样。

写完之后给我一份验收清单:我怎么手工跑一次、怎么确认产出真的是新的、怎么确认下一次执行时间和我预期的一致(含时区)。
不要在依赖项缺失的情况下让任务上线。缺哪一项就停下来告诉我。

它交回这四件事和验收清单,你核对过再让它上线。

需要你亲手做的三件事

  • 定“没有内容”那天该怎么表现。你希望每天收到一条“今天没有”,还是希望它安静。这个决定影响的是你自己的信噪比。
  • 手工跑一次,并且是故意缺一个依赖那种跑法。看它是报错停下,还是照样输出“完成”。
  • 记下任务 id、脚本路径、投递目标、执行时间。写在一处,别只留在对话里。

附:四个坑

最先踩到的一个是投递目标写死了。建任务的时候如果选了“发回当前对话”这类相对写法,它会把当时那个会话的标识写进任务记录里;之后你在别的地方等,什么都收不到。更麻烦的是任务列表里仍然显示“发回原处”,看不出它到底发去哪儿。修法只有一个:显式写清目标标识。

另一类是依赖的东西不见了,任务照跑。任务里引用的那份说明文件被改名、被删掉,调度器只会打一行提示,然后继续跑。接下来它会在没有那份说明的情况下降级做事,产出稀薄甚至为空,最后照样输出“自检通过”。所以依赖清单要能让机器检查,不能靠人记。

还有一条更隐蔽,它每次都在零上下文里跑。定时任务不等你,到点就启动一个全新会话。我这边每天凌晨还会无条件清一次会话,跟上下文满没满无关。所以“它记得上次的结论”这种假设一律不成立,任务描述必须自己把该知道的都带上。

它说“没有新内容”的时候,先分诊。可能是真没有,也可能是采集这一环挂了。这两种情况如果输出长得一样,你就分不出来。做法很简单:先手工跑一次采集,对着看有没有数据,再决定是上报“今日无更新”还是先修。

附:上线后的验收清单

  • 算一遍下一次执行时间,跟你的预期对不对。重点看时区,服务器上的时间常常不是你手机上的时间。
  • 手工触发跑一次,把产出拿来自己看一眼,确认内容是新的一轮,不是上一轮的缓存。
  • 依赖项逐个点一遍:脚本在不在、数据源还通不通、投递目标能不能发出去。
  • 看它在“没有内容”那天的输出长什么样。这一条最容易被跳过,也最容易被忽略。
  • 记下任务 id 和所有路径。半年后要改它的时候,你会需要这几个数字。

把用得上的方法,分享给需要的人

如果身边有人也遇到类似问题,可以把这篇文章发给他,一起参考文中的步骤。

接下来怎么做?

可以先按文中的步骤自己试一遍。遇到具体问题,再决定是否需要协助。

继续看知识库 ↗