迭代章纲

大致写清楚了卷纲后,可以开始用ai辅助迭代章纲了。

我使用的提示词是

第一卷不少于50章,每章不少于4000字,用两三句画来概括一下每一章发生的内容,给出每一章在故事中的作用。

ai给出了每一章的章纲后,会感觉”很水”,因为现在的世界书条目还不够多,后面十几章的内容缺少人物之间的交互,很多需要外部因素触发的事情都被主角等少数角色触发了,就显得平平淡淡。

多抽卡几次的话,前几张的章纲倒是能初步确立下来,然后就可以一边思考在哪些地方添加人物或者过渡事件,一边生成前几章试试有没有看头。

经过自己的修改后,完善了前5章的章纲。

以下内容是第一卷的章纲,前面的数字序号代表章节号。
1.诺斯替在布雷克的带领下进行传教宣讲,在宣讲之余听布雷克抱怨琐碎工作,在宣讲的时候遇到观众提问,诺斯替解答问题,在解答问题的时候体现出真理教会的鼓励批判思考,尊崇理性的特点。
2.诺斯替下班第二天接到第一项独立任务,调查城西小教堂“永恒烛台”失窃案,在介绍永恒烛台的时候,用临床体的文风介绍。诺斯替前往现场,观察被破坏的烛台底座、残留的蜡痕和门窗状况,记录细节。在和教堂司祭对话的时候体现出诺斯替玩世不恭的性格。
3.诺斯替继续查案,但发生某件事情让他查案进展受阻,诺斯替希望请求设备支持,<秘密>通常情况下会被拒绝,但审判长一直在暗中关注此事件,于是诺斯替的请求得到了她的暗中授意。</秘密>
4.诺斯替拜访神学研究院,寻求技术支援。研究员阿妮塔认出他,两人简短叙旧(提及曾为同学)。阿妮塔为他提供一副特制单片眼镜原型,初步解释其能解析物品表面微弱能量残留的功能。
5.诺斯替返回案发现场,使用单片眼镜仔细扫描,发现一种非蜡质的特殊油脂残留和几缕罕见的灰色纤维。布雷克对此线索不以为然,认为可能是无关人员留下的。

思考

继续这样迭代下去,还是太耗费脑细胞了,刷b站的时候看到网上有一个拆书教程,觉得很有意思,但是太繁琐了,要把一整本书全部拆完太耗费精力,于是打算让ai拆书。

尝试

想到用爬虫爬取小说网站内容,然后发给ai去拆书,很喜欢诡秘之主这本书,但是上次看的是盗版,正版网站没有充钱,于是找了个盗版网站拿去问ai爬数据,但是失败了,现在的网站都有反爬机制,不是我一个没接触过爬虫的人可以轻易搞定的。

社会工程学

思虑片刻,我的超级智慧告诉我该使用我的超级力量了,我在网上直接找到了诡秘之主的txt全文,并且格式化还做的不错,只要简单地处理就可以提取任意章节区间的内容。

批量化拆书

由于格式问题,文字提取部分的代码基本不具有可重复性,但还是在这里贴上吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import re
# 存储所有章节的位置信息

def extract_chapters_by_index(file_path, start_index, end_index):
"""
按章节出现的顺序索引提取小说内容

参数:
file_path: 小说文件路径
start_index: 起始章节的序号(从1开始)
end_index: 结束章节的序号(包含)

返回: 提取的文本内容
"""
chapter_positions = []

# 第一次扫描:记录所有章节位置
if not chapter_positions:
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
for line_num, line in enumerate(lines):
stripped_line = line.strip()
if re.match(r'^第[一二三四五六七八九十百千]+章', stripped_line):
# 记录章节位置:行号、标题和出现的顺序索引
chapter_positions.append({
'line_num': line_num,
'title': stripped_line,
'index': len(chapter_positions) + 1 # 从1开始的顺序索引
})
total_chapters = len(chapter_positions)

if start_index < 1 or end_index > total_chapters or start_index > end_index:
return f"章节范围无效,有效范围: 1-{total_chapters}"

# 确定起止行号
start_chapter = chapter_positions[start_index - 1]
start_line = start_chapter['line_num']

# 确定结束位置(下一章的开始或文件末尾)
if end_index < total_chapters:
end_line = chapter_positions[end_index]['line_num'] # 下一章的开始行
else:
end_line = len(lines) # 文件末尾

# 提取内容
content_lines = lines[start_line:end_line]
content = ''.join(content_lines)

# 添加提取信息注释
# info = f"/* 提取范围: 第{start_index}章({start_chapter['title']}) 到 第{end_index}章({chapter_positions[end_index - 1]['title']}) */\n"
return content


# 测试代码
if __name__ == "__main__":
# 提取前3章(按出现顺序)
content = extract_chapters_by_index('诡秘之主.txt', 1000, 1001)
print(content)
print(extract_chapters_by_index("诡秘之主.txt",1,1))

拆书代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from openai import OpenAI
from extract import *
import time # 导入时间模块,用于请求间隔

API_KEY = "你的apikey"
ai = OpenAI(api_key=API_KEY, base_url="https://api.deepseek.com")
iniContent = '''你是一个专业的网络小说作家,你现在需要对诡秘之主这部小说的内容进行拆解,每一章你都需要根据用户提供的内容来拟出这一章的章纲。
要求:严格按照如下格式生成每一章章纲的内容,并且不要添加任何其他内容格式之外的内容。
格式:
**章节号+章节名称**
1. 本章发生的事件1
2. 本章发生的事件2
...
N. 本章发生的事件N
伏笔/铺垫(如果有):伏笔内容
意义(本章内容的作用):内容'''

# 创建或追加到Markdown文件
output_file = "诡秘之主章纲分析.md"

with open(output_file, "a", encoding="utf-8") as md_file:
# 添加文件标题
md_file.write("# 《诡秘之主》章纲分析\n\n")

# 循环处理100章,每次处理10章
for i in range(0, 100, 10):
start_chapter = i + 1
end_chapter = i + 10

print(f"正在处理第 {start_chapter}{end_chapter} 章...")

# 提取章节内容
content = extract_chapters_by_index("诡秘之主.txt", start_chapter, end_chapter)

message = [
{"role": "system", "content": iniContent},
{"role": "user", "content": f"以下是《诡秘之主》第{start_chapter}章到第{end_chapter}章的内容:\n{content}"}
]

# 添加请求间隔防止速率限制
time.sleep(3)

response = ai.chat.completions.create(
model="deepseek-reasoner",
messages=message,
stream=False
)

assistant_content = response.choices[0].message.content

# 将结果写入Markdown文件
md_file.write(f"## 第{start_chapter}章 - 第{end_chapter}章章纲\n")
md_file.write(assistant_content)
md_file.write("\n\n---\n\n") # 添加分隔线

print(f"已完成第 {start_chapter}{end_chapter} 章的分析并保存到文件")

print(f"所有章节分析完成!结果已保存到 {output_file}")

前期我觉得先拆个100章应该就够了,并且还不一定要继续拆下去呢,如果有条件的,或者说想拆更多内容的,可以考虑把代码部署到服务器上在半夜执行,可以省下不少钱。

生成章纲

拆完后,先把前50章的内容放进世界书,然后尝试性地生成第一卷前半部分的章纲,效果感觉还不错。

参考我给你的诡秘之主前50章的章纲,基于缸中之脑世界观,设计出第一卷前50章的剧情(不需要后半部分),剧情内容只需要进展到曼陀罗锚初次发生定义畸变即可,允许你发散出新的人物(6到8个)来填充剧情和设置事件。精确到每一章的剧情剧情,格式严格参考诡秘之主的章纲

下一步的话,应该就是继续迭代,同时手动微调章纲内容,然后尝试生成个十几章的具体内容了。

下载链接

诡秘之主.txt