tagmind

SKILL.md

tagMind — 结构化标签记忆

基于用户自定义 tag prompts,从对话中抽取结构化信息,持久存储到本地 SQLite。

固定路径

文件 路径
脚本 ~/.openclaw/skills/tagmind/scripts/
数据库 ~/.openclaw/tagmind/memory.db
Tag 配置 ~/.openclaw/tagmind/prompts.json

agentId / userId

  • agentId:系统提示 Runtime 行中 agent=<id> 的值;缺省用 main
  • userId:inbound 消息的 sender ID;缺省用系统用户名 $USER

操作一:初始化

每次使用前先确保 DB 存在:

python3 ~/.openclaw/skills/tagmind/scripts/init.py

操作二:读取记忆

用户问「你还记得我什么」「查看我的信息」「我的记忆」时:

python3 ~/.openclaw/skills/tagmind/scripts/read.py <agentId>

将输出内容格式化展示给用户,空字段标注「暂无记录」。 同时将记忆作为隐式上下文融入后续对话(用正确称呼、符合偏好等),不逐字背诵。

输出中包含新鲜度标记:

  • 无标记:90天内有更新,可信
  • [warm]:90~180天未更新,可能过时
  • [cold ⚠]:超过180天未更新,建议向用户确认是否仍然准确

操作三:写入记忆

用户提供个人信息、或说「记住 / 保存 / 别忘了」时:

  1. 先运行 init.py 确保 DB 就绪
  2. 读取 ~/.openclaw/tagmind/prompts.json 了解 tag 定义
  3. 对照每个 tag 的 description,从对话中提取对应信息
  4. 每个有新信息的 tag 单独写入:
# 普通更新(用户补充/修改信息)
python3 ~/.openclaw/skills/tagmind/scripts/write.py <agentId> <tag_name> "<tag_memory>"

# 冲突更新(用户纠正了已有信息,如换了城市、换了工作)
python3 ~/.openclaw/skills/tagmind/scripts/write.py <agentId> <tag_name> "<tag_memory>" --conflict

重要<tag_name> 必须严格使用 prompts.json 中各 tag 的 name 字段值(如 namepreferencesbackgroundgoalspersonalitycontext)。禁止自创 tag_name(不能用 occupationhobbies 等未定义字段)。所有信息归入最匹配的已有 tag。

只写有实质内容的 tag,空值不覆盖已有数据。

写入时会自动将旧值存入历史记录,不会丢失。

操作四:清除记忆

用户说「忘掉我」「删除我的信息」时:

python3 -c "
import sqlite3
from pathlib import Path
db = Path.home() / '.openclaw/tagmind/memory.db'
with sqlite3.connect(db) as conn:
    conn.execute('DELETE FROM tag_memories WHERE agent_id=?', ('$AGENT_ID',))
    conn.execute('DELETE FROM tag_history WHERE agent_id=?', ('$AGENT_ID',))
print('[tagMind] 已清除所有记忆')
"

操作五:查看 tag 历史

用户问「我之前填写的 XX 是什么」「你记的 XX 改过几次了」时:

python3 ~/.openclaw/skills/tagmind/scripts/history.py <agentId> <tag_name>

输出当前值、更新时间、以及每次被覆盖时保存的历史值(含更新原因)。

操作六:衰减检查

用户问「有没有过期的信息」或在读取记忆时发现 [cold ⚠] 标记时:

# 仅查看衰减报告
python3 ~/.openclaw/skills/tagmind/scripts/decay.py <agentId>

# 查看报告并将 cold tag 标记为 archived(不删除,可用 history.py 查看)
python3 ~/.openclaw/skills/tagmind/scripts/decay.py <agentId> --archive-cold

收到报告后,可以向用户确认过期信息是否仍然准确,再用写入操作更新。

抽取原则

  • 只记事实:用户明确说过的,不推测
  • 增量更新:新信息追加或替换,不清空其他 tag
  • 简洁存储:每个 tag 控制在 1-3 句话内
  • 自然融入:记忆体现在回复方式里,不逐字背诵
  • 冲突感知:用户纠正已有信息时加 --conflict 标记,旧值自动归档保留

冲突解决规则

当用户提供的新信息与已存储的信息矛盾时(如更换城市、换工作、改变偏好):

  1. 最新的信息优先 — 用新值覆盖旧值,旧值自动保存到历史记录
  2. --conflict 标记 — 区分普通补充和主动纠错,方便事后追溯
  3. 旧值不删除 — 用 history.py 仍可查看所有历史值
  4. 不向用户确认 — 直接更新,除非语义不清楚应该写入哪个 tag

衰减机制

状态 条件 显示 建议操作
active 90天内有更新 无标记 正常使用
warm 90~180天未更新 [warm] 留意,有机会时确认
cold 超过180天未更新 [cold ⚠] 向用户确认是否仍然准确

读取记忆时自动显示标记。发现 [cold ⚠] 时,可在对话中自然地向用户确认,如:

"我记得你之前在上海工作,现在还是吗?"

自定义 Tag Prompts

编辑 ~/.openclaw/tagmind/prompts.json,增删 tags 数组。 默认 6 个 tag:name / preferences / background / goals / personality / context。

Installs
2
First Seen
Apr 14, 2026