| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Webnovel Writer 系统架构</title>
- <style>
- body { margin: 20px; background: #f0eef6; font-family: -apple-system, "Microsoft YaHei", sans-serif; }
- .arch-wrapper { display: flex; gap: 12px; }
- .arch-sidebar { width: 175px; flex-shrink: 0; }
- .arch-main { flex: 1; min-width: 0; }
- .arch-title { text-align: center; font-size: 22px; font-weight: bold; color: #312e81; margin-bottom: 4px; }
- .arch-subtitle { text-align: center; font-size: 12px; color: #6366f1; margin-bottom: 14px; }
- .arch-layer { margin: 7px 0; padding: 12px; border-radius: 6px; box-shadow: 0 2px 8px rgba(67,56,202,0.06); }
- .arch-layer-title { font-size: 13px; font-weight: bold; margin-bottom: 8px; text-align: center; }
- .arch-grid { display: grid; gap: 6px; }
- .arch-grid-2 { grid-template-columns: repeat(2,1fr); }
- .arch-grid-3 { grid-template-columns: repeat(3,1fr); }
- .arch-grid-4 { grid-template-columns: repeat(4,1fr); }
- .arch-grid-5 { grid-template-columns: repeat(5,1fr); }
- .arch-box { border-radius: 5px; padding: 7px; text-align: center; font-size: 10.5px; font-weight: 600; line-height: 1.3; color: #312e81; background: rgba(255,255,255,0.85); border: 1px solid #c7d2fe; }
- .arch-box.highlight { background: linear-gradient(135deg,#e0e7ff,#c7d2fe); border: 2px solid #4f46e5; }
- .arch-box.tech { font-size: 10px; color: #4338ca; background: rgba(238,242,255,0.8); }
- .arch-box.write { border-left: 3px solid #dc2626; }
- .arch-box.read { border-left: 3px solid #16a34a; }
- .arch-box.rw { border-left: 3px solid #d97706; }
- .arch-layer.user { background: linear-gradient(135deg,#dbeafe,#bfdbfe); border: 2px solid #3b82f6; }
- .arch-layer.user .arch-layer-title { color: #1e40af; }
- .arch-layer.application { background: linear-gradient(135deg,#e0e7ff,#c7d2fe); border: 2px solid #4f46e5; }
- .arch-layer.application .arch-layer-title { color: #3730a3; }
- .arch-layer.ai { background: linear-gradient(135deg,#ede9fe,#ddd6fe); border: 2px solid #7c3aed; }
- .arch-layer.ai .arch-layer-title { color: #5b21b6; }
- .arch-layer.data { background: linear-gradient(135deg,#f3e8ff,#e9d5ff); border: 2px solid #9333ea; }
- .arch-layer.data .arch-layer-title { color: #7e22ce; }
- .arch-layer.infra { background: linear-gradient(135deg,#fae8ff,#f5d0fe); border: 2px solid #a855f7; }
- .arch-layer.infra .arch-layer-title { color: #86198f; }
- .arch-layer.external { background: linear-gradient(135deg,#f1f5f9,#e2e8f0); border: 2px dashed #94a3b8; }
- .arch-layer.external .arch-layer-title { color: #64748b; }
- .arch-sidebar-panel { border-radius: 6px; padding: 10px; background: linear-gradient(135deg,#eef2ff,#e0e7ff); border: 2px solid #a5b4fc; margin-bottom: 7px; box-shadow: 0 1px 3px rgba(67,56,202,0.04); }
- .arch-sidebar-title { font-size: 11px; font-weight: bold; text-align: center; color: #312e81; margin-bottom: 5px; }
- .arch-sidebar-item { font-size: 9.5px; text-align: center; color: #3730a3; background: rgba(255,255,255,0.8); padding: 4px; border-radius: 4px; margin: 3px 0; border: 1px solid #c7d2fe; }
- .arch-sidebar-item.metric { background: #e0e7ff; border: 1px solid #6366f1; color: #3730a3; font-weight: 600; }
- .arch-subgroup { display: flex; gap: 6px; margin-top: 6px; }
- .arch-subgroup-box { flex: 1; border-radius: 6px; padding: 7px; background: rgba(255,255,255,0.5); border: 1px solid rgba(0,0,0,0.08); }
- .arch-subgroup-title { font-size: 10px; font-weight: bold; color: #374151; text-align: center; margin-bottom: 5px; }
- .legend { display: flex; gap: 14px; justify-content: center; margin: 8px 0; font-size: 10px; color: #4b5563; }
- .legend-item { display: flex; align-items: center; gap: 4px; }
- .legend-bar { width: 14px; height: 10px; border-radius: 2px; }
- </style>
- </head>
- <body>
- <div style="width: 1280px; margin: 0 auto; background: #f5f3ff; padding: 20px; border-radius: 8px; border: 1px solid #c7c2ea;">
- <div class="arch-title">📖 Webnovel Writer 系统架构</div>
- <div class="arch-subtitle">init → plan → write 六层主链 | 全读写映射</div>
- <div class="legend">
- <div class="legend-item"><div class="legend-bar" style="background:#dc2626;"></div> 写入(Write)</div>
- <div class="legend-item"><div class="legend-bar" style="background:#16a34a;"></div> 读取(Read)</div>
- <div class="legend-item"><div class="legend-bar" style="background:#d97706;"></div> 读写(R/W)</div>
- <div class="legend-item"><div class="legend-bar" style="background:#4f46e5; border: 2px solid #312e81;"></div> 核心组件</div>
- </div>
- <div class="arch-wrapper">
- <div class="arch-sidebar">
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">📂 项目文件(Project Files)</div>
- <div class="arch-sidebar-item">大纲/总纲.md</div>
- <div class="arch-sidebar-item">大纲/第X卷-详细大纲.md</div>
- <div class="arch-sidebar-item">大纲/第X卷-时间线.md</div>
- <div class="arch-sidebar-item">大纲/第X卷-节拍表.md</div>
- <div class="arch-sidebar-item">设定集/*.md</div>
- <div class="arch-sidebar-item">正文/第NNNN章.md</div>
- <div class="arch-sidebar-item metric">.webnovel/idea_bank.json</div>
- </div>
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">📋 合同树(.story-system/)</div>
- <div class="arch-sidebar-item metric">MASTER_SETTING.json</div>
- <div class="arch-sidebar-item">volumes/volume_NNN.json</div>
- <div class="arch-sidebar-item">chapters/chapter_NNN.json</div>
- <div class="arch-sidebar-item">reviews/chapter_NNN.review.json</div>
- <div class="arch-sidebar-item">anti_patterns.json</div>
- <div class="arch-sidebar-item metric">commits/chapter_NNN.commit.json</div>
- </div>
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">💾 投影存储(Projection Stores)</div>
- <div class="arch-sidebar-item">state.json(状态)</div>
- <div class="arch-sidebar-item">index.db(实体/关系)</div>
- <div class="arch-sidebar-item">summaries/chNNNN.md(摘要)</div>
- <div class="arch-sidebar-item">memory_scratchpad.json(记忆)</div>
- <div class="arch-sidebar-item">vector_db(向量索引)</div>
- </div>
- </div>
- <div class="arch-main">
- <div class="arch-layer user">
- <div class="arch-layer-title">🎯 用户入口(User Entry): /webnovel-init → /webnovel-plan → /webnovel-write</div>
- <div class="arch-subgroup">
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">/webnovel-init(初始化)</div>
- <div class="arch-grid arch-grid-3">
- <div class="arch-box read">Read<br><small>genre-tropes.md<br>genre-profiles.md</small></div>
- <div class="arch-box highlight">交互收集 7 步<br><small>题材/角色/金手指<br>世界观/创意约束</small></div>
- <div class="arch-box write">Write<br><small>state.json<br>设定集/*.md<br>总纲.md<br>idea_bank.json</small></div>
- </div>
- </div>
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">/webnovel-plan(规划)</div>
- <div class="arch-grid arch-grid-3">
- <div class="arch-box read">Read<br><small>state.json(genre)<br>总纲.md<br>设定集/*.md<br>summaries/(跨卷)</small></div>
- <div class="arch-box highlight">卷纲 → 时间线<br>→ 拆章纲<br><small>节拍表/CBN/CPNs/CEN</small></div>
- <div class="arch-box write">Write<br><small>节拍表.md<br>时间线.md<br>详细大纲.md<br>设定集(增量)</small></div>
- </div>
- </div>
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">/webnovel-write(写章)</div>
- <div class="arch-grid arch-grid-2">
- <div class="arch-box highlight">Step 1→6<br><small>上下文→起草→审查<br>→润色→提交→备份</small></div>
- <div class="arch-box write">Write<br><small>正文/第NNNN章.md<br>commit.json<br>→ 5路投影</small></div>
- </div>
- </div>
- </div>
- </div>
- <div class="arch-layer external">
- <div class="arch-layer-title">📚 Layer 1: 知识层(Knowledge)— CSV 表 + 参考文档</div>
- <div class="arch-grid arch-grid-5">
- <div class="arch-box highlight">题材与调性推理.csv<br><small>路由表(Route)<br>8 行流派</small></div>
- <div class="arch-box highlight">裁决规则.csv<br><small>裁决表(Reasoning)<br>7 题材</small></div>
- <div class="arch-box tech">命名规则.csv<br><small>基础表(Base)</small></div>
- <div class="arch-box tech">人设与关系.csv<br><small>基础表(Base)</small></div>
- <div class="arch-box tech">写作技法.csv<br><small>基础表(Base)</small></div>
- </div>
- <div class="arch-grid arch-grid-5" style="margin-top: 6px;">
- <div class="arch-box tech">场景写法.csv<br><small>基础表(Base)</small></div>
- <div class="arch-box tech">金手指与设定.csv<br><small>基础表(Base)</small></div>
- <div class="arch-box tech">桥段套路.csv<br><small>动态表(Dynamic)</small></div>
- <div class="arch-box tech">爽点与节奏.csv<br><small>动态表(Dynamic)</small></div>
- <div class="arch-box">CSV_CONFIG<br><small>per-table 注册<br>search_cols / output_cols<br>poison_col / role</small></div>
- </div>
- </div>
- <div class="arch-layer ai">
- <div class="arch-layer-title">🧠 Layer 2: 裁决层(Reasoning)— story_system_engine.py</div>
- <div class="arch-grid arch-grid-4">
- <div class="arch-box read">_route()<br><small>Read: 题材与调性推理.csv<br>匹配题材 → 推荐表</small></div>
- <div class="arch-box read">_collect_tables()<br><small>Read: 基础表 + 动态表<br>BM25 检索</small></div>
- <div class="arch-box highlight">_load_reasoning()<br><small>Read: 裁决规则.csv<br>别名匹配(修仙→东方仙侠)<br>fallback 到原始 genre</small></div>
- <div class="arch-box highlight">_apply_reasoning()<br><small>冲突裁决排序<br>毒点加权<br>反模式注入</small></div>
- </div>
- </div>
- <div class="arch-layer application">
- <div class="arch-layer-title">📜 Layer 3: 合同层(Contract)— .story-system/</div>
- <div class="arch-subgroup">
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">写前合同(story-system --persist)</div>
- <div class="arch-grid arch-grid-4">
- <div class="arch-box write">MASTER_SETTING<br><small>Write: 题材/调性/禁忌</small></div>
- <div class="arch-box write">VOLUME_BRIEF<br><small>Write: 卷目标/节奏</small></div>
- <div class="arch-box write">CHAPTER_BRIEF<br><small>Write: reasoning 裁决<br>chapter_focus(参考)</small></div>
- <div class="arch-box write">REVIEW_CONTRACT<br><small>Write: 必须节点/禁区</small></div>
- </div>
- </div>
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">写后真源(chapter-commit)</div>
- <div class="arch-grid arch-grid-2">
- <div class="arch-box highlight write">CHAPTER_COMMIT<br><small>Write: accepted / rejected<br>events + deltas + summary</small></div>
- <div class="arch-box">anti_patterns.json<br><small>Write: 题材毒点集合</small></div>
- </div>
- </div>
- </div>
- </div>
- <div class="arch-layer data">
- <div class="arch-layer-title">🔍 Layer 4: 上下文层(Context)— 写前组装</div>
- <div class="arch-subgroup">
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">context-agent(Step 1 子代理)</div>
- <div class="arch-grid arch-grid-4">
- <div class="arch-box read">load-context<br><small>Read: contracts<br>summaries / protagonist<br>rules / loops / memory_pack<br>genre_profile_excerpt</small></div>
- <div class="arch-box read">Read 章纲原文<br><small>大纲/第X卷-详细大纲.md<br>(最高权重)</small></div>
- <div class="arch-box read">按需深查<br><small>query-entity<br>query-rules<br>get-timeline<br>get-reader-signals</small></div>
- <div class="arch-box highlight write">输出: 写作任务书<br><small>五段格式<br>消费 reasoning 裁决<br>内化 Anti-AI 铁律</small></div>
- </div>
- </div>
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">辅助查询</div>
- <div class="arch-grid arch-grid-3">
- <div class="arch-box tech read">context_manager<br><small>纯 JSON 组装器<br>Read: contracts / state<br>runtime / guidance</small></div>
- <div class="arch-box tech read">knowledge_query<br><small>时序查询<br>entity_state_at_chapter<br>relationships_at_chapter</small></div>
- <div class="arch-box tech read">reference_search<br><small>CSV BM25 检索<br>per-table search_cols</small></div>
- </div>
- </div>
- </div>
- </div>
- <div class="arch-layer ai" style="border-color: #9333ea;">
- <div class="arch-layer-title" style="color: #7e22ce;">⚙️ Layer 5: 提交层(Commit)— 写后事实入口</div>
- <div class="arch-subgroup">
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">data-agent(Step 5.1 子代理)</div>
- <div class="arch-grid arch-grid-4">
- <div class="arch-box read">Read 正文<br><small>正文/第NNNN章.md</small></div>
- <div class="arch-box read">查询实体<br><small>get-core-entities<br>recent-appearances</small></div>
- <div class="arch-box highlight write">提取事实<br><small>Write: extraction_result<br>fulfillment_result<br>disambiguation_result</small></div>
- <div class="arch-box write">摘要生成<br><small>summary_text<br>100-150字 + 钩子</small></div>
- </div>
- </div>
- <div class="arch-subgroup-box">
- <div class="arch-subgroup-title">chapter-commit CLI(Step 5.2)</div>
- <div class="arch-grid arch-grid-3">
- <div class="arch-box read">Read 4份 artifacts<br><small>tmp/*.json</small></div>
- <div class="arch-box highlight">判定 accepted / rejected<br><small>blocking_count = 0<br>missed_nodes = 空<br>pending = 空</small></div>
- <div class="arch-box write">Write commit.json<br><small>→ 触发投影链</small></div>
- </div>
- </div>
- </div>
- </div>
- <div class="arch-layer infra">
- <div class="arch-layer-title">💿 Layer 6: 投影层(Projection)— EventProjectionRouter → 5 Writers</div>
- <div class="arch-grid arch-grid-5">
- <div class="arch-box write">state_projection<br><small>Write: state.json<br>entity_state<br>chapter_status<br>(committed / rejected)</small></div>
- <div class="arch-box write">index_projection<br><small>Write: index.db<br>entity_deltas<br>relationships</small></div>
- <div class="arch-box write">summary_projection<br><small>Write: summaries/<br>chNNNN.md<br>剧情摘要</small></div>
- <div class="arch-box write">memory_projection<br><small>Write: memory_<br>scratchpad.json<br>长期记忆事实</small></div>
- <div class="arch-box write">vector_projection<br><small>Write: vector_db<br>event → text → embed<br>delta → text → embed</small></div>
- </div>
- </div>
- </div>
- <div class="arch-sidebar">
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">🔗 题材流通路径</div>
- <div class="arch-sidebar-item metric">① init 写入 state.json</div>
- <div class="arch-sidebar-item">② story-system 读 genre</div>
- <div class="arch-sidebar-item">③ 路由表匹配流派</div>
- <div class="arch-sidebar-item metric">④ 裁决表别名匹配题材</div>
- <div class="arch-sidebar-item">⑤ reasoning 写入 chapter.json</div>
- <div class="arch-sidebar-item">⑥ context-agent 消费</div>
- <div class="arch-sidebar-item metric">⑦ 任务书第4段输出</div>
- </div>
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">📏 数据权重(高→低)</div>
- <div class="arch-sidebar-item metric">① 用户要求</div>
- <div class="arch-sidebar-item metric">② 章纲原文</div>
- <div class="arch-sidebar-item">③ MASTER_SETTING</div>
- <div class="arch-sidebar-item">④ reasoning 裁决</div>
- <div class="arch-sidebar-item">⑤ CHAPTER_COMMIT</div>
- <div class="arch-sidebar-item">⑥ CSV 检索(参考)</div>
- </div>
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">⚡ Token 优化</div>
- <div class="arch-sidebar-item metric">context-agent: 2.9k tokens</div>
- <div class="arch-sidebar-item metric">write SKILL: 1.8k tokens</div>
- <div class="arch-sidebar-item metric">data-agent: 1.2k tokens</div>
- <div class="arch-sidebar-item">load-context 含 contracts</div>
- <div class="arch-sidebar-item">内化 core-constraints</div>
- <div class="arch-sidebar-item">内化 anti-ai-guide</div>
- <div class="arch-sidebar-item">get-reader-signals 合并</div>
- <div class="arch-sidebar-item">review-pipeline --save-metrics</div>
- </div>
- <div class="arch-sidebar-panel">
- <div class="arch-sidebar-title">🛡️ 写入保护</div>
- <div class="arch-sidebar-item metric">唯一写后入口: COMMIT</div>
- <div class="arch-sidebar-item">state / index / summary / memory<br>只由 projection 写入</div>
- <div class="arch-sidebar-item">skill 不直接 set-chapter-status</div>
- <div class="arch-sidebar-item">data-agent 不直写存储</div>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
|