puzle-read
将网页文章和文件保存至个人知识库,支持搜索与分析。
通过分段阅读并生成结构化反思,模拟真实阅读体验,记录认知变化过程。
openclaw skills install @horace-claw/sequential-read命令、参数、文件名以原文为准
通过以语义块为单位摄入内容,并逐步构建结构化反思,实现对散文类文本(小说、非虚构作品、文章)的深度阅读。输出不仅包含事后总结,更记录了阅读过程中认知的发展轨迹——哪些预测被证伪、哪些问题得到解答、哪些观点发生转变。
| 命令 | 描述 |
|---|---|
/sequential-read <文件路径> | 启动完整阅读会话 |
/sequential-read <文件路径> --lens <角色> | 以特定视角阅读(例如:"怀疑者"、"文学评论家"、"学生") |
/sequential-read list | 列出所有会话 |
/sequential-read show <会话ID> | 查看已完成会话的综合成果 |
该流程在独立的子代理中运行。 长篇阅读分为两个阶段:主读取器负责处理大部分内容块,完成后由终结器完成剩余内容并生成综合反思。这是正常流程,而非错误。
当用户调用 /sequential-read 时:
python3 {baseDir}/scripts/session_manager.py create <source-file>sessions_spawn with label: reader-{session-id}
Tell the agent: "Session already exists at {session-id}. Do NOT create it again." - 检查会话状态:python3 {baseDir}/scripts/session_manager.py get <session-id>
- 检查已有反思数量与总内容块数
- 若已存在综合成果: 结束。展示结果。
- 若仍有未处理内容块或无综合成果: 立即启动 终结器 子代理(见下文)。这是长篇小说的标准路径。
对于长篇文本(约20个以上内容块),主读取器通常处理17–20个内容块后因上下文容量限制而终止。这是预期行为,并非失败。终结器将接手剩余2–5个内容块,并基于全部前期反思生成完整综合成果。
启动终结器的指令:
sessions_spawn with label: finisher-{session-id}, model: "opus"
Task: "Resume reading session {session-id} at {baseDir path}.
Read reflections written so far to understand context.
Continue from chunk N (the next unwritten chunk).
Write remaining reflections, then run synthesis.
Session path: {session-path}"不要在主读取器与终结器之间等待或询问用户。 若主读取器返回但未生成综合成果,应立即启动终结器。整个流程应完全自动化,无需人工干预。
所有 Python 脚本位于 {baseDir}/scripts/ 目录下:
{baseDir}/scripts/session_manager.py{baseDir}/scripts/chunk_manager.py{baseDir}/scripts/state_manager.py模板文件位于 {baseDir}/templates/ 目录下:
{baseDir}/templates/reflection_prompt.md{baseDir}/templates/synthesis_prompt.md/sequential-read <文件路径> [--lens <角色>]python3 {baseDir}/scripts/session_manager.py create <source-file> [--lens <persona>]该命令自动检测是否已存在进行中的会话:
从输出第一行捕获会话 ID。
python3 {baseDir}/scripts/session_manager.py get <session-id>检查 status 字段以决定下一步操作:
| 状态 | 操作 |
|---|---|
preread | 从头开始执行预读阶段 |
chunked | 执行阅读阶段(从当前 current_chunk 处继续) |
read | 执行综合阶段 |
complete | 显示已有综合成果 |
**对于新会话或状态为 preread 的情况:**
运行预读子技能({baseDir}/preread/SKILL.md),传入参数:
SESSION_ID = 会话 IDSOURCE_FILE = 源文本路径BASE_DIR = {baseDir}**对于状态为 chunked(或预读完成后)的情况:**
运行阅读子技能({baseDir}/reading/SKILL.md),传入参数:
SESSION_ID = 会话 IDBASE_DIR = {baseDir}LENS = 角色值(若未指定则为 null)**对于状态为 read(或阅读完成后)的情况:**
运行综合子技能({baseDir}/synthesis/SKILL.md),传入参数:
SESSION_ID = 会话 IDBASE_DIR = {baseDir}综合生成完成后,向用户发送:
memory/sequential_read/<session-id>//sequential-read listpython3 {baseDir}/scripts/session_manager.py list将输出打印给用户。
/sequential-read show <会话ID>python3 {baseDir}/scripts/session_manager.py get <session-id>若状态为 complete,读取并显示:
memory/sequential_read/<session-id>/output/synthesis.md若未完成,显示当前会话状态及进度信息。
阅读阶段是最具挑战性的部分——需持续多轮迭代且必须保持高质量输出。根据源文本长度选择合适的模型:
| 文本长度 | 推荐模型 | 说明 |
|---|---|---|
| 小说(10,000+ 行,20+ 内容块) | Opus | 在多轮迭代中维持高质量;大上下文窗口可容纳累积状态 |
| 中篇小说 / 长篇论文(3,000–10,000 行) | Opus 或 Sonnet | 两者皆可;若内容块少于15个,Sonnet 亦适用 |
| 文章 / 短篇作品(<3,000 行) | Sonnet | 内容块较少,上下文负担可控 |
在启动子代理时,明确指定模型:对于小说类文本,使用 model: "opus"。
为何重要:
轻量级模型在长时间阅读过程中会逐渐退化——随着上下文积累,反思内容会变成空洞的占位符。在 Sonnet 模型上对一部包含 35 个分块的小说进行首次测试时,仅生成了 4 个真实的反思,其余 31 个均为占位符。因此,对于长篇作品(如小说),必须使用 Opus 模型。
分块大小:
结构化分块器的目标是每块约 550 行(范围 200–700 行)。对于典型的长篇小说(约 10,000–12,000 行),可生成约 20 个分块。更长的文本(15,000 行以上)可能产生 35 个或更多分块,此时需要额外执行一次“收尾会话”(详见下文)。
双阶段模式为标准流程。
对于长篇作品(20 个以上分块),始终应预期在主阅读器运行结束后启动一个收尾会话。主阅读器负责处理约 80%–90% 的分块;收尾会话则处理剩余部分并完成综合分析。对于极长文本(35 个以上分块),主阅读器可能仅处理约 25 个分块。请据此合理规划——这是正常的工作流,并非错误恢复机制。
提前创建会话:
始终在启动子代理前使用 session_manager.py create 创建会话。告知代理该会话已存在,无需再次创建。这可避免因重复创建导致的失败。
如果你维护阅读心智文件(即累积的阅读上下文——角色认知、主题线索、批判框架等),请将其内容作为前置信息加载到子代理的任务提示中。这有助于在系列作品间保持阅读连贯性。
在启动任务中包含上下文:
在开始阅读前,请参考以下累积的阅读上下文:
=== READING CONTEXT ===
[reader-mind 文件内容]
现在开始阅读 [书名]...合成完成后,更新 reader-mind 文件,加入新的角色认知、主题线索更新及跨章节观察。应进行修订而非简单追加。每份文件保持在约 4,000 字以内。
合成完成后,可将输出整合进你偏好的工作流中——博客文章、阅读日志、知识图谱、系列追踪系统等均可。位于 output/synthesis.md 的合成文件具备自包含性和可移植性。
已收录 1 个 Skill