首页 / 正文

给 AI 做一套“像人一样”的记忆系统:Trunk → Task → Skill → Recipe

Mooko
发布于 2026-05-19 · 5分钟阅读
2020 浏览
0 点赞 暴击点赞!

给 AI 做一套“像人一样”的记忆系统:Trunk → Task → Skill → Recipe

很多人做 AI 记忆,一上来就想:

能不能把所有聊天记录都存起来?下次直接让 AI 查。

听起来很合理,对吧?

但真做起来你会发现,问题一堆:

  • 记了太多废话,召回时全是噪音
  • 同一件事重复存了八遍
  • 用户偏好和临时任务混在一起
  • 旧经验和新经验打架
  • 上下文塞爆了,模型开始胡说

AI 记忆要像人,不是像硬盘。

人类不会把每一句对话原封不动背下来。咱们会记住:

  • 这个人喜欢什么
  • 他上次做过什么事
  • 哪个方法有效
  • 哪个坑踩过
  • 下次遇到类似问题该怎么处理

所以,好的 AI 记忆系统,核心不是“存更多”,而是“记得更聪明”。

我更推荐一套四层结构:

Trunk → Task → Skill → Recipe

它能把碎片信息变成任务,把任务变成经验,把经验组合成方案。

用在人类身上,大概就是:

  • Trunk:你脑子里零散的印象
  • Task:你判断出对方要干什么
  • Skill:你做完之后留下的方法
  • Recipe:你反复验证后形成的一套打法

下面咱们拆开讲。你照着这个结构做,AI 助手会明显更“懂你”。


一句话理解这套记忆架构

这套结构解决的是一个问题:

AI 怎么从零碎对话里,沉淀出长期可复用的经验?

别让 AI 每次都从头想。

你每天让它写日报、整理会议纪要、生成小红书标题、分析客户反馈。如果它永远只记得当前对话,那它就是个临时工。

真正好用的 AI 助手,应该像老同事:

  • 知道你喜欢短句
  • 知道你讨厌空话
  • 知道你们公司周报格式
  • 知道上次那个方案哪里被老板喷了
  • 下次再写时会主动避开坑

这就需要把记忆分层。


Trunk:所有原始碎片都先扔进这里

Trunk 是原始信息层。

它像一个杂物箱,先别急着判断价值,先接住信息。

常见来源包括:

  • 用户聊天记录
  • 用户上传的文档
  • 操作日志
  • 会议纪要
  • 网页内容
  • 邮件内容
  • 用户手动写下的偏好
  • AI 执行任务时产生的中间过程

比如用户说:

“以后帮我写文章,别写太官方。我喜欢像朋友聊天那种,短句多一点,最好带点吐槽。”

这句话原样进入 Trunk。

再比如用户说:

“上次那个标题太平了,老板说没点击欲望。”

也进入 Trunk。

这里不要过度加工。

Trunk 的职责很简单:

  • 保存原始上下文
  • 保留细节
  • 给后面抽取任务和经验提供材料

Trunk 不要犯的错

很多人会把 Trunk 当成长期记忆库,直接用于召回。

这很危险。

因为原始信息里有大量噪音:

  • 临时情绪
  • 过期偏好
  • 反复试错
  • 没有确认的猜测
  • AI 自己生成的废话

如果你把这些东西一股脑塞回上下文,AI 很容易变成“考古学家”。翻半天旧账,还抓不到重点。

Trunk 可以大,但召回要克制。


Task:从碎片里识别用户真正想做什么

Task 是任务层。

它负责从 Trunk 里抽取用户意图,并整理成一个可执行任务。

用户说话经常很散。

比如:

“我这个月想发点 AI 教程,但别太硬核。最好让小白也能看懂。之前发的那篇收藏不错,就是标题一般。”

这段话里混了好几类信息:

  • 用户想做 AI 教程内容
  • 目标读者是小白
  • 风格不要太硬核
  • 之前某篇文章收藏不错
  • 标题需要优化

Task 层要做的事,就是把这些碎片整理成任务:

{
  "task_name": "创作面向小白的 AI 教程文章",
  "user_intent": "生成更容易理解、更有收藏价值的 AI 教程内容",
  "constraints": [
    "不要太硬核",
    "适合小白",
    "标题要更有点击欲望"
  ],
  "success_criteria": [
    "读者能照着做",
    "文章结构清晰",
    "标题比之前更吸引人"
  ],
  "source": "用户对内容方向的描述"
}

这一步很关键。

因为 AI 真正要执行的不是“记住这句话”,而是理解:

用户现在要完成什么任务?

Task 应该包含什么字段?

建议至少记录这些:

{
  "task_id": "task_202601_ai_tutorial_001",
  "task_name": "任务名称",
  "intent": "用户意图",
  "inputs": ["输入材料"],
  "constraints": ["限制条件"],
  "preferences": ["用户偏好"],
  "output_format": "期望输出格式",
  "status": "pending / running / completed / failed",
  "created_at": "创建时间",
  "updated_at": "更新时间"
}

如果你的 AI 助手能稳定抽取 Task,后面就好办了。

因为经验沉淀不是从聊天记录里直接来的,而是从任务里来的。


Skill:任务完成后,沉淀可复用经验

Skill 是经验层。

这层最有价值。

Task 是“这次要做什么”。

Skill 是“下次遇到类似任务,应该怎么做”。

举个例子。

用户让 AI 写一篇小红书文案,改了三轮后终于满意了。

这时不要只保存最终文案。

更应该沉淀出 Skill:

{
  "skill_name": "小红书 AI 工具教程文案写法",
  "applicable_scenarios": [
    "AI工具教程",
    "小红书种草内容",
    "面向新手用户的操作指南"
  ],
  "method": [
    "标题用痛点或结果开头",
    "开头直接说适合谁",
    "步骤控制在 3 到 5 个",
    "每一步配一个具体使用场景",
    "结尾给收藏理由"
  ],
  "user_preferences": [
    "短句",
    "口语化",
    "少用专业术语",
    "可以轻微吐槽"
  ],
  "avoid": [
    "不要写成官方说明书",
    "不要堆功能名",
    "不要用空泛口号"
  ],
  "evidence": "用户第三轮修改后确认满意",
  "version": "1.0"
}

这就不是普通记忆了。

这是可复用经验。

下次用户再说“帮我写一个 AI 工具教程”,系统不用从零开始猜。直接调用这个 Skill,效果会稳很多。

Skill 要处理去重和升级

Skill 不能无限堆。

不然你会得到 20 条“用户喜欢口语化”的记录。看着很努力,其实很乱。

推荐给 Skill 做三件事:

1. 去重

如果新经验和旧经验高度相似,不要新建一条。

应该合并。

比如旧 Skill 写着:

用户喜欢短句、口语化。

新任务里又发现:

用户希望像朋友聊天,不要太官方。

这两条可以合并成:

用户偏好朋友聊天式表达,短句、自然、有轻微情绪,不喜欢官方腔。

2. 置信度

不是用户随口一句话,就要当圣旨。

可以给 Skill 加一个置信度:

{
  "confidence": 0.82,
  "confirmed_by_user": true,
  "usage_count": 6,
  "last_success_at": "2026-01-15"
}

用户多次确认有效,置信度提高。

某次使用翻车,置信度降低。

3. 版本迭代

经验会过期。

去年有效的内容模板,今年可能没人点。

所以 Skill 要允许升级:

{
  "skill_name": "AI教程文章写作风格",
  "version": "1.3",
  "changes": [
    "减少开头背景铺垫",
    "增加避坑清单",
    "每个步骤增加可执行示例"
  ]
}

别把记忆做成博物馆。

它应该是训练场。


Recipe:把多个 Skill 组合成一套成熟方案

Recipe 是方案层。

它由一个或多个 Skill 组成,用来解决更完整的问题。

如果 Skill 是一个招式,Recipe 就是一套打法。

比如用户经常做“AI 教程文章”。这里面会用到多个 Skill:

  • 标题设计 Skill
  • 小白友好解释 Skill
  • Markdown 结构 Skill
  • 示例生成 Skill
  • 避坑清单 Skill
  • 口语化表达 Skill
  • SEO 标签 Skill

这些 Skill 可以组合成一个 Recipe:

{
  "recipe_name": "高质量 AI 教程文章生产流程",
  "goal": "把原始素材整理成可发布的 AI 教程文章",
  "skills": [
    "AI教程标题设计",
    "小白友好解释",
    "Markdown结构编排",
    "操作步骤拆解",
    "避坑清单生成",
    "口语化表达优化"
  ],
  "workflow": [
    "识别素材主题和目标读者",
    "提炼核心观点",
    "设计教程结构",
    "补充操作步骤和示例",
    "加入避坑提醒",
    "统一语言风格",
    "生成标题、摘要和标签"
  ],
  "quality_checklist": [
    "读者是否能照做",
    "是否有具体场景",
    "是否避免空话",
    "是否有示例",
    "是否有避坑清单"
  ],
  "version": "2.0"
}

这层最接近“人类专家”。

一个新手会说:

我会写标题。

一个熟手会说:

我知道一篇 AI 教程从选题到发布该怎么走。

Recipe 就是熟手的工作流。


为什么召回顺序要反过来:Recipe → Skill → Task → Trunk

很多系统召回记忆时喜欢从原始记录开始找。

我不建议这么做。

更稳的顺序是:

Recipe → Skill → Task → Trunk

也就是从高层经验往底层材料查。

原因很简单:AI 上下文有限。

你不能把所有东西都塞进去。塞得越多,模型越容易抓错重点。

Recipe 优先:先拿成熟方案

如果用户说:

“帮我把这段素材写成 AI 教程文章。”

系统应该先查有没有对应 Recipe。

比如查到:

高质量 AI 教程文章生产流程

那就直接拿来用。

这比去翻 200 条聊天记录靠谱多了。

Skill 补充:再拿关键经验

Recipe 给流程,Skill 给具体做法。

比如:

  • 用户喜欢短句
  • 要有避坑清单
  • 标题不要太虚
  • 示例要接地气

这些 Skill 会让结果更贴合用户。

Task 对齐:确认当前任务约束

同一个 Recipe,不同任务也有差异。

今天用户可能要写公众号。

明天用户可能要写小红书。

Task 层负责确认本次任务的要求:

  • 输出格式
  • 字数范围
  • 目标平台
  • 风格要求
  • 输入材料

Trunk 兜底:需要细节时再翻原始材料

Trunk 不应该默认全召回。

只有需要查证细节时再用。

比如:

  • 用户提到“上次那篇文章”
  • 需要引用原始会议内容
  • 需要确认某个历史版本
  • Skill 之间发生冲突,需要看证据来源

这时再去 Trunk 找原话。

这样既省上下文,也减少记忆打架。


一套可落地的记忆写入流程

你可以把 AI 每次对话后的记忆处理,拆成 5 个动作。

1. 收集 Trunk

保存原始信息。

包括用户输入、关键输出、文件摘要、操作结果。

建议给每条 Trunk 加元数据:

{
  "trunk_id": "trunk_001",
  "content": "用户希望文章更口语化,像朋友聊天,不要太官方。",
  "source": "chat",
  "created_at": "2026-01-15T10:00:00Z",
  "related_task_id": "task_001"
}

2. 抽取 Task

从 Trunk 里判断有没有明确任务。

如果有,就生成 Task。

{
  "task_id": "task_001",
  "task_name": "改写 AI 教程文章",
  "intent": "把原始素材整理成适合发布的 Markdown 教程",
  "constraints": [
    "口语化",
    "短句",
    "有示例",
    "有避坑清单",
    "输出 JSON"
  ],
  "status": "completed"
}

3. 任务结束后提炼 Skill

等任务完成,再问一个问题:

这次有什么经验下次还能用?

比如:

{
  "skill_name": "AI教程文章结构优化",
  "method": [
    "开头直接指出常见误区",
    "用具体场景解释抽象概念",
    "每个核心概念配一个 JSON 示例",
    "结尾给避坑清单"
  ],
  "avoid": [
    "不要堆概念",
    "不要用官方腔",
    "不要写没有操作价值的背景铺垫"
  ]
}

4. 合并或升级 Skill

检查已有 Skill。

如果相似,就合并。

如果冲突,就记录版本和证据。

比如:

{
  "conflict": {
    "old": "用户喜欢详细解释",
    "new": "用户要求短句,不要长篇铺垫"
  },
  "resolution": "保留详细解释,但拆成短段落和要点列表",
  "updated_skill": "复杂概念短句化解释"
}

这个处理很重要。

不然 AI 会一边写“详细”,一边写“简短”,然后交出一篇又长又空的东西。看完只想关电脑。

5. 如果多个 Skill 高频组合,就生成 Recipe

当你发现某几个 Skill 经常一起出现,就可以升级成 Recipe。

比如这些 Skill 经常同时被调用:

  • 教程结构
  • 标题优化
  • 口语化表达
  • 避坑清单
  • Markdown 输出

那就生成一个 Recipe:

{
  "recipe_name": "AI教程文章发布模板",
  "trigger": [
    "用户要求写 AI 教程",
    "用户提供原始素材",
    "用户要求 Markdown 输出"
  ],
  "skills": [
    "教程结构搭建",
    "标题优化",
    "短句口语化",
    "案例补全",
    "避坑清单"
  ]
}

记忆召回的实战提示词模板

下面这段可以直接放进你的 Agent 系统里。

你需要为当前任务召回长期记忆。

召回顺序如下:
1. 优先查找可直接解决当前任务的 Recipe。
2. 如果 Recipe 不够具体,再查找相关 Skill。
3. 读取当前 Task 的约束、输入、输出格式和成功标准。
4. 只有在缺少证据、需要原始细节或存在冲突时,才查询 Trunk。

召回后请进行压缩,只保留对当前任务有帮助的信息。
不要把无关历史记录塞进上下文。
如果记忆之间冲突,请优先使用:
- 用户最近明确确认的信息
- 成功完成任务后沉淀的 Skill
- 高置信度 Recipe

输出格式:
- 命中的 Recipe
- 命中的 Skill
- 当前 Task 约束
- 必要 Trunk 证据
- 冲突处理说明

注意:模板里可以有编号,文章行文别硬靠“首先其次最后”就行。


记忆冲突怎么处理?别让 AI 精神分裂

AI 记忆最容易翻车的地方,就是冲突。

比如旧记忆写着:

用户喜欢专业、严肃、信息密度高。

新记忆写着:

用户喜欢口语化,像朋友聊天。

那到底听谁的?

建议用这套优先级:

用户明确指令 > 推测偏好

用户直接说“这次要轻松一点”,那就听这次的。

别拿老偏好压当前任务。

最近确认 > 很久以前

用户偏好会变。

三个月前喜欢严肃,不代表今天还喜欢。

成功经验 > 普通聊天

用户明确说“这版可以”,这种反馈价值很高。

比一句随口吐槽更值得保存。

Recipe > Skill > Task > Trunk

高层经验更稳定。

底层碎片只做证据,不要喧宾夺主。


一个完整例子:从一句话到长期记忆

用户说:

“以后你帮我写 AI 教程,别上来就讲大背景,太烦了。直接告诉我怎么做。最好有代码、有避坑、有例子。”

Trunk 记录

{
  "type": "trunk",
  "content": "用户要求 AI 教程不要大背景,直接讲操作,要有代码、避坑、例子。"
}

Task 抽取

{
  "type": "task",
  "task_name": "优化 AI 教程写作方式",
  "intent": "让 AI 教程更直接、更可执行",
  "constraints": [
    "不要大背景铺垫",
    "直接讲怎么做",
    "包含代码",
    "包含避坑",
    "包含例子"
  ]
}

Skill 沉淀

{
  "type": "skill",
  "skill_name": "直接可执行型 AI 教程写法",
  "method": [
    "开头点出问题和结果",
    "正文用步骤和示例推进",
    "必要时给代码片段",
    "每个关键步骤补充避坑提醒",
    "减少宏大背景介绍"
  ],
  "avoid": [
    "长篇介绍行业背景",
    "空泛讲价值",
    "只讲概念不给操作"
  ]
}

Recipe 升级

如果这个 Skill 多次用在文章生产里,就能升级成 Recipe:

{
  "type": "recipe",
  "recipe_name": "直接可执行型 AI 教程生产流程",
  "workflow": [
    "提炼读者当前痛点",
    "给出最终能得到的结果",
    "拆成可操作步骤",
    "补充代码或配置示例",
    "加入避坑清单",
    "给出可复用模板"
  ]
}

这就是从碎片到方案的全过程。

很像人类学习。

一次经历是素材。

多次完成任务后,形成经验。

经验反复验证,就变成方法论。


避坑清单:做 AI 记忆最容易踩的坑

坑 1:什么都记

别这样。

AI 不是仓库管理员。

原始信息可以进 Trunk,但长期召回必须筛选。

坑 2:把用户每句话都当长期偏好

用户说“今天想轻松点”,可能只是今天。

不要永久写成“用户永远喜欢轻松风格”。

坑 3:没有任务结束后的复盘

真正有价值的 Skill,往往来自任务完成后。

用户满意、用户修改、执行结果,这些才是经验来源。

坑 4:Recipe 太早生成

一次成功不要急着封神。

Recipe 应该来自多次验证。

不然你只是把一次偶然包装成了方法论。

坑 5:召回太多

上下文不是垃圾桶。

召回越多,模型越容易跑偏。

更好的做法是:少召回,高相关,先高层后底层。

坑 6:不处理冲突

旧记忆和新记忆一定会打架。

不设计冲突处理,AI 迟早写出一份“既要严肃又要活泼、既要详细又要简短”的怪东西。


推荐的数据结构简版

如果你想快速落地,可以先用这四张表。

trunks

CREATE TABLE trunks (
  id TEXT PRIMARY KEY,
  content TEXT,
  source TEXT,
  related_task_id TEXT,
  created_at DATETIME
);

tasks

CREATE TABLE tasks (
  id TEXT PRIMARY KEY,
  name TEXT,
  intent TEXT,
  constraints_json TEXT,
  status TEXT,
  created_at DATETIME,
  updated_at DATETIME
);

skills

CREATE TABLE skills (
  id TEXT PRIMARY KEY,
  name TEXT,
  scenarios_json TEXT,
  method_json TEXT,
  avoid_json TEXT,
  confidence REAL,
  version TEXT,
  updated_at DATETIME
);

recipes

CREATE TABLE recipes (
  id TEXT PRIMARY KEY,
  name TEXT,
  goal TEXT,
  skills_json TEXT,
  workflow_json TEXT,
  checklist_json TEXT,
  confidence REAL,
  version TEXT,
  updated_at DATETIME
);

别一开始就搞得特别复杂。

先跑起来。

等你发现 Skill 多了、冲突多了、Recipe 复用频繁,再加权限、衰减、评分、Embedding 检索这些能力。


这套方法适合哪些场景?

非常适合这些 AI 产品或自动化系统:

  • 私人 AI 助手
  • 写作 Agent
  • 客服 Agent
  • 企业知识库
  • 会议纪要助手
  • 内容生产工作流
  • 编程助手
  • 销售跟进助手
  • 项目管理 Agent

尤其适合高频重复任务。

比如你每天都让 AI 写内容、改代码、整理客户信息。这套记忆结构能让它越用越顺手。

不是每次都像新来的实习生。


可以直接照抄的落地规则

给你一版短规则,适合放到系统设计文档里:

记忆分为四层:Trunk、Task、Skill、Recipe。

Trunk 保存原始信息,不直接作为主要召回依据。
Task 从 Trunk 中抽取,表示用户当前意图和任务约束。
Skill 从已完成 Task 中沉淀,表示可复用经验。
Recipe 由多个高频 Skill 组合而成,表示成熟解决方案。

写入顺序:Trunk → Task → Skill → Recipe。
召回顺序:Recipe → Skill → Task → Trunk。

召回时优先使用高层、稳定、已验证的记忆。
只有在需要原始证据或处理冲突时,才查询 Trunk。

记忆需要支持去重、合并、置信度、版本升级和冲突处理。

结尾:AI 记忆要像人,不要像硬盘

好用的 AI 记忆,关键不是“记得多”。

而是能做到:

  • 从碎片里看出任务
  • 从任务里沉淀经验
  • 从经验里组合方案
  • 召回时抓重点
  • 冲突时有判断

Trunk → Task → Skill → Recipe 是写入路径。

Recipe → Skill → Task → Trunk 是召回路径。

一正一反,刚好对应人类学习和使用经验的方式。

我们经历很多事,但真正派上用场的,往往不是原始细节。

而是那些被反复验证过的方法。

AI 也该这样。

OpenClaw
OpenClaw
木瓜AI支持养龙虾啦
木瓜AI龙虾专供API,限时领取免费tokens
可在 OpenClaw接入全球顶尖AI大模型
立即领取