人工智能AI 应用AI 写作桌面应用后端前端知识图谱【免费下载链接】NovelForgeAI辅助长篇小说创作卡片式创作支持基于 JSON Schema的结构化 AI 生成与上下文引用可扩展性强。项目地址https://gitcode.com/gh_mirrors/no/NovelForge点击查看免费下载NovelForge 是一款 AI 辅助长篇小说创作工具支持卡片式创作与基于 JSON Schema 的结构化 AI 生成。它最容易被忽视的设计亮点之一是工作流系统在 v0.9.0 版本中团队将旧版 DAG有向无环图式编辑器整体移除换成了Python 风格语句 特殊标记 DSL的代码式工作流。这篇文章会讲清楚为什么要抛弃 DAG、新方案长什么样、引擎内部如何运转以及新手如何上手使用。从 DAG 到代码式一次痛到骨头里的重构很多可视化自动化平台包括早期版本的 NovelForge都采用 DAG 编辑器把每个动作画成节点用连线表达依赖关系。它看起来很直观但在实际使用中暴露出三个痛点描述成本倒挂一个简单的保存后批量建卡流程代码式只需几十行DAG 配置却常常需要几百行的节点与连线描述节点一多画布上的面条线就成了调试噩梦。异步语义表达困难创作流程里大量存在多个任务并发执行 → 等待全部完成 → 再汇总的语义。在 DAG 里等待和并行要靠额外的控制节点绕来绕去在代码里asynctrue和Logic.Wait两条语句就说清了。对 AI 不友好这是被团队反复强调的一点——DAG 的 JSON 结构冗长且充满坐标、连线 ID 等噪音信息AI 模型很难可靠地生成和修改而代码式工作流是线性的、贴近自然语言逻辑的文本模型读起来、改起来都顺畅得多。这正是后来能做出用自然语言生成工作流的 Agent 功能的基础。当然官方也在 README.md 中坦承代价代码式不如 DAG 直观且对参数序列化、字典字段类型等细节更敏感需要更强的校验来兜底。代码式工作流长什么样Python 风格语句 标记 DSL打开任何一个内置工作流模板如 核心蓝图.wf你会发现它本质上就是一个每行一个动作的脚本#node(description读取核心蓝图) blueprint Card.Read(card_idtrigger.card_id) #/node #node(asynctrue, description批量创建角色卡异步) char_cards Card.BatchUpsert( project_idtrigger.project_id, card_type角色卡, title_template{item.name}, itemscharacters.result ) #/node规则非常简单每个节点用#node(...)开头、#/node结尾中间的元数据可以声明async异步执行、disabled临时禁用、description节点说明等节点块内只允许一条赋值语句形如变量名 分类.节点类型(参数...)例如Card.Read、Logic.Wait、AI.Debate变量天然携带数据流——下游节点直接引用上游变量如characters.result不再需要画连线。解析入口在 marker_parser.py它先用正则提取节点块再用 Python 的ast模块解析赋值语句自动把引用了哪些上游变量提取为依赖关系depends_on最终组装成 execution_plan.py 中的ExecutionPlan。依赖缺失、未定义变量引用等问题会在保存/校验阶段就被拦截而不是等到运行时才报错。 可视化视图和代码视图可以随时切换可视化视图用于拖拽搭建、表单化调参切到代码视图看到的就是上面这种干净的 DSL 文本。两者是同一份数据的两种投影。引擎内部流式执行器如何让等待变得自然真正让代码式工作流成立的是底层的异步执行器 async_executor.py。它的关键设计语句级顺序调度ExecutionPlan按代码顺序逐条调度符合直觉异步节点即发即走标记asynctrue的节点如批量建卡、多模型辩论立即返回、后台并发执行不阻塞后续语句Logic.Wait显式汇合等到指定的一组任务全部完成再继续进度事件如已处理 30/60通过事件队列实时转发到前端断点续传与暂停/恢复批量节点在执行中上报ProgressEvent并保存轻量检查点索引、计数器等 10KB 的元数据中断后可以从检查点续跑而不是从头再来受控表达式求值Logic.Expression支持写列表推导等 Python 表达式来变换数据但 evaluator.py 内置了 AST 安全守卫——禁止eval、open、双下划线属性等危险操作保证表达式能用但作不了恶。节点体系一个装饰器注册Schema 自动生成所有节点都继承自 base.py 中的BaseNode设计被刻意做极简每个节点只定义两个 Pydantic 模型input_model和output_model不需要单独的 Config类上加一个register_node装饰器见 registry.py启动时自动注册进节点表输入/输出的JSON Schema 直接从 Pydantic 模型自动生成——这就是前端参数面板能实时编辑与校验、Workflow Agent 能知道每个节点有哪些字段的根源。目前内置节点按分类组织在 nodes/ 目录下触发器Trigger.CardSaved、Trigger.ProjectCreated、逻辑控制Logic.Wait、Logic.Delay、Logic.Assert、Logic.Expression等、小说处理Novel.Load扫描章节目录、卡片操作Card.Read/Card.Create/Card.BatchUpsert等 7 种以及 AI 类节点AI.LLM、AI.Agent、AI.Debate多模型辩论、结构化输出等。想扩展一个新能力写一个类、定义好输入输出模型即可不用碰引擎。触发器与全局状态栏工作流无人值守运行代码式工作流不只是手动执行。每个工作流可挂一个或多个触发器triggers.py 基于事件系统实现保存时触发某类型卡片一保存就自动执行比如核心蓝图保存 → 自动生成分卷/角色/场景卡创建项目时触发新建项目后自动搭建初始结构默认模板项目创建·雪花创作法就是靠它。触发器还带 1.5 秒防抖避免连续保存造成重复执行。运行状态则通过全局工作流状态栏呈现——执行开始后你可以切换到其他页面继续写作状态栏会显示运行中数量、当前节点与总体进度完成后闪烁提醒Workflow Agent用一句话生成工作流代码式工作流对 AI 友好的红利最终兑现成了工作流智能体功能agent_service.py在工作流页面打开 Agent用自然语言描述目标例如帮我写一个多 AI 辩论流程模型 A 用 GLM-4.6、模型 B 用 DeepSeek-V3.2把辩论过程、摘要分别输出到文本卡。Agent 会读取当前工作流、结合内置节点简表生成/修改工作流代码、自动校验并提供先预览再应用的安全变更体验无需自己搭节点。内置模板与新手上手指南仓库预置了多个可直接使用或二次改造的模板位于 backend/app/bootstrap/workflows/模板用途项目创建·雪花创作法新建项目时自动创建初始卡片结构核心蓝图蓝图保存后批量生成分卷、角色卡、场景卡阶段大纲·落章节卡根据阶段大纲自动创建章节大纲与正文卡拆书工作流拆解既有小说文本并落地到卡片体系上手只需三步① 进入工作流页面从节点库拖拽或直接写代码② 在参数面板填好目标项目、模型等参数并校验代码③ 点击执行运行记录与错误信息随时可查。想拆解一本已有小说直接使用拆书工作流即可。总结为 AI 时代重想工作流NovelForge 抛弃 DAG 的本质不是不爱可视化而是重新回答了三个问题流程该怎么被描述、被调度、被 AI 参与修改。答案是——用最贴近代码直觉的线性语句描述流程用异步执行器兑现并发与等待语义用 Pydantic 自动生成的 Schema 打通前端表单与 AI Agent。这套代码式工作流系统目前仍在快速迭代中但它展示了一条值得参考的路径当 AI 成为流程的主要编写者时对模型友好的文本格式可能比对人直观的连线画布更有价值。 相关模块速查workflow 引擎目录 · 节点基类 · 工作流 Agent赞分享人工智能AI 应用AI 写作桌面应用后端前端知识图谱【免费下载链接】NovelForgeAI辅助长篇小说创作卡片式创作支持基于 JSON Schema的结构化 AI 生成与上下文引用可扩展性强。项目地址https://gitcode.com/gh_mirrors/no/NovelForge点击查看免费下载相关推荐为什么现代PHP项目都在抛弃var_dump探索Kint调试神器的终极优势为什么现代PHP项目都在抛弃var_dump探索Kint调试神器的终极优势 在PHP开发中调试是必不可少的环节。传统的 var_dump 函数虽然简单直接开发工具三步快速上手Windows微信群发工具告别手动发送的终极解决方案三步快速上手Windows微信群发工具告别手动发送的终极解决方案 你是否曾为给数十位微信好友发送相同消息而烦恼无论是节日祝福、工作通知还是活动推广手动逐个桌面应用即时通讯RPAyansongda/pay架构设计思想为什么它如此优雅yansongda/pay架构设计思想为什么它如此优雅 在当今数字支付蓬勃发展的时代 yansongda/pay 作为一款优雅的支付SDK扩展包凭借其精妙金融科技后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考