阅读笔记 Skill
触发条件
用户发送文章链接 + 说「阅读笔记」/「帮我记一下」/「保存这篇文章」
支持的来源
| 平台 | 格式 | 备注 |
|---|
| 微信公众号 | mp.weixin.qq.com | 链接自动加 INLINECODE0 |
| 微博 |
weibo.com | 直接抓取 |
| 雪球 | xueqiu.com | 直接抓取 |
| B站 | bilibili.com | 视频页面信息 |
| 其他公开网页 | 任意 | 通用抓取 |
飞书文件夹结构
- - 根目录: INLINECODE1
- 阅读笔记: INLINECODE2
分类文件夹(自动匹配)
| 内容关键词 | 分类文件夹 | 文件夹 Token | 示例 |
|---|
| 投资、股票、财报、金融、巴菲特、芒格、估值、商业模式、段永平 | 投资商业 | CjgCfVSCIlSpWqdgql8cdl84nlg | 段永平投资理念、高盛分析报告 |
| AI、大模型、ChatGPT、字节、腾讯、阿里、科技公司、芯片、自动驾驶、豆包、元宝、千问 |
AI科技 | F6kOf6XahllQ1Rd5qyOcByPOnxc | AI巨头竞争、技术趋势 |
| 汽车、新能源、电动车、理想、蔚来、小鹏、小米汽车、自动驾驶 | 汽车新能源 | QyEEfY7Wll1NBadXkvEcmRybnxe | 新能源车企动态 |
| 育儿、教育、家庭、孩子、学习方法 | 家庭教育 | DK2ifbzlclZXmYd8fsOcrHUXnbf | 教育理念 |
| 健康、饮食、运动、养生、饮食建议、营养 | 健康生活 | Pnl9fjWhPlNQdddyIA3cKdoanMc | 水果控糖指南 |
| 其他不匹配的内容 | 其他 | EHv3fsHxSl9wp9d11encyKmfn3f | 通用分类 |
⚠️ 新增分类时必须同步飞书
当用户要求新增分类(或内容无法匹配现有分类)时,必须同时完成以下步骤:
- 1. 本地创建文件夹:
CODEBLOCK0
- 2. 飞书创建子文件夹:
CODEBLOCK1
- 3. 上传文件到飞书:
CODEBLOCK2
- 4. 更新
reading-notes-links.md:
- 新增分类标题和文件夹链接
- 文件夹链接格式: INLINECODE4
- 5. 更新
SKILL.md 本身:
- 在「分类文件夹」表格中添加新分类(含关键词、文件夹 Token)
- 保持表格持续扩展
飞书 API 配置
CODEBLOCK3
处理流程
Step 0: 获取日期
⚠️ 保存日期必须是用户实际分享链接的时间,不是文章内容中的日期!
从用户消息的 timestamp 获取日期(格式如 "Sat 2026-03-28 02:06 GMT+8"),提取 YYYY-MM-DD 部分作为文件名前缀和元数据中的保存日期。
CODEBLOCK4
Step 1: 抓取原文
CODEBLOCK5
Step 2: 清理换行符
微信公众号原文中 \n 是字面量字符串,需要替换:
CODEBLOCK6
Step 3: 合并短段落
公众号文章经常一句话一段,需要合并以提升可读性。保留原文完整性,不删减内容。
CODEBLOCK7
Step 4: 识别原文标题(关键步骤 ⚠️)
原文中的段落标题是文章结构的核心,绝不能忽略或自创标题。
识别方法
- 1. 先收集所有短段落(<40字),作为疑似标题候选
- 对比合并前后的段落,找出哪些是原文的独立短段落
- 标题通常有以下特征:
- 独立成段,前后有空行
- 字数 < 40
- 不以句号、逗号结尾
- 包含行业/业务关键词(如"消耗战"、"转向"、"收缩"、"军备竞赛"、"巴别塔"等)
识别流程
CODEBLOCK8
常见标题模式(示例,每篇文章需根据实际内容调整)
投资类:收缩、省钱、转型、盈利、亏损、估值、现金流...
科技类:DeepSeek、豆包、元宝、补课、军备竞赛、博弈、入口...
汽车类:发布会、量产、智驾、增程、纯电、交付、开城...
⚠️ 重要:不要自创标题,必须用原文的段落标题!
Step 5: 生成阅读总结
⚠️ 必须真正阅读全文后总结,不能从开头截取!
阅读总结分两部分:
CODEBLOCK9
Step 6: 质量检查(必须执行,逐项核对)
- - [ ] 核心观点是否真正总结 - 不能从文章开头复制粘贴!必须基于全文内容概括
- [ ] 金句是否有乱码 - 检查是否有
\n 或 \n\n 字面量残留,必须全部清理 - [ ] 金句是否从全文精选 - 不能只从开头截取,要从全文各部分挑选最有价值的句子
- [ ] 金句之间是否有空行 - 每条金句后必须有空行分隔(
。\n\n >) - [ ] 元数据字段之间是否有空行 - 来源、作者、链接等每个字段后必须有两个换行符
- [ ] 原文段落是否有缩进 - 原文全文的段落前必须用全角空格
,不能用普通空格 - [ ] 段落标题前没有缩进 -
## 开头的标题行前面不能有缩进 - [ ] 原文标题是否正确插入(用
## 分隔) - [ ] 是否有重复段落
- [ ] 来源、作者、关键词信息是否完整
Step 7: 上传到飞书云盘
CODEBLOCK10
Step 8: 更新链接记录
更新 ~/.openclaw/workspace/reading-notes-links.md,记录所有文章的飞书文档链接。
输出文件格式
CODEBLOCK11
飞书云盘路径:
CODEBLOCK12
⚠️ 文件名必须带日期前缀,格式为 INLINECODE14
⚠️ 日期必须使用用户发送链接的时间(从消息 timestamp 获取),不是文章内容中的日期,也不是当前时间!
示例:用户在 2026-03-28 00:44 发送链接,文件名应为:
原因: 记录"用户什么时候分享的",便于按日期做阅读统计和排序。
注意事项
- 1. 微信公众号链接必须加
?scene=1 参数 - 浏览器抓取后必须 close tab
- 原文段落合并时保留所有内容,不删减
- 原文标题用短段落匹配,不要自创标题 ⚠️ 这是常见错误!
- 段落缩进用全角空格 INLINECODE17
- 阅读总结分两部分:核心观点(概括文章论点)+ 金句(摘录3-5句原文精华)
- 质量检查时必须确认原文标题是否正确插入(用
## 分隔)
⚠️ 格式规范(必须严格遵守)
元数据格式
每个元数据字段之间必须有两个换行符,确保正确显示:
CODEBLOCK13
错误示例(不要这样):
CODEBLOCK14
正确示例(必须这样):
CODEBLOCK15
金句格式
金句之间必须有空行分隔,每条金句独立一行:
CODEBLOCK16
错误示例(不要这样):
CODEBLOCK17
正确示例(必须这样):
CODEBLOCK18
实现方法: 每条金句后加 \n\n,而不是 \n。
常见错误
❌ 错误:核心观点从开头截取
问题:直接复制文章开头内容作为核心观点,没有真正总结全文。
修复:必须阅读全文后用自己的话概括,不能复制原文开头。
示例(错误):"2025年11月,姚顺雨穿着休闲短裤、踩着拖鞋出现在腾讯的一场内部会上..."(这是原文开头,不是总结)
示例(正确):"这是一场AI时代的「中途岛战役」。字节豆包日活破亿、腾讯元宝借DeepSeek爆发、阿里千问三位一体投入4800亿。三巨头策略截然不同..."
❌ 错误:金句有乱码
问题:金句中包含
\n 或
\n\n 字面量,没有清理。
修复:生成金句前必须执行
content.replace('\\n', ' ').replace(' ', ' ') 清理所有转义符。
❌ 错误:金句从开头截取
问题:只从文章开头截取金句,没有从全文精选。
修复:必须阅读全文,从不同章节挑选最有洞察力、有数据、有判断的原句。
❌ 错误:忽略原文段落标题
问题:直接把所有内容合并成一段,丢失了文章的章节结构。
修复:先识别短段落作为标题候选,合并时跳过标题段落。
❌ 错误:自创标题
问题:用自己编的标题替代原文标题。
修复:必须使用原文中的段落标题,即使格式不完美。
❌ 错误:段落标题前加了缩进
问题:原文段落标题(如
## 01 某某标题)前面被加了缩进
,导致 Markdown 渲染时标题格式错误。
修复:段落标题(
## 开头的行)前面不要加缩进,保持
## 标题的纯净格式。
示例(错误):
## 01 AI有了"手",企业先想到的是什么
示例(正确): INLINECODE29
❌ 错误:段落缩进用普通空格
问题:原文段落缩进用2个普通空格(
),Markdown 渲染时会被吞掉,导致没有缩进效果,易读性差。
修复:所有段落缩进必须用全角空格
,不能用普通空格。
示例(错误):
这是一段正文内容...
示例(正确): INLINECODE33
❌ 错误:原文全文段落没有缩进
问题:原文部分的段落没有首行缩进,导致阅读体验差。
修复:原文全文部分,除标题(
## )和引用(
>)外,每个段落前都要加全角空格
。
子代理完成通知
子代理完成任务后,必须通过飞书 API 直接推送消息给用户:
CODEBLOCK19
阅读笔记 Skill
触发条件
用户发送文章链接 + 说「阅读笔记」/「帮我记一下」/「保存这篇文章」
支持的来源
| 平台 | 格式 | 备注 |
|---|
| 微信公众号 | mp.weixin.qq.com | 链接自动加 ?scene=1 |
| 微博 |
weibo.com | 直接抓取 |
| 雪球 | xueqiu.com | 直接抓取 |
| B站 | bilibili.com | 视频页面信息 |
| 其他公开网页 | 任意 | 通用抓取 |
飞书文件夹结构
- - 根目录: https://vk8zot12ir.feishu.cn/drive/folder/U4p7fPrW1lmQzedgT9rcenKQnbh
- 阅读笔记: https://vk8zot12ir.feishu.cn/drive/folder/C5NZflqNJlCK0EdaTQ2cmhVdnJg
分类文件夹(自动匹配)
| 内容关键词 | 分类文件夹 | 文件夹 Token | 示例 |
|---|
| 投资、股票、财报、金融、巴菲特、芒格、估值、商业模式、段永平 | 投资商业 | CjgCfVSCIlSpWqdgql8cdl84nlg | 段永平投资理念、高盛分析报告 |
| AI、大模型、ChatGPT、字节、腾讯、阿里、科技公司、芯片、自动驾驶、豆包、元宝、千问 |
AI科技 | F6kOf6XahllQ1Rd5qyOcByPOnxc | AI巨头竞争、技术趋势 |
| 汽车、新能源、电动车、理想、蔚来、小鹏、小米汽车、自动驾驶 | 汽车新能源 | QyEEfY7Wll1NBadXkvEcmRybnxe | 新能源车企动态 |
| 育儿、教育、家庭、孩子、学习方法 | 家庭教育 | DK2ifbzlclZXmYd8fsOcrHUXnbf | 教育理念 |
| 健康、饮食、运动、养生、饮食建议、营养 | 健康生活 | Pnl9fjWhPlNQdddyIA3cKdoanMc | 水果控糖指南 |
| 其他不匹配的内容 | 其他 | EHv3fsHxSl9wp9d11encyKmfn3f | 通用分类 |
⚠️ 新增分类时必须同步飞书
当用户要求新增分类(或内容无法匹配现有分类)时,必须同时完成以下步骤:
- 1. 本地创建文件夹:
bash
mkdir -p ~/.openclaw/workspace/saved/reading-notes/{新分类名}
- 2. 飞书创建子文件夹:
python
# 在阅读笔记根目录下创建子文件夹
reading_folder = C5NZflqNJlCK0EdaTQ2cmhVdnJg
resp = requests.post(
https://open.feishu.cn/open-apis/drive/v1/files/create_folder,
headers=headers,
json={name: {新分类名}, folder
token: readingfolder}
)
new
foldertoken = resp.json()[data][folder_token]
- 3. 上传文件到飞书:
python
upload
url = https://open.feishu.cn/open-apis/drive/v1/files/uploadall
# 上传到新创建的文件夹
- 4. 更新 reading-notes-links.md:
- 新增分类标题和文件夹链接
- 文件夹链接格式:https://vk8zot12ir.feishu.cn/drive/folder/{新文件夹token}
- 5. 更新 SKILL.md 本身:
- 在「分类文件夹」表格中添加新分类(含关键词、文件夹 Token)
- 保持表格持续扩展
飞书 API 配置
python
appid = clia929129e4278dced
app_secret = usgK70hkHYBTQTtqMUFUMeXPPQDp35CE
文件夹 token
root_folder = U4p7fPrW1lmQzedgT9rcenKQnbh
reading_folder = C5NZflqNJlCK0EdaTQ2cmhVdnJg
分类文件夹 token(从 reading_folder 子文件夹获取)
投资商业、AI科技、汽车新能源、家庭教育、其他
处理流程
Step 0: 获取日期
⚠️ 保存日期必须是用户实际分享链接的时间,不是文章内容中的日期!
从用户消息的 timestamp 获取日期(格式如 Sat 2026-03-28 02:06 GMT+8),提取 YYYY-MM-DD 部分作为文件名前缀和元数据中的保存日期。
python
用户消息 timestamp
user_timestamp = Sat 2026-03-28 02:06 GMT+8
date_prefix = 2026-03-28 # 从 timestamp 提取
元数据中的 保存日期 也必须写这个日期,不能从文章内容中提取
Step 1: 抓取原文
bash
打开浏览器
openclaw browser open 链接?scene=1
sleep 5
获取标题
openclaw browser evaluate --fn () => document.querySelector(#activity-name)?.innerText?.trim() ||
获取原文
openclaw browser evaluate --fn () => document.querySelector(#js_content)?.innerText ||
关闭标签
openclaw browser close
Step 2: 清理换行符
微信公众号原文中 \n 是字面量字符串,需要替换:
python
content = raw.replace(, ) # 去掉首尾引号
content = content.replace(\\n\\n\\n\\n\\n, \n\n)
content = content.replace(\\n\\n, \n\n)
content = content.replace(\\n, \n)
paragraphs = [p.strip() for p in content.split(\n\n) if p.strip()]
Step 3: 合并短段落
公众号文章经常一句话一段,需要合并以提升可读性。保留原文完整性,不删减内容。
python
merged = []
buffer =
for para in paragraphs:
# 标题段落单独处理
if istitle(para, originaltitles):
if buffer:
merged.append(buffer)
buffer =
merged.append(para)
continue
if len(buffer) + len(para) < 280:
buffer = (buffer + + para).strip() if buffer else para
else:
if buffer:
merged.append(buffer)
buffer = para
if buffer:
merged.append(buffer)
Step 4: 识别原文标题(关键步骤 ⚠️)
原文中的段落标题是文章结构的核心,绝不能忽略或自创标题。
识别方法
- 1. 先收集所有短段落(<40字),作为疑似标题候选
- 对比合并前后的段落,找出哪些是原文的独立短段落
- 标题通常有以下特征:
- 独立成段,前后有空行
- 字数 < 40
- 不以句号、逗号结尾
- 包含行业/业务关键词(如消耗战、转向、收缩、军备竞赛、巴别塔等)
识别流程
python
第一步:在合并前,先收集所有短段落作为标题候选
title_candidates = [p for p in paragraphs if len(p) < 40]
第二步:对每个疑似标题,检查前后段落是否有空行分隔
for i, p in enumerate(paragraphs):
if len(p) < 40:
# 检查是否独立成段(前后是空行或内容段)
if i > 0 and i < len(paragraphs) - 1:
# 这是一个短段落,标记为标题
标记为标题
第三步:合并时遇到标题就跳过,单独保留
for para in paragraphs:
if para in original_titles: # 标题不参与合并
if buffer:
merged.append(buffer)
buffer =
merged.append(para) # 标题单独一段
continue
# 正常合并逻辑...
常见标题模式(示例,每篇文章需根据实际内容调整)
投资类:收缩、省钱、转型、盈利、亏损、估值、现金流...
科技类:DeepSeek、豆包、元宝、补课、军备竞赛、博弈、入口...
汽车类:发布会、量产、智驾、增程、纯电、交付、开城...
⚠️ 重要:不要自创标题,必须用原文的段落标题!
Step 5: 生成阅读总结
⚠️ 必须真正阅读全文