我对日历有个不满:它们太被动了。
它们只是静静地躺在那里,像一个个空白的网格,等着 我 去告诉它们该做什么。我有很多目标——“精通 Rust”、“跑马拉松”、“发布一个 SaaS”——但除非我手动将色块拖入网格(而我总是不可避免地拖延),否则这些目标永远只是抽象的愿望。
所以,我决定改变它。
我构建了一个住在终端里的 AI 目标代理 (AI Goal Agent) 。我给它一个高层目标,它会:
- 反向工程 :从我的截止日期倒推路线图。
- 网络搜集 :使用 Puppeteer 搜集与该目标相符的真实活动、黑客松或会议。
- 语境感知 :扫描我的笔记,将现有资料与这些新里程碑关联。
- 冲突协商 :进行冲突检测,确保不会跟我已有的排期撞车。
以下是我如何使用 Astro , Puppeteer , 和 Vercel AI SDK 构建它的。
架构:本地代理,云端大脑
由于搜集网页和处理数据很耗时(且 Puppeteer 运行较重),我不希望它作为一个 Serverless 函数在每次页面加载时运行。我将其构建为一个 本地 CLI 代理 。
- 大脑 :GPT-4o (通过 Vercel AI SDK)
- 手脚 :Puppeteer (无头浏览器)
- 记忆 :Astro DB (SQLite/LibSQL)
- 界面 :React + Framer Motion (用于前端可视化)
工作流很简单:
npx tsx scripts/schedule-goal.ts --goal "2026 年底前精通 Rust"
第一步:“反向排期”大脑
代理的核心是“规划器 (Planner)”。大多数人的规划方式是错误的:他们从 今天 开始往后推。而高效的项目经理则是从 截止日期 往回推。
我在提示词中给了 AI 代理一个“项目经理”的人设:
// scripts/schedule-goal.ts
const { text: "planText"} = await generateText({
model: "openai('gpt-4o')",
prompt: "`你是一名资深项目经理。用户的目标是:'${goal"}"。
第一部分:反向排期 (Reverse Scheduling)
如果目标包含截止日期(如 "2026"),创建一个“反向路线图”。
从截止日期开始倒推,生成 3-5 个高层“里程碑”。
格式:"MILESTONE: YYYY-MM-DD : "里程碑标题"
第二部分:搜索查询
生成搜索查询,用于寻找现实世界中的活动(会议、发布会等)。`,
});
这种简单的思考逻辑转换改变了一切。它不再是今天开始的空洞“学习语法”,而是给了我:
- 2026-10-15:“完成生产级项目”
- 2026-08-01:“贡献开源社区”
- 2026-05-20:“高阶内存管理”
第二步:语境感知 (大脑联动)
如果我不知道在里程碑期间要做什么,日历上的活动就是无用的。我在 _workspace 文件夹里有几百个 Markdown 笔记——草稿、研究、教程等。
我给代理添加了一个“语境扫描器”。在排定里程碑前,它会扫描我的本地知识库。
现在,当代理排定“学习 Rust 借用检查器”时,它会自动附加描述:\n📚 相关语境: _workspace/notes/rust-mechanics.md。我的日历现在与我的大脑建立了超链接。
第三步:冲突检测 (外交官)
自动排期工具最让人烦的一点是它们无视现实。它们会在我去看牙医的那天给我排“深度工作”。
我实装了一个简单的“外交官”检查。在提交前,它会查询 Events 数据库。
这是一个简单的启发式方法(只是往后推一天),但它解决了 90% 的摩擦。
路线图可视化
日历网格对 天 很有用,但对 进度 很糟糕。我需要看到目标的弧线。
我使用 Framer Motion 构建了一个 StatusTimeline 组件。它位于日历上方,线性展示里程碑的进展。
结语:为什么这很重要
我们经常把 AI 当作一个“生成内容”的按钮。但它真正的力量在于“生成结构”。
通过将目标设定的 后勤工作——反向排期、活动搜集、冲突检查——外包出去,我消除了启动的摩擦。我不需要自己“计划”如何精通 Rust,我只需要在代理为我标记好的日子出现并执行。
这就是 代理型 AI (Agentic AI) 的承诺:它不仅帮你干活,它还帮你管理工作流。






⚠️ コメントのルール
※違反コメントはAIおよび管理者により予告なく削除されます
まだコメントがありません。最初のコメントを投稿しましょう!