ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MemPalace 旧 Drawer 缺少 authored_at 字段怎么修复:backfill 脚本与重挖两种方式

MemPalace 旧 Drawer 缺少 authored_at 字段怎么修复:backfill 脚本与重挖两种方式 MemPalace 旧 Drawer 缺少 authored_at 字段怎么修复backfill 脚本与重挖两种方式【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalace如果你的 MemPalace 里有些对话类 Drawer 只有入库时间、没有内容实际书写时间authored_at本文给出两条文档支持的修复路径原地 backfill 脚本推荐不重新嵌入和删除后重挖。适用前提是这些 Drawer 来自带逐行时间戳的 Claude Code / Codex JSONL 对话且对应的.jsonl转录文件仍在磁盘上。问题背景为什么旧 Drawer 没有 authored_atMemPalace 的 miner 在挖掘对话转录时会把每行 ISO-8601timestamp里最近的一条记录为该 Drawer 的authored_at——也就是内容真正被写下的时间。这个字段和入库时间是两回事字段含义filed_at/ 结果的created_atDrawer 被挖掘写入宫殿的时间批量重挖会让它们塌缩到同一时刻authored_at底层内容被写下的时间从转录时间戳恢复重挖后仍然保留authored_at会出现在搜索结果里CLIsearch输出中也会展示并作为混合排序中的确定性 tie-break分数相同的结果authored_at更近的排前面。关键限制在于重挖并不能修复旧 Drawer。扫描器会跳过已经在当前NORMALIZE_VERSION下挖掘过的文件所以单纯重新跑挖掘不会给这些旧 Drawer 补上authored_at。修复只有两条路见 docs/authored-at.md原地 backfill推荐不重新嵌入——scripts/backfill_authored_at.py读取每个 convos Drawer 的源转录只更新authored_at元数据。删除后重挖——删掉受影响的 Drawer 再重新挖掘转录新挖的会带上authored_at但会把所有内容重新嵌入。修复前准备确认你的宫殿目录路径脚本参数--palaceChromaDB palace 目录文档示例用~/.mempalace/palace。确认.jsonl转录文件所在的目录例如~/.claude和~/.codex。源转录不在磁盘上的 Drawer 会被原样跳过所以--sessions要指向仍保存着这些.jsonl的目录。先备份再动手文档给出的备份命令tar czf palace-backup.tgz -C palace-dir .palace-dir替换成你的宫殿目录路径即--palace指向的目录Docker 部署可改为对mempalace-data卷做快照。方式一原地 backfill 脚本推荐脚本 scripts/backfill_authored_at.py 只处理ingest_mode convos的 Drawer只改元数据、不碰嵌入向量无重新嵌入成本。它幂等已正确的 Drawer 会被跳过可以安全重跑。第 1 步dry-run 预检。默认不带--apply只报告将改动的数量、不写入python scripts/backfill_authored_at.py \ --palace ~/.mempalace/palace \ --sessions ~/.claude --sessions ~/.codex # dry run--sessions可重复传入多个目录。运行后你会看到一行统计形如文档示例格式数值随你的宫殿而异DRY-RUN (use --apply to write): scannedN updatedN resolved_filesN unresolved_filesN其中updated是将被补上authored_at的 Drawer 数unresolved_files是源转录在磁盘上找不到、因而保持filed_at回退的文件数。第 2 步确认无误后写入。加上--applypython scripts/backfill_authored_at.py \ --palace ~/.mempalace/palace \ --sessions ~/.claude --sessions ~/.codex --apply # write写入成功后输出前缀变为APPLIED统计字段含义不变。Docker MCP 镜像变体可选。如果你跑的是 Docker 部署把数据卷和会话目录以只读方式挂载进去脚本头部给出了完整的docker run调用docker run --rm \ -v mempalace-data:/data \ -v ~/.claude:/sessions/claude:ro -v ~/.codex:/sessions/codex:ro \ -v $PWD/scripts/backfill_authored_at.py:/tmp/backfill.py:ro \ --entrypoint /app/.venv/bin/python mempalace:local \ /tmp/backfill.py --palace /data/.mempalace/palace \ --sessions /sessions/claude --sessions /sessions/codex --apply这里$PWD是仓库根目录scripts/backfill_authored_at.py的所在仓库--apply表示直接写入如需预检去掉--apply即可。方式二删除后重挖文档描述的更简单但代价更大的做法删掉受影响的 Drawer再重新挖掘转录新挖出来的会自动盖上authored_at。副作用是所有内容都会被重新嵌入。删除通过 MCP 工具mempalace_delete_drawer按 ID 删除见 website/reference/mcp-tools.md该参考还描述了按source_file批量删除对应 Drawer 的能力适合清掉某个来源下的全部记录。删除前建议同样先备份。重新挖掘按 mempalace/instructions/mine.md 的对话挖掘方式对会话导出目录运行mempalace mine dir --mode convosdir替换成你的会话导出目录。重新挖掘完成后新 Drawer 会自带authored_at。验证结果两种方式都完成后跑一次 MemPalace 的搜索查看结果的authored_at字段修复前缺少该字段的 Drawer 在结果里会回退显示为filed_at见 mempalace/searcher.py 中authored_at缺失时回退到filed_at的逻辑。修复后这些 Drawer 的authored_at应显示为从转录时间戳恢复出的实际书写时间而不再是入库时间。backfill 脚本本身也自带判断依据updated反映实际补了多少个unresolved_files反映有多少源转录没找到而保持回退——若unresolved_files不为 0说明对应的.jsonl不在你传入的--sessions目录里。边界与限制backfill 脚本只处理ingest_mode convos的 Drawer。Markdown 等没有逐行时间戳的 Drawer 保持filed_at回退不会被改动。源转录已从磁盘删除的 Drawer 会被原样跳过继续回退到filed_at——这是 backfill 的预期行为不是脚本失败。脚本只改元数据、不触碰嵌入向量且幂等可重复运行。重挖方式方式二会把内容重新嵌入成本更高如果只是想补时间字段优先用 backfill。下一步两种方式的命令、参数与输出字段以 docs/authored-at.md 和 scripts/backfill_authored_at.py 头部说明为准。挖掘、搜索的完整说明见 mempalace/instructions/mine.md 和 website/reference/mcp-tools.md。【免费下载链接】mempalaceThe best-benchmarked open-source AI memory system. And its free.项目地址: https://gitcode.com/GitHub_Trending/me/mempalace创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表