1. 先捋清楚需求为什么日报要自动化而不是每天手动查作为一个每天靠 AI 新闻续命的人我之前的早晨通常是这样的地铁上打开十几个公众号和资讯站点一路刷到公司收藏夹多了十几条链接脑子里却几乎没留下什么。后来我把这事交给了 WorkBuddy——直接在它里面设了一个每天上午十点半触发的定时任务让它把当天的 AI 日报整理好自动推进我的微信。这套流程已经稳定跑了两周今天把完整方案拆开讲一遍为什么这么设计、WorkBuddy 的定时触发机制是怎么工作的、微信推送通道怎么选以及我踩过的几个坑。先说需求。如果你的工作内容和 AI 沾边不管是做开发、做产品还是做技术决策每天至少需要知道这么几类信息今天有没有新模型发布、有哪些好用的开源工具、大厂的 AI 产品线有什么动作、值得精读的论文和技术博客有哪些。这些信息分散在 X、GitHub、公众号、Hacker News、arXiv 和一堆邮件订阅里全看一遍至少一两个小时。你可能会说一两个小时也还好吧问题是绝大多数时候刷完之后能留在脑子里的信息密度极低。我做过一个实验把每天刷资讯的场景录下来事后回看发现大部分时间花在标题点击-快速滑走-再点击的循环里真正产生价值的时间不到十分钟。更糟糕的是这种零散的获取方式没法沉淀三天后想找一条当初看到的重要资讯往往要翻很久的浏览记录。所以我才想到做自动化。不是要省掉那一小时而是要把收集信息和理解信息这两件事分开。收集交给工具理解留给自己。WorkBuddy 能定义定时任务和技能Skill本质上给了我一个值班实习生每天到点开工按我的要求整理资讯然后把成果送到一个我一定会看的地方——微信。1.1 每天手动刷新闻的成本被低估了很多人不愿意做这种自动化潜意识里觉得我每天刷一会儿也没花多少钱。真去算账就发现不是这么回事。这里面的成本分三块第一块是时间成本。每天平均少说半小时按一年算就是 180 多个小时。更关键的是这半小时通常发生在早上精力最好的时段被无关信息消耗掉之后上午写代码的专注度明显下降。第二块是注意力成本。AI 资讯的标题几乎都是按振奋人心来写的点进去可能只是某个模型发了个小版本更新。大脑反复被这种廉价刺激打断之后对真正重要的信息反而麻木了。第三块是管理成本。关注了这么多渠道你得自己维护一个信息管道哪天某个渠道不更新了你甚至不知道。定时任务把这个问题也一并解决了所有源由 WorkBuddy 统一抓取统一去重统一输出。1.2 我理想中的 AI 日报长什么样在动手之前我先给自己定了一个日报验收标准避免做出来的东西又是一坨长长的链接列表每天 5 到 8 条不再多宁缺毋滥如果当天确实没什么大事允许只有两三条。每条包含三件套一句话结论、两三句摘要、链接来源。一句话结论负责让我快速决定要不要细看摘要负责让我不点开也能知道大概内容。按主题分类目前固定四个分类模型发布、开源工具、应用实践、值得读的论文。格式是 Markdown既方便我自己看也方便一键转发到团队群。有了这个标准后面的 Skill 配置、提示词编写就都有了依据。顺便说一句如果你也想搭一套建议把这个标准写在最前面因为你后面写提示词的时候会不断回到这个标准上来校准。2. 定时任务是怎么在 WorkBuddy 里跑起来的Skill、触发器和推送通道在动手搭建之前得先理解 WorkBuddy 这类 AI Agent 工作台处理定时任务的基本模型。我最初以为它就是个定时帮你跑一段脚本的调度器实际用下来发现它的核心是三步结构触发器定义什么时候干活Skill 定义怎么干活动作节点定义干完活之后把结果送到哪里。这三个概念有点像工厂里的三张单据生产计划、工艺路线、物流单。触发器就是生产计划到点下达Skill 是工艺路线告诉 Agent 具体怎么加工动作节点是物流单决定成品怎么发出去。2.1 WorkBuddy 的 Skill 与定时触发器是怎么协作的Skill 在 WorkBuddy 里是一个可以复用的工作流单元。你可以把一段完整的提示词、一组工具调用步骤、甚至包含脚本执行的流程打包成一个 Skill然后在定时任务里引用它。我理解它本质上是一个结构化的 Agent 任务定义除了给大模型的指令之外还包含了上下文、工具调用、输入输出约定。定时触发器则是入口最常用的配置是 cron 表达式。如果你用过 Linux 的 crontab对这个应该不陌生。一个标准的五段式 cron 表达式从左到右依次是分、时、日、月、周。例如30 10 * * *表示每天的 10:30 触发0 9 * * 1-5表示每个工作日的 9:00 触发。有些系统比如 Quartz会在最前面加一个秒字段写成0 30 10 * * *含义不变只是多了秒的粒度。WorkBuddy 里新建定时任务时一般会有可视化选择器但直接填 cron 更精确。两者协作的流程可以概括为到了触发时间调度器唤醒 Agent加载对应的 Skill 定义Agent 按 Skill 里写的步骤执行在执行过程中可能会调用搜索工具、浏览器工具或者本地脚本最后把输出写入指定位置或推送到外部接口。整个过程不需要人守着唯一需要保证的是 Agent 登陆状态、网络连通性和外部服务的 token 有效性。2.2 微信推送通道企业微信群机器人、Server酱还是个人微信日报生成之后怎么送进微信是个值得提前想清楚的问题因为它决定了你后面会不会被封号或者收不到消息。我把我考虑过的三种通道列个表格对比一下通道优点缺点适合场景企业微信群机器人免费、稳定、官方支持、支持 Markdown 子集需要一个企业微信群哪怕只有自己日报/告警推送推荐首选Server酱直接推到个人微信、配置简单免费版有频率限制依赖第三方服务个人使用、低频通知个人微信自动化形态最自由违反平台规则有封号风险不推荐别碰我最终选的是企业微信群机器人原因很简单我给自己建了一个只有我一个成员的群拿到它的 Webhook 地址之后任何脚本往这个地址发一个 HTTPS POST 请求消息就出现在微信里了。这个通道的稳定性比我预想的要好跑了两周没有一次丢失。Server酱也是个不错的选择它把推送接口封装得更友好适合不想折腾群的人但免费版每天的推送条数有限额用来推日报够用如果后面想顺便推股票提醒、监控告警之类的额度可能就紧张了。这里有一个原则必须强调使用微信的官方通道不要使用任何第三方个人微信 hook 方案封号风险真的不值得。我们就用官方提供的 Webhook 接口完全合规。3. 搭建全过程让 WorkBuddy 每天十点半把日报送进微信理论部分讲完下面是完整搭建过程。我尽量把每个步骤展开包括配置文件的写法、踩过的时区坑、以及怎么调试。3.1 把生成日报固化成 Skill配置与提示词模板我先在 WorkBuddy 里新建了一个名为daily_ai_report的 Skill。创建入口在 Agent 配置面板的技能管理里新建之后会得到一段 YAML 格式的定义大致长这样name: daily_ai_report description: 生成每日 AI 资讯日报并推送至微信群机器人 trigger: cron: 30 10 * * * timezone: Asia/Shanghai env: webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyYOUR_KEY search_source: your_news_source steps: - task: collect desc: 抓取 AI 相关资讯按热度排序 - task: summarize desc: 筛选 5-8 条最重要的内容按固定模板输出 markdown - task: save desc: 写入 reports/$(date %F).md - task: push cmd: python scripts/push_to_wechat.py reports/$(date %F).md这个 YAML 片段里trigger可以不用在这里写我是放在定时任务配置里的但把它写进来有个好处Skill 自带说明以后复制到别的工作区不用重新解释。真正关键的是steps里的四个步骤collect负责抓取资讯summarize负责筛选和整理save负责落盘push负责推送。每一步 WorkBuddy 都会按desc里的描述调用相应的工具。接下来是summarize步骤里用的提示词模板我写得比较细因为这一步直接决定日报质量。给大家抄一段我现在的版本你是我的 AI 资讯编辑。请从今天的科技资讯中筛选出 5-8 条对开发者最有价值的 AI 动态按以下规则输出 1. 每条用一句话结论作为标题结论要具体禁止使用重磅震惊这类词。 2. 标题下方另起一行写 2-3 句摘要说明这条资讯的核心内容和为什么值得关注。 3. 最后附上原始链接。 4. 按四个分类分组模型发布 / 开源工具 / 应用实践 / 值得读的论文。 5. 只输出 Markdown 内容不要输出任何解释文字。 如果当天确实没有足够重要的内容可以只输出 2 条不要为了凑数降低标准。注意最后一条这个是我后来加的。最初版本没有这条AI 为了完成任务会硬凑出八条里面至少有两三条是无关痛痒的产品更新。加了宁缺毋滥的约束之后日报信息密度高了很多。3.2 设置上午十点半的 cron 闹钟时区不能省Skill 建好之后接着在 WorkBuddy 的定时任务页面新建任务关联到daily_ai_report这个 Skill。触发时间我填的是30 10 * * *意思是每天 10:30 执行一次。但这里有个很重要的细节时区。我一开始没注意直接在默认配置下填了30 10 * * *结果第一次任务在下午六点半跑了。排查之后发现 WorkBuddy 的调度环境用的是 UTC 时间而我在北京差八个时区。解决方案有两种一是在触发配置里显式指定时区Asia/Shanghai二是自己手动换算成 UTC 时间再填北京 10:30 对应 UTC 02:30那就填30 2 * * *。强烈建议用第一种让系统帮你换算否则到了夏令时切换的时候你会疯掉。在 WorkBuddy 的 cron 配置面板里一般都会有一个timezone选项。填Asia/Shanghai之后任务触发时间的计算就统一按北京时间来了。这个配置看起来不起眼但它是日后任务准点跑的大前提。3.3 推送脚本把 Markdown 翻译成微信能看懂的话Skill 跑完之后会生成一个 Markdown 文件现在需要把它推到企业微信群。企业微信机器人的 Webhook 接口很简单支持的消息类型里正好有一种叫markdown可以直接发 Markdown 文本。我用 Python 写了一个推送脚本放在 WorkBuddy 的脚本目录里内容是这样的import json import sys import requests from datetime import datetime WEBHOOK_URL https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyYOUR_KEY def build_content(filepath): with open(filepath, r, encodingutf-8) as f: content f.read() return content def split_content(content, limit4000): # 企业微信 markdown 消息单条最长约 4096 字节超出按段落切分 if len(content.encode(utf-8)) limit: return [content] parts [] lines content.split(\n) current for line in lines: candidate current \n line if len(candidate.encode(utf-8)) limit: parts.append(current) current line else: current candidate if current: parts.append(current) return parts def push(title, content): payload { msgtype: markdown, markdown: { content: f{title}\n{content} } } resp requests.post(WEBHOOK_URL, jsonpayload, timeout10) result resp.json() if result.get(errcode) ! 0: print(push failed:, result) else: print(push ok) if __name__ __main__: filepath sys.argv[1] content build_content(filepath) today datetime.now().strftime(%Y-%m-%d) for part in split_content(content): push(today, part)脚本里做了两件比较重要的事第一是用split_content把超长内容切开因为企业微信群机器人对单条 markdown 消息的长度有限制不切的话消息会整体发不出去第二是每次推送前打印push ok或push failed方便定位问题。实际接进 WorkBuddy 的步骤很简单在push_to_wechat.py里把路径参数换成当天生成的文件路径即可。4. 踩坑实录日报没送到、内容被折叠、时区错乱搭建过程看起来不复杂但我从第一次触发到稳定运行中间踩了不少坑。下面三个坑最有代表性每个都反复折磨了我一阵子。我把完整的排查链路写出来方便你对照。4.1 静默失败任务显示已运行微信为什么没收到第一次设置完定时任务后第二天十点半我盯着手机等了五分钟微信毫无动静。打开 WorkBuddy 的任务日志一看状态显示已完成但点进去发现summarize这一步输出为空后面自然就没东西可推了。顺着日志继续往前查发现根因是搜索工具的使用额度用完了。我用的资讯搜索接口是按月限额的月底那几天刚好额度清零Agent 在调用搜索工具时拿到的是空结果但它没有报错而是很礼貌地完成了任务——输出了一篇内容为空的报告。这个现象我称之为静默失败任务确实跑了但没有任何有效产出也没有任何错误提示。解决方法是双层的。第一层是在 Skill 配置里加一个兜底判断如果搜索步骤返回为空就用预设的文案直接推一条今日无重要更新同时标记为需要人工查看。第二层是给搜索服务加了一个额度告警额度低于 20% 时提前推一条消息到微信。这样即使出问题至少我有一个明确的信号而不是等到第二天发现没收到日报才知道出事了。另外提醒一句如果你用的搜索源是某个需要 API Key 的服务Key 到期是非常容易静默失败的。建议在 Skill 的collect步骤里把检查 API Key 是否有效也作为一个显式动作。4.2 长文本被折叠微信 markdown 的边界第二个坑出现在第三天。那天内容特别多筛出了十一条我心想这次日报内容丰富了。结果推过去之后微信里只显示了前三行后面跟着一个点击阅读原文的折叠入口。原因是企业微信机器人的 markdown 消息对长度有硬性限制而且过长的内容会被客户端折叠处理。第一感觉是那我砍短一点不就行了但实际没那么简单每天的内容量不稳定今天五条明天十条不能写死长度。后来我摸索出一个比较稳的方案日报控制在八条以内每条摘要不超过两行推送脚本里按 4000 字节切分超长的部分拆成多条消息发出。这样至少保证每条消息都能完整展示哪怕被折叠也是折叠在消息条数层面而不是把核心内容折叠掉。还有一个小技巧每条信息的标题和摘要之间用引用块隔开微信端的显示会清爽很多。4.3 十点半变三更半夜时区错乱排查这个坑在 3.2 里提过这里展开讲一下排查过程。某天我开始用一个新的工作空间测试流程配置里没有显式写时区第二天日志显示任务在 02:30 运行了——换算成北京时间正好是 10:30看起来准点了但我微信里收到的推送时间却是半夜两点半。我一开始以为是消息延迟后来查日志才发现任务确实是在 UTC 02:30 执行的推送也在这个时间微信自然显示凌晨收到。换句话说我的 cron 表达式30 10 * * *被系统理解为UTC 时间的 10:30而我的本意是北京时间的 10:30。排查链路梳理如下先确认任务日志里的运行时间看是否与预期一致。确认 WorkBuddy 调度环境默认使用的时区一般是 UTC。确认 cron 表达式的解析规则是五段式还是带秒的六段式。在触发配置里显式设置timezone: Asia/Shanghai。这四步走完基本能定位所有时区问题。如果你用的是别的调度平台尽量养成在配置里写明时区的习惯不要依赖默认值。5. 把自动化做厚配置模板、扩展场景与我的体会日报跑顺之后我慢慢意识到这套定时触发 Skill 微信推送的模式不止能做日报。它本质上是一个将任意周期性信息处理任务自动化的通用框架。这里分享我目前沉淀下来的一套模板以及我接下来准备扩展的三个场景。5.1 直接抄作业我最终用的配置模板如果你也想在 WorkBuddy 里搭一套可以直接参考下面这个配置。以我目前稳定运行的版本为准name: daily_ai_report description: 每天 10:30 生成 AI 日报并推送微信群 trigger: cron: 30 10 * * * timezone: Asia/Shanghai env: webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyYOUR_KEY search_source: your_news_source max_items: 8 steps: - task: collect desc: 抓取 AI 相关资讯按热度排序过滤掉 24 小时前的旧闻 - task: summarize desc: 按模板生成日报 Markdown分类并附带链接 prompt_file: prompts/daily_report.txt - task: validate desc: 检查输出是否为空为空时写入兜底文案 - task: save desc: 写入 reports/$(date %F).md - task: push cmd: python scripts/push_to_wechat.py reports/$(date %F).mdprompt_file指向一个独立文件的好处是后续调整文案不需要动 Skill 结构只改文本即可。我习惯把提示词和配置分开管理这样复制到其他项目时也更干净。5.2 闹钟之外定时任务还能做竞品监控、周报、晨会摘要尝到甜头之后我又在 WorkBuddy 里加了三类定时任务思路完全一样只是换掉 Skill 的搜索关键词和提示词模板第一类是竞品监控。把search_source的关键词从AI 新闻换成你关注的几个竞品名字再把推送时间定在早上十点。这样每天开工前就能看到竞品昨天有没有发新版本、有没有新功能上线、社区口碑有什么变化。做产品的朋友应该懂这个需求有多刚需。第二类是周报自动生成。每周五下午四点半触发Skill 里让它去拉取我这周的 Git 提交记录、任务面板里完成的事项然后用提示词整理成一份三到五条的周报草稿推过来。我在草稿基础上改几分钟就能提交省掉了回忆这周干了什么的过程。第三类是晨会摘要。每天早上九点触发拉取项目群新增消息、需求池变更、工单状态用三行摘要概括今天需要注意的事。这个任务的搜索步骤不太一样用的是工作台内部数据的查询能力但对 WorkBuddy 来说流程是一样的。这些场景都验证了一件事定时任务真正的价值不是每天帮你跑个脚本而是把那些你每天都在重复的信息搬运和整理工作变成标准化流水线。你要做的只是定义清楚输入源、处理逻辑和输出目标。最后说一点我的体会。跑了两周之后我最大的感受不是省了多少时间而是注意力被解放出来了。以前刷几十条新闻本质上是把收集当成了获得刷完有一种虚假的满足感第二天什么也没留下。定时日报告诉我把收集交给工具把判断留给自己。当然任何自动化都有失灵的时候我现在给自己留了一个很小的兜底习惯每天十点半之后如果微信没动静就去翻一眼 WorkBuddy 的任务日志这比盯着推送等消息要稳得多。工具不会替你思考但它值得成为一个可靠的值班实习生。