给 AI Agent 装上"长期记忆":一个 200 行 Rust 库解决 LLM 的致命短板

如果你的 AI 助手每次对话都像失忆一样从零开始,这篇文章就是为你写的。


一、ChatGPT 那么强,为什么它还是记不住你?

试过让 GPT 帮你连续写代码吗?第二天打开,它又问你"请提供项目背景"。这不是 GPT 不聪明,而是所有大语言模型(LLM)都有一个先天性缺陷每次对话都是孤立会话,没有记忆

市面上的解决方案五花八门------LangChain 的 Memory 模块、Mem0、Zep、Letta------但它们大多笨重,不是强依赖 Python 生态就是绑定了特定框架。做 Rust 技术栈的 Tauri 应用、嵌入式 Agent,或者需要一个零重依赖、即时可用的记忆系统?选择很少。

于是我写了个开源库:ai-memory-core。核心代码不到 800 行,仅依赖 serde 几项 Rust 标配,却能提供完整的持久化记忆能力。


二、核心理念:热记忆 + 冷记忆

我把记忆拆成两层:

scss 复制代码
┌────────────────────────────────┐
│       热记忆 (Hot Memory)       │  ← 每次对话自动注入 system prompt
│   Token 预算:2000 tokens       │     按优先级排序,高价值记忆优先
├────────────────────────────────┤
│       冷记忆 (Cold Memory)      │  ← 全部历史,持久化到磁盘
│   格式:memories.md (纯 Markdown) │     人类可读、grep 友好、可手动编辑
└────────────────────────────────┘

热记忆 丢进 LLM 上下文窗口,让 AI 每次对话都知道你的偏好和项目背景。冷记忆落盘,永远不会丢。

冷记忆的存储用了纯 Markdown 文件 ------对,就是 .md 文件。不是 SQLite,不是向量数据库,不是 Redis。你可以用 VS Code 打开 memories.md 直接看、直接改。极致简单。


三、三段伪代码看懂怎么用

第一步:保存记忆

rust 复制代码
use ai_memory_core::handle_memory_save;

// 空间路径 + 内容,就这么简单
handle_memory_save("Preferences/programming-languages", "偏好 TypeScript 和 Rust")?;
handle_memory_save("Decisions/database-choice", "生产环境使用 PostgreSQL")?;

路径结构是 Wing/Hall/Room 三层分类------想象成图书馆的"馆/厅/室"------让记忆有组织地生长,而不是扔进一个扁平列表。

第二步:注入到 System Prompt

rust 复制代码
use ai_memory_core::inject_memories_into_system_prompt;

let prompt = "You are a helpful coding assistant.";
let enriched = inject_memories_into_system_prompt(prompt);

// 输出变成了:
// "You are a helpful coding assistant.
//  [USER_MEMORY]
//  偏好 TypeScript 和 Rust (高优先级, 被访问 8 次)
//  生产环境使用 PostgreSQL
//  [/USER_MEMORY]"

系统自动做了三件事:① 加载全部记忆 ② 按"访问频次×是否为高价值记忆"排序 ③ 控制在 2000 token 预算内。你不需要手动截断。

第三步:会话结束后自动提取新记忆

rust 复制代码
use ai_memory_core::extract_memories_with_llm;

// 传 API Key + 对话记录 + 模型提供商
let count = extract_memories_with_llm(
    &api_key,
    &conversation_history,
    "deepseek"  // 也支持 anthropic / openai
).await?;

println!("本次会话提取了 {count} 条新记忆");

LLM 会自动从对话中识别偏好、决策、知识,并写进对应的 Memory Hall。你可以在 prompts/memory/extract.md 里自定义提取规则,修改后立即生效,不需要重新编译。


四、三个容易被忽视的"魔鬼细节"

① MD5 指纹去重

相同内容的记忆不会被重复写入,只更新日期。不是靠标题或 ID,是靠内容哈希。你写"偏好 TypeScript"和上次一样,它就只刷时间戳。

② 跨会话"热度"算法

每条记忆背后有一个 MetadataStore,记录访问次数。如果一个偏好被引用了 5 次以上,系统自动标记为"高价值",下次注入更靠前。这本质上是一个无监督的强化信号 ------不是你告诉系统什么重要,而是系统从使用模式中自己学会

③ 零重依赖,编译即用

核心依赖列表:serdeserde_jsonchronodirsmd-5。没有 async runtime(除非你开 llm-extraction feature)、没有数据库 driver、没有网络库。编译时间以秒计,二进制增量极小。


五、适合谁用?

场景 为什么合适
Tauri 桌面 AI 应用 Rust 原生,直接嵌入 sidecar
自建 AI CLI 工具 会话记忆自动持久化,跨重启保留
LLM Agent 框架 作为 Memory Backend 接入 Agent 生命周期
嵌入式/边缘设备 零数据库依赖,Markdown 文件即可

六、开源 & 一行命令开始

bash 复制代码
cargo add ai-memory-core
# 如果需要 LLM 自动提取:
cargo add ai-memory-core --features llm-extraction

项目地址:github.com/peterfei/ai...

写这个库的初心很简单:AI 应该有记忆,而实现记忆不应该引入一整套基础设施。一个 Markdown 文件 + 几百行 Rust 代码,足够了。

如果你也在做 AI Agent 方向的产品,欢迎试用、提 Issue、提 PR。让 AI 不再"失忆",从这一行 Cargo.toml 开始。


标签:#AI编程 #Rust #LLM #开源工具 #AI记忆系统 #Agent开发

相关推荐
星栈19 小时前
Dioxus 多页面怎么做:`dioxus-router`、嵌套路由、`Outlet` 和页面组织,一篇给你讲顺
前端·rust·前端框架
Rust研习社2 天前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
红尘散仙3 天前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
vivo互联网技术3 天前
从 Web 到桌面:基于 Tauri 2.0 + Vue 3 打造 vivo 线下门店「大头贴」拍照体验系统
前端·rust
Rust研习社4 天前
这 8 个 Rust 学习资源值得每个新手收藏起来
后端·rust·编程语言
星栈5 天前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
望眼欲穿的程序猿5 天前
读取芯片内部温度传感器
嵌入式硬件·rust
望眼欲穿的程序猿5 天前
ADC 模拟电压采集
嵌入式硬件·rust
codexu_4612291875 天前
NoteGen 里一条记录如何变成 Markdown
前端·笔记·rust·tauri
Rust研习社5 天前
Rust 错误处理的黄金搭档:一个定义错误,一个传播错误
后端·rust·编程语言