用 AI 编程做 AI 热点监控工具这三个月,我踩过不少坑。其中最隐蔽的一个,跟模型聪不聪明无关------
Cron 定时扫热点,Cursor 里的对话再长,也帮不上忙。
解决问题的博客文章: 《我的 AI Agent 工作了 3 周,但它还是像失忆一样》
热点监控看起来简单,状态却很容易丢
这个项目的需求很直白:配置关键词,定时从 Twitter、HackerNews、B 站等数据源抓取内容,AI 分析真假和相关性,有重要结果就推送通知。
用 Cursor 写代码时,一切都很顺。模型记得我刚才改了哪个接口、哪个组件报错了、Prisma schema 加了什么字段。聊得热火朝天,感觉它「全记住了」。
但第一次把定时任务跑起来,问题就来了。
某个关键词「Claude 4」已经扫过一遍,数据库里也有记录。第二天 Cron 触发,日志里它又从头抓、从头分析,把昨天判成「低相关」的内容再跑一遍 AI------Token 烧了不少,通知栏还弹了重复条目。
我去翻 Cursor 的聊天记录,昨天的分析结论一字不少。可 Cron 进程根本读不到那段对话 。它只认数据库、只认 lastScannedAt、只认这次任务写进去的 Hotspot 行。
那一刻我才意识到:我在 IDE 里跟 AI 聊出来的「项目理解」,和系统真正跑起来需要的「运行状态」,完全是两回事。
聊天记录管的是「写代码」,数据库管的是「跑业务」
后来我把需要跨任务保留的信息,全部落到了持久化层:
| 需要记住的 | 存在哪 | 为什么 |
|---|---|---|
| 关键词上次扫描时间 | Keyword.lastScannedAt |
避免重复抓取 |
| 用户开关的数据源 | Settings 表 | Cron 按配置决定抓哪些源 |
| 已入库的热点 | Hotspot 表 + URL 去重 | 防止同一链接反复通知 |
| AI 分析用的 prompt 偏好 | 设置页 + .env |
换会话也不丢 |
这些不是 RAG,也不是向量库,就是普通的关系型存储。但对一个 7×24 定时跑的 Agent 链路 来说,比任何聊天窗口都可靠。
Cursor 会话关掉,代码还在 Git 里;Cron 跑完,状态还在 SQLite 里。下次任务启动,读的是磁盘上的事实,不是「你上次跟模型说了什么」。
给 AI 编程同学的三个习惯
这三个月下来,我给自己定了三条规矩,跟写业务代码无关,跟 怎么跟 AI 协作 有关:
1. 任务状态写进文件,别写进聊天
让 AI 分析 monorepo、改十个文件的时候,我会要它在 docs/ 或项目根目录留一个 checkpoint:改动了哪些文件、还剩什么没做、有什么风险。新开会话,先让它读这个文件,而不是说「继续上次的工作」。
2. 长期运行的逻辑,必须有外部存储
凡是 Cron、Webhook、后台 Job 会用到的东西------上次执行时间、去重键、用户配置------不能指望 prompt 里「提醒一下」。我在热点监控里吃过亏,后来每个 Job 入口第一件事就是读库。
3. Agent Skills 是能力,不是记忆
项目里封装了 Agent Skills 技能包,Cursor / Claude Code 可以直接调热点搜索、关键词管理。但 Skills 告诉模型「能做什么」,不告诉它「上次做到哪」。记忆还得靠项目里的数据库和配置文件。
这跟「Agent 失忆」是同一类问题
上面说的,本质上是 聊天上下文 和 Agent 运行状态 的边界问题。
IDE 里跟 AI 结对编程,聊天记录就是它的「短期记忆」------窗口够大,体验确实像它在持续理解项目。但一旦 Agent 脱离聊天界面、独立跑任务,这段记忆就断了。
最近读到 VPSSPark 一篇 OpenClaw 实践笔记,把这个问题讲得很透------作者让 Telegram Agent 跟进了三周客户,对话全留着,结果发邮件时问「您是哪家公司」。文章标题就叫 《我的 AI Agent 工作了 3 周,但它还是像失忆一样》。场景跟热点监控不同,但根因一样:把聊天记录当成了 Memory。
我做的是定时扫热点,他们做的是长期跟客户------表面业务不一样,底层都需要回答同一个问题:下次启动时,Agent 从哪里恢复状态?
我的最小实践清单
如果你也在用 AI 做自动化工具,不一定需要上向量库或 Memory 框架。可以先从这几件事做起:
- 每个定时任务有 idempotency ------同一个输入,跑两次不应产生两份副作用。热点监控靠 URL 去重 +
lastScannedAt实现。 - 关键决策有落盘记录------AI 判定的真假、重要性,写入数据库,而不是只出现在当次日志里。
- 换会话前先让 AI 写 checkpoint------一行也行:「docs/ 写到第三章,待确认 legal 条款」。
- Settings 和 Secrets 分离------业务配置进库或配置文件,API Key 进环境变量,别让模型在聊天里「记住」密钥。
做到这四条,Agent 就算没有 fancy 的 Memory 系统,也不会每次开机都像第一天。
写在最后
AI 热点监控这个项目,让我从「跟 AI 聊天写代码」走到了「让 AI 链路自己跑起来」。后者多了一层工程问题:状态存在哪、怎么读、怎么过期。
Cursor 的上下文窗口再大,也替代不了一个 lastScannedAt 字段。
如果你也在修长期运行的 Agent,推荐读一下 VPSSPark 那篇 OpenClaw 失忆复盘------他们从客户跟进、Claude Code 重复劳动到 Memory / Gateway 分层,视角不同,问题同源。
先把「下次启动读什么」想清楚,再谈窗口有多大。