woke_novel:把模型 CLI 编排成长流程生产系统¶
woke_novel 将 Claude CLI 或 Codex CLI 编排为长篇内容生产流水线。它把创意、世界观、人物、故事主轴、章节剧情、正文和连续性状态拆成有明确输入输出的阶段,并允许在数小时甚至更长的任务中断后继续。
可视化控制台:项目进度、当前阶段、运行状态与章节数量集中展示。
为什么要做“工作流”,而不是一个超长 Prompt¶
长篇生成面临三个现实问题:模型上下文有限、单次失败成本高、产物之间存在长期依赖。把所有要求放进一次对话,任何超时或偏航都会让整个任务重新开始。
woke_novel 将流程切成多个 CLI session,并让每个步骤只读需要的上游产物:
flowchart LR
A[创意候选] --> B[世界观 / 人物]
B --> C[故事主轴 / 幕次]
C --> D[开篇]
D --> E[逐章循环]
E --> F[幕末整理]
F -->|下一幕| E
PathResolver 统一替换项目、轮次、幕次和产物路径,步骤模板中不写绝对路径;ProjectInfo 保存最后步骤、当前幕、章节数和完成状态,continue 只恢复尚未完成的部分。
多 Provider 与会话隔离¶
工作流支持 Claude 与 Codex 两类 CLI 后端。Provider 层负责构造子进程参数、读取流式输出、判断完成状态和暴露错误;编排层只关心步骤是否成功及产物位置。
同一创作阶段可以复用 session 保持上下文,不同阶段则主动隔离,避免早期发散对后续步骤产生不可控影响。单步模式和 Dry Run 允许在不调用模型时检查路径、变量和流程跳转。
可视化控制台¶
随着项目增多,仅靠命令行很难回答“哪个项目正在运行、停在哪一步、有哪些章节、最近失败是什么”。因此我补充了 FastAPI + React / TypeScript 控制台,主要能力包括:
- 创建、查看与删除项目;
- 启动完整流程、继续、单步运行与取消;
- 查询运行事件和日志;
- 浏览、读取和编辑项目文件;
- 章节管理与 MD / TXT / EPUB 导出;
- 环境和 Provider 状态检查。
前端使用 TanStack Query 管理服务端状态,Zustand 保存轻量 UI 状态,Vite 负责构建。后端将耗时工作流与 HTTP 请求解耦,并通过运行 ID 暴露状态。
工程取舍¶
文件系统作为工作流数据库¶
创作产物本身就是 Markdown / JSON 文件,使用文件系统可以直接编辑、版本控制和迁移,不需要额外数据库。但这也意味着重命名、原子写入、并发操作和路径安全必须由应用显式处理。
中间产物换取可恢复性¶
分阶段落盘增加了文件数量,却让问题可以定位:世界观不对时不必重新生成创意,单章失败也不影响前面已完成的章节。后续优化重点不是取消中间产物,而是为上下文建立预算,减少同一事实被多次复述。
自动化权限必须建立信任边界¶
模型 CLI 需要写入项目文件。当前无人值守模式面向用户信任的本地目录,并提供明确的启动参数说明;它不应直接用于不可信仓库或共享服务器。更保守的部署需要工作区沙箱、最小文件权限和任务容器隔离。
当前边界¶
- 内容质量仍依赖模型能力、模板和用户选题,流程完整不等于作品质量稳定;
- 文件状态适合本地单用户,不适合多用户并发协作;
- 长任务的完整回归成本高,Dry Run 只能验证编排,不能代表模型产物质量;
- 当前工作区仍在持续重构提示模板和注意力预算。
这个项目最重要的收获,是把 Agent 理解为“受状态、工具和验收约束的执行过程”,而不是一个会调用几次模型的聊天界面。