目录

抖音热点自动发布脚本的两次"空文章"排查与修复记录

2 1363
本文记录 2026 年 7 月「每天 9 点发布抖音热点到 Halo」定时任务连续报错(AI 返回空文章)的根因,以及最终的修复方案。

一、背景

服务器上跑着一个定时任务(`cronjob id: 5472dba6e97b`):每天北京时间 9 点,脚本 `/root/daily_hotspots_to_halo.py` 会抓取抖音热榜前 15 条,调用 AI 生成一篇分析文章,再自动发布到本机 Halo 博客。

7 月 14 日任务再次报错:

```

[ERROR] AI 返回空文章

[INFO] 已获取热点 15 条

```

热点抓到了,但 AI 没产出正文,文章发布失败。

二、第一次根因:模型把正文塞进了 reasoning_content

最早一次出现这个问题时,脚本调用的是腾讯混元 `tencent/Hy3`。实测发现:这个模型在所用端点(`cli.525553.xyz/v1`)上只往 `reasoning_content`(思考过程)输出内容,正文字段 `content` 永远是空的,而且 50 个 token 额度全被推理吃掉(`finish_reason: length`)。

脚本当时读到 `content` 为空就判定「空文章」退出了。

修复:脚本加了兼容逻辑——当 `content` 为空时,回退读取 `reasoning_content` 作为正文。同时把模型从 `tencent/Hy3` 换成会正常输出正文的模型,在 `.halo_hotspot_env` 里显式指定 `AI_MODEL`,不再跟随 `config.yaml` 的默认模型。

三、第二次根因:深度思考模型吃光了 token 预算

7 月 14 日用户希望改用 `ME-v4-flash`。实测发现:这个端点不支持任何关闭思考的参数(`reasoning_effort`、`thinking:false`、`enable_thinking:false` 等全部返回 `invalid arguments`),也就是说 `ME-v4-flash` 在该端点上是强制深度思考的。

关键实验:

  • `max_tokens=80` 时:`content` 为空,`reasoning_content` 有 149 字,`finish_reason: length` —— 思考把预算吃光,正文没机会输出。
  • `max_tokens=2000` 时:`reasoning_content` 299 字之后,`content` 正常输出了北京介绍,`finish_reason: stop`。

结论很清楚:不是模型不能写,而是思考消耗太大,原来的 `max_tokens` 默认 16000 在该端点/该长 prompt 下不够让「思考 + 正文」都跑完。之前用 `魔搭-DeepSeek-V3.2`、`gpt-5.5` 等不强制思考的模型能成功,只是因为它们几乎不占思考额度。

四、最终修复方案(只改脚本本身)

用户要求「只修改热点 py 脚本,让其思考不断」。改动如下:

| 项 | 修改前 | 修改后 |

|---|---|---|

| `max_tokens` 默认值 | `16000` | `200000` |

| 请求超时 `timeout` | `300` 秒 | `600` 秒 |

| 截断提示中的默认值显示 | 16000 | 200000 |

环境变量文件 `/root/.halo_hotspot_env` 中不写 `AI_MAX_TOKENS`,保持「脚本默认值优先」,后续想调直接改脚本那一行即可。

五、验证

改完后手动运行完整脚本,结果成功:

  • 模型:`ME-v4-flash`(深度思考,200k 预算)
  • 标题:2026年7月14日热点观察:在暴雨与足球之间,我们如何安放情绪
  • 正文长度:1835 字符
  • 状态:已成功发布到 Halo

说明在 200k token 预算下,`ME-v4-flash` 能先完成思考、再正常输出可发布的正文。

六、总结

  1. 「AI 返回空文章」不一定是没有输出,很多时候是输出放错了字段,或预算被思考吃光导致正文阶段没开始。
  2. 聚合端点上的「flash」类模型常强制深度思考,且不一定提供关闭开关;这类模型必须给足 `max_tokens`,否则正文永远出不来。
  3. 排查手段:用 `curl` 直接打 `/chat/completions`,打印 `content` / `reasoning_content` / `finish_reason` 三个字段,能一眼定位是「字段错位」还是「预算不足」。
  4. 模型选择:写文章类任务优先选不强制思考的模型;若必须用思考模型,记得把 `max_tokens` 开到能够容纳「思考 + 正文」的总量。

至此,每天 9 点的热点发布任务恢复稳定,使用 `ME-v4-flash` + 200k token 预算自动产出并发布。