Skip to content

【外滩大会2026】长文剧情一致性推理创作工作台 #67

Description

@Septemc

Storydex —— 长文剧情一致性创作工作台

团队 / 作者

TensorHub 组织 · 开发者 SeptemcFlowby

GitHub 组织:@TensorHub-ORG

我们做了什么

我们用五个月时间打磨了一款面向长篇小说创作者的本地优先(Local-First)写作工作台 Storydex。作品采用独立的项目空间,章节正文、世界观设定、角色资料、WIKI 与创作历史围绕同一项目组织,AI 参与创作时保持可观察、可审阅、可回滚。

核心落地能力:

  • Coomi Agent:自研 Rust Agent 基座(storydex-coomi-bridge),理解本轮创作意图后读取项目上下文,执行续写、整理、审阅、剧情冲突检查与工具调用,支持 128K/256K/512K 上下文窗口。
  • 检索与记忆:面向中文优化的项目全文检索 + 滚动章节摘要 + 相关旧文召回 + WIKI 参考注入,让 Agent 在长篇续写中"先查证再落笔"。
  • 知识图谱与 WIKI:把角色、事件、关系、地点和设定组织成可检索的结构化资料,并可视化呈现。
  • 本地 Git 工作流:内置 MinGit,每一轮修改都可 Diff 审阅、提交回看、分支切换与历史回滚,不会自动配置远程仓库、不会自动 push
  • 创作预设与指令仓库:维护写作约束、风格规则、导入规则,并内置覆盖世界观、角色、剧情、编辑审校、项目包装五大类的指令模板。

百炼能力在本项目中的实际使用方式:

  1. 通过 OpenWork / 百炼 CLI 接入通义千问大模型,作为我们四个月开发周期里的主力 AI 编程搭档,承担后端 FastAPI 服务、前端 Vue 3 工作台、Coomi Rust Agent 桥接层、Electron 桌面壳与发布流水线的编写与重构。
  2. 协助编写并重构 coomi_agent_servicestory_generation_pipelinecontext_policyretrieval_service 等 60+ 个后端核心服务的实现逻辑,覆盖 Agent 编排、上下文装配、Git 工作流、知识图谱、检索召回、记忆治理、预设编译等业务。
  3. 设计 SSE 流式协议的阶段性事件(RunAccepted / TurnPhase / heartbeat),并保证首个 SSE 在 10ms 内到达,解决意图识别与模型等待期间长期停留在"执行中"的反馈缺失问题。
  4. 实现 usage 统计的四种来源区分(Provider 上游报告 / 缺失 / 历史未知 / 本地估算)与流式累计快照折叠逻辑,真实增长会话连续 3 轮、11 次请求 usage 覆盖率达成 100%。
  5. 编写后端契约测试、集成测试与并发失败恢复测试,配合覆盖率 ratchet 门禁,普通 CI 仅允许 0.05 个百分点的测量误差,发布门禁不允许误差,且禁止为绕过缺失测试而降低基线。
  6. 协助设计前端 Pinia store 与 SSE parser 的状态机,避免较晚返回的旧历史请求覆盖正在运行的新会话,并补齐 AgentPanel 启动阶段的历史读取竞态修复。
  7. 打磨前端编辑器的字体样式、可靠缩放、文件内搜索、Agent 文件链接中栏跳转等长篇写作交互,并实现资源浏览器的多选拖动与自由架构 / 分类视图切换。
  8. 编写前端 Vitest 测试与覆盖率门禁,覆盖 SSE parser、Pinia store、AgentPanel 与字体状态机,并通过 check_coverage.cjs 读取 coverage-baseline.json 执行前端覆盖率 ratchet。
  9. 协助完成 Agent 基座从早期 Python Coomi 运行时到 v2.0.0 Rust 运行时(storydex-coomi-bridge)的跨语言、跨进程、跨协议大重构,设计 HTTP/SSE 编排层与 Rust bridge 的通信契约。
  10. 编写 validate-embedded-pythonvalidate-packaged-assetsbuild-coomi-runtime 等构建脚本,确保 Rust bridge 在开发、CI 与正式包中均通过 --version 预检并确实进入最终封装。
  11. 排查 Windows 环境下 Agent 调用 LLM 时持续出现的 APIConnectionError / SSLEOFError,定位到不同安装环境 OpenSSL 组件版本不一致的根因,最终固定 Python 3.9 运行时并优先选择明确配置的解释器。
  12. 实现 electron-updater 的 generic feed 差分下载与辅助安装窗口,修复 NSIS 替换文件期间强制拉起新进程导致的 JavaScript 主进程错误,并对临时加载失败执行确定性重试。
  13. 编写 windows-signafter-packpatch-win-executablewrite-app-update-config 等桌面打包脚本,生成并验证 NSIS 安装包、便携 ZIP、blockmap、latest.yml、SHA256 校验、依赖清单与构建 manifest。
  14. 设计 GitHub Actions 的 ci.yml / quality-gate.yml / release-windows.yml 三段式流水线,在 PR、main push 与手动触发时调用可复用工作流,并上传 JUnit、覆盖率与失败诊断产物。
  15. 在 Agent 三层分离、WIKI 体系化、VSCode 式工作台、模板骨架化树状目录、本地优先路线等关键架构决策上,用百炼多轮对话快速验证方案可行性、对比不同范式的取舍、审查重构方案的潜在风险。
  16. Storydex 的 LLM 配置面板内置阿里云百炼预设(协议 OpenAI Compatible、接口 https://dashscope.aliyuncs.com/compatible-mode/v1),用户填入 API Key 即可让 Coomi Agent 通过 qwen-plus / qwen-turbo 等通义千问模型驱动长文续写、规划与工具调用。
  17. 在需要语义检索的场景下,用户可在 .env 中配置百炼 text-embedding-v3 向量模型(EMBEDDING_API_KEY / EMBEDDING_BASE_URL / EMBEDDING_MODEL),为项目全文检索提供语义召回能力,配合本地 FTS5/BM25 实现混合检索。
  18. 参考百炼 Skill 体系的设计理念,Storydex 自研了一套面向长篇创作的内置技能模板,写入每个新建项目的 .storydex/.agent/skills/ 目录,包括 设计剧本设计角色设计世界书条目角色更新故事生成后更新变量思考WIKI整理项目目录整理story_preset_constraints 等技能,每个技能包含用途、触发条件、输入、证据规则、资产落点、执行步骤、输出模板、自检与安全边界。
  19. 借鉴百炼 Skill 的动态底稿 + 注册表机制,Storydex 实现了 registry.json 技能注册表,负责登记技能 ID、意图与资产落点;story_preset_constraints.md 作为动态技能底稿,项目激活预设时会附加在其"当前激活预设"章节,支持技能的版本迁移与用户自定义保护。
  20. 参考百炼 MCP(Model Context Protocol)工具协议的设计,Storydex 的 Coomi Agent 实现了原生工具调用与结构化工具调用两种协议,并支持 auto / native / structured / mimo / disabled 五种工具协议模式,适配不同模型服务商的工具调用能力差异。
  21. 在 Agent 工具调用链路、多轮工具调用回归、usage 统计一致性验证等关键模块上,借助百炼 CLI 快速跑通多轮回归测试,避免了真实付费 LLM 的成本消耗,同时验证了 Storydex 自研技能模板在不同模型下的通用性。
  22. 计划接入百炼官方 Skill 市场百炼 MCP 服务器生态,将官方提供的图像生成、语音合成、知识库检索、代码执行等能力以 MCP 工具的形式注入 Coomi Agent,扩展 Storydex 在封面生成、有声小说、设定图谱自动构建等场景的能力。
  23. 计划接入百炼多模态模型(Qwen-VL 系列),让 Coomi Agent 能够识别与解析用户上传的角色立绘、场景设定图、封面草图等图像资料,自动生成对应的角色卡与世界观描述。
  24. 计划接入百炼语音模型(CosyVoice / Qwen-Audio 系列),为长篇小说提供朗读、听写与语音批注能力,让创作者可以在通勤、休息场景下继续推进创作。
  25. 计划接入百炼 RAG API 与知识库服务,作为 Storydex 本地 WIKI 检索的云端补充,在用户授权的前提下为超大型项目(百万字以上)提供更强的跨章节语义召回与长程依赖追踪能力。
  26. 计划接入百炼 Agent OS / 百炼智能体编排能力,将 Storydex 的多 Agent 协作(续写 Agent、审校 Agent、设定 Agent、图谱 Agent)从当前的本地编排升级为百炼智能体网络的协同模式,提升复杂创作任务的自动化程度。
  27. 计划接入百炼 API 网关的按量计费与配额管理,为未来可能的 Storydex 云端协作版提供模型调用计费、配额限流与多租户隔离能力,同时保持本地优先工作台的核心定位不变。

效果展示

项目链接

踩坑记录

1. Agent 基座的交互逻辑

项目早期我们尝试把 Agent、前端、后端塞在同一个进程里一体化开发,结果兼容性问题很多——Agent 的运行时升级会牵连前端,前端的构建变更又会污染 Agent 的工具调用链路,协同几乎无法推进。最终我们选择了前后端分离 + Agent 分离的架构:Coomi Agent 以独立 Rust 运行时(storydex-coomi-bridge)的形式存在,通过 HTTP/SSE 与后端 FastAPI 编排层通信,再以"第三方库"的方式被桌面壳调用。这样 Septemc 可以专注 Agent 基座,Flowby 可以专注前端工作台,互不阻塞,发布节奏也稳定下来。

2. 超长上下文剧情逻辑的体系化

长篇小说几十万字下来,人物关系、事件因果、世界观设定会迅速膨胀,AI 续写时极易前后矛盾、张冠李戴。我们试过纯时间线、纯角色卡、纯摘要等多种方案,都难以兼顾"检索"与"演化"。参考了 SillyTavern 的世界书范式与若干优秀创作工具后,最终决定采用 WIKI 模式来构建体系:把角色、事件、关系、地点、设定抽象为可结构化的实体,配合滚动章节摘要、相关旧文召回和 WIKI 参考注入,让 Agent 在落笔前先"查证"再"写"。知识门禁坚持"需复核即不写入",避免 Agent 把推测写成既定事实污染正文。

3. 界面设计

界面方案我们迭代了非常多次。最早的版本(仍可在线访问:https://storyteller.septemc.cn/console/ )走的是"一体化对话交互"路线——把所有功能塞进一个聊天窗口里,结果发现长篇创作时上下文切换成本极高,作者根本看不清自己改了哪里、Agent 改了哪里。我们尝试过纯对话流、卡片堆叠、左右分栏等各种模式,最终发现类似 VSCode 的代码编辑器反而最适合创作:左侧资源浏览器、中间编辑区、右侧 Agent 面板,很符合优秀的交互逻辑。

4. 左侧栏树状目录

左侧栏的目录结构我们也走了不少弯路。一开始尝试严格的"模块化"分类(角色/事件/地点/设定各自独立树),结果跨类别检索和浏览很别扭;又试过"只显示文件"的纯文件树,对长篇作者来说心智负担太大——他们要的是"这一卷有哪些章节、主角当前状态如何",不是"chapters/vol1/ch03.md"。最终我们确定了模板骨架化的树状目录:新建项目时按预设模板生成章节骨架与设定骨架,并支持一键切换为"分类视图"(角色/事件/地点/设定/WIKI 分类展示),既保留了文件系统的可观察性,又给了创作者熟悉的结构化模型。

5. 部署方式

最初我们打算把 Storydex 做成在线网站,但很快撞上两堵墙:第一,服务器性能根本不可能支撑大量并发创作——每个长篇项目的全文检索、向量召回、Agent 多轮工具调用都是重计算,规模化成本不可承受;第二,在线服务的用户隐私没有保障——小说未发表的正文、设定、大纲属于创作者最敏感的资产,任何云端泄露都是不可接受的。最终我们确定了本地优先(Local-First)工作台路线:所有项目数据、Agent 会话、Git 历史都存在用户本机的 .storydex 目录下,模型调用走用户自己的 API Key 直连服务商,Storydex 本身不经手任何创作内容。这也让我们意外发现了内置 Git 工作流的可能。

6. Windows 下 Agent 调用 LLM 偶发 SSLEOFError

不同安装环境自带的 OpenSSL 组件版本不一致,导致 HTTPS 握手偶发失败。最终将打包态 Python 运行时固定为 3.9,并优先选择明确配置的解释器或官方 py -3.9,避免系统 Python 的迁移污染。

7. 长会话 usage 统计可信度

早期把字符估算误记为真实用量。v0.4.0 起区分 Provider 上游报告、缺失、历史未知和本地估算四种来源,并正确折叠流式累计快照,真实增长会话连续 3 轮、11 次请求 usage 覆盖率达成 100%。

8. Agent 执行过程反馈缺失

意图识别、上下文装配或模型等待期间长期停留在"执行中"。v0.3.3 起 Coomi 在请求进入后立即发送 RunAccepted,随后持续发送带耗时的 TurnPhase 与 heartbeat,首个 SSE 通常在 10ms 内到达。

9. 九为数之极,我们的项目开发过程遇到了数之不尽的BUG和难题,列出来的都是一些我们印象比较深的,我们正在紧锣密鼓继续开发捏!


致谢:
本项目的设计与实现深受以下优秀项目与社区的启发:SillyTavern(酒馆)的对话与角色管理范式、Visual Studio Code 的编辑器扩展体系、ClaudeCode 与 Codex 在 AI 辅助编程中的交互理念,以及众多开源社区的智慧结晶。

感谢 外滩黑客松·AI Coding 大赛(https://hackathon2026.app.weavefox.cn/ )为开发者提供了展示与交流的舞台,让 Storydex 有机会从一个想法走向开源作品;感谢 阿里云百炼 提供的通义千问大模型、text-embedding-v3 向量模型与 OpenWork / 百炼 CLI 工具链的能力支持,百炼不仅是 Storydex 开发期的主力 AI 编程搭档,也是项目内置的模型接入预设之一,未来还将通过 Skill 与 MCP 生态持续扩展 Storydex 的创作能力。

感谢每一位为开源世界贡献力量的开发者。Storydex 仍是一个初代工具,功能仍在持续完善中,但我们相信开源的力量——欢迎每一位热爱创作的朋友参与、反馈、共建。


Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions