1. 为什么写到第 30 章,AI 就开始“换了一本书”
如果你用 AI 写过中长篇,大概率经历过这个曲线:前 10 章顺得不行,第 15 章开始主角性格有点飘,第 25 章发现某个道具在第 8 章已经用掉了、第 30 章又冒出来一次,第 40 章伏笔撒了一地没人收。这不是模型变笨了,是上下文管理失控。
我把它拆成四个具体症状,你可以对号入座:
- 人设漂移:主角上一章还谨慎克制,这一章突然热血冲动,像换了个人。
- 设定打架:世界规则、时代背景、道具属性前后矛盾,读者一眼看穿。
- 伏笔失控:埋了十几条线,回收全靠运气,最后自己都忘了埋过什么。
- 文本变空:对话开始回环,心理总结变多,“AI 味”越来越重。
核心问题只有一个:你每次只把“当前这一章”丢给 AI,它没有参照系,只能临场发挥。写短篇无所谓,写到几十章,临场发挥必然崩。
这篇要交付的,是一套可复制的工程化骨架:用codebubby把“写一章”固化成四道工序,用Cursor把设定、角色、时间线、伏笔当成项目依赖强制加载,再用TaoToken统一 Key 接入,让模型调用稳定、可切换、可追溯。目标很明确——让《一纸洛阳》这种长篇写到 50 章还不崩,你照着搭,当天就能开写。
适合谁:正在用 AI 续写小说、写到十几章开始崩、想把它做成“可控工程”而不是碰运气的创作者。不需要你会写代码,但需要你愿意建几个文件夹、抄几段配置。
2. 前置准备:TaoToken 统一 Key + 小说工程目录
2.1 为什么先接 TaoToken
写长篇最怕两件事:一是模型调用时好时坏,二是想换模型对比效果时,每个工具都要重新配一遍 Key。TaoToken 的作用是把 Key 统一管理,Cursor、codebubby 以及后续任何要调模型的工具,都指向同一个入口,换模型只改一个配置。
接入入口(建议先收藏):
- 官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
- API 地址:https://taotoken.net/api
- 控制台(建 Key):https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
注意:Key 只存在本地配置文件里,不要写进正文 md、不要提交到公开仓库。小说工程目录建议单独放,和代码仓库分开。
2.2 搭一个“小说工程目录”
把小说拆成三块:正文、规范、台账。规范是你对 AI 的硬约束,台账是 AI 帮你记的进度。目录直接照抄:
novel-yizhi-luoyang/ ├── chapter/ │ ├── 001.md │ ├── 002.md │ └── ... ├── SPEC/ │ ├── Me2AI/ # 你写要求,AI 遵守 │ │ ├── 写作风格.md │ │ ├── 故事整体设定.md │ │ ├── 核心角色.md │ │ └── 故事主线设计和进展.md │ └── AI2AI/ # AI 记进度,AI 更新 │ ├── 章节目录以及写作状态.md │ ├── 历史人物与时间线校验.md │ ├── 中长线伏笔设计和进展.md │ └── 各角色线设计和进展.md ├── config.toml # codebubby 配置 └── .cursor/ └── settings.json # Cursor 配置这一步的目的:让 AI 写作时永远有参照系。Me2AI 是你定的规矩,AI2AI 是 AI 维护的账本,正文只放成品。
约束提醒:除非你明确要求,否则不要让 AI 新增 SPEC 里的文件类型。只在既有文件里迭代。Me2AI 由你维护,AI2AI 由 AI 维护。
3. 可复制配置:settings.json 与 config.toml 骨架
3.1 Cursor 的 settings.json
Cursor 的关键不是“多智能”,而是多文件上下文。把下面这段放进.cursor/settings.json,重点是让模型走 TaoToken 的统一入口,并把小说工程的关键文件纳入默认上下文范围。
{ "ai.provider": "openai-compatible", "ai.baseUrl": "https://taotoken.net/api", "ai.apiKey": "sk-你的TaoTokenKey", "ai.model": "claude-sonnet-4-20250514", "ai.temperature": 0.7, "ai.maxTokens": 8192, "context.include": [ "SPEC/Me2AI/写作风格.md", "SPEC/Me2AI/故事整体设定.md", "SPEC/Me2AI/核心角色.md", "SPEC/Me2AI/故事主线设计和进展.md", "SPEC/AI2AI/历史人物与时间线校验.md", "SPEC/AI2AI/中长线伏笔设计和进展.md", "SPEC/AI2AI/章节目录以及写作状态.md", "SPEC/AI2AI/各角色线设计和进展.md" ], "context.recentChapters": 2 }参数说明:
| 字段 | 作用 | 建议值 |
|---|---|---|
| ai.baseUrl | 统一走 TaoToken | https://taotoken.net/api |
| ai.model | 主写模型 | 长文用长上下文模型 |
| ai.temperature | 创造性 | 0.6–0.8,太高会飘 |
| context.recentChapters | 带最近几章正文 | 2,保证承接 |
context.recentChapters: 2是长篇连贯的关键——写第 N 章时,自动带上第 N-1、N-2 章正文,承接“余压/异动”,避免断裂。
3.2 codebubby 的 config.toml
codebubby 的作用是把“写一章”变成固定工序卡片,每章重复执行。配置骨架如下:
[provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" default_model = "claude-sonnet-4-20250514" [workspace] root = "./novel-yizhi-luoyang" chapter_dir = "chapter" spec_me2ai = "SPEC/Me2AI" spec_ai2ai = "SPEC/AI2AI" [pipeline] # 四道工序,按顺序执行 steps = ["plan", "write", "verify", "polish"] [steps.plan] template = "工序A_章内计划" inputs = [ "SPEC/Me2AI/写作风格.md", "SPEC/Me2AI/故事整体设定.md", "SPEC/Me2AI/核心角色.md", "SPEC/Me2AI/故事主线设计和进展.md", "SPEC/AI2AI/历史人物与时间线校验.md", "SPEC/AI2AI/章节目录以及写作状态.md", "SPEC/AI2AI/各角色线设计和进展.md", "SPEC/AI2AI/中长线伏笔设计和进展.md" ] [steps.write] template = "工序B_生成正文" word_range = [2000, 5000] [steps.verify] template = "工序C_一致性校验" [steps.polish] template = "工序D_签约级润色压缩"注意:
api_key建议用环境变量注入,例如api_key = "${TAOTOKEN_API_KEY}",避免明文散落。
3.3 四道工序模板(直接存进 codebubby)
工序 A:章内计划(先定硬问题,防写散)
你将基于以下文件为第{章号}章做“章内计划”,不要写正文: - SPEC/Me2AI/写作风格.md - SPEC/Me2AI/故事整体设定.md - SPEC/Me2AI/核心角色.md - SPEC/Me2AI/故事主线设计和进展.md - SPEC/AI2AI/历史人物与时间线校验.md - SPEC/AI2AI/章节目录以及写作状态.md - SPEC/AI2AI/各角色线设计和进展.md - SPEC/AI2AI/中长线伏笔设计和进展.md - 上一章与上两章正文 输出(必须齐全): 1) 本章一句话核心问题(制度动作/倒计时/物理威胁三选一) 2) 3-5个“可验证证据载体”(纸、印、登记簿、价牌、蹄铁、红泥、马鬃等) 3) 对手反制升级路径(听/看→翻/抹/标/押/登册/不给纸) 4) 本章必付代价(资源/人情/道德/名分四选一或组合) 5) 本章推进/触碰哪条伏笔(引用伏笔编号:如F010/F012)工序 B:生成正文(按计划写,不许飘)
按“章内计划”写第{章号}章正文(2000-5000字)。 强制结构:问题→规矩/资源限制→信息博弈→代价 硬规则: - 动词优先;控制形容词;删除空话连接词 - 禁止抽象抒情、禁止现代词、禁止靠巧合推进 - 对话每轮必须推进:事实/规矩/代价(三选一) 结尾:优先清晰收束;若加钩子,只能用“可验证异动/制度倒计时/新事实残留”,禁止抽象提问式句尾工序 C:一致性校验(抓穿帮/抓失控)
只做校验,不重写全文。 检查项: 1) 时间线/历史人物节点是否冲突 2) 角色能力与限制是否越界(是否“突然开挂/突然圣母/突然现代化”) 3) 道具与痕迹是否兑现(出现过的纸、印、红泥、蹄铁等后续路径是否合理) 4) 对手反制是否升级(是否一直停留在“听/看”) 5) 伏笔是否推进/新增/回收,信息差快照是否变化 输出:问题清单 + 修改建议(精确到“删哪类句子/补哪种证据/把哪段对话改成动作”)。工序 D:签约级润色压缩(最快去 AI 味)
对本章做“签约级压缩润色”: - 删心理总结、删空话、删回环对话、删自我解释 - 把抽象句改为“动作+证据+规矩/代价” 输出:可直接替换的段落级改写(不新增设定、不改剧情走向)。4. 验证请求:跑通第 1 章并确认 50 章连续性
4.1 先用一条 curl 确认 Key 通
在正式跑工序前,先用最小请求确认 TaoToken 接入正常:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [ {"role": "user", "content": "用一句话说明:长篇写作为什么要带上下文。"} ], "max_tokens": 200 }'返回里有choices[0].message.content就说明通了。如果报 401,检查 Key;报 404,检查 base_url 是否漏了/v1或写错路径。
4.2 跑通第 1 章
在 codebubby 里执行:
codebubby run --chapter 1 --pipeline plan,write,verify,polish预期结果:chapter/001.md生成,同时SPEC/AI2AI/章节目录以及写作状态.md被更新,写入章号、字数、状态、核心内容、伏笔索引。
4.3 50 章连续性验证动作
写到第 50 章时,做一次“体检”,确认没崩:
codebubby verify --range 1-50 --check timeline,character,prop,foreshadow输出会给你四类报告:
- 时间线冲突:哪些章的历史节点对不上。
- 角色越界:谁的能力/性格在哪一章突变。
- 道具未兑现:出现过的证据载体后续路径是否合理。
- 伏笔状态:待回收/已回收清单,信息差快照是否变化。
我实测下来,跑到 50 章最容易出问题的是“道具未兑现”和“伏笔状态”——因为这两类最依赖台账。只要每章写完立刻更新 AI2AI 台账,这两项基本能压住。
提示:验证模型本身是否稳定,可以到模型对话页做对比测试:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite
5. 本篇常见错排查
报错 1:401 UnauthorizedKey 写错或过期。到 API Keys 页重新生成:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
报错 2:404 Not Foundbase_url 写成了https://taotoken.net而漏了/api,或路径多了/v1重复。统一用https://taotoken.net/api。
报错 3:写到第 20 章开始漂移九成是context.include没配全,或recentChapters设成了 0。检查 settings.json,确保八个 SPEC 文件都在 include 列表里。
报错 4:校验报告全是“无问题”但读者说穿帮说明台账没更新。工序 D 跑完必须立刻更新章节目录以及写作状态.md和中长线伏笔设计和进展.md,否则校验没有依据。
报错 5:润色后剧情变了工序 D 的模板里明确写了“不新增设定、不改剧情走向”。如果模型还是改了,把 temperature 降到 0.5 再跑。
报错 6:想换模型但不想重配TaoToken 统一 Key 的价值就在这里。只改 config.toml 和 settings.json 里的model字段,其他不动。
长期编码/Agent 场景,如果想让工序自动跑、批量处理多章,可以用 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
6. 把“能写出来”升级成“能写下去”
AI 写小说真正的分水岭不是“会不会写”,而是能不能稳定写到很后面还不崩。这套骨架的逻辑很简单:codebubby 把流程固定成四道工序,Cursor 把上下文拉满,TaoToken 把 Key 统一,台账把进度锁死。
你按这个顺序搭:先建目录 → 配 settings.json 和 config.toml → 存四张工序卡 → 跑通第 1 章 → 每章写完更新台账。跑通一次,你就从“碰运气产出”变成“按工序交付”。
《一纸洛阳》能推到 50 章,靠的不是更玄的提示词,是规矩写死、证据落地、台账可追溯。你也可以把自己的小说写成一个可控工程,而不是一堆不可维护的碎片。
接入文档在这里,配置细节对着抄:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite