Coze Studio 技术架构与源码分析
一句话概括:Coze Studio 不是 Coze 平台的简单开源复刻,而是一套以“领域驱动设计(DDD)+ 整洁架构”为骨架、以“编译时-运行时双阶段工作流引擎”为心脏、以“可视化画布即源代码”为编程范式的生产级 AI Agent 开发平台——让复杂的 AI 工作流从“拖拽连线”变成“可编译、可中断、可恢复、可流式传输的确定性系统”。
一、引言
如果你用过 AI 工作流工具,你一定见过类似这样的界面:左侧是节点面板,中间是画布,右侧是配置栏——拖拽一个“大模型”节点、拖拽一个“知识库检索”节点、用线连起来、点击运行。
看起来很简单,对吧?
但当你的工作流需要等待用户输入才能继续执行时;当你的工作流运行到第 15 步突然崩溃,一切从头再来时;当你需要精确理解一个节点为什么输出了一个错误结果时——你发现画布背后的“黑盒”完全没有给你任何解释。
字节跳动的 Coze 平台在 2023 年推出后迅速成为国内最受欢迎的 AI Bot 开发平台之一。2025 年 7 月 25 日,字节跳动正式将 Coze 的两大核心项目开源。其中Coze Studio是一站式 AI Agent 开发工具,提供从开发到部署的完整工具链。开源版本包含了完整的工作流引擎、Agent 系统、知识库管理和插件框架。
那么,这套“把可视化画布变成可执行系统”的架构到底是如何设计的?它的“编译时 + 运行时”双阶段工作流引擎背后是什么原理?为什么一个工作流能在等待用户输入时优雅暂停、在服务器重启后从断点恢复?我们从源码出发,一步步拆解。
二、整体架构与设计哲学
2.1 架构总览:DDD 分层 + 微服务
Coze Studio 建立在一个现代、可扩展的架构上,旨在支持大规模的 AI 代理开发。从高层次来看,系统分为前端和后端组件,通过明确定义的 API 进行通信。
┌──────────────────────────────────────────────────────────────────────┐ │ 前端层(Frontend) │ │ React 18 + TypeScript + Semi Design │ │ 可视化画布 · 节点拖拽 · 实时预览 │ │ Rush.js Monorepo(135+ 前端包) │ └───────────────────────────────┬──────────────────────────────────────┘ │ API(Hertz HTTP) ▼ ┌──────────────────────────────────────────────────────────────────────┐ │ API 层(API Layer) │ │ 路由 · 认证 · 中间件 · 请求/响应序列化 │ │ /api/* · /v1/*(OpenAPI)· /v3/* │ └───────────────────────────────┬──────────────────────────────────────┘ │ ┌───────────────────────────────▼──────────────────────────────────────┐ │ 应用层(Application Layer) │ │ 用例编排 · 事务管理 · 跨领域协调 │ │ 应用服务(协调各领域) │ └───────────────────────────────┬──────────────────────────────────────┘ │ ┌───────────────────────────────▼──────────────────────────────────────┐ │ 领域层(Domain Layer) │ │ Agent · Workflow · Knowledge · Plugin · Conversation · Memory │ │ 核心业务模型与规则 · 领域服务 │ └───────────────────────────────┬──────────────────────────────────────┘ │ ┌───────────────────────────────▼──────────────────────────────────────┐ │ 基础设施层(Infrastructure Layer) │ │ MySQL · ElasticSearch · Redis · 消息队列 · RPC Client │ └──────────────────────────────────────────────────────────────────────┘图:Coze Studio 的四层架构。前端负责可视化编排,API 层处理 HTTP 请求,应用层协调用例,领域层承载核心业务逻辑,基础设施层提供技术支撑。
各层职责:
| 层级 | 职责 | 关键目录 |
|---|---|---|
| API 层 | 处理 HTTP 请求、路由、认证以及请求/响应序列化 | backend/api/ |
| 应用层 | 编排领域对象以执行特定用例,管理事务 | backend/application/{domain} |
| 领域层 | 包含核心业务模型和规则 | backend/domain/{domain} |
| 基础设施层 | 提供技术能力,如数据库访问 | backend/infra/ |
看到这里,你可能会问:为什么 Coze Studio 要用 DDD 分层架构,而不是简单的 MVC?
因为 Coze Studio 不是一个简单的 CRUD 应用——它需要处理 Agent 创建、工作流编排、知识库检索、插件集成等多个复杂领域。DDD 的分层架构让每个领域可以独立演进,核心业务逻辑不依赖技术细节。应用层作为“协调器”编排领域对象,领域层作为“承重墙”承载核心规则,基础设施层作为“可插拔的适配器”提供技术能力。
技术架构特点:
| 层次 | 技术选型 | 说明 |
|---|---|---|
| 后端语言 | Golang | 高性能、高并发 |
| 微服务框架 | CloudWeGo | 字节跳动开源微服务治理框架 |
| HTTP 框架 | Hertz | 字节开源的高性能 HTTP 框架 |
| LLM 接入层 | Eino | 字节开源的 LLM 应用框架 |
| 前端框架 | React 18 + TypeScript | 现代化组件化 UI |
| 前端包管理 | Rush.js | 135+ 前端包 Monorepo 管理 |
| UI 组件库 | Semi Design | 字节开源的企业级设计系统 |
2.2 设计哲学:DDD 是骨架,工作流是心脏
Coze Studio 的设计围绕几个核心哲学展开:
哲学一:领域驱动设计(DDD)是骨架。后端使用 Golang 开发,并遵循微服务架构中的领域驱动设计方法。代码围绕业务领域组织,并将不同关注点分离到不同的层次中。每个业务领域都遵循 API → 应用 → 领域 → 基础设施的分层架构。
哲学二:工作流引擎是心脏。Coze Studio 开源的核心是完整的工作流引擎——这是扣子团队投入最大精力构建的核心组件。工作流引擎基于 DAG 的编排运行时,它将可视化画布设计转化为可执行、可恢复且可流式传输的计算图。
哲学三:编译时 + 运行时双阶段执行。工作流引擎遵循清晰的编译时(Compile Time)和运行时(Runtime)阶段划分。编译时将画布 JSON 编译为可执行的 Runnable,运行时由 WorkflowRunner 驱动执行。
2.3 包结构与代码规模
Coze Studio 整体采用 Monorepo 架构,项目结构如下:
coze-studio/ ├── backend/ # 后端服务(Go) │ ├── api/ # API 路由与处理器 │ ├── application/ # 应用服务层 │ │ ├── agent/ # Agent 应用服务 │ │ ├── conversation/ # 对话应用服务 │ │ ├── knowledge/ # 知识库应用服务 │ │ └── workflow/ # 工作流应用服务 │ ├── domain/ # 领域层 │ │ ├── agent/ # Agent 领域 │ │ ├── workflow/ # 工作流领域 │ │ │ ├── internal/ # 内部实现 │ │ │ │ ├── canvas/ # 画布解析与适配 │ │ │ │ └── compose/ # 编译与执行引擎 │ │ ├── knowledge/ # 知识库领域 │ │ ├── plugin/ # 插件领域 │ │ └── conversation/ # 对话领域 │ └── infra/ # 基础设施层 ├── web/ # 前端应用(React + TypeScript) └── docker/ # Docker 部署配置三、核心抽象与编程模型
3.1 领域层——DDD 的“承重墙”
Coze Studio 的架构围绕几个核心领域组织:
| 领域 | 职责 | 源码位置 |
|---|---|---|
| 代理系统(Agent) | 创建能够理解自然语言、执行任务并与用户互动的智能 AI 代理 | backend/domain/agent |
| 工作流引擎(Workflow) | 通过可视化工作流设计实现复杂业务逻辑的编排 | backend/domain/workflow |
| 知识管理(Knowledge) | 通过 RAG 技术将外部知识与 LLMs 集成 | backend/domain/knowledge |
| 插件架构(Plugin) | 通过外部服务和 API 集成扩展代理能力 | backend/domain/plugin |
| 对话系统(Conversation) | 管理用户与 AI 代理之间的互动 | backend/domain/conversation |
| 内存系统(Memory) | 为代理提供持久化能力 | backend/domain/memory |
每个领域内部都遵循 DDD 的分层结构:
- 领域服务:位于
backend/domain/{domain}/service,实现核心业务逻辑和领域规则 - 应用服务:位于
backend/application/{domain},协调各领域并向 API 层暴露功能
3.2 工作流引擎——从可视化画布到可执行代码
Coze 工作流引擎是整个平台最核心的模块。它回答了三个关键问题:
- 一个可视化的画布定义(JSON),是如何被翻译成机器可以理解和执行的代码的?
- 当一个需要用户输入的节点出现时,工作流是如何优雅地暂停、等待,然后从断点处无缝恢复的?
- 复杂的循环、分支和嵌套逻辑,又是如何在后端被精确调度和执行的?
工作流的生命周期分为两个核心阶段:
┌─────────────────────────────────────────────────────────────────────┐ │ 编译时(Compile Time) │ │ │ │ vo.Canvas(前端画布 JSON) │ │ ↓ CanvasToWorkflowSchema() │ │ compose.WorkflowSchema(纯净逻辑结构) │ │ ↓ 实例化节点、解析依赖 │ │ compose.Workflow(中间状态“装配台”) │ │ ↓ 构建 DAG │ │ compose.Runnable(可执行实例,无状态、可复用) │ ├─────────────────────────────────────────────────────────────────────┤ │ 运行时(Runtime) │ │ │ │ compose.WorkflowRunner(“总指挥”) │ │ ↓ 注入上下文、事件回调、中断恢复状态 │ │ 执行 → 产生输出/事件(节点开始/结束、等待用户输入等) │ └─────────────────────────────────────────────────────────────────────┘图:Coze 工作流的双阶段生命周期。编译时将画布 JSON 转化为无状态可复用的 Runnable,运行时由 WorkflowRunner 注入上下文驱动执行。
核心数据结构:
| 数据结构 | 职责 |
|---|---|
vo.Canvas | 前端画布的原始 JSON 定义,包含节点、边、位置等可视化信息 |
compose.WorkflowSchema | 剥离可视化细节后的纯净逻辑结构 |
compose.NodeSchema | 单个节点的详细定义,InputSources字段精确定义每个输入参数的来源 |
compose.Workflow | 中间状态的“装配台”,负责实例化节点、解析依赖 |
compose.Runnable | 编译的最终产物——真正“可执行”的实例,无状态、可复用 |
compose.WorkflowRunner | 运行时的“总指挥”,为 Runnable 注入本次运行的上下文 |
3.3 API 架构——Hertz 驱动的分层路由
Coze Studio 的 API 基于分层架构,使用Hertz网络框架构建。
API 路由组织:
| API 基础路径 | 描述 | 版本状态 |
|---|---|---|
/api/* | 核心内部 API 端点 | 当前 |
/v1/* | OpenAPI 兼容的 RESTful 端点 | 稳定 |
/v3/* | 最新一代端点 | 最新 |
核心 API 组:
| API 组 | 职责 |
|---|---|
/api/conversation | 管理聊天交互、消息和对话历史 |
/api/knowledge | 处理知识库、文档和数据检索 |
/api/memory | 管理数据库连接和变量存储 |
/api/plugin_api | 集成和管理外部插件和 API |
/api/workflow_api | 创建、执行和管理代理工作流 |
认证机制:
- 基于会话的认证(网页界面用户)
- 个人访问令牌(PAT,用于 API 集成)
- OAuth(用于第三方集成)
四、核心模块源码解析
4.1 服务层——三层服务架构
Coze Studio 采用分层服务架构,将服务组织成三个层级:
| 层级 | 职责 | 依赖 |
|---|---|---|
| 基础服务 | 仅依赖于基础设施组件(数据库、缓存、外部客户端) | 基础设施层 |
| 主要服务 | 基于基础服务构建,提供更复杂功能 | 基础服务 |
| 复杂服务 | 协调主要服务以实现最终用户功能 | 主要服务 |
每个服务使用ServiceComponents结构体来清晰管理依赖,使依赖关系明确,通过依赖注入实现清晰的测试。
领域服务与应用服务的区分:
| 服务类型 | 位置 | 职责 |
|---|---|---|
| 领域服务 | /backend/domain/{domain}/service | 实现核心业务逻辑和领域规则 |
| 应用服务 | /backend/application/{domain} | 协调各领域并向 API 层暴露功能 |
跨领域服务通信通过跨领域服务注册表实现:
- 跨领域契约定义在
/backend/crossdomain/contract - 跨领域实现位于
/backend/crossdomain/impl - 全局注册表在初始化期间注册默认实现
4.2 工作流编译引擎——从 Canvas 到 Runnable
编译阶段的核心任务,是将一份静态的、描述性的WorkflowSchema转变为一个动态的、包含了所有执行逻辑的Runnable对象。
第一步:从 Canvas 到 Schema
// 文件路径:backend/domain/workflow/internal/canvas/adaptor/to_schema.gofuncCanvasToWorkflowSchema(ctx context.Context,s*vo.Canvas)(sc*compose.WorkflowSchema,errerror,){// 1. 裁剪孤立节点,移除任何没有连接的节点connectedNodes,_:=...// 2. 构建节点列表和连接关系// 3. 解析层级关系(用于循环等复合节点)// 4. 返回纯净的 WorkflowSchema}InputSources是NodeSchema中最重要的字段。它精确定义了当前节点的每个输入参数分别来自哪里(上游节点的哪个输出、一个固定的静态值、还是全局变量),是后续依赖解析的基石。
设计模式解读:CanvasToWorkflowSchema是适配器模式(Adapter Pattern)的应用——它将前端画布的“可视化格式”适配为后端引擎的“逻辑格式”,剥离了所有与执行无关的 UI 信息。
4.3 工作流运行时引擎——可中断、可恢复的执行
Coze 工作流引擎最令人着迷的特性之一是可中断、可恢复的执行能力。
当一个需要用户输入的节点(如“问答”节点)出现时,工作流会:
- 优雅地暂停:保存当前执行状态
- 等待用户输入:释放计算资源
- 从断点无缝恢复:用户输入到达后,从保存的状态继续执行
工作流引擎构建于Eino 组合框架之上,支持35 种以上的节点类型。执行引擎基于DAG 的编排运行时,支持流式传输。
设计模式解读:这种机制是状态模式(State Pattern)和备忘录模式(Memento Pattern)的结合——工作流执行状态被保存为“备忘录”,恢复时从备忘录重建状态机。
4.4 插件架构——OpenAPI 3.0 驱动的可扩展系统
Coze Studio 的插件架构提供了一个灵活且可扩展的框架,用于将外部工具和服务集成到代理和工作流程中。
核心组件:
- 插件注册表:插件的集中存储和管理
- 插件执行引擎:处理插件操作的调用
- 插件开发框架:用于创建新插件的工具和 API
- 集成点:插件如何与代理和工作流程连接
每个插件都遵循OpenAPI 3.0 规范,使其与标准 API 文档和工具兼容。
五、核心执行流程与运行时机制
5.1 完整执行流程——从画布点击到结果返回
当用户在 Coze Studio 画布上点击“运行”时,底层发生了什么?
┌─────────────────────────────────────────────────────────────────────┐ │ 1. 用户在前端画布拖拽节点,定义数据流向 │ │ ↓ │ │ 2. 前端将画布状态序列化为 Canvas JSON │ │ ↓ │ │ 3. 前端通过 HTTP API 将 Canvas 提交到后端 │ │ ↓ │ │ 4. API 层(Hertz)接收请求 → 认证 → 路由到工作流处理器 │ │ ↓ │ │ 5. 编译阶段 │ │ ├── CanvasToWorkflowSchema():裁剪孤立节点、构建 Schema │ │ ├── 构建 Workflow(装配台):实例化节点、解析依赖 │ │ └── 编译为 Runnable(可执行实例,无状态) │ │ ↓ │ │ 6. 运行时:创建 WorkflowRunner │ │ ├── 注入本次运行的上下文(输入参数、事件回调) │ │ └── 按拓扑序调度节点执行 │ │ ↓ │ │ 7. 节点执行 │ │ ├── 遇到需要用户输入的节点 → 暂停 → 保存状态 → 等待恢复 │ │ ├── 普通节点 → 执行 → 产生事件(节点开始/结束) │ │ └── 所有节点完成 → 返回结果 │ │ ↓ │ │ 8. 结果通过流式方式返回前端 │ └─────────────────────────────────────────────────────────────────────┘图:Coze Studio 工作流的完整执行流程。从画布拖拽到结果返回,经历前端序列化、API 路由、编译阶段(Canvas → Schema → Workflow → Runnable)和运行时阶段(Runner 执行)的全链路。
关键设计:编译时与运行时分离,使得工作流定义可以提前验证和优化,Runnable 无状态可复用,支持高并发执行。
5.2 请求流转——Handler → Application → Domain
请求在Handler → Application → Domain三层之间清晰流转:
- API 处理程序接收 HTTP 请求,调用应用服务方法
- 应用服务使用多个领域服务实现功能
- 领域服务操作领域实体
CreateConversation方法的实现路径展示了清晰的分层——API 层收到请求后调用应用服务,应用服务协调多个领域服务完成创建,领域服务操作各自的领域实体。
5.3 运行时关键决策的权衡分析
| 决策 | 方案 | 收益 | 代价 |
|---|---|---|---|
| 后端语言 | Golang vs Python | 高并发、低内存、静态类型、性能优异 | AI/ML 生态不如 Python 丰富 |
| 架构风格 | 微服务 vs 单体 | 灵活扩展、模块替换 | 部署运维复杂度高 |
| 工作流引擎 | 自研(基于 Eino)vs 使用开源引擎 | 轻量、低延迟、支持流式 | 需要自行维护引擎演进 |
| 执行模型 | 编译时 + 运行时分离 | 提前验证、可复用 Runnable | 首次执行有编译延迟 |
| 中断恢复 | 状态持久化 + 断点续传 | 长运行任务可恢复 | 存储和序列化开销 |
六、工程化实践
6.1 快速接入
环境要求:
- 2 Core、4 GB 最低配置
- Docker 和 Docker Compose
部署步骤:
# 1. 克隆代码gitclone https://github.com/coze-dev/coze-studio.git# 2. 配置模型# 从模板目录复制模型配置文件# 3. 启动服务docker-composeup-d6.2 自定义插件开发
Coze Studio 的插件遵循 OpenAPI 3.0 规范。开发一个新插件的核心步骤:
- 定义 OpenAPI 3.0 规范的 API 文档
- 通过插件注册表注册插件
- 插件执行引擎处理调用
6.3 可观测性与调试
Coze Studio 提供了多层次的可观测性能力:
- API 中间件:认证、日志、追踪
- 事件系统:工作流执行过程中的节点开始/结束事件
- OpenAPI 兼容端点:标准化的 API 访问
6.4 常见工程陷阱与解决方案
陷阱 1:工作流循环导致无限执行
现象:工作流在循环节点中无限执行,永不停止。
原因:循环节点缺少正确的退出条件配置。
解决方案:Coze 工作流引擎通过Hierarchy(层级关系)来表达循环等复合节点的父子结构。在循环节点中配置最大迭代次数或条件退出表达式。
陷阱 2:编译阶段失败导致工作流无法运行
现象:画布保存成功,但运行时提示“工作流编译失败”。
原因:画布中存在孤立节点或循环依赖。
解决方案:CanvasToWorkflowSchema函数会自动裁剪孤立节点,但循环依赖需要通过 DAG 环检测在编译阶段捕获。
七、总结与展望
7.1 关键版本里程碑
| 版本/事件 | 时间 | 核心变化 |
|---|---|---|
| Coze 平台发布 | 2023 年 | 字节跳动推出 AI Bot 开发平台 |
| Coze Studio 开源 | 2025 年 7 月 25 日 | 字节跳动将核心项目开源 |
| v0.2.5 | 2026 年 6 月 | 开源版本持续迭代 |
7.2 横向对比:Coze Studio vs Dify vs Flowise
7.2.1 可比性说明
Coze Studio、Dify、Flowise 均定位于LLM 应用开发平台或工具,都提供可视化工作流编排能力。三者在功能定位上有重叠,但各自的技术栈、设计哲学和部署方式不同。
7.2.2 横向对比表
| 对比维度 | Coze Studio | Dify | Flowise |
|---|---|---|---|
| 核心定位 | 字节跳动开源 AI Agent 开发平台 | 开源 LLM 应用开发平台 | 开源低代码 LLM 工具 |
| 后端语言 | Golang | Python(Flask) | TypeScript(Node.js) |
| 架构风格 | 微服务 + DDD | 模块化单体 | 单体 |
| 工作流引擎 | 自研 DAG + Eino | 自研 DAG + Worker Pool | 基础 DAG |
| 前端技术 | React + TypeScript + Semi Design | Next.js + React | React |
| 部署方式 | Docker Compose | Docker Compose(7+ 容器) | Docker |
| 开源协议 | 待确认 | Apache 2.0 | MIT |
| 商业版本 | Coze 平台(SaaS) | Dify Cloud | 无 |
7.2.3 差异来源分析
| 框架/平台 | 核心判断 | 架构推论 |
|---|---|---|
| Coze Studio | AI 应用平台需要高性能、高并发的底层支撑 | 用 Golang + 微服务 + DDD 构建企业级平台 |
| Dify | LLM 应用开发需要完整平台——不只是代码库 | 用 Python + 模块化单体构建完整产品 |
| Flowise | 非开发者需要低代码构建 AI 应用 | 用 Node.js + 可视化拖拽降低门槛 |
7.2.4 结论性建议
| 场景 | 推荐选择 | 核心理由 |
|---|---|---|
| 需要高性能、高并发的工作流引擎 | Coze Studio | Golang + 微服务 + Eino 框架 |
| 需要 Python 技术栈的完整平台 | Dify | Python 生态最丰富 |
| 需要轻量级、快速原型验证 | Flowise | Node.js 生态,部署简单 |
7.3 设计哲学提炼
Coze Studio 的设计哲学可以提炼为三个关键词:
DDD 是骨架:围绕业务领域组织代码,将复杂系统拆解为可独立演进的领域模块
工作流是心脏:编译时 + 运行时双阶段引擎,让可视化画布变成可执行、可恢复的系统
微服务是血脉:基于 CloudWeGo 技术栈的微服务架构,提供高性能和高扩展性
7.4 核心架构亮点
| 亮点 | 说明 |
|---|---|
| DDD 分层架构 | API → 应用 → 领域 → 基础设施,四层清晰分离 |
| 编译时 + 运行时双阶段引擎 | Canvas → Schema → Workflow → Runnable → Runner |
| 可中断可恢复执行 | 工作流可在用户交互节点暂停,从断点无缝恢复 |
| Eino 框架集成 | 字节开源 LLM 应用框架,支持 35+ 节点类型 |
| Hertz HTTP 框架 | 字节开源高性能 HTTP 框架 |
| OpenAPI 3.0 插件标准 | 任何符合 OpenAPI 规范的外部服务都可接入 |
7.5 对开发者的启示与适用场景
Coze Studio 的本质不是 Coze 平台的简单开源复刻,而是一套以“领域驱动设计(DDD)+ 整洁架构”为骨架、以“编译时-运行时双阶段工作流引擎”为心脏、以“可视化画布即源代码”为编程范式的生产级 AI Agent 开发平台——让复杂的 AI 工作流从“拖拽连线”变成“可编译、可中断、可恢复、可流式传输的确定性系统”。
适用场景:
- 需要可视化编排复杂 AI 工作流的团队
- 需要工作流可中断、可恢复的长运行任务场景
- 采用Go 技术栈、追求高并发高性能的企业
- 需要Agent 全生命周期管理(开发 → 部署)的系统
- 希望基于 OpenAPI 3.0 标准接入外部工具的集成场景
不适用场景:
- 简单的单次 LLM 调用(直接用模型 SDK 即可)
- Python 技术栈为主、对 Go 不熟悉的团队
- 对部署运维复杂度敏感的小型团队
- 需要深度定制工作流引擎的场景
本文数据来源:Coze Studio 官方 GitHub 仓库、开源 Coze 源码分析系列文章、CSDN 技术博客、53AI 技术文章、掘金技术文章(截至 2026 年 8 月)
如您所在的企业正面临数字化难题,或有 AI 落地、系统集成相关需求,欢迎进一步沟通。我们可提供针对贵企业具体场景的定制化方案和现场调研服务。