抓热点要用插件。别让模型编热点,让它去查。 插件那一侧随时可能挂:接口 500、限流、鉴权过期。这一节量三种应对——不重试、重试、兜底。 结论:重试救抖动,兜底救事故。 两个都要有。
上一节把画布准备好了,这一节装第一个模块。 抓热点这件事有个要命的性质:它是整条链的第一环。 它挂了,后面全废。 第 3 章讲插件怎么配,这一节讲插件挂了怎么办——那部分第 3 章没讲,但上线必须想。
一、为什么要插件,不让模型写
问模型「今天有什么 AI 新闻」,它会给你三条——听着像真的,但可能是去年的,也可能是编的。 热点这件事的本质是「此时此刻发生了什么」,模型的知识停在一个固定日期,它给不出。 这一条第 5.1 节算过。 所以这里必须用插件去查。模型负责写,插件负责查,两件事不能混。
判断方法很简单:这些数据今天和昨天一样吗? 不一样就必须查。
二、接口正常时
演示里本地起了一个服务当热点接口,返回三条。 第一次就成功,返回 63 字节。 三条标题分别是:AI 眼镜销量翻倍、国产模型开源新版本、智能家居补贴落地。 到这一步,插件就算能用了。但这只是「本地调通」。
本地调通和线上能跑是两件事:接口有限流、有鉴权过期、有对面维护窗口。下一段开始量这些。
三、接口挂了:三种应对
| 做法 | 接口正常 | 偶发抖动 | 持续故障 |
|---|---|---|---|
| 不重试不兜底 | 正常 | 整条链失败 | 整条链失败 |
| 重试两次 | 正常 | 多半能过 | 整条链失败 |
| 重试 + 兜底 | 正常 | 能过 | 用兜底清单,链走完 |
演示里接口返回 500,不重试:一次就失败,链断在这儿,后面写文案、生成图全不执行。 重试两次:三次都失败。重试救不了持续性故障——对面挂了十分钟,你重试三次也一样。 重试救的是「偶发抖动」:对面一秒内重启完成,第二次就通了。这类故障在真实接口里很常见。
四、兜底:那个看起来土的东西
接口挂了,用一份写死的清单顶上:三条通用话题。 这份清单看着土,但它保证链一定能走完。 区别在于:不兜底 = 今天没有推文;兜底 = 今天话题旧一点,但发出去了。
对一个每天更新的账号来说,第二个显然更好。停更的代价比话题旧大得多。 兜底清单怎么写:放五到十条「永远不过时」的话题。别放具体新闻,放类别。
五、三条支路怎么选
看这件事失败了有多要紧。 不要紧(比如内部测试、每天几十次调用):不重试不兜底,简单。 要紧但可以旧(每天定时发布):重试加兜底。
要紧且不能旧(行情、库存、报价):重试加兜底加告警。挂的时候要有人知道。 第三种的「加告警」容易被忘。 静默兜底比不兜底更危险——你以为在发新内容,其实连发了三天旧话题,没人告诉你。
六、这一步的产物
一个插件节点,输出一个列表字段(比如 list),里面是若干条热点。 这个列表要接给下一个节点。接的时候注意:下一个节点要的是「一条」还是「一批」。 写文案只需要一条。 所以中间要么用代码节点挑第一条,要么在大模型提示词里写「从下面几条里选一条最合适的」。
演示里选的是前者——挑哪条这件事用代码做,别交给模型。 代码只花一毫秒,模型要想半天。
七、动手 Demo:抓热点:接口挂了怎么办
本地起一个热点接口,一条正常路径、一条固定返回 500 的路径。 同一个抓取函数,分别用「不重试」「重试两次」调一次,最后看兜底。
def fetch(base, path, retry=0):
last = None
for i in range(retry + 1):
try:
code, body = Q.http_get(base + path)
if code == 200:
return True, body, i + 1
last = u'HTTP %d' % code
except Exception as e:
last = str(e)[:24]
return False, last, retry + 1
ok, body, tries = fetch(base, u'/hot') # 正常
ok, msg, tries = fetch(base, u'/bad') # 500,不重试
ok, msg, tries = fetch(base, u'/bad', retry=2) # 500,重试两次
实跑输出:
--------------------------------------------------------------------
抓热点:接口挂了怎么办
--------------------------------------------------------------------
① 接口正常时
--------------------------------------------------------------------
第一次就成功,返回 63 字节,试了 1 次。
1. AI 眼镜销量翻倍
2. 国产模型开源新版本
3. 智能家居补贴落地
② 接口 500,不重试
--------------------------------------------------------------------
结果:失败,HTTP 500,试了 1 次。
链走到这一步就断了。后面的写文案、生成图全都不执行。
这是最省事也最脆的做法:接口一抖,整条链废。
③ 重试两次
--------------------------------------------------------------------
结果:失败,HTTP 500,试了 3 次。
重试救不了持续性故障。它救的是「偶发抖动」——对面一秒内重启完成,第二次就通了。
④ 兜底比重试更重要
--------------------------------------------------------------------
接口挂了,用一份兜底清单顶上:
1. AI 硬件新品发布
2. 国产模型开源
3. 智能家居补贴
这份清单看着土,但它保证链一定能走完。
区别在于:不兜底 = 今天没有推文;兜底 = 今天推文话题旧一点,但发出去了。
⑤ 三条支路的代价对比
--------------------------------------------------------------------
| 做法 | 接口正常 | 接口偶发抖动 | 接口持续故障 |
|---|---|---|---|
| 不重试不兜底 | 正常 | 整条链失败 | 整条链失败 |
| 重试两次 | 正常 | 多半能过 | 整条链失败 |
| 重试 + 兜底 | 正常 | 能过 | 用兜底清单,链走完 |
第三种多写三个节点,换来的是「不会因为别人的接口而停更」。
! 抓热点这一步最容易让人误判:「我本地调通了」不等于「线上能跑」。
接口有速率限制、有鉴权过期、有对面维护窗口。能兜底的设计,才是能上线的设计。
①第一段接口正常:一次成功,63 字节,三条标题。到这一步只是「本地调通」。 ②第二段 500 不重试:一次就失败,链断在这儿。后面写文案、生成图全不执行。 ③第三段重试两次:试了三次,全失败。 重试救不了持续性故障,它救的是「偶发抖动」——对面一秒内重启完成那种。 ④第四段是兜底清单:三条通用话题。看着土,但保证链一定能走完。 ⑤第五张对照表三行。第三种多写三个节点,换来的是「不会因为别人的接口而停更」。
30 秒实验
- 把你所有插件节点的接口列出来,标一下:挂了会怎样、多久能发现。
- 给你最要紧的那个插件加一份兜底数据。写完想想:兜底生效时你怎么知道。
- 找一句「这些数据今天和昨天一样吗」的答案是否定的地方。那些必须用插件,不能让模型写。
常见误区
- 「让模型编几条热点。」编出来的是旧闻或者假新闻。热点必须查。
- 「加重试就行了。」重试救抖动,救不了持续故障。对面挂十分钟,你重试三次也一样。
- 「兜底会自动顶上,不用管。」静默兜底最危险——连发三天旧话题,没人告诉你。要加告警。
自测三问(点开对答案)
1. 为什么热点不能用模型写? —— 模型的知识停在固定日期,给不出「此时此刻」。这类数据必须查,不能生成。 2. 重试能解决什么,不能解决什么? —— 能解决偶发抖动(对面瞬间重启),不能解决持续故障(对面挂了十分钟)。 3. 为什么兜底要配告警? —— 静默兜底会让你以为在发新内容,其实连发三天旧话题。人得知道兜底生效了。热点拿到了,下一节写文案。难点不在写,在分清「改写」和「重写」——弄错了提示词写再好也白搭。
- ☐ (本篇完,下一篇 8.4 配置文案改写模块)
相关笔记
- 什么是插件:插件是一张说明书
- 如何使用插件:插件该挂还是该插
- 为什么需要企业知识库:模型不知道公司昨天改了什么
- 🐦 扣子开发 AI Agent · 索引