日期:2026-04-02(更新:2026-04-09) 状态:草案 v7(v6 + 实现对齐修正,Phase 1/2A/3/4 已完成) 基于:用户反馈 + issue#5 token 分析 + 23 条问题清单
写出一本长篇网络小说(500-2000 章),支持多种主流题材。要求:
以下事项方向已确认但不在 v6 迁移基线内,避免 scope creep:
本轮优先:主流程收敛(废弃 → 合并 → 接口冻结)+ 迁移退出标准达成。
| # | 问题 | 根因 |
|---|---|---|
| 1 | 参考文件重结构轻范例 | 教了"格式"没教"品味",LLM 知道填什么字段但不知道什么内容算好 |
| 2 | 缺少题材标杆 | 没有"好世界书长什么样"的真实小说范例作为 few-shot |
| 3 | 生成不可迭代 | 总纲、设定集一次生成就结束,无打磨循环 |
| # | 问题 | 根因 |
|---|---|---|
| 4 | 约束了"发生什么"而非"方向和边界" | 章纲写"主角救了叫朵朵的小女孩"→全量灌入写作 AI→剧透 |
| 5 | 缺少卷级叙事功能定义 | 每章在卷中承担什么角色(起/承/转/合)不明确 |
| 6 | 时间约束太显性 | 时间锚点、倒计时直接写在章纲里,AI 反复在正文中提及 |
| 7 | Strand 比例硬编码 60/20/20 | 不同题材节奏不同,末世文和甜宠文不可能一样 |
| 8 | 四层产出下游利用率不明 | 节拍表、时间线、卷纲、章纲——write 阶段真正消费的只有章纲 |
| 9 | 10 章/批生成质量递减 | 后面几章趋向套路化 |
| # | 问题 | 根因 |
|---|---|---|
| 10 | 流水线太重 | 8 步 + workflow 记录,大量 token 花在流程管理而非写作 |
| 11 | context-agent 是 token 黑洞 | 全量灌入所有数据,输出巨大执行包 |
| 12 | 审查消耗大产出低 | 6 个 checker 各自独立 context,打 90 分但用户觉得很差 |
| 13 | anti-AI 必须加强 | 黑名单只能挡已知口癖,挡不了叙事结构/情绪表达/节奏层面的 AI 味 |
| 14 | data-agent 太重 | 9 个子步骤,归入记忆模块统一设计 |
| 15 | 写作和回写耦合 | 回写失败卡住整条链,但回写时机不变(下一章前必须完成) |
| 16 | workflow_manager + resume skill 浪费 | Claude Code 原生 /resume 即可恢复中断会话 |
| # | 问题 | 根因 |
|---|---|---|
| 17 | 6 种存储太分散 | state.json / index.db / scratchpad / summaries / vectors / snapshots 各自读写 |
| 18 | 分层不符合写作直觉 | 应按时效分级:近期(详细)→ 中期(摘要)→ 远期(活跃事实) |
| 19 | 时间线不是索引轴 | 所有记忆应挂在时间线上,支持"第 N 章时角色是什么状态"的查询 |
| 20 | 记忆类型需明确 | 角色状态(可变)、世界规则(稳定)、伏笔(有生命周期)、时间线(单调递增) |
| # | 问题 | 根因 |
|---|---|---|
| 21 | Skill/Agent prompt 格式混乱 | 缺少统一模板,每个文件组织方式不同,LLM 抓不住重点 |
| 22 | 参考资料需要清理和补充 | 删冗余、补方法论(含真实小说片段作为正面/反面范例) |
| 23 | Token 消耗过高 | 单章 300-500 万,审查占大头但产出最低 |
| 废弃 | 替代 |
|---|---|
| workflow_manager.py | Claude Code 原生 /resume |
| resume skill | Claude Code 原生 /resume |
| Step 2B(独立风格适配步骤) | 合并到 Step 4 润色 |
| 6 个独立 checker agent | 合并为 1 个审查 agent |
| 审查评分机制 | 改为 code review 格式输出具体问题清单 |
| memory_scratchpad.json(长记忆系统) | 基于远端无长记忆版本重新设计统一记忆模块 |
Step 0.5 预检
→ Step 1 上下文搜集(context-agent,research 模式)
→ Step 2 起草
→ Step 3 审查(单 agent,code review 格式)
→ Step 4 润色 + 风格适配 + anti-AI
→ Step 5 数据回写(统一记忆模块,单次调用)
→ Step 6 Git 备份
章节状态模型(单调递进,不可回退):
| 状态 | 进入条件 | 允许结束会话 | 允许开始下一章 | 允许 git backup |
|---|---|---|---|---|
chapter_drafted |
Step 2 完成,正文初稿存在 | ✅ | ❌ | ❌ |
chapter_reviewed |
Step 3-4 完成,blocking 清零且 anti-AI 复检通过 | ✅ | ❌ | ❌ |
chapter_committed |
Step 5 完成,记忆回写成功 | ✅ | ✅ | ✅ |
状态推进规则:
state.json.progress.chapter_status[NNNN]chapter_reviewed,不得开始下一章python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" state get-chapter-status --chapter {N}从"一次性全量灌入 → 输出巨大执行包"改为 research 模式:
最小 schema:
{
"issues": [
{
"severity": "critical | high | medium | low",
"category": "continuity | setting | character | timeline | ai_flavor | logic | pacing | other",
"location": "第3段",
"description": "主角使用了第15章已失去的能力'xxx'",
"evidence": "原文:'萧炎催动xxx斗技' vs 记忆:第15章已失去该能力",
"fix_hint": "改为使用当前已有的yyy能力",
"blocking": true
}
],
"blocking_count": 1,
"summary": "发现1个阻断问题,2个高优问题"
}
阻断规则:
blocking=true 的问题替代原 timeline_gate 语义——存在任何 blocking issue 时,不得进入 Step 4severity=critical 默认 blocking=true;其余 severity 由审查 agent 判断blocking 修复循环:
指标沉淀(轻量):
index.db.review_metrics,字段:chapter, issues_count, blocking_count, categories, severity_counts, timestampoverall_score 保留为衍生兼容字段(由 severity_weighted 扣分计算),仅用于排序/趋势,不可用于 gate 决策blocking=true 和 issue 明细为准review-schema.md 冻结版为准;逻辑观测以轻量字段(issues_count/blocking_count/categories)为主,物理落库可保留兼容字段(overall_score/dimension_scores),待 dashboard/consumer 完成迁移后再评估裁撤anti-AI 职责划分:
reviewer,仅启用 ai_flavor 维度。Step 4 不得自判 pass/failblocking_count).webnovel/tmp/)阶段 A:接口契约(先定,不依赖存储实现)
上层消费者(context-agent、data-agent、审查 agent)只依赖以下契约:
v0(已实现,当前冻结):
v0 接口已通过
memory_contract.py(Protocol + 类型定义)和memory_contract_adapter.py(适配器)实现,CLI 入口为webnovel.py memory-contract子命令。context-agent 已在使用。
# 合并接口
memory.commit_chapter(chapter: int, result: dict) -> CommitResult
memory.load_context(chapter: int, budget_tokens: int) -> ContextPack
# 独立接口(context-agent research 模式按需调用)
memory.query_entity(entity_id: str) -> EntitySnapshot
memory.query_rules(domain: str) -> list[Rule]
memory.read_summary(chapter: int) -> str
memory.get_open_loops(status: str = "active") -> list[OpenLoop]
memory.get_timeline(from_ch: int, to_ch: int) -> list[TimelineEvent]
v1(Phase 3 增强目标,v0 冻结后再迭代):
commit_chapter 的 result: dict → 替换为类型化 CommitPayload(明确字段:chapter_file、review_result、entities、summary 等)load_context 增加 intent: Literal["draft", "review", "repair"] 参数,按意图裁剪返回内容query_rules 的 domain: str → 细化为 domain: str, scope: str = "all" 支持子域过滤source、chapter_range、confidencev0 → v1 的升级不影响上层 prompt,仅影响 CLI 参数和返回字段丰富度。
阶段 B:存储实现(后做)
已确认方向:
章纲作为 harness 给 write 足够约束,但约束形式需要变:
章纲最小字段草案(待验证):
内容层(章纲本体):
{
"chapter_goal": "主角通过考验进入迦南学院",
"must_payoff": ["第3章埋下的丹药伏笔"],
"forbidden_turns": ["主角不可直接暴露隐藏身份"],
"narrative_role_in_arc": "承",
"strand_profile": "main_heavy",
"time_pressure_source": "入学截止"
}
消费策略层(控制章纲如何喂给写作 AI,不属于故事内容):
{
"writer_exposure_policy": {
"verbatim_fields": ["chapter_goal", "must_payoff", "forbidden_turns"],
"transform_fields": {
"narrative_role_in_arc": "转为隐性节奏提示,不直接告知'承'",
"time_pressure_source": "仅作为校验依据,不在正文中直接提及具体数字或倒计时"
}
}
}
说明:
chapter_goal:方向而非剧透,不写"主角救了叫朵朵的小女孩"forbidden_turns:明确边界,防止跑偏strand_profile:取代硬编码数值配比,由 genre-profiles 定义具体权重(如 main_heavy = 主线 70%+、balanced = 均衡、relationship_heavy = 感情线主导)writer_exposure_policy:独立于内容层,由 context-agent 消费时解释,章纲 schema 本身不混入传输逻辑每个 skill/agent 文件按固定结构编写:
1. 身份与目标
2. 可用工具与脚本(含调用方式)
3. 思维链(ReAct / 其他)
4. 输入
5. 执行流程(每步:输入 → 动作 → 输出)
6. 边界与禁区
7. 检查清单
8. 输出格式
9. 错误处理
删除:冗余引用、已废弃文档、重复的 shared 引用(共 13 个文件)
补充(P0,16 条):
要求:参考资料按优先级分层补充真实小说片段:
改造:现有 genres/ 和 write/references/ 下的文件从"结构模板"改为"方法论 + 范例 + 反面教材"
| # | 问题 | 状态 |
|---|---|---|
| 1 | 记忆模块具体实现(分层、存储、接口) | 搁置,待进一步思考 |
| 2 | 章纲具体字段设计(什么算"方向和边界") | 已有最小草案(见 4.6),待实际 plan 验证后定稿 |
| 3 | anti-AI 的具体机制(超越黑名单的方案) | 待写作 prompt 设计时解决 |
| 4 | context-agent 输出的写作提示具体格式 | 待 write 方案细化 |
| 5 | 参考资料的真实小说片段收集 | 待用户收集 |
| 6 | Init 的迭代打磨机制 | 待 init 方案细化 |
| 7 | 节拍表/时间线是否保留 | 待确认下游是否消费 |
| 8 | 批量生成章纲的最佳批次大小 | 待实验 |
| 9 | Memory 契约 v0→v1 增强 | Phase 3 细化:CommitPayload 类型化、load_context 增加 intent、返回结构加横切元数据(详见 4.5 v1 目标) |
以下为方向性估算,具体取决于正文长度、审查轮次、research 命中率。需用真实运行日志验证。
| 环节 | 当前 | 优化后(预估区间) | 节省 |
|---|---|---|---|
| 审查 | ~200 万(6 agent × ~33 万) | 30-50 万(1 agent,含 Step 4 后 ai_flavor 复检) | ~75-85% |
| Context-agent | ~50 万(全量灌入) | 10-20 万(按需检索) | ~60-80% |
| 风格适配 | ~30 万(独立 Step 2B) | 0(合并到润色) | 100% |
| Workflow 记录 | ~5 万(16 次 CLI) | 0(废弃) | 100% |
| 单章总计 | 300-500 万 | 预估 80-150 万 | ~60-70% |
假设条件:
| 阶段 | 内容 | 依赖 | 状态 |
|---|---|---|---|
| Phase 1 | 废弃 workflow/resume + 审查合并 + Step 2B 合并 | 无 | ✅ 已完成 |
| Phase 2A | Skill/Agent prompt 统一模板 + 参考资料清理(删冗余) | 无 | ✅ 已完成 |
| Phase 2B | 参考资料范例补强(真实小说片段) | 用户收集素材 | 待定 |
| Phase 3 | 记忆模块接口契约设计 | 无 | ✅ 已完成 |
| Phase 4 | Context-agent research 模式重构 | Phase 3(契约) | ✅ 已完成 |
| Phase 5 | 记忆模块存储实现 | Phase 3(契约)+ 用户设计确认 | 待定 |
| Phase 6 | Plan 章纲约束重构 | Phase 4+5 | 待定 |
| Phase 7 | anti-AI 加强 + 写作 prompt 优化 | Phase 2A+4 | 待定 |
注:Phase 1/2A/3 可并行探索,但合并前需一次接口冻结,优先冻结以下两项:
review-schema(reviewer 输出格式 + metrics 落库字段)memory-contract CLI(记忆模块接口签名 + 返回类型)冻结后 Phase 1/2A 的 prompt 改动才有稳定的接口可依赖。
以下条件全部满足时,视为 v6 迁移完成:
continuity-checker、setting-checker 等旧名workflow_manager 相关代码完全移除——不残留 import、调用或配置evals/ 或 tests/ 目录[deprecated]chapter_drafted / chapter_reviewed / chapter_committed 可通过 CLI 查询,状态推进由 Step 2/4/5 原子写入