OpenClaw 记忆插件现场诊断数据导出指南:memory-tencentdb 诊断包打包与脱敏实战
【免费下载链接】TencentDB-Agent-MemoryTencentDB Agent Memory is a team-level memory hub for AI Agents — turning conversations, docs, and code into four reusable memory assets (Chat Memory, Skill, LLM-Wiki, Code-Graph) that are governed, shared, and equipped across agents and frameworks.项目地址: https://gitcode.com/GitHub_Trending/te/TencentDB-Agent-Memory
本篇技术指南以 TencentDB-Agent-Memory 仓库中MemoryCore/SKILL-DIAGNOSTIC-EXPORT.md技能定义为骨架,完整讲解如何将 OpenClaw 网关日志、memory-tencentdb 记忆插件数据(L0~L3)以及脱敏后的配置打包为本地压缩包,供研发团队排查问题。读完本文,你将掌握诊断导出技能的环境探测、脚本执行、内容核对、手动兜底四条完整路径,并理解数据目录、日志位置、脱敏规则背后的源码实现依据,能够独立完成一次"现场数据收集与安全交付"。
技能定位与触发方式
SKILL-DIAGNOSTIC-EXPORT.md是一个面向 OpenClaw 环境的技能定义文件(skill),其 frontmatter 声明如下:
name: openclaw-diagnostic-export description: 帮助用户导出 OpenClaw + memory-tencentdb(原 memory-tdai)记忆插件的现场诊断数据,用于排查问题。当用户提到"导出诊断数据""export diagnostic""现场数据""排查问题""导出日志""收集现场""打包现场数据"时应触发。 version: 1.0.0该技能的核心目的是:将 OpenClaw 日志、记忆插件数据(L0~L3)、脱敏后的配置打包为本地压缩包,由用户确认后手动发送给研发团队排查问题。它对应的应用场景正是仓库中其他技能(如 SKILL.md 中的openclaw-memory-tencentdb-setup安装配置技能)的"事后排查"闭环——先安装配置、验证记忆链路,出了问题再导出诊断数据。
名称与数据目录的关系(重要前提)
名称说明:插件已从
@tdai/memory-tdai更名为@tencentdb-agent-memory/memory-tencentdb,但数据目录始终为~/.openclaw/memory-tdai/(代码中硬编码)。本 skill 中所有对memory-tdai目录的引用均指实际数据目录路径,与插件 ID 无关。
这一点在源码中可以得到印证:在 src/gateway/config.ts 中,默认数据目录解析逻辑明确写到~/.memory-tencentdb/memory-tdai/,并说明"宿主插件数据目录由resolveStateDir() + "memory-tdai"决定(通常是~/.openclaw/memory-tdai/),该路径是有意保持不变的;同时若检测到旧版~/memory-tdai仍存有数据,网关会继续使用旧目录并打印一行弃用警告。因此无论插件包名如何演变,诊断时始终从memory-tdai目录取数。
导出工作流(标准四步)
Step 1: 确认环境
在导出前,先确认 OpenClaw 工作目录存在且可访问。技能给出了目录探测命令,优先级为:环境变量 >~/.openclaw>~/.clawdbot:
# 探测工作目录(优先级:环境变量 > ~/.openclaw > ~/.clawdbot) OPENCLAW_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}" [ -d "$OPENCLAW_DIR" ] || OPENCLAW_DIR="$HOME/.clawdbot" ls -la "$OPENCLAW_DIR/" 2>/dev/null && echo "✅ 找到: $OPENCLAW_DIR" || echo "❌ 未找到 OpenClaw 工作目录"其中OPENCLAW_STATE_DIR环境变量正是仓库中 src/utils/openclaw-state-dir.ts 所实现的目录解析入口。随后确认 memory-tdai 子目录存在:
ls -la "$OPENCLAW_DIR/memory-tdai/" 2>/dev/nullStep 2: 执行导出脚本
运行项目scripts/目录下的导出脚本:
bash scripts/export-diagnostic.sh脚本位于本项目的
scripts/export-diagnostic.sh,如果通过pnpm或其他方式运行,需确保工作目录在项目根目录下。
脚本默认将压缩包输出到~/Downloads/openclaw-diagnostic-<timestamp>.tar.gz。如需指定其他输出目录,将路径作为第一个参数传入:
bash scripts/export-diagnostic.sh /tmp需要说明的是:该脚本属于技能运行时生成的辅助脚本,当前仓库的 scripts/ 目录下并不包含此文件——因此若在检出目录中找不到该脚本(例如 Node.js 工具链不可用),请直接使用下文"手动导出(脚本不可用时的备选方案)"一节中的完整命令序列自行收集,两条路径产出的数据内容一致。
Step 3: 确认导出结果
脚本执行完成后,检查输出:
- 确认压缩包已生成—— 脚本末尾会打印压缩包路径和大小;
- 向用户说明包含内容:
| 文件/目录 | 内容 | 隐私风险 |
|---|---|---|
env-info.txt | 系统版本、OpenClaw 版本、目录结构、磁盘占用 | 低 |
logs/ | OpenClaw 网关日志 + 滚动日志(最近 3 天,每文件最多 5000 行) | 低 |
memory-tdai/ | 记忆插件全量数据:L0 对话、L1 记忆、L2 场景、L3 画像、SQLite 数据库、checkpoint | 高—— 包含用户对话原文 |
openclaw-config-redacted.json | 脱敏后的配置(已移除 API Key/Token/Password/Secret,models/channels/env 整体替换) | 低 |
plugins-info.txt | 已安装插件列表和版本 | 低 |
- 提醒用户:
- 配置文件已自动脱敏,API Key、Token 等敏感信息已被替换为
***REDACTED***; - 记忆数据(
memory-tdai/)包含用户对话原文,请确认可以分享后再发送; - 压缩包存放在本地,不会自动上传,需要用户手动发送给研发团队。
- 配置文件已自动脱敏,API Key、Token 等敏感信息已被替换为
Step 4: 告知用户后续操作
导出完成后,告知用户:
- 压缩包已保存在本地(打印具体路径);
- 请检查内容后,通过企微/邮件等方式手动发送给研发团队;
- 如只需部分数据(如仅日志或仅配置),可解压后选择性发送。
导出内容详解
OpenClaw 日志位置
技能将排查所需的日志按类型归类如下:
| 日志类型 | 路径 | 说明 |
|---|---|---|
| 网关 stdout | ~/.openclaw/logs/gateway.log | 网关守护进程标准输出 |
| 网关 stderr | ~/.openclaw/logs/gateway.err.log | 网关守护进程错误输出 |
| 滚动日志 | /tmp/openclaw/openclaw-YYYY-MM-DD.log | 按日期滚动,JSON Lines 格式,24h 自动清理 |
| 配置审计 | ~/.openclaw/logs/config-audit.jsonl | 配置写入审计记录 |
| 命令日志 | ~/.openclaw/logs/commands.log | 命令事件日志(hook 可选) |
其中/tmp/openclaw滚动日志目录在源码中有明确依据:src/utils/clean-context-runner.ts 中定义了POSIX_DIR = "/tmp/openclaw",作为上下文清理与日志落盘的默认位置,并带有 24 小时自动清理机制。
记忆插件数据结构
导出的memory-tdai/目录遵循固定的四层记忆存储布局:
~/.openclaw/memory-tdai/ ├── conversations/ — L0 原始对话(每日 JSONL 分片) ├── records/ — L1 结构化记忆(每日 JSONL 分片) ├── scene_blocks/ — L2 场景 Markdown 文件 ├── persona.md — L3 用户画像 ├── vectors.db — SQLite 数据库(向量 + 全文索引) ├── .metadata/ — checkpoint、scene_index.json └── .backup/ — 滚动备份这些目录与文件在仓库源码中均可逐一对应:
conversations/:L0 对话捕获由 src/core/conversation/l0-recorder.ts 实现,注释明确写着"writes to~/.openclaw/memory-tdai/conversations/YYYY-MM-DD.jsonl",即按日期分片的 JSONL 文件;src/cli/commands/seed.ts 中的openclaw memory-tdai seed --input conversations.json命令也印证了该目录是 L0 数据的标准入口;scene_blocks/与persona.md:L3 画像生成在 src/core/persona/persona-generator.ts 中按dataDir/scene_blocks读取场景文件,并由 LLM 写回persona.md(L181 备份、L215 后处理);召回侧 src/core/hooks/auto-recall.ts 直接从profileDataDir/persona.md读取画像内容注入提示词;.metadata/:包含 checkpoint 与 scene_index.json。src/core/persona/persona-generator.ts 中 checkpoint 路径为dataDir/.metadata/recall_checkpoint.json;src/cli/README.md 展示的数据目录树中同样列出.metadata/及其下的checkpoint.json(管线进度)。
配置脱敏规则
导出脚本对openclaw.json执行以下脱敏:
| 规则 | 处理方式 |
|---|---|
字段名匹配apiKey/token/password/secret/credential且值为字符串 | 替换为***REDACTED(Nchars)*** |
| SecretRef 对象(含 source/provider/id) | id 替换为***REDACTED*** |
顶层models、secrets、channels、env块 | 整体替换为***REDACTED_SECTION*** |
gateway.auth下的 token/password | 替换为***REDACTED*** |
其余字段(含plugins完整配置) | 保留原样(插件配置是排查重点) |
脱敏设计的原则是"保插件、杀密钥":plugins完整配置(含 memory-tencentdb 的 recall/capture/extraction/pipeline/embedding 等分组,参见 SKILL.md 的推荐模板)必须原样保留,因为它是排查向量检索、召回策略等问题的核心现场;而所有可能泄露凭据的字段一律遮蔽。这与仓库全局的密钥管理规范一致——例如 SKILL.md 的安全合规约束要求"将 apiKey 视为敏感信息,优先使用环境变量注入密钥"。
手动导出(脚本不可用时的备选方案)
如果导出脚本无法执行(如 Node.js 不可用),按以下步骤手动收集:
# 1. 创建导出目录 EXPORT_DIR=~/Downloads/openclaw-diagnostic-$(date +%Y%m%d-%H%M%S) mkdir -p "$EXPORT_DIR" # 2. 复制日志 cp -r ~/.openclaw/logs/ "$EXPORT_DIR/logs/" 2>/dev/null cp /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log "$EXPORT_DIR/" 2>/dev/null # 3. 复制记忆插件数据 cp -r ~/.openclaw/memory-tdai/ "$EXPORT_DIR/memory-tdai/" 2>/dev/null # 4. 手动脱敏配置(⚠️ 必须手动删除敏感字段!) # 复制配置并用编辑器删除 models/secrets/channels 块和所有 apiKey/token 值 cp ~/.openclaw/openclaw.json "$EXPORT_DIR/openclaw-config-NEEDS-MANUAL-REDACTION.json" # 5. 打包 cd ~/Downloads && tar -czf "$EXPORT_DIR.tar.gz" "$(basename $EXPORT_DIR)" echo "⚠️ 请务必在发送前手动检查并删除配置中的敏感信息!"手动路径的关键差异在第 4 步:由于没有脚本自动脱敏,产物文件名被刻意标记为openclaw-config-NEEDS-MANUAL-REDACTION.json,强制提醒操作者在发送前人工检查并删除models/secrets/channels块以及所有apiKey/token值。若当前环境设置了TDAI_DATA_DIR或MEMORY_TENCENTDB_ROOT(覆盖数据目录的配置方式,见 src/gateway/config.ts 中TDAI_DATA_DIR ?? data.baseDir ?? resolveDefaultDataDir()的解析优先级),第 3 步应复制到实际的数据目录位置,而非硬编码的~/.openclaw/memory-tdai/。
常见问题排查线索
导出数据后,研发团队通常关注以下方面:
| 排查方向 | 查看文件 | 关键信息 |
|---|---|---|
| 插件是否加载 | logs/中搜索[memory-tdai] | 插件注册、配置解析日志(注:日志标签仍为[memory-tdai],与插件 ID 无关) |
| 记忆召回是否工作 | logs/中搜索[recall] | 搜索策略、耗时、命中数 |
| L1 提取是否触发 | logs/中搜索[pipeline] | 调度触发、L1/L2/L3 执行状态 |
| 向量搜索是否可用 | openclaw-config-redacted.json的plugins.entries | embedding 配置是否正确 |
| 数据量/磁盘占用 | env-info.txt | du 输出、文件数量 |
| checkpoint 状态 | memory-tdai/.metadata/recall_checkpoint.json | 进度、游标、计数器 |
这些排查线索与源码中的日志埋点一一对应:网关调度器在 src/gateway/server.ts 中为 L1/L2/L3 各阶段输出了[executor]前缀的调度与跳过日志(如 credit limit 检查、L1 drain 入队、L2/L3 间隔控制等),配合[recall]召回日志与[pipeline]管线日志,即可还原"插件注册 → 对话捕获 → L1 提取 → L2 场景 → L3 画像 → 召回注入"的完整链路状态;recall_checkpoint.json则记录了管线进度游标,用于判断 L1/L2/L3 是否在特定会话处停滞。
安全与合规要点
一次合格的诊断导出,本质上是一次受控的隐私数据打包。务必牢记三点:
- 压缩包不会自动上传:产物只落在本地
~/Downloads/,由用户手动通过企微/邮件发送,杜绝数据外泄路径; - 记忆数据必须二次确认:
memory-tdai/内含用户对话原文(L0/L1 分片),分享前必须获得用户明确同意; - 脱敏不是可选项:脚本自动脱敏覆盖
apiKey/token/password/secret/credential等字段,手动导出时这条责任完全转移到操作者身上——文件名中的NEEDS-MANUAL-REDACTION后缀就是最后一道提醒。
将本技能与仓库中的安装配置技能(SKILL.md)、数据目录说明(hermes-plugin/memory/memory_tencentdb/README.md)配合使用,即可构成 OpenClaw + memory-tencentdb 场景下"部署 → 配置 → 验证 → 排障"的完整运维闭环。
【免费下载链接】TencentDB-Agent-MemoryTencentDB Agent Memory is a team-level memory hub for AI Agents — turning conversations, docs, and code into four reusable memory assets (Chat Memory, Skill, LLM-Wiki, Code-Graph) that are governed, shared, and equipped across agents and frameworks.项目地址: https://gitcode.com/GitHub_Trending/te/TencentDB-Agent-Memory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考