从 0 到 1 打造 AI 提示流编排器:告别单画布重绘瓶颈,状态机分层解耦与双模存储实战(开源系列 04)

深度复盘 AI 提示流编排器 PatchCat 架构升级:突破单画布限制,抽屉式多流程可视化管理、useProjectStore 与 useWorkflowStore 状态机分层解耦(0 脏重绘 / 60fps),以及基于 StorageAdapter 契约模式的本地 LocalStorage 与 FastAPI 异步服务双模存储实战。

Gu0 Qiang
Gu0 Qiang
Published in Gu0 Qiang · Sep 03, 2026

项目开源地址https://github.com/GuoBug/PatchCat
在线体验https://guobug.github.io/PatchCat/
往期回顾
📖 《从 0 到 1 打造 AI 提示流编排器:双引擎架构与纯前端 DAG 实践(开源系列 01)》
📖 《从 0 到 1 打造 AI 提示流编排器:Kahn 拓扑排序、安全变量引擎与异步运行时实战(开源系列 02)》
📖 《从 0 到 1 打造 AI 提示流编排器:多模型生态适配、流式思维链与三级日志实战(开源系列 03)》


一、 引言:告别单画布,迈向复杂架构

在前几篇文章中,我们完成了 AI 提示流编排器 PatchCat 的核心引擎——基于 Kahn 算法的 DAG 拓扑排序调度器、流式 SSE 渲染、DeepSeek R1 思考链解析,以及纯前端直连(BYOK)的多模型配置体系。

然而,当我们设想将编排器应用于更真实的复杂业务场景(例如设想中的智能客服多级分流多 Agent 辩论仲裁研报深度生成与校对等典型链路)时,单画布的局限性立刻显现出来:

  1. 单画布的混乱与资产沉淀诉求:单一工作区无法同时容纳多个异构流程,如果不做多流程隔离与目录分层,用户每次调试新场景都得清空画布,无法形成结构化的“提示流资产库”。
  2. 存储的双重诉求
    • 轻量私密:保持纯前端(BYOK)的零门槛体验,无需安装任何环境,在浏览器本地(localStorage)即开即用;
    • 持久落盘与扩展:在跨设备同步、历史回溯,以及后续接入企业知识库(RAG)与向量检索时,能将流程数据无缝保存至后端数据库中。

为了满足这些设想场景,我们在本期迭代中完成了复杂架构升级:前端打造了抽屉式可视化多流程管理,后端构建了 FastAPI 异步服务底座,并通过经典的 StorageAdapter 适配器模式,实现了浏览器本地与服务端数据库的“无缝双模落盘”。


二、 交互与多流程组织:抽屉式可视化管理设计

1. 沉浸式抽屉交互体验

为了给用户提供清晰、聚焦的工作流管理体验,我们在界面左侧设计了可随时折叠与展开的抽屉式侧边栏

沉浸式抽屉交互与多流程可视化管理

  • 分层目录与折叠记忆:支持创建自定义目录、重命名与展开/折叠,并持久化记录用户的目录展开习惯;
  • 行内双击快速重命名:双击流程名称直接切换为行内编辑输入框,支持 Enter 保存、Esc 撤销;
  • 相对时间徽章与快捷操作:流程项实时显示最后更新的相对时间(如 now5h2d);右侧快捷菜单支持“创建副本(Duplicate)”、“跨目录移动(Move)”与“级联防误删”;
  • 即时模糊过滤:内置不区分大小写的关键词搜索,输入即触发毫秒级过滤。

2. 状态机分层解耦架构

如果把所有数据混在同一个 Store 里,侧边栏切换时极易引起整个画布无意义的重绘。我们将前端状态机划分为两个清晰的职责层:

前端状态机分层解耦架构

  • useProjectStore(工程管理层):只管理目录树、工作流列表元数据与激活 ID,负责持久化落盘与远端同步;
  • useWorkflowStore(画布调度层):专注于当前画布上的节点坐标、连线拓扑与实时执行状态;
  • 两者通过单向事件机制解耦:
    • 点击任意流程时,仅调用一次 loadPreset() 动态灌入画布数据;
    • 画布编辑完成后,通过 debouncedSync() 防抖回写元数据;
    • 彻底保障了 零脏重绘(0 Dirty Re-renders)60 FPS 极致交互性能。

三、 后端底座:FastAPI + SQLAlchemy 2.0 异步服务设计

1. 为什么选择 FastAPI?

在后端框架选型上,我们选择了 Python + FastAPI。主要考量是:AI 与大模型生态的重心(LangChain、LlamaIndex、Sentence-Transformers 以及各类向量数据库客户端)绝大多数以 Python 为首选支持语言。这为我们后续接入 文档切片、Embedding 向量模型与 RAG 知识库检索 提供了最顺畅的工程底座。

📌 特别说明:当前的数据模型与持久化设计(FolderORM + WorkflowORM)是服务端演进的第一阶段起点。它优先打通了前后端数据闭环与基础存储;后续随着第二阶段向量知识库(pgvector)、文档切片与执行历史遥测的引入,数据模型与表结构将会持续深化和演进完善。


2. DAG 图结构建模与环境感知自适应连接

为了兼顾关系检索的高性能与工作流图的灵活性,同时让初次接触项目的开发者无需搭建复杂容器即可极速起步,我们采用了混合 ORM 建模自适应连接引擎

后端底座:DAG 图建模与环境感知自适应引擎

  1. DAG 混合建模设计:关系表字段(idfolder_idname)用于高频索引与级联目录检索;节点与连线拓扑采用 JSONB 原生落盘(SQLite 下自适应回退为 JSON),兼备无模式灵活性与极速读取性能。
  2. 环境感知自适应机制
    • 本地开发模式(默认):配置为 sqlite+aiosqlite,无需安装 Docker,直接运行服务即可自动建库启动;
    • 生产/容器模式:自动识别 PostgreSQL 连接串并挂载连接池优化参数(pool_pre_pingmax_overflow),为后续 pgvector 向量扩展提供高并发支撑。

四、 核心设计模式:StorageAdapter 双模存储适配器

本篇最核心的架构设计,正是如何让前端既能零门槛使用浏览器本地缓存,又能随时一键无感切换连接 FastAPI 后端数据库。

1. 通俗理解“存储契约”

我们可以把“适配器模式”想象成生活中的 Type-C 充电接口

  • 手机(前端界面 UI):身上只有一个标准的 Type-C 插口(这就是 接口契约 Interface)。手机只管插上充电,它根本不关心你插的是“充电宝(LocalStorage)”还是“墙上的家用插座(FastAPI 后端)”;
  • 插拔切换无感:你想把充电宝拔了换成插座充电,手机本身不需要拆开重装,换根线插上就能用。

2. 代码对比:写死判断 vs 契约抽象适配器

StorageAdapter 适配器设计模式对比

  • 传统反模式:每次保存都要手动写 if (mode === 'local') ... else if (mode === 'server') ...,胶水逻辑散落整个项目,扩展性极其脆弱;
  • 标准适配器契约:通过定义 IStorageAdapter 统一接口,工厂动态派发对应实例。上层 UI 彻底解放,只需调用 await adapter.saveWorkflow(...),一行代码搞定保存。

3. 60fps 即时响应策略(乐观更新)

如果每次用户在画布上拉线或重命名,都要等网络请求返回后再更新界面,就会产生明显顿挫感。

我们在 useProjectStore 中采用了 乐观更新(Optimistic UI) 策略:

  1. 即时响应:用户的点击、重命名、拖拽操作立即在前端内存中同步生效,帧率保持 60fps;
  2. 后台静默落盘:在后台异步调用 adapter.saveWorkflow() 完成数据持久化,网络微延迟完全不干扰操作流畅度。

4. 平滑冷启动与自动种子初始化(Auto-Seed)

在落地双模切换时,我们还解决了一个非常关键的“冷启动”体验问题:当用户第一次把存储模式从本地切换到全新的后端数据库时,新数据库往往是空的,如果直接展示会导致侧边栏一片空白,给用户造成“数据丢失”的困惑。

平滑冷启动与自动种子初始化机制

我们在 syncWithStorage() 中加入了智能自动播种(Auto-Seed)机制:

  • 状态嗅探:首次连入后端时探查远程目录与流程列表;
  • 原子播种:若确认远端库完全为空,无感调用适配器自动将官方工业级样例写入后端;
  • 即开即用:用户初次接入后端时,能立即看到预置的工作流示例,体验平滑自然;已有数据的后端绝不重复写入,保障既有数据安全。

结语与后续演进

通过抽屉式可视化管理FastAPI 异步底座StorageAdapter 适配器设计,PatchCat 成功打破了单画布的限制,具备了应对多流程分类、持久化存储与双模平滑切换的复杂架构能力。

💬 技术交流与反馈
如果你在构建类似低代码画布或复杂状态机架构时有任何疑问或心得,欢迎直接在 GitHub 的 Issue 中交流!

🛡️ 写在后面(关于安全工程)
在提示流编排器走向更开放的生产级场景时,除了调度与存储,全链路安全防控同样是一项重中之重的庞大工程——包括提示词注入防护(Prompt Injection Defense)、沙箱代码执行隔离、API 密钥零信任脱敏、以及端到端安全审计防线。后续我们计划单独写一篇实战记录,全面复盘 PatchCat 在系统安全体系上的构建过程。

在接下来的篇章中,我们还将正式迈向 Phase 2(向量知识库与 RAG 检索接入),敬请期待!


💡 项目源码完全开源,欢迎在 GitHub 上 Star 关注与交流:
🔗 项目仓库:https://github.com/GuoBug/PatchCat

更多精选文章推荐 MORE FROM GU0 QIANG