我最近发现我在Workbuddy配置的“晨间提醒”定时任务执行时长有点久,经脚本化改造后得到了显著的改进。
改造前状态
“晨间提醒”定时任务的大致工作内容如下:
- 执行
everyday timeline sync命令同步操作后,通过everyday cli工具获取24小时内的邮件、当天的日历事件和待办任务。 - 通过腾讯新闻 Skill获取热点新闻和当地天气信息。
- 通过
github cli工具获取前一天的Github动态。 - 整理上述信息后,生成一份晨间提醒报告,发送到我的个人微信。
- 总体上该这是一个结构相对稳定、信息源相互独立的任务。
AI Agent执行“晨间提醒”定时任务的效率瓶颈主要集中以下两个方面:
获取工具用法:AI Agent在每次执行任务时,往往都会重新通过
everyday --help和gh --help命令获取命令行工具的用法说明。
类似地,AI Agent也会重新加载所需的Agent Skill并理解其意图和使用方式,做了很多重复的工作。串行执行命令:虽然各个信息源的获取是相互独立的,但AI Agent还是会按照顺序一个接一个地执行这些命令,导致整体执行时间较长。某些Agent支持运行并行子Agent执行多个子任务,但由语言模型进行任务的分派和结果汇总的效率也不高,并且会消耗大量的Token。
脚本化改造
考虑到我配置的“晨间提醒”定时任务的工作内容是相对稳定的,并且其涉及到的信息本质都可以执行命令行工具来获取,我让Workbuddy编写了一个Python脚本用于并行执行这些命令行工具获取原始信息,然后将结果汇总后再进行处理和生成报告,从而有效提升了执行效率并节省了大量Token。
脚本的设计方案与大致实现如下:
双阶段执行策略
- Phase 0 (串行同步):优先执行
everyday timeline sync和mail sync,确保本地缓存是最新的。这是唯一不能并行的部分,且一旦失败会阻断后续流程。 - Phase 1 (并行抓取):利用
ThreadPoolExecutor并发执行邮件查询、日历、待办、RSS、天气、新闻和 GitHub 动态等 I/O 密集型任务,极大缩短总耗时。
- Phase 0 (串行同步):优先执行
健壮的容错与兜底机制
- 核心/非核心分级:
mail、cal、todo标记为core=True,若失败则脚本报错退出(Exit 1);其他资讯类任务失败仅记录日志,不影响报告生成。 - 智能回退 (Fallback):针对 Windows 环境下 PowerShell 调用可能出现的特定错误,脚本内置了自动切换至
.exe直连的逻辑(should_fallback),确保环境兼容性。
- 核心/非核心分级:
数据与展示分离
- 每个数据源都严格遵循
cmd(定义命令)+fmt(解析 JSON/文本为 Markdown)的模式。 - 将复杂的过滤逻辑(如“过去24h邮件”、“未来7天日程”)下沉到脚本层处理,而非依赖 LLM,既节省了 Token,又避免了上下文污染。
- 每个数据源都严格遵循
标准化输出
- 最终生成一份结构化的 Markdown 文件(
简报素材_YYYY-MM-DD.md),作为“纯净的原材料”供给下游的 AI Agent 或其他分发渠道(如微信推送),实现了**“脚本采编,AI 润色”**的最佳分工。
- 最终生成一份结构化的 Markdown 文件(
1 | #!/usr/bin/env -S uv run --quiet --script |
AI Agent的CodeMode模式
我对“晨间提醒”任务的脚本化改造,一定程度上和CodeMode的理念相近。
Code Mode 是 AI Agent 的一种工具调用模式:不让模型逐个调用大量 Tool,而是提供一个代码执行环境,让模型生成代码,通过代码编排多个工具调用、数据处理和流程控制。优点是减少上下文、降低 token 消耗、支持循环/并行/条件逻辑,适合复杂任务。
- Cloudflare Agents:Code Mode 用一个小型 API/SDK 描述替代数千个工具定义,Agent 生成 JavaScript 调用 Cloudflare API,解决 MCP 大规模工具暴露问题。(Cloudflare Docs)
- Pydantic AI:提供原生
CodeModecapability,通过沙箱 Python(Monty runtime)让 Agent 编写代码调用 tools,并支持asyncio.gather并行执行。(Pydantic) - Claude Code:Claude Code Workflows是一种“用 TS 代码控制流程、用 LLM 执行节点”的确定性编排模式,通过代码调度并发与管道,在隔离上下文的同时避免长流程中的 Context 爆满问题。
结语
这次“晨间提醒”的脚本化改造,本质上是从 “让模型现场规划” 回归 “让代码负责确定性”。
它印证了在 AI Agent 的应用中,并非所有复杂任务都需要交给模型去实时编排。
当任务的“流程”是确定的,就该把它固化成代码;只有当“目标”是确定的而“路径”不确定时,才需要交给 Agent 去探索和规划。
这种“确定性下沉”的思路,将是未来优化 Agent 效率和成本的关键方向。