executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
novel-readerIntelligent long text novel reader with smart content filtering and detailed asset extraction. Invoke when user wants to read or analyze long novels. Automatically skips irrelevant content and extracts detailed character/item/scene information.
Independent GitHub snapshot · Automated classification · Original documentation governs
使用 Python 安全、可靠地读取长文本小说,解决 LLM 上下文窗口有限的问题。完美支持 UTF-8 编码的中文小说。自动过滤无关内容,实时抽取详细的角色、道具、场景信息。
for i in $(seq ...)),因为 Agent 工具会对输出进行压缩,for 循环会导致内容被截断,当你看到 (some characters truncated) 表示内容已经被截断,你只能手动重新一段一段读取。python3 read_novel.py <小说文件路径> [--start <起始位置>]
| 参数 | 说明 | 示例 |
|---|---|---|
<小说文件路径> | 小说文件的路径(必填),支持 TXT、PDF、DOC、DOCX 格式。如果是 PDF/DOC/DOCX 格式,先使用 doc-to-txt skill 转换为 TXT | test-files/novel.txt 或 test-files/novel.pdf |
--info | 获取小说信息(总字符数、总行数、非空行数) | --info |
--start | 起始位置(字符索引,从 0 开始,默认:0,可选) | --start 10000 |
获取小说信息:
python3 read_novel.py ./novel.txt --info
读取小说从头开始的 3000 个字符(使用默认参数):
python3 read_novel.py ./novel.txt --start 0
读取小说从第 3000 个字符开始的 3000 个字符(仅指定 start):
python3 read_novel.py ./novel.txt --start 3000
查看帮助:
python3 read_novel.py --help
完整工作流分为三个阶段:文件格式处理 → 初始化 → 循环读取 → 完成总结
步骤 1:获取小说信息
python3 read_novel.py novel.txt --info
输出示例:
总字符数: 5512508
总行数: 158108
非空行数: 79053
步骤 2:检查读取进度
读取进度.txt 文件每个循环读取 10 个片段(共 30000 字符),分为两个子阶段:
子阶段 A:批量读取(连续执行,中间不分析)
连续调用 10 次读取命令,每次读取 3000 字符:
--start <当前位置>--start <当前位置+3000>--start <当前位置+27000>示例(从 0 开始的第一个循环):
读取片段 1:--start 0
读取片段 2:--start 3000
...
读取片段 10:--start 27000
示例(从 60000 开始的第三个循环):
读取片段 21:--start 60000
读取片段 22:--start 63000
...
读取片段 30:--start 87000
⚠️ 关键规则:10 次读取必须连续执行,中间不分析、不总结、不更新文件
子阶段 B:分析更新(读完 10 个片段后执行)
大纲.txt:添加这 10 个片段的章节摘要读取进度.txt:记录当前位置(如 30000)子阶段 C:判断是否继续
假设用户要求读取小说前 5%,小说文件是 novel.pdf:
前置步骤:文件格式处理
步骤 1:初始化
读取进度.txt → 不存在,从位置 0 开始步骤 2:循环读取
循环 1(片段 1-10,0-30000 字符):
--start 0 到 --start 27000循环 2(片段 11-20,30000-60000 字符):
--start 30000 到 --start 57000循环 3(片段 21-30,60000-90000 字符):
--start 60000 到 --start 87000... 继续循环 ...
循环 10(片段 91-100,270000-300000 字符):
--start 270000 到 --start 297000步骤 3:完成总结
| 规则 | 说明 |
|---|---|
| 严禁边读边分析 | 每读完一个片段就分析更新是错误的做法 |
| 必须批量读取 | 10 个片段全部读完后再统一分析更新 |
| 支持断点续读 | 通过读取进度.txt 实现中断后继续 |
| 进度计算 | 每次循环读取 30000 字符(10 × 3000) |
通过执行 Python 脚本读取小说内容后,让大模型读懂内容,自动识别并忽略与小说正文无关的内容,只保留小说的正文章节内容进行分析和资产抽取。不使用任何规则或正则表达式进行过滤,完全依赖大模型的理解能力。
每读取一段内容(不超过 3000 字符),立即从中识别并抽取新出现的资产(角色、道具、场景),并实时更新对应的文件。不要等到全部读完再更新。大模型会充分利用上下文 compact 机制,在快用完上下文时自动压缩。
从每段读取的内容中,识别并抽取以下三类资产,尽可能收集详细信息:
角色 - 小说中出现的人物,包括:
道具 - 小说中出现的物品、法宝、武器等,包括:
场景 - 小说中出现的地点、环境、场所等,包括:
在小说文件所在目录下创建以下结构:
小说名或项目名/
├── 大纲.txt
├── 读取进度.txt
├── 角色/
│ ├── <角色名1>.txt
│ ├── <角色名2>.txt
│ └── ...
├── 道具/
│ ├── <道具名1>.txt
│ ├── <道具名2>.txt
│ └── ...
└── 场景/
├── <场景名1>.txt
├── <场景名2>.txt
└── ...
1. <第一段内容的摘要>
2. <第二段内容的摘要>
...
说明:
当前位置: <字符索引>
已读字数: <数字>
总字数: <数字>
进度: <百分比>%
每个角色文件包含该角色的详细描述,参考格式如下:
<角色名称>
【基本信息】
姓名:
年龄:
性别:
身份:
角色定位:
【外貌特征】
容貌:
身高:
体型:
着装:
【音色特征】
音色描述:(如"低厚温润中年男声""清冽有力少女音",用于下游 Seedance 音色锚定)
【性格特点】
性格:
口头禅:
习惯性动作:
行为模式:
【背景关系】
家庭:
朋友:
敌人:
师承:
【能力修为】
实力等级:
特殊能力:
武器装备:
【出场情节】
首次出场:
【妆造变化】(如有)
- 妆造1(默认):[出现集数/场号] [服装/发型/妆容/配饰描述]
- 妆造2([造型名称]):[出现集数/场号] [服装/发型/妆容/配饰变化描述]
- ...
(每种妆造需在下游单独生成面部特写+全身像+音色参考视频)
每个道具文件包含该道具的详细描述,参考格式如下:
<道具名称>
【基本信息】
名称:
类型:
来源:
【外观特征(视觉细节,需足够详细以生成参考图)】
形状:
颜色:
材质:
大小:
独特标记/纹样/装饰:
整体外观描述(一句话,可直接作为图像生成 prompt 输入):
【功能特性】
特殊能力:
使用方法:
效果:
【历史背景】
来历:
重要事件:
【相关角色】
拥有者:
使用者:
争夺者:
每个场景文件包含该场景的详细描述,参考格式如下:
<场景名称>
【基本信息】
名称:
类型:
地理位置:
【环境特征(视觉细节,需足够详细以生成参考图和360度视频)】
地形:
气候:
建筑风格:
氛围:
关键物品空间布局:(如"左侧靠墙放置病床,床头挂监护仪,右侧有床头柜和落地窗,门在正对面")
整体环境描述(一句话,可直接作为图像生成 prompt 输入):
【功能用途】
居住:
修炼:
交易:
战斗:
【相关势力】
所属势力:
管理者:
常驻人物:
【重要事件】
发生过的关键情节:
python3 -c "
with open('test-files/novel.txt', 'r', encoding='utf-8', errors='replace') as f:
print(len(f.read()))
"
读取分段:每次读取最多 3000 字符,默认值为 3000 字符,避免超出工具输出限制
上下文管理:大模型通常有 128k 上下文窗口,Agent 会在快用完上下文时自动压缩,请合理利用