daily-learning-cards
每日学习卡片自动生成 - 从会话记录中提炼知识,生成结构化学习卡片。
功能特性
- 📚 智能提取:自动从飞书/WebUI 双渠道会话记录中提取学习内容
- 🧠 AI 整合:基于内容丰富度进行重要性排序,提炼核心知识
- 📝 结构化输出:自动生成包含主题、决策、踩坑、新概念、金句的学习卡片
- 📤 自动投递:通过 OpenClaw 自动投递到配置好的消息渠道
- ⚙️ 高度可配置:支持用户自定义提取规则、数量限制、输出格式
快速开始
1. 安装
# 复制到 skills 目录
cp -r daily-learning-cards /home/admin/.openclaw/workspace/skills/
# 初始化用户配置
node scripts/load-config.js init
2. 配置定时任务
openclaw cron add \
--name "每日学习卡片" \
--cron "0 10 * * *" \
--tz "Asia/Shanghai" \
--session isolated \
--message "bash /home/admin/.openclaw/workspace/skills/daily-learning-cards/daily-learning-cards.sh" \
--announce \
--exact
3. 手动运行测试
cd /home/admin/.openclaw/workspace/skills/daily-learning-cards
bash daily-learning-cards.sh
架构设计
┌─────────────────┐ ┌─────────────┐ ┌─────────────┐
│ memory/feishu/ │ │ extract.js │ │ generate- │
│ memory/webui/ │ ──▶ │ (数据提取) │ ──▶ │ card.js │
│ YYYY-MM-DD.md │ │ │ │ (AI整合) │
│ YYYY-MM-DD.md │ │ │ │ │
└─────────────────┘ └─────────────┘ └──────┬──────┘
│
▼
┌─────────────────┐ ┌─────────────┐ ┌─────────────┐
│ OpenClaw cron │ │ stdout │ │ learning- │
│ --announce │ ◀── │ (摘要输出) │ ◀── │ cards/ │
│ │ │ │ │ YYYY-MM-DD.md
└─────────────────┘ └─────────────┘ └─────────────┘
设计原则:
- 数据提取(脚本):确定性的结构化提取
- 内容整合(AI):理解性的重要性排序和提炼
- 消息投递(OpenClaw):平台无关的自动投递
配置文件
用户配置
位置:~/.daily-learning-cards/config.json
{
"extract": {
"maxTopics": 20,
"maxPitfalls": 6,
"maxConcepts": 6,
"maxInsights": 6,
"minInsightLength": 10
},
"summary": {
"includeTopics": true,
"includeDecisions": true,
"includePitfalls": true,
"includeConcepts": true,
"includeInsights": true,
"emojiStyle": "unicode"
},
"schedule": {
"hour": 10,
"minute": 00,
"timezone": "Asia/Shanghai"
},
"language": "zh"
}
配置项说明
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| extract.maxTopics | number | 20 | 最大主题数 |
| extract.maxPitfalls | number | 6 | 最大踩坑记录数 |
| extract.maxConcepts | number | 6 | 最大新概念数 |
| extract.maxInsights | number | 6 | 最大金句数 |
| extract.minInsightLength | number | 10 | 金句/洞见的最小字符长度 |
| summary.emojiStyle | string | "unicode" | Emoji 样式:unicode/text |
| schedule.hour | number | 10 | 定时小时 |
| schedule.minute | number | 00 | 定时分钟 |
| language | string | "zh" | 语言:zh/en/bilingual |
提取规则
自动提取的字段
1. 主题(Topics)
- 识别:
## 新主题:{主题名}或### 时间:{时间} - 提取:主题名称、来源渠道
2. 决策(Decisions)
- 识别:
| 选项 | 考虑因素 | 结果 |表格 - 提取:选项、考虑因素、结果
3. 踩坑记录(Pitfalls)
- 识别:
**踩坑记录:**+- **问题:** {描述} - 提取:问题、解决方案、教训
4. 新概念(Concepts)
- 识别:
**新概念:**+- **术语:** {术语} - 提取:术语、定义、应用场景
5. 金句/洞见(Insights)
- 识别:
> "{金句}"或> {金句} - 提取:金句内容
自动过滤的内容
以下系统噪音会被自动过滤:
- "morning"
- "两件事都已完成"
- "心跳检查"
- "启动检查"
- "HEARTBEAT_OK"
输出格式
摘要(stdout)
每日推送到消息渠道的摘要格式:
保存到 memory/learning-cards/YYYY-MM-DD.md 的完整格式:
# 学习卡片 - 2026-04-18
## 基本信息
- **日期:** 2026-04-18
- **渠道:** 飞书 + WebUI(双渠道合并)
- **主题数:** 12 个
- **决策数:** 12 个
- **踩坑数:** 7 个
- **新概念:** 5 个
---
## 核心主题
### 1. 落款格式问题
**来源:** 飞书
### 2. 今日记忆文件检查
**来源:** 飞书
...
---
## 重要决策
| 选项 | 考虑因素 | 结果 | 来源 |
|------|---------|------|------|
| 统一超时时间 | 提高系统稳定性 | 采纳 | 飞书 |
...
---
## 踩坑记录
### 1. follow-builders脚本使用openclaw message send发送命令无法执行
**来源:** 飞书
- **解决方案:** 修改脚本直接调用技能的JS文件
- **教训:** 命令需要在正确的环境中执行
...
---
## 新概念
### 1. 定时任务超时控制
**来源:** 飞书
- **定义:** 为定时任务设置最大执行时间限制
- **应用场景:** 防止任务无限期运行
...
---
## 金句 / 洞见
1. > "超时控制是系统稳定性的关键要素"
> —— 飞书
...
---
## 数据来源
- **飞书:** memory/feishu/2026-04-18.md
- **WebUI:** memory/webui/2026-04-18.md
---
*💃 金银 Planet · 自我提升部*
故障排除
问题 1:卡片未生成
症状: 定时任务运行但无卡片生成
检查:
# 1. 检查昨日是否有会话记录
ls -la memory/feishu/ memory/webui/
# 2. 检查日志
tail -20 /tmp/daily-learning-cards.log
# 3. 手动运行查看输出
bash daily-learning-cards.sh
解决:
- 确保昨日有对话记录
- 检查
extract.js是否正常输出 JSON
问题 2:内容提取不完整
症状: 踩坑记录/新概念/金句未提取
检查:
# 检查记忆文件格式
cat memory/feishu/2026-04-18.md | grep -A3 "踩坑记录"
解决:
- 确保使用标准格式:
- **问题:** {描述} - 检查
extract-rules.md中的识别规则
问题 3:主题数量不对
症状: 提取的主题数与预期不符
检查:
# 查看配置
cat ~/.daily-learning-cards/config.json | grep maxTopics
# 测试提取
node scripts/extract.js 2026-04-18 | grep -c '"title"'
解决:
- 修改
~/.daily-learning-cards/config.json中的maxTopics - 主题按内容丰富度排序,不是按时间顺序
问题 4:定时任务未触发
症状: 到时间了没有收到学习卡片
检查:
# 查看 cron 任务
openclaw cron list | grep "学习卡片"
# 检查任务状态
openclaw cron info <任务ID>
解决:
- 重新创建 cron 任务
- 检查
--announce参数是否正确配置
高级用法
自定义提取规则
编辑 prompts/extract-rules.md:
# 自定义提取规则
## 新增提取字段
### 6. 关键数据(KeyData)
**识别方式:**
- 表格格式:`| 数据 | 数值 | 意义 |`
**提取内容:**
- name: 数据名称
- value: 数值
- meaning: 意义
自定义摘要模板
编辑 prompts/summary-template.md:
# 我的自定义摘要模板
## 输出格式
📚 今日学习总结 · {日期}
🎯 核心收获:{主题数} 个主题 💡 关键洞见:{金句数} 条
{主题列表}
💪 继续加油!
与其他技能协作
┌─────────────────┐
│ learning-cards │ 每日生成学习卡片
│ (本技能) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ learning-examiner│ 基于卡片出题测试
│ (学习考官) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ learning-manager│ 生成周报汇总
│ (Elon) │
└─────────────────┘
技术细节
文件结构
daily-learning-cards/
├── _meta.json # Skill 元数据
├── SKILL.md # 本文件
├── daily-learning-cards.sh # 主脚本(入口)
├── prompts/ # Prompts 目录
│ ├── summary-template.md # 摘要模板
│ └── extract-rules.md # 提取规则
├── scripts/ # 脚本目录
│ ├── extract.js # 数据提取
│ ├── ai-generate.js # AI 生成卡片
│ ├── extract-insights.js # 金句提取
│ ├── extract-pitfalls.js # 踩坑提取
│ ├── extract-concepts.js # 新概念提取
│ └── load-config.js # 配置加载
└── README.md # 简要说明
依赖
- Node.js ≥ 16.0
- Bash ≥ 4.0
- OpenClaw(用于定时任务和消息投递)
更新日志
v1.0.0 (2026-05-08)
- 🎉 初始版本
- ✅ 双渠道记录合并
- ✅ 自动飞书推送
- ✅ 智能内容过滤
- ✅ AI 整合生成(重要性排序)
- ✅ 用户配置文件支持
- ✅ Prompts 外置
- ✅ 踩坑/新概念/金句列表化
- ✅ 统计概览优化
许可证
MIT-0 - 自由使用,无需署名。
反馈与支持
如有问题或建议,请:
- 检查本 SKILL.md 的故障排除章节
- 查看日志文件:
/tmp/daily-learning-cards.log - 联系开发者
💃 金银 Planet · 自我提升部
微信扫一扫