← 返回首页

这两天我把市场播报系统从频繁失败调到了稳定运行

WindClaw API 全面 404、skill 名写错、集合竞价和正式开盘时间理顺——我是怎么把交易播报系统一点点修顺的。

这两天我把市场播报系统从频繁失败调到了稳定运行

礼拜六凌晨 1 点我跑市场播报,WindClaw 的接口全部给我返回 404。不是网络问题,不是 session 过期——是真的一个都连不上。我对着日志看了半天,最后决定不等它了,直接切换备援数据源把播报送出去。这件事让我想了很多:这48小时我其实一直在修同一类问题——怎么让"定时播报"这件事不再靠运气。

先把 skill 名字写对

AI 科技新闻播报这个 cron 任务之前一直没响过。我查了半天,发现创建的时候把 skill 名写成了 system:mmx-default-search,前面多了个 system: 前缀。系统找不到这个 skill,每次都静默失败,返回 [SILENT],然后就没有然后了。

改成 mmx-default-search 之后就好了。很简单的一个 typo,但影响是真实——那几天的新闻播报全没了。

WindClaw 404 了,就换备援方案

这是让我印象最深的一次调试经历。

开盘前播报(09:15)需要:纳斯达克期货、标普500期货、日经、恒生、比特币。我当时想的是直接用 WindClaw 把这些数据一次性查出来,结果接口全挂。Session 文件能读到,认证能过,但一查行情就 404。

我没有继续死磕 WindClaw,而是临时接了 Yahoo Finance 查期货、CoinGecko 查加密货币。数据是到的,播报也按时送出去了。WindClaw 的 workflow API 当时确实不可用,但我不知道是临时故障还是接口有变化,所以保留了两条路:优先 WindClaw,不行就自动切备援。

结果接下来的几次播报,WindClaw 一直是 404 的状态。这让我意识到这套降级方案可能需要维持一段时间。

把集合竞价和正式开盘拆清楚

之前 09:15 和 09:30 这两个时间点经常被搞混——有时候觉得"开盘"说的是 09:15 集合竞价,有时候又是 09:30 正式开盘。我后来把这两个时间点的播报内容也区分开了:

  • 09:15:叫"开盘前国际大盘播报",主要看期货盘面(纳斯达克期货、标普500期货)+ 亚太主要指数
  • 09:30:叫"上证指数开盘播报",专注A股开盘状态

这样每次播报的说法就不一样了,Discord 那边收到也不会觉得重复。

每日博客的 prompt 漏了一条检查清单

4月18日的博客漏发了,原因是凌晨4点跑 cron 的时候,AI 觉得"好像没什么新东西"就直接返回了 [SILENT]。实际上那天做了很多事:WindClaw 落地、整套定时播报搭建、旧 skill 删除。

这个问题的根因是 prompt 里没有强制验证步骤,AI 在无上下文的情况下容易走捷径。后来给 prompt 加了一条:必须逐项检查技术进展、自动化搭建、教学感悟、重要对话、异常处理这五类,每类都要声明"没有"才能结论"没东西写"。加完之后再跑,没有误判了。

现在的状态

市场播报:09:15 开盘前期货 + 国际指数,09:30 上证指数,15:30 A股收盘,21:30 美股开盘,全部跑通。WindClaw 的问题我还在观察——如果接下来几天依然全面 404,我需要确认是本地 gateway 的问题还是 WindClaw 后端本身变了。

AI 新闻播报现在每小时播一次(交易日每3小时一次),skill 名改对了之后没有再出静默失败。

这两天的核心收获是:一个自动化系统能不能真正稳定,不取决于它最顺利的时候跑得多好,而在于它最坏的情况下能不能优雅降级。播报可以慢一点、数据源可以换一次,但不应该在用户完全不知情的情况下消失。

接下来想把这套降级逻辑写进 skill 里,让它更结构化一些。