Persona Forge — 让 AI 学会你的判断力
> 不是"让 AI 记住你的习惯"——那是记忆工具,已经很多了。
> 这个做的是另一件事:把你的判断连同结果一起存下来,
> 让 AI 知道你什么时候准、什么时候翻车。**
我们不做什么(先划清界限)
做"让 AI 记住你"的已经有一堆了:Anthropic 官方 memory-management(416★)、
LobeHub claude-memory、aiskillstore memory-management……
它们回答的是「我说过什么」。我们回答的是「我判断得准不准」。
| 记忆类 skill | persona-forge | |
|---|---|---|
| 记什么 | 偏好、决策、纠正 | 判断 + 事后的实际结果 |
| 目标 | AI 当秘书(记事) | AI 当参谋(复盘) |
| 冷启动 | 从零手写 | 扫描已有散落记忆,一次捞回 |
| 注入方式 | 把 JSON / md 塞进 CLAUDE.md | 编译成祈使句指令 |
| 提炼门槛 | 无 | 同类型 ≥20 条带结果 |
> 「事后回填——你的判断到底对不对」。**
> 这是本 skill 唯一无法被替代的地方,也是它最难被坚持的地方。
> 如果你只想让 AI 记住你的偏好,用官方那个就够了,别装这个。
核心认知(先读这段,否则会用错)
这不是训练模型,是给模型一本书。
它不改变任何权重,只产出三份可被任何模型读取的结构化文件。好处:立刻可用、不随基座换代贬值、可读可改可导出。
唯一的稀缺原料是「带结果的判断」。
说了什么不重要,说完之后事情走向如何才重要。不回填实际结果,攒再多也只是"用户说过什么",不是"用户判断得对不对"——训不出判断力。这是整套体系的单点故障。
两条循环,速度差三个数量级,别混为一谈:
采集循环(日常·秒级) 信号命中 → 一句话存入 → 继续干活,不打断
↓ 攒够
锻造循环(定期·月级) 纵向聚类 → 结果分析 → 更新注入层 → 回测
采集必须轻到无感,否则坚持不下去。锻造可以重,因为一月一次。
一、三类语料(对应三个待办,别混淆)
| 语料 | 回答什么问题 | 信号 | 文件 | 门槛 |
|---|---|---|---|---|
身份档案<br>profile |
我是谁、什么角色、在推什么、什么约束 | 显式填写 / 推导后确认 | data/profile.json |
一份即可,须本人核对 |
判断日志<br>decisions |
我是怎么判断的?判断得准不准? | S6 判断表达 | data/decisions.jsonl |
同一类型 ≥20 条带结果(纵向) |
偏好条目<br>preferences |
我喜欢什么、讨厌什么? | S8 偏好陈述 | data/preferences.json |
无门槛,随记随用 |
反表层条目<br>anti-shallow |
什么样的输出我会否掉? | S7 否定反馈 | data/anti-shallow.json |
≥10 条可命名否定项 |
> 档案不是偏好:档案回答"我是谁"(角色/目标/硬件约束),偏好回答"怎么说话"。
> 两者都进注入层,但档案在第零节——模型先看你是谁,才知道该用哪套口径。
> ⚠️ 纵向 ≠ 横向:判断日志要求"同一决策类型反复出现 20 次,看判断如何变化",不是"20 个不同场景各一条"。后者只会得到一个什么都知道一点的通用档案,学不到判断力。
二、采集循环(日常,秒级,不打断)
采集有两种模式,别只做第一种:
| 模式 | 时机 | 说明 |
|---|---|---|
| 实时捕获 | 日常对话中 | 下面的 S6/S7/S8 三信号,命中即存 |
| 回溯采集(Backfill) | 安装后第一次、每月、换机器时 | 扫描本机散落的记忆文件与历史对话,把存量语料一次性捞回。见下 |
⚡ 回溯采集(冷启动必做)
实时捕获只能记"此刻之后"的话,但绝大多数高价值语料已经躺在硬盘里了——散落在多个 agent 的记忆文件中。
python scripts/scan_memories.py
零依赖、秒级,输出 data/_backfill_candidates.json。分三层:脚本定位源 → 信号词典确定性筛选 → 模型精读提炼(不让模型大海捞针)。
> ⚠️ 只有对话历史里的 user 消息是你的原话(trust=high)。
> 工作区日志大多是助手视角的记录(trust=low),严禁当原话入库。详见 references/backfill.md。
三个信号,命中即捕获
| 信号 | 表现 | 捕获动作 |
|---|---|---|
| S6 判断表达 | 用户对某事下了判断:"这单能签""这个店长稳不住""先做 A 不做 B" | 存判断 + 依据 + 预期 → 记入回填队列 |
| S7 否定反馈 | 用户否掉了某个输出:"太表层了""我要的是归因不是数据""别用营销腔" | 存否定项 + 触发原因 + 期望做法 |
| S8 偏好陈述 | 用户表达偏好:"我喜欢结论先行""以后都给我表格""别问我,你定" | 存偏好 + 适用场景 + 强度 |
捕获纪律(违反 = 这整套失效)
- 一句话存完就走——不追问、不展开、不打断用户当前操作流
- 必须记原话——判断与否定都要保留用户原始措辞,不要 paraphrase(原话里有判断力的指纹)
- S6 必须建回填提醒——记下"X 天后问结果",存
outcome_due - 不确定归哪类 → 存进
decisions,标category: unclassified,不要猜 - 用户说"这个别记" → 立刻删,不解释
事后回填(S6 的闭环,最重要的一步)
到 outcome_due 那天,主动问一句:
> "上次你判断【{判断摘要}】,现在结果怎么样?对了我记对,错了我记为什么错——错的才值钱。"
回填字段:actual / verdict(hit / miss / partial)/ why(错了必须写为什么)。
> 为什么错的更值钱:对的判断只证明"这次运气或能力到了",错的判断才会暴露你的思维盲区。一条带 why 的 miss,价值 > 五条 hit。
三、锻造循环(定期,建议每月或攒够 20 条触发)
F1 — 纵向聚类
按 category 把判断日志归堆。只处理已回填的(未回填的不参与模式提炼,避免用未验证的判断污染注入层)。
F2 — 结果分析(核心)
对每个聚类算三件事:
- 命中率(hit / 总数)——低于 50% 的类别要重点写进注入层(说明这是你的盲区)
- 误判模式——把所有
verdict: miss的why放一起,看有没有重复出现的思维陷阱 - 判断依据的演变——早期 vs 近期,你依赖的信息变了吗?
输出:一段"我的判断画像",含:我擅长判断什么 / 我容易在哪里翻车 / 我的依据通常来自什么。
F3 — 更新注入层
把 F2 结论写回三个文件(格式见 references/corpus-schema.md)。只增不改历史条目——历史判断带着当时的语境,改了就失真。
F4 — 回测(不可跳过)
预留 holdout:每 10 条判断留 1 条不进注入层,专供回测。
回测动作:拿 holdout 样本,对比 注入前 vs 注入后 的模型输出,判三个问题:
- 注入后是否命中了用户的真实偏好?
- 注入后是否避开了已知的反表层项?
- 注入后给出的判断,是否更接近用户实际会做的判断?
量化:命中率提升 < 10% → 说明本轮锻造无效,回 F2 重来,不要拿无效注入层凑数。
四、注入出口:怎么进 AI 的上下文
⚠️ 先破一个错觉:装了 skill ≠ AI 每次都懂你
skill 只在触发词命中时才加载 SKILL.md。聊家常、问数据、写文案时它不会被触发,
注入层也就没进上下文。
所以常驻必须靠一份编译好的独立文件,挂到各 AI 的全局记忆里:
语料 data/*.json → build_context.py 编译 → PERSONA_CONTEXT.md → 挂载到各 AI
(记录) (祈使句指令) (唯一出口)
> 编译不是格式转换,是"记录 → 指令"的改写。
> 记录 {"content":"先给简洁结论"} 喂给模型,它不会改行为;
> 编译成 - 输出先给一句话结论,再展开细节 才会。别直接拿 JSON 去喂模型。
一条命令
python scripts/build_context.py --install # 生成 + 挂到 MEMORY.md / CLAUDE.md(幂等)
python scripts/build_context.py --copy # 复制到剪贴板,贴给网页端 AI
python scripts/build_context.py --mode full # 全量 4.6k 字
python scripts/build_context.py --topic 家电 # 只带相关条目
四条路径
| 路径 | 做法 | 自动? |
|---|---|---|
| Claude Code / CodeBuddy | ~/.claude/CLAUDE.md 加 @<PERSONA_CONTEXT.md> |
✅ 每会话 |
| WorkBuddy | ~/.workbuddy/MEMORY.md 加读取指针 |
✅ 每会话 |
| 网页端 AI | --copy 贴到对话框 / 存进"自定义指令" |
❌ 更新后重贴 |
| 自己的产品 / API | 拼进 system 消息第一段,或走代理层统一注入 |
✅ 客户端零改 |
分层(别全量塞上下文)
L0 身份 / L1 规则 / L2 自检 = lean 默认 ≈ 1.9k 字,任何对话都吃得下。
L3 补充 / L4 判断画像 只在 --mode full 或 --topic 时带。
> ⚠️ 注入不是越多越好。塞满规则模型会顾此失彼,命中率才是判据,不是条目数。
详见 references/injection.md。
五、与 skill-forge 的关系
| skill-forge | persona-forge | |
|---|---|---|
| 造什么 | 通用任务 skill | 个人注入层 |
| 语料 | 外部/行业一线语料 | 你自己的判断与否定 |
| 门槛 | ≥20 条、覆盖 2+ 维度(横向) | 同类型 ≥20 条带结果(纵向) |
| 时间维度 | 无 | 有(回填 + 演变) |
| 护栏 | 禁输出语料原文(防泄密) | 可读、可改、可导出(这是你的东西) |
| 闭环 | 锻造完即出厂 | 复炼(回测 + 定期重跑) |
共同命题:方法不是资产,语料才是。模型权重会随基座换代贬值(约 6 个月),不贬值的是带结果的语料与评测集。
六、质量红线(违反任一条 = 不产出)
- ❌ 只记判断不回填结果 → ✅ S6 必须有
outcome_due,到期必问 - ❌ 判断日志横向铺开 → ✅ 同一类型纵向 ≥20 条才够料谈模式
- ❌ paraphrase 用户原话 → ✅ 保留原始措辞
- ❌ 用未回填的判断提炼模式 → ✅ 只用已验证样本
- ❌ 回测无提升还照用 → ✅ 提升 <10% 打回重做
- ❌ 改历史条目 → ✅ 只增不改
- ❌ 用户说别记还记 → ✅ 立刻删
使用纪律
- 采集轻、锻造重——采集超过 10 秒就是设计失败
- 错的比对的贵——miss 必须写
why - 重复 = 强度——同一偏好被提出 2 次以上,
strength升为must并标repeat_count(说明 AI 一直没做到);跨月重复要触发机制检查——问"为什么没执行、缺什么机制",而不是再记一次 - 注入层是活的——每月复炼一次,过期偏好要标
deprecated而不是删 - 可读可改——用户随时可以要求导出、修改、删除任何条目
参考文件
- 四类语料字段规范:
references/corpus-schema.md - 信号识别详解 + 捕获话术:
references/signal-radar.md - 回溯采集(冷启动扫描):
references/backfill.md - 注入协议(怎么进 AI 上下文):
references/injection.md - 复炼闭环与回测方法:
references/reforge-loop.md