Note Extractor Skill - 日记洞察提取与可视化
前置检查
第一步:确定配置文件路径
读取 ~/.openclaw/workspace/diary/config/diary-config.json。
注意:
- - 展开
~ 为完整的用户主目录路径 - 使用
echo $HOME 获取主目录
如果配置文件不存在,告诉用户:
CODEBLOCK0
第二步:确认日记数据存在
从配置中获取 storage.path,展开 ~,检查目录下是否有 .md 文件。
如果没有日记文件:
CODEBLOCK1
第三步:确认输出目录
输出目录: INLINECODE6
如果目录不存在,创建它:
mkdir -p ~/write_me/02notes/insights
核心流程
1. 读取日记原文
使用 Read 工具读取 storage.path 下的日记文件。
确定目标文件:
1. 获取当前日期和时间
2. 根据配置中的
time_boundary(默认 06:00)判断:如果当前时间 < 边界,使用昨天的日期
3. 根据
date_format(默认 YYYY-MM)生成文件名,如
2026-03.md
4. 只读取该文件
1. 使用 Glob 工具查找所有日记文件:
{展开后的storage.path}/*.md
2. 逐个读取每个文件
读取用户身份(如果启用):
如果配置中 user_identity.enabled 为 true,读取 {user_identity.path}/identity.md 获取用户名和角色。如果文件不存在,使用默认值:name = "用户",role = ""。
2. 解析日记条目
日记文件格式(由 diary skill 生成):
CODEBLOCK3
解析规则:
- -
## HH:MM [tag] - 标题 → 一条日记条目的开始 - INLINECODE15 /
**用户观点**: 后面的内容 → 用户原话(最重要,这是"人味儿") - INLINECODE17 后面的内容 → 客观事实
- INLINECODE18 后面的内容 → 文章标题/链接
- INLINECODE19 后面的内容 → 对话记录(区分用户发言和 AI 发言)
- INLINECODE20 后面的内容 → 决策记录
- INLINECODE21 后面的内容 → AI 的补充(次要权重)
- 文件名中的日期 → 条目所属月份
重要:严格区分用户原话和 AI 观察。提取洞察时,只从「用户说」和「事实」中提取,不要把 AI 的观察当作用户的想法。
3. 提取四类结构化数据
对读取到的所有日记内容,执行以下四个提取任务。
3.1 思维卡片提取
从日记中提取用户的核心洞察和金句。
提取标准:
- - 只提取用户自己说的话或明确表达的观点
- 具有独立价值,脱离上下文也能理解
- 体现用户的独特思考,不是常识或 AI 的补充
- 每条洞察应该简洁有力,1-2 句话
分类体系(根据用户实际内容动态生成,以下为参考):
- - 职业/行业洞察
- 产品/技术思考
- 个人成长/人生智慧
- 投资/商业判断
- 创作/表达方法论
- 其他(根据用户实际关注领域)
输出格式(JSON 数组):
CODEBLOCK4
- -
importance:1-5 分,5 分最高。判断标准:原创性、可复用性、对用户的长期价值 - 每月提取 5-15 条,不要贪多,只留真正有价值的
3.2 每日情绪标签
为每个有日记记录的日期标注情绪。
情绪判断依据:
- - 优先看「用户说」的内容中的情绪词和语气
- 其次看「事实」中描述的事件性质
- 不要用 AI 观察来判断情绪
情绪分类:
- - positive(积极):开心、自豪、兴奋、感恩、自信、充沛、心流……
- neutral(中性):专注、平静、好奇、分析、思考、坚定……
- low(低落):疲惫、焦虑、低落、迷茫、自我怀疑……
输出格式(JSON 对象):
CODEBLOCK5
- -
label:用中文,2-3 个字的情绪词 - INLINECODE24 :当天的条目摘要,每条不超过 50 字
- INLINECODE25 中只放用户说的话和事实,不放 AI 观察
3.3 成长维度打分
按月对用户在以下六个维度的关注度和成长进行打分。
六个维度:
- 1. 职业技能 — 工作能力、专业知识、行业理解
- 学习成长 — 阅读、课程、新知识获取
- 投资理财 — 财务决策、投资思考、理财规划
- 社交关系 — 人际互动、社交活动、关系维护
- 健康平衡 — 身体健康、情绪管理、作息平衡
- 创造输出 — 写作、创作、公开分享、项目产出
打分规则:
- - 0-100 分,基于该维度在当月日记中的出现频率和深度
- 只出现 1-2 次且浅层提及 → 20-40 分
- 多次出现且有深入思考 → 60-80 分
- 频繁出现且有明确行动和成果 → 80-100 分
- 完全没提及 → 10-20 分(给个基础分,不要给 0)
输出格式(JSON 对象):
CODEBLOCK6
3.4 知识图谱提取
从日记中提取实体和关联,生成 2D 知识关联图谱的数据。
节点提取规则:
从日记中识别三类实体:
- 1. 主题领域(group: "topic")
- 用户反复提及的领域和话题
- 例如:AI Agent、投资理财、个人品牌
- 提取标准:在日记中出现 2 次以上的主题词
- 2. 概念/框架(group: "concept")
- 用户提到的具体理论、方法论、框架
- 例如:杠杆理论、PARA方法论、第一性原理
- 提取标准:用户明确讨论过的概念
- 3. 人物(group: "person")
- 日记中提到的人(同事、朋友、作者、公众人物)
- 例如:团队成员名字、书籍作者
- 提取标准:在日记中被提及且与某个主题相关
连线生成规则:
当两个节点在同一天的日记中共同出现,或存在明确的因果/关联关系时,生成一条连线。
输出格式:
INLINECODE26 数组:
CODEBLOCK7
INLINECODE27 数组:
CODEBLOCK8
- -
size:节点大小,基于在日记中的出现频率。范围 12-28。 - INLINECODE29 :从日记中提取的关于该节点的简短描述,不超过 20 字。
- 用户自己的名字应作为 person 节点加入,size 设为最大值 28。
4. 生成可视化页面
HTML 模板通过 <script src="data.js"> 加载外部数据文件,Claude 只需要生成 data.js 并复制 HTML 模板,不需要读取或修改 HTML。
生成步骤:
- 1. 生成
data.js 数据文件(见下方格式) - 将
data.js 写入输出目录: INLINECODE34 - 将 HTML 模板复制到输出目录(使用 Bash 的
cp 命令):
CODEBLOCK9
data.js 文件格式:
CODEBLOCK10
字段名映射:
提取时使用完整字段名(便于理解),写入 data.js 时需转换为缩写格式:
| 提取输出 | data.js 变量 |
|---|
| INLINECODE36 | INLINECODE37 |
| INLINECODE38 |
cat |
|
importance |
imp |
分类与样式映射:
HTML 模板支持以下 CSS 样式类:brand(玫瑰粉)、product(鼠尾草绿)、ai(薰衣草紫)、life(沙金)、invest(暖金)。
生成 catStyles 时,将每个动态分类映射到最接近的样式类。例如:
CODEBLOCK11
如果分类无法明确归类,默认使用 "life"。
输出文件:
- - 数据文件:
~/write_me/02notes/insights/data.js(固定文件名,每次覆盖) - HTML 页面: INLINECODE50
- 如果用户要求分析所有日记(跨月),HTML 文件名为: INLINECODE51
5. 生成结构化 JSON 备份
同时将提取的原始数据保存为 JSON,方便其他 skill 或工具使用。
输出文件路径: INLINECODE52
JSON 结构:
CODEBLOCK12
6. 通知用户
生成完成后,告诉用户:
CODEBLOCK13
然后询问用户是否要立即打开:
CODEBLOCK14
如果用户同意,使用 Bash 工具执行:
open {HTML文件的完整路径}
用户交互场景
场景 1:分析本月日记
用户说:「分析日记」「生成洞察」
- 1. 读取当月日记文件
- 执行完整提取流程
- 生成 HTML 和 JSON
- 通知用户
场景 2:分析所有日记
用户说:「分析所有日记」「全部洞察」
- 1. 读取所有日记文件
- 执行完整提取流程
- 生成 insights-all.html
- 通知用户
场景 3:只看思维卡片
用户说:「提取金句」「思维卡片」
- 1. 只执行思维卡片提取
- 直接在对话中展示卡片列表
- 询问是否要生成完整可视化
场景 4:月末主动提醒
当检测到当前日期是月末(28-31日),且本月有日记记录时:
CODEBLOCK16
错误处理
日记文件为空或格式异常
如果日记文件存在但内容为空或格式不符合预期:
- - 跳过该文件
- 在最终报告中说明:「跳过了 {文件名}(内容为空或格式异常)」
日记数据太少
如果总共只有 1-2 条日记记录:
- - 仍然生成可视化,但在页面上提示:「数据较少,持续记录后洞察会更丰富」
- 成长雷达图可能不够有意义,可以隐藏或标注「数据不足」
输出目录写入失败
- - 检查目录权限
- 尝试创建父目录
- 如果仍然失败,将 HTML 内容直接输出到对话中,让用户手动保存
HTML 模板不存在
如果 demo/insights.html 模板文件不存在:
- - 仍然生成
data.js 和 JSON 备份 - 告知用户模板文件缺失,建议重新安装: INLINECODE55
实现注意事项
路径处理
- - 所有包含
~ 的路径都要展开为完整路径 - 使用
echo $HOME 获取主目录 - 使用
mkdir -p 创建目录
数据质量
- - 思维卡片:宁缺毋滥,只提取真正有价值的洞察
- 情绪标签:基于用户原话判断,不要过度解读
- 维度打分:基于实际内容,不要凭空给高分
隐私保护
- - 所有数据都在本地处理和存储
- 不要在 HTML 中包含敏感信息(如 API key、密码等)
- 如果日记中包含明显的隐私信息(身份证号、银行卡号等),在提取时脱敏
与 Diary Skill 的协作
- - 本 skill 只读取日记文件,不修改
- 输出到
02notes/insights/,不影响 INLINECODE60 - 读取
01studio/me/identity.md 获取用户基本信息(如果存在)
最后更新:2026-03-15
Note Extractor Skill - 日记洞察提取与可视化
前置检查
第一步:确定配置文件路径
读取 ~/.openclaw/workspace/diary/config/diary-config.json。
注意:
- - 展开 ~ 为完整的用户主目录路径
- 使用 echo $HOME 获取主目录
如果配置文件不存在,告诉用户:
看起来你还没有初始化日记系统。请先运行 onboarding skill 来完成设置:
在对话中说:setup my journal
第二步:确认日记数据存在
从配置中获取 storage.path,展开 ~,检查目录下是否有 .md 文件。
如果没有日记文件:
还没有日记记录。先用 diary skill 记录一些想法吧!
在对话中说:记一下
第三步:确认输出目录
输出目录:~/write_me/02notes/insights/
如果目录不存在,创建它:
bash
mkdir -p ~/write_me/02notes/insights
核心流程
1. 读取日记原文
使用 Read 工具读取 storage.path 下的日记文件。
确定目标文件:
1. 获取当前日期和时间
2. 根据配置中的 time_boundary(默认 06:00)判断:如果当前时间 < 边界,使用昨天的日期
3. 根据 date_format(默认 YYYY-MM)生成文件名,如 2026-03.md
4. 只读取该文件
1. 使用 Glob 工具查找所有日记文件:{展开后的storage.path}/*.md
2. 逐个读取每个文件
读取用户身份(如果启用):
如果配置中 useridentity.enabled 为 true,读取 {useridentity.path}/identity.md 获取用户名和角色。如果文件不存在,使用默认值:name = 用户,role = 。
2. 解析日记条目
日记文件格式(由 diary skill 生成):
markdown
日记 2026-03
14:30 [主动记录] - 项目进展
事实:
和同事讨论了项目方案。
用户说:
他提出要改设计风格,我觉得有道理但工作量会增加。
AI观察:
用户对设计变更持开放态度。
解析规则:
- - ## HH:MM [tag] - 标题 → 一条日记条目的开始
- 用户说: / 用户观点: 后面的内容 → 用户原话(最重要,这是人味儿)
- 事实: 后面的内容 → 客观事实
- 文章: 后面的内容 → 文章标题/链接
- 讨论: 后面的内容 → 对话记录(区分用户发言和 AI 发言)
- 决定: 后面的内容 → 决策记录
- AI观察: 后面的内容 → AI 的补充(次要权重)
- 文件名中的日期 → 条目所属月份
重要:严格区分用户原话和 AI 观察。提取洞察时,只从「用户说」和「事实」中提取,不要把 AI 的观察当作用户的想法。
3. 提取四类结构化数据
对读取到的所有日记内容,执行以下四个提取任务。
3.1 思维卡片提取
从日记中提取用户的核心洞察和金句。
提取标准:
- - 只提取用户自己说的话或明确表达的观点
- 具有独立价值,脱离上下文也能理解
- 体现用户的独特思考,不是常识或 AI 的补充
- 每条洞察应该简洁有力,1-2 句话
分类体系(根据用户实际内容动态生成,以下为参考):
- - 职业/行业洞察
- 产品/技术思考
- 个人成长/人生智慧
- 投资/商业判断
- 创作/表达方法论
- 其他(根据用户实际关注领域)
输出格式(JSON 数组):
json
[
{
id: 1,
insight: 用户的原话或提炼的核心观点,
source_date: 2026-03-14,
category: 分类名称,
importance: 4
}
]
- - importance:1-5 分,5 分最高。判断标准:原创性、可复用性、对用户的长期价值
- 每月提取 5-15 条,不要贪多,只留真正有价值的
3.2 每日情绪标签
为每个有日记记录的日期标注情绪。
情绪判断依据:
- - 优先看「用户说」的内容中的情绪词和语气
- 其次看「事实」中描述的事件性质
- 不要用 AI 观察来判断情绪
情绪分类:
- - positive(积极):开心、自豪、兴奋、感恩、自信、充沛、心流……
- neutral(中性):专注、平静、好奇、分析、思考、坚定……
- low(低落):疲惫、焦虑、低落、迷茫、自我怀疑……
输出格式(JSON 对象):
json
{
2026-03-14: {
mood: positive,
label: 自豪,
entries: [
{
time: 14:30,
type: 主动记录,
content: 用户说的原话或事实摘要(简短)
}
]
}
}
- - label:用中文,2-3 个字的情绪词
- entries:当天的条目摘要,每条不超过 50 字
- content 中只放用户说的话和事实,不放 AI 观察
3.3 成长维度打分
按月对用户在以下六个维度的关注度和成长进行打分。
六个维度:
- 1. 职业技能 — 工作能力、专业知识、行业理解
- 学习成长 — 阅读、课程、新知识获取
- 投资理财 — 财务决策、投资思考、理财规划
- 社交关系 — 人际互动、社交活动、关系维护
- 健康平衡 — 身体健康、情绪管理、作息平衡
- 创造输出 — 写作、创作、公开分享、项目产出
打分规则:
- - 0-100 分,基于该维度在当月日记中的出现频率和深度
- 只出现 1-2 次且浅层提及 → 20-40 分
- 多次出现且有深入思考 → 60-80 分
- 频繁出现且有明确行动和成果 → 80-100 分
- 完全没提及 → 10-20 分(给个基础分,不要给 0)
输出格式(JSON 对象):
json
{
一月: {
职业技能: 75,
学习成长: 80,
投资理财: 40,
社交关系: 50,
健康平衡: 30,
创造输出: 45
}
}
3.4 知识图谱提取
从日记中提取实体和关联,生成 2D 知识关联图谱的数据。
节点提取规则:
从日记中识别三类实体:
- 1. 主题领域(group: topic)
- 用户反复提及的领域和话题
- 例如:AI Agent、投资理财、个人品牌
- 提取标准:在日记中出现 2 次以上的主题词
- 2. 概念/框架(group: concept)
- 用户提到的具体理论、方法论、框架
- 例如:杠杆理论、PARA方法论、第一性原理
- 提取标准:用户明确讨论过的概念
- 3. 人物(group: person)
- 日记中提到的人(同事、朋友、作者、公众人物)
- 例如:团队成员名字、书籍作者
- 提取标准:在日记中被提及且与某个主题相关
连线生成规则:
当两个节点在同一天的日记中共同出现,或存在明确的因果/关联关系时,生成一条连线。
输出格式:
nodeData 数组:
json
[
{id: AI Agent, group: topic, desc: 从日记中提取的简短描述, size: 22}
]
linkData 数组:
json
[
{s: Vivi, t: AI Agent}
]
- - size:节点大小,基于在日记中的出现频率。范围 12-28。
- desc:从日记中提取的关于该节点的简短描述,不超过 20 字。
- 用户自己的名字应作为 person 节点加入,size 设为最大值 28。
4. 生成可视化页面
HTML 模板通过