💡阅读指南

上一节的「未完成」用了纯文本 + Memory,够简单。这一节我们添加一些实用的功能。

5.1 升级什么

「未完成」已经能用了。一句记录、一条 Memory、三个文件工具,随手记东西很方便。但有些需求,它的确搞不定。

我用了一周,发现两个问题。

第一个是没有分类。原始版的未完成就是把你的话记下来,不加区分。你可能记了「明天下午三点开会」,也记了「帮妈妈买个生日礼物」,还记了一段「这本书的观点很有意思」。它们全混在一个文件里,按时间排。问「帮我看看这周的工作待办有哪些」,Hermes 只能把整个文件读一遍,靠猜来筛选。记的东西多了,纯靠关键字搜索有问题。

第二个是没有提醒。原始未完成只管记,不管什么时候提醒你。你跟它说「周六下午三点去取快递」,它会记下这句话,但到了周六下午它不会主动给你推消息。它不是忘了——是根本没有推送通知的能力。

所以这一节,我们给未完成补上两个功能:加上结构化的分类,加上定时提醒。

5.2 两个维度:对内容分类,是否提醒

先按内容分五个大类:

工作待办。 会议、任务、截止日期、需要协作的事项。

生活日常。 买菜、缴费、修东西、家人交代的琐事。

想法灵感。 突然想到的点子、想尝试的方案、写作素材。

学习笔记。 读书摘录、课程要点、技术笔记。

收藏。 想看的文章链接、别人推荐的工具。

我拿我过去一周记的所有东西试了一遍,五个类别全装进去了。

然后再多一个维度:需不需要提醒

同样一条记录,可能有截止日期也可能没有。举个例子:

  • 「下周一交周报」→ 属于工作待办,需要提醒 → 到点推送飞书
  • 「跟产品经理对齐一下需求」→ 属于工作待办,不需要提醒 → 安静记下来

区别不在于内容属于哪一类,在于它有没有明确的时间节点。所以每条记录独立决定要不要推送,跟它属于哪个大类无关。

分类由 Hermes 根据语义自动匹配。它读完你说的内容,先判断属于什么类别,再判断需不需要提醒。对你来说,跟以前完全一样——说一句话就行,不需要你特别说明属于什么分类,要不要提醒。

💡思考帧

这里有一个设计决策值得停下来想一想。同样是分类和提醒两个维度,你可以按不同顺序来组织:

方案 A:先按内容分类,然后每个分类下再区分需不需要提醒。 方案 B:先分需不需要提醒,再在每个类别下列出具体分类。

你觉得哪种更合理?考虑一下这几个场景:

  • 「下周一交周报」→ 工作待办 + 需要提醒
  • 「跟产品经理对齐需求」→ 工作待办 + 不需要提醒
  • 「周六下午取快递」→ 生活日常 + 需要提醒

想好之后往下看。

存储结构也升级了。原来的未完成备忘录是纯文本 Markdown,升级后用 JSON——多了 needs_reminderremind_at 两个字段:

JSON
{
  "content": "下周一交周报",
  "category": "工作待办",
  "needs_reminder": true,
  "remind_at": "2026-05-26 14:45",
  "status": "待处理"
}

5.3 提醒的逻辑

一条记录是否需要提醒,看它的 needs_reminder 字段。在入库时就定好了。让 Hermes 把字段为 true 的记录注册为 cron 定时任务,到点推送到飞书;值为 false 的什么也不做。

比如,「周六下午三点去取快递」→ Hermes 判断需要提醒,提取时间,注册 cron,到点推送。

而「这本书的观点很有意思」→ Hermes 判断不需要提醒,只管记下,不注册任何定时任务。

你还能主动查询已经注册的提醒:问一句「我今天有哪些提醒」,Hermes 读取数据,按 remind_at 排序,只返回状态为「待处理」的记录。

到了设定时间,飞书收到一条消息:

提醒:周六下午三点去取快递

5.4 直接告诉 Hermes 升级

把下面这段话发给 Hermes 就行:

code
帮我升级未完成备忘录,加上分类和提醒功能。

升级内容:
1. 数据结构改为 JSON,字段包括 content、category、needs_reminder、remind_at、status。
   - category:对内容进行分类,包括工作待办、生活日常、想法灵感、学习笔记、收藏
   - needs_reminder:是否需要提醒,布尔值
   - remind_at:提醒时间(仅 needs_reminder 为 true 时有值)
   - status:待处理 / 已完成
2. 每次记录新内容时,Hermes 根据语义自动判断属于哪个 category,同时根据内容是否有明确时间节点自动判断 needs_reminder。
3. needs_reminder 为 true 的记录注册 cron 定时任务,到点推送到飞书。
4. 如果有原始数据,一并对原始数据进行升级,改为 JSON。

几分钟后,它会回复一个包含完整代码和 cron 配置的 Skill。

然后试试看:

晚上 10 点 43 要开会

回复:

alt text

推送结果:

alt text

明天帮妈妈买个生日礼物

回复:

alt text

一个可能的灵感选题:

一个可能的博客或者是公众号选题:谈一谈现在 Qoder,它推出了 Order Work 这种可能看起来超强的 Agent 来辅助人们高效地办公和完成工作。确实能节约点时间,但问题是我们要考虑一下,充值 20 美金,跑几个任务就没了,用户节省的这点时间能赚回 Tokens 的钱吗?

Hermes 的回复很有趣,它说这种入不敷出的行为就是「赔钱货」:

alt text

因为我们设置了 Hermes 的人格,所以它会引用王小波或者鲁迅的作品、生平,我非常喜欢这种不经意的“温暖“,能增加点文学知识,也能消解下无聊的工作。

5.5 升级前后对比

升级完,可以对比一下变化:

方面 升级前 升级后
数据存储 纯文本 Markdown 结构化 JSON
分类 没有分类 五个内容分类,每条独立标记是否需要提醒
提醒 没有提醒 定时推送,按需标记
查询 全文搜索,靠模型理解 按分类/是否需要提醒/状态筛选,精确
行为可预测性 依赖模型上下文 代码逻辑固定

升级完,原来的功能还在。随手记一条还是说一句就行,和以前一样快。但多出来的分类筛选和定时提醒,是以前做不到的。

两种方式不是替代关系,是同一个需求不同阶段的做法:

一开始,只想「把东西记下来」。一条 Memory 最快、成本最低,说一句它记上,完事。

用了一段时间,发现需要分类筛选、需要到点提醒。很多时候,一个需求就是这样长出来的。

5.6 ■ 原来如此

如果你懂点程序,又有一定的好奇心,你一定会奇怪为什么 Hermes 不需要我们写代码,就能实现整个「未完成」?

其实在 AI 时代了解这些机制变得比以前要简单很多,你可以让 AI 解析 Hermes 源码,也可以直接问 Hermes。我本来打算以我的口吻来解答这个机制,但我觉得给出 Hermes 的回答更能让你体会到现在 AI 的强大。

📌说明

下面这段话来源于 Hermes 的原始回答,但它并不是一次回答成型的。这是通过和 Hermes 多轮对话,利用我自身的经验和知识反复讨论之后得到的一个综合结果。想深刻理解它的原理,不太可能随便问问就得到准确的答案,信息的整合是必要的一步。不过,我努力保留了 Hermes 原始的口吻。

让我把背后的机制一层层拆开给你看,就跟鲁迅解剖社会的刀法一样——一刀一刀,不藏不掖。

第一层:你的话进了我的耳朵

你说「一个可能的博客选题……」——这句话本身没有「备忘录」三个字,也没有「未完成」三个字。但我不是靠关键词匹配的。

第二层:我脑子里一直有张纸条

每次对话开始,Hermes 会把 memory 注入到系统提示词里。我的 memory 里有一条:

备忘录「未完成」数据存于 ~/Desktop/gingery-wiki/未完成.json。……记录时自动分类、判断是否需要提醒。

这条 memory 就像你在我脑门上贴了张便签:「看见想法类的东西,记到未完成里去。」只要我在线,这张便签就在。

第三层:模型自己做判断

这里就是关键了——没有 if-else 代码,没有 trigger 关键词。就是大模型读完你的话,结合系统提示词里所有指令(包括 memory),自己决定:「嗯,这是个博客选题,属于『想法灵感』,应该写到未完成.json 里。」

然后它调用工具: 1. terminal("cat 未完成.json") → 读现有数据 2. 在脑子里构造新的 JSON 条目 3. write_file → 写回去

这个过程跟你说的 Skill 机制本质一样,只是触发方式不同:

Skill 触发 Memory 触发
匹配机制 description 字段做语义匹配 memory 文本直接混入系统提示词
谁做的匹配 系统层(Hermes 框架) 模型层(LLM 自己)
确定性 高——description 写清楚了才会加载 低——靠模型理解,可能漏可能错
灵活性 低——必须事先写好 description 高——自然语言描述就行

所以你看到的「准确知道要做什么」,不是一段精确的代码逻辑,而是:

memory(便签)+ 你的输入(语义)+ 可用工具列表 → LLM 自主决策

这条路的好处是灵活——你说「晚上开会」没提备忘录,我也知道要记。坏处是不稳定——如果你说「晚上开会」但其实是在回忆昨天发生的事,我可能多记一条。

要解决这个不稳定,就得写成一个 Skill,用 description 精确控制触发条件。但那样的话,你说「我有个想法」和「记个事」就变成两套逻辑了——你现在这样一句话搞定,恰恰是 memory 这种「模糊匹配」带来的红利。

用鲁迅的话收尾:「世上本没有路,走的人多了,也便成了路。」我这个「未完成」机制也不是设计出来的——是你说了几次「记一下」,我记了几次,慢慢形成的习惯。

5.7 ■ 学点英语

中文 English 音标 说明
分类 Classification /ˌklæsɪfɪˈkeɪʃən/ 按规则或模型判断把内容归入不同类别
定时器 Scheduler /ˈskedʒuːlər/ 按时间计划触发任务执行的组件
提醒规则 Reminder Rule /rɪˈmaɪndər ruːl/ 决定何时提醒用户的条件和动作
意图识别 Intent Recognition /ɪnˈtent ˌrekəɡˈnɪʃən/ 判断用户输入背后真实意图的过程