|
|
@@ -0,0 +1,226 @@
|
|
|
+# Webnovel Writer 系统架构总图
|
|
|
+
|
|
|
+> 生成日期:2026-04-15 | 覆盖范围:init → plan → write 全链路六层主链 + 读写映射
|
|
|
+
|
|
|
+<div style="width: 1280px; box-sizing: border-box; position: relative; background: #f5f3ff; padding: 20px; border-radius: 8px; border: 1px solid #c7c2ea;">
|
|
|
+ <style scoped>
|
|
|
+ .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-grid-6 { grid-template-columns: repeat(6, 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 0%, #c7d2fe 100%); 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 0%, #bfdbfe 100%); border: 2px solid #3b82f6; }.arch-layer.user .arch-layer-title { color: #1e40af; }.arch-layer.application { background: linear-gradient(135deg, #e0e7ff 0%, #c7d2fe 100%); border: 2px solid #4f46e5; }.arch-layer.application .arch-layer-title { color: #3730a3; }.arch-layer.ai { background: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%); border: 2px solid #7c3aed; }.arch-layer.ai .arch-layer-title { color: #5b21b6; }.arch-layer.data { background: linear-gradient(135deg, #f3e8ff 0%, #e9d5ff 100%); border: 2px solid #9333ea; }.arch-layer.data .arch-layer-title { color: #7e22ce; }.arch-layer.infra { background: linear-gradient(135deg, #fae8ff 0%, #f5d0fe 100%); border: 2px solid #a855f7; }.arch-layer.infra .arch-layer-title { color: #86198f; }.arch-layer.external { background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%); 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 0%, #e0e7ff 100%); 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; }
|
|
|
+ .arch-flow { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 6px 0; font-size: 11px; color: #4f46e5; font-weight: 600; }.arch-arrow { font-size: 16px; color: #818cf8; }
|
|
|
+ .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>
|
|
|
+ <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>
|