Skip to content

Releases: wanqili857-byte/fictionforge

v0.4.2 · 外部交叉评审后的修复与一次公开订正

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 01 Oct 15:10

v0.4.2 · 外部交叉评审后的修复与一次公开订正

v0.4.1 之后,我们用自研的交叉审计工具 quorum 组织了一轮外部独立复核:三个审核员(kimi-k2.7-code / doubao-seed-2-1-pro / codex)各自独立进程、干净上下文、互不可见,审同一份工单与材料快照。

记录、逐条核验与修复计划:reviews/dispose.md(附三家原始结论与处置台账)。

🔴 致命:真跑批的生成路径是断的

call_model() 在 HTTP 200 时隐式返回 None——一次重构把解析块留在了 break 之后,成了死代码。任何真实生成在第一次成功调用后就 AttributeError。v0.4.1 带着一条断掉的生成路径发布,而 CHANGELOG 里那条「网关 200 + 坏 body 并入重试」是不可达代码(复审还发现 ParseError 压根不在可重试集合里)。

根因是既有约定「网络层不测」。现在用传输层打桩补上了。

🔴 更重要:我们推翻了自己的一条主张

曾把「注入上下文让 glm 变差」写成反直觉发现、跨两期复现。审核员独立指认其中大半是缺陷:

修复 该差值
初版 −2.06
修掉判定器 4 条误报(定语从句被当成「死者活动」) −0.92
再修掉 2 条被 max_tokens 截断的残章(146 字 / 563 字) −0.18(k=1 噪声内)

改成能站住的说法:裸写最弱的模型从上下文工程里受益最大(豆包 +5.51、deepseek +2.62),裸写最强的 glm 几乎不敏感。

口径缺陷会伪装成模型差异。

其余修复

截断章当完整章 · 续跑只信 manifest 自报 · 门禁配对未套剔除规则 · 校准的「零误报」是空测(补三项对照:中性注入 / 正对照 / 可测性标注)· 不变量分类并逐条补阴性对照 · 榜单补绝对违反数 · 复现协议的分支名与报表路径 · CI 覆盖 MCP SDK 版 · generated_at 被重判刷新。

流程上

  • quorum verify 抓了它主人一回:初版处置台账 12 行里 8 行的断言当时就通过——回滚修复照样绿。已全部改成「今天必红、修完才绿」
  • 审核员本身被权限白名单卡住(三家全判 FAILED),导致最强的一类发现(可执行验证)没拿到。第二轮会放行本地只读脚本

仍然没做(诚实清单)

真实长篇上的误报率未测(需正确账本)· 时间线倒退与物品双持有在合成宇宙无正例 · 知识边界的语义判定未实装 · k=1,精确归因需 k≥3。

Full Changelog: v0.4.1...v0.4.2

v0.4.1 · 发布后审计修复

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 27 Sep 08:35

v0.4.1 · 发布后审计修复

v0.4.0 发布后做了一轮三方审计:代码正确性审查、文档数字对账(270 项)、仓库卫生(泄露/产物/CI)。这个版本是审计结果。

跑批数字未变——修的是统计口径与文档,不是判定结论。

修复:三处会静默出错的报表缺陷

缺陷 形态 后果
门禁贡献漏统计 not [...].get("post_fix") ——空列表为假 门禁擦得最干净的运行(修后零违反)被当「无数据」跳过
残缺 run 冒充零违反 判决文件缺失时兜底成空清单 该运行以「0 违反」身份上榜,且续跑永不修复
部分完成混入汇总 按「本批最大完成度」剔除 全体同样残缺时全员入选,与脚注「不参与汇总」自相矛盾

还有两处:榜单把按量模型的计费显示成 0.0(读起来是「免费」),以及榜单生成器有实现有单测却从没被调用过(--write 的报表此前不含榜单)。

修复:判定器

  • 行首引号吞掉整行旁白:“这是我的。”我蹲进凹陷。 曾整行漏判(POV / 人称 / 状态判定同病)。改为剥离引文后继续判定。判据版本 m0.2.0 → m0.3.0
  • 网关返回 200 但 body 不可解析时,并入退避重试

实测后决定不修(写明边界)

  • 比喻/传闻词(像 / 仿佛 / 听说)会整句豁免「死人活动」判据,会漏掉「老周走过来,像往常一样…」这类真复活。试过收窄:db-lite 一章新增 4 条误报(全是比喻框与定语从句),真阳性 0 条——误报 4 : 真阳性 0,收窄不划算。边界写进判据文档,交给后续的 Kappa 校准
  • 相对天数只豁免「第二天」这一惯用式,「第三天」按绝对天数比对(中文叙事里它通常就是故事第 3 天)

工程

  • CI 此前只跑 4 个旧套件——徽章绿不绿与 LCB 是否可用无关。现在 LCB 的 10 个套件全部纳入
  • 修掉两处假测试(断言恒真:用了一个不会被判据命中的句子做夹具,以及一条查的是本次根本没跑的档位目录)
  • 文档对账 270 项,9 处不一致全修(含一处表格错格、章节标题与正文矛盾、误报归属批次错、README 与同段表格口径不符)

自己验

git clone https://github.com/wanqili857-byte/fictionforge.git && cd fictionforge
python3 tests/test_report_metrics.py   # 73 项,含本次三处报表缺陷的回归
python3 tests/test_mechanical.py       # 45 项

Full Changelog: v0.4.0...v0.4.1

v0.4.0 · LCB 长程一致性基准

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 27 Sep 04:44

v0.4.0 · LCB 长程一致性基准

写长篇最难的不是文笔,是一致性:第 2 章死的人第 4 章又活了、第 5 章才该知道的事第 3 章就说了出来。这是 agent 的长程状态追踪问题——和记忆、上下文腐坏同一类。LCB(Long-horizon Consistency Bench)把框架里的一致性判定器抽出来,做成可自动判定的基准。

全链内容

  • 判定器(bench/judges/,m0.2.0):约束遵守(禁词/篇幅/POV/人称)+ 状态一致(死人复活/物品瞬移/时间倒流/双持有)。纯函数、零 LLM、零网络,可精确单测
  • 合成宇宙(bench/universe/):seed → 一部可跑的小说包,零 LLM、逐字节可复现,不变量自检含阴性对照
  • 跑批(bench/runner/):模型 × 三档 harness(裸/注入/满)× k 次;逐章用量账本、断点续跑(残缺 run 不冒充完成)、瞬态错误退避重试、per-spec 超时
  • 指标(bench/report/):密度与绝对数成对、分族统计、门禁配对测量、自助法 CI、静态榜单
  • 抗刷分(bench/attacks/):注水/复制/术语轰炸三攻击自测 + 滑窗重复率判据
  • 复现协议:docs/BENCH_PROTOCOL.md——宇宙 sha256 校准表、manifest 校验清单、榜单准入规则
  • MCP server(bench/mcpserver/ + scripts/lcb_mcp.py):手写协议层 + 官方 SDK 双实现,五个工具

首期结果(3 厂商 × 3 档 × 6 章)

模型 bare mid full(修后)
glm-5.3-flash 2.52 4.58 0.0
deepseek-v4.1-flash 4.28 1.66 0.74
doubao-seed-2-1-lite 8.33 4.93 0.0

(核心违反/万字。裸写 glm 最强;上下文注入对 glm 家族负贡献且跨两期复现;门禁配对测量修前 9 → 修后 1。详见 docs/lcb-results-v2.md,方法文 docs/lcb-writeup.md。)

自己跑一遍(全离线零 token)

git clone https://github.com/wanqili857-byte/fictionforge.git
cd fictionforge
python3 tests/test_universe.py && python3 tests/test_mechanical.py

Full Changelog: v0.3.0...v0.4.0

修订感知管线——AI 草稿 + 人工修订 + 修订回灌

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 05 Sep 05:28

定位:从「日更流水线」转「精品生产线」——框架把人工修订变成一等公民

核心件

  • canon/drafts 分家 —— AI 草稿落 chapters/drafts/(+.ai.md 快照),人工定稿晋升为 canon,生成管线永不覆盖你改过的字;章节顺序锁改读 canon
  • promote.py —— diff(定稿, AI 原稿) → LLM 逐条标注修订原因(AI味/节奏/素材/逻辑/结构/润色/弃用)→ canon 晋升 + 修订记录 + 状态重提取 + canon 前门禁(anti-AI/verve 复查)
  • distill.py —— 修订记录蒸馏素材库:只存人改后的好句(例对>规则句),配额新进旧出,注入 system prompt——prompt 不膨胀,越用越懂作者
  • M4 局部重生成 —— gen.py --resection <节id>:目标节重写、其余节复用(字节级保留),草稿被人改过时守卫拦截
  • spec-canon 漂移注记 —— 情节级差异自动回流:promote 提「逻辑/结构」差异 → 下一章生成注入「上章修订要点(作者定稿为准)」
  • docs/DESIGN.md —— 五层两循环 + 五铁律(canon 唯一真源 / 例对>规则句 / 给内容>锁语法 / 知识边界 / 配额经济)

实证

试点章节实测:AI 草稿 4839 字 → 人工修订 3979 字(砍掉「头顶监视器」式逐帧动作描写 18%);M4 真自测:未重写节字节级保持 ✅;回归测试 92/92 ✅

背景

网文平台已明牌治理「脱离人工精修」的批量 AI 生成内容。这套管线把「人工精修」做成框架的结构件:你改的每个字,都是下一章的教材。

v0.2.0 — 认知反转引擎 (Cognitive Reversal Engine)

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 06 Aug 13:49

认知反转引擎

核心新层:Theory of Mind (ToM) — 角色持有的知识 ≠ 世界真相,引擎用作者维护的真相表推导信息差 (info_gaps),让角色错误认知成为 A/B 型反转素材,而不是全知叙述。

新增

  • framework/theory_of_mind.py — 真相表解析、知识同步、跨角色 ToM、A 型反转检测、info_gaps 渲染。真相表不进生成 prompt 全文,只注入推导结果,避免泄谜底
  • framework/chapter_coordinator.py — 顶层章节协调器,gen/engine/hybrid 三路分发,依赖可注入、确定性 tick 便于测试
  • scripts/run_chapter.py — CLI:run_chapter.py novels/<n> --chapter N [--mode ...]
  • novels/静默轨道/bible/真相表.md — 示例真相表 T-01..T-06(含 false 假信念行)
  • 测试:test_theory_of_mind 30 例 + test_chapter_coordinator 12 例,已接入 CI

改动

  • gen.py 抽取 run_generation() 供协调器复用
  • agent_base/tick_runner/vault_sync/narrator — 认知持久化(beliefs/knowledge/tom)
  • novel_config.py — get_pipeline_mode 配置分层:cli > arc > chapter > default > gen
  • 文档:ARCHITECTURE / VERSION_PLAN / AGENTS.md(替代 CLAUDE.md)

验证

ToM 30/30 · coordinator 12/12 · engine_core 24/24 · split_scenes 5/5

v0.1.1 — 框架可用性优化

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 06 Aug 05:24

定位:第二版 · 框架可用性优化

  • 📦 外挂内容包(Option B) — spec 用 novel_dir 指向外部包,换小说的第二种姿势:外部包也能跑,框架依然一行不改
  • 🎯 divergence_vibe 接线 — 每节注入「发散方向」,normal/expanded 两处 prompt 都读。角色内心方向不再是死字段
  • ⚙️ CI 基建 — 双测试套件(引擎 + 生成管线)全入库,去 pip cache
  • 📖 README — quickstart 修正

完整:框架与小说解耦 + 双管线(弧级引擎 / 章节级生成)+ 质量门禁。历史见 v0.1.0。

v0.1.0 — FictionForge 第一版

Choose a tag to compare

@wanqili857-byte wanqili857-byte released this 02 Aug 11:33

FictionForge v0.1 —— 多智能体小说写作框架首个发布。

这个版本有什么

  • 多 agent 引擎:角色各自带记忆/信念/视角,并行感知世界、独立决策
  • 叙事合成:多视角事件线 → 结构化章节 spec,标注反转落点
  • 生成管线 + 质量门禁:禁词/AI腔/比喻密度/感官温度体检,不过关自动返工
  • 框架/内容包解耦:换小说只改内容包,引擎零改动
  • 参考示例《静默轨道》(科幻),全流程适配实证

快速开始

pip install requests
# key 放 ~/.env:OPENROUTER_API_KEY 或 DEEPSEEK_API_KEY
python server/gen_proxy.py
python scripts/gen.py novels/静默轨道/specs/ch1.json

MIT License。文档与适配示例持续完善中。