类似 grokbot 每天自动推送自己账号的一些 x 消息,如果要让 agent 推送 QQ 群里有价值的消息,有哪些方案

先把 grokbot 那边的模式拆一下,再讲 QQ 这边的落地差别。 grokbot 那种“每天自动推”的机制,官方设计文档里说白了就一个核心抽象:Routine(例行任务)——用户定义一次“每天早上 8 点/每 30 分钟/这个频道有新消息时”执行什么,然后 Bot 自己运行,不用任何人开口。附带三件事:Bot 有自己的持久记忆和工具集、每次运行的记录在时间线里可回看、可以看它的执行过程。 搬到 QQ 群,缺的不是“定时”和“推送”,缺的是“值得推”。所以方案我按三层给你拆。 第一层:触发方式(怎么被叫醒) 1. 外部调度器 + 主动推送。crontab / GitHub Actions schedule / 云函数定时触发器 / Temporal、Celery beat 都行。到点拉起一段脚本,走官方或第三方 SDK 往群里发。缺点是要另维护一个进程,好处是最稳、最好观测。 2. 事件驱动,不只看时间。除了定时,还能挂 webhook:GitHub 仓库 push、RSS/Atom 更新、某个 API 有新数据才推。这比纯定时好很多——没新内容就静默,避免“每天准时发一条废话”。 3. 长驻 bot 进程内的自调度。用 asyncio 定时任务(如 apscheduler、nonebot 的 scheduled 插件、Koishi 的定时任务),跟消息收发在同一个进程里,共享数据库和状态最方便。 第二层:内容从哪来(价值的上游) 这部分决定了推送有没有价值,比推的技术手段重要得多。 4. 白名单信息源池 + 抓取层:固定几个高质量源(论文 arXiv 分类、几个官方博客、GitHub trending、Hacker News 前 N 条、X 上的几个人)。X 那边要注意 API 成本和限流,通常走官方 API 或第三方聚合,别想着爬网页。 5. 增量与去重:维护一份 seen 集合(URL hash / 条目 id),只处理没见过的新条目。这是防止重复推送的关键,也顺便解决“睡一觉起来补推十条”的尴尬。 6. 过滤与打分:先粗筛(关键词、来源权重、是否已收录进知识库),再让模型做 relevance 打分,只留在阈值以上的。做法是两段式——便宜模型粗筛一堆,强模型精评少数,控成本和延迟。 7. 生成层:不要直接把原文丢群里。让模型产出“这条为什么值得看 + 一句话结论 + 链接”,甚至合并成一个每日摘要卡。要它输出结构化字段(标题/要点/链接/推荐理由),而不是自由散文,后面好格式化。 第三层:怎么发进 QQ(发送通道) 8. 官方/正规 SDK 长驻连接。NoneBot2、Koishi、mirai 系、或官方 QQ 机器人开放平台接入。适合交互式 bot,天然在群里、能收到 @。 9. Webhook / HTTP 主动发消息接口。适合外部调度器把结果“投递”进来,不需要一整条长连接。 10. OneBot 兼容实现(如 NapCat、Lagrange)做协议桥接。自由度最高,但属于社区实现,有账号风控和被限制的风险,自己权衡,别拿主号试。 第四层:工程上容易踩的几个点 11. 幂等 + 失败重试 + 死信。发送失败不要静默,落库标记状态,隔一会重试避免重复刷屏。 12. 状态机而不是布尔值:每条候选从 fetched → scored → approved → sent 流转,失败可回放。定时任务加锁,防止上一次没跑完又被拉起。 13. 限流与聚合:一条消息塞多个条目,而不是十条消息。群是有承受阈值的,一天两三条高质量摘要比二十条链接有用。 14. 可观测:记录每次运行抓了多少、筛掉多少、发了什么、耗时。不然出了问题你都不知道是源挂了还是模型挂了。 如果让我选一个最小可跑的组合:crontab(或 GitHub Actions schedule)每天一次 → 脚本抓 3~5 个白名单源 → seen 去重 → 小模型粗筛 + 大模型打分生成结构化摘要 → 通过 bot 的发送接口发一条聚合卡。这套半天能跑起来,后面再往事件驱动和增量推送演进。 顺带说一句,你问的这个模式跟我每天的群日报其实是一个思路:定时触发、抓当天群聊、离线生成、次日投递,只是它的输入是群消息而不是 X 时间线。差别在于重点是“评分和过滤”那一步——决定推不推,比定时器难得多。 要不要我针对某一条(比如 X 抓取的具体限制,或者 NoneBot/Koishi 的定时插件怎么写)再往下细讲?