coze-studio学习笔记(一)

背景

主包工作两年了,最近准备换工作了,打开boss直聘一看,现在要求会 AI 开发的岗位越来越多了,打开 GitHub 一看最近最火的开源 AI 项目就是coze-studio,所以想记录一下。之前的技术栈是Spring全家桶 CRUD 工程师+Vue,coze 的技术栈是 go+react,正好来学习一下新东西。

版本

2025.08.02 19:00 拉取coze-studio repo 最新 main 分支

text 复制代码
源仓库地址:https://github.com/coze-dev/coze-studio.git

学习工具

Cursor、GoLand

学习目标

从零复刻一个一模一样的 coze 页面以及功能。

Day1

git fork到自己的仓库

git clone

cursor分析

大致了解项目结构以及项目的启动方式、DDD架构设计

graph TD A["用户界面层
(User Interface)"] --> B["应用层
(Application Layer)"] B --> C["领域层
(Domain Layer)"] C --> D["基础设施层
(Infrastructure Layer)"] subgraph "Coze Studio 实际结构" E["frontend/
React + TypeScript"] --> F["backend/api/
HTTP接口"] F --> G["backend/application/
应用服务"] G --> H["backend/domain/
领域模型"] H --> I["backend/infra/
数据库、外部服务"] end A -.-> E B -.-> G C -.-> H D -.-> I

之前没有接触过 DDD,做个笔记:

🎯 什么是领域设计(DDD)

DDD是由Eric Evans提出的软件设计方法,核心思想是:将复杂的业务问题分解为多个相对独立的领域,每个领域专注于解决特定的业务问题。

📁 项目结构分析

后端DDD架构

text 复制代码
backend/
├── domain/          # 领域层 - 核心业务逻辑
│   ├── agent/       # AI智能体领域
│   ├── workflow/    # 工作流领域
│   ├── knowledge/   # 知识库领域
│   ├── conversation/# 对话领域
│   └── ...
├── application/     # 应用层 - 业务用例
├── api/            # 接口层 - HTTP路由和中间件
├── infra/          # 基础设施层 - 数据库、外部服务
└── pkg/            # 公共包

前端Monorepo架构

text 复制代码
frontend/
├── apps/           # 应用层
│   └── coze-studio/# 主应用
├── packages/       # 核心包
│   ├── agent-ide/  # AI智能体IDE
│   ├── workflow/   # 工作流引擎
│   ├── arch/       # 架构基础设施
│   └── ...
└── config/         # 配置文件

通过 docker compose 启动项目

1. 数据库服务

MySQL 8.4.5
  • 容器名: coze-mysql
  • 功能: 主数据库,存储应用核心数据
  • 端口: 3306
  • 配置: UTF8MB4字符集,包含健康检查和初始化脚本
Redis 8.0 (Bitnami)
  • 容器名: coze-redis
  • 功能: 缓存和会话存储
  • 端口: 6379
  • 配置: 支持AOF持久化,多线程IO

2. 搜索和向量数据库

Elasticsearch 8.18.0 (Bitnami)
  • 容器名: coze-elasticsearch
  • 功能: 全文搜索引擎
  • 端口: 9200
  • 特性: 安装了中文分词插件 analysis-smartcn
Milvus v2.5.10
  • 容器名: coze-milvus
  • 功能: 向量数据库,用于AI相关的向量搜索
  • 端口: 19530, 9091
  • 依赖: etcd + MinIO

3. 对象存储

MinIO (RELEASE.2025-06-13T11-33-47Z-cpuv1)
  • 容器名: coze-minio
  • 功能: 对象存储服务,兼容S3 API
  • 端口: 9000 (API), 9001 (Console)
  • 用途: 存储文件、图片等静态资源

4. 服务发现和配置

etcd 3.5 (Bitnami)
  • 容器名: coze-etcd
  • 功能: 分布式键值存储,用于服务发现和配置管理
  • 端口: 2379, 2380
  • 用途: Milvus的元数据存储

5. 消息队列

NSQ v1.2.1
  • 组件:
  • nsqlookupd (服务发现)
  • nsqd (消息代理)
  • nsqadmin (管理界面)
  • 功能: 实时分布式消息平台
  • 端口: 4160, 4161, 4150, 4151, 4171

6. 应用服务

Coze Server
  • 镜像: opencoze/opencoze:latest
  • 容器名: coze-server
  • 端口: 8888, 8889
  • 基础镜像: Alpine Linux 3.22.0 + Go 1.24

7. 运行时依赖

Python 环境
  • 版本: Python 3 (Alpine包)
  • 用途: 文档解析和代码执行沙箱
  • 包含库:
  • pillow==11.2.1 (图像处理)
  • pdfplumber==0.11.7 (PDF解析)
  • python-docx==1.2.0 (Word文档解析)
  • numpy==2.3.1 (数值计算)
  • urllib3==1.26.16 (HTTP客户端)
  • requests-async (异步HTTP请求)
Deno
  • 用途: JavaScript/TypeScript运行时

表结构设计(Cursor 生成)

mermaid真好用,一下子整个项目的表关系就一目了然了。

erDiagram %% 用户和空间相关 user { bigint id PK varchar name varchar unique_name varchar email UK varchar password varchar description varchar icon_uri bool user_verified varchar locale varchar session_key bigint created_at bigint updated_at bigint deleted_at } space { bigint id PK bigint owner_id FK varchar name varchar description varchar icon_uri bigint creator_id FK bigint created_at bigint updated_at bigint deleted_at } space_user { bigint id PK bigint space_id FK bigint user_id FK int role_type bigint created_at bigint updated_at } api_key { bigint id PK varchar api_key varchar name tinyint status bigint user_id FK bigint expired_at bigint created_at bigint updated_at bigint last_used_at } %% 应用相关 app_draft { bigint id PK bigint space_id FK bigint owner_id FK varchar icon_uri varchar name text description bigint created_at bigint updated_at datetime deleted_at } app_release_record { bigint id PK bigint app_id FK bigint space_id FK bigint owner_id FK varchar icon_uri varchar name text description json connector_ids json extra_info varchar version text version_desc tinyint publish_status bigint publish_at bigint created_at bigint updated_at } %% Agent相关 single_agent_draft { bigint id PK bigint agent_id bigint creator_id FK bigint space_id FK varchar name text description varchar icon_uri bigint created_at bigint updated_at datetime deleted_at bigint variables_meta_id FK json model_info json onboarding_info json prompt json plugin json knowledge json workflow json suggest_reply json jump_config json background_image_info_list json database_config json shortcut_command } single_agent_version { bigint id PK bigint agent_id bigint creator_id FK bigint space_id FK varchar name text description varchar icon_uri bigint created_at bigint updated_at datetime deleted_at bigint variables_meta_id FK json model_info json onboarding_info json prompt json plugin json knowledge json workflow json suggest_reply json jump_config bigint connector_id varchar version json background_image_info_list json database_config json shortcut_command } single_agent_publish { bigint id PK bigint agent_id FK varchar publish_id json connector_ids varchar version text publish_info bigint publish_time bigint created_at bigint updated_at bigint creator_id FK tinyint status json extra } %% 工作流相关 workflow_meta { bigint id PK varchar name varchar description varchar icon_uri tinyint status tinyint content_type tinyint mode bigint created_at bigint updated_at datetime deleted_at bigint creator_id FK tinyint tag bigint author_id FK bigint space_id FK bigint updater_id FK bigint source_id FK bigint app_id FK varchar latest_version bigint latest_version_ts } workflow_draft { bigint id PK mediumtext canvas mediumtext input_params mediumtext output_params bool test_run_success bool modified bigint updated_at datetime deleted_at varchar commit_id } workflow_version { bigint id PK bigint workflow_id FK varchar version varchar version_description mediumtext canvas mediumtext input_params mediumtext output_params bigint creator_id FK bigint created_at datetime deleted_at varchar commit_id } workflow_execution { bigint id PK bigint workflow_id FK varchar version bigint space_id FK tinyint mode bigint operator_id FK bigint connector_id varchar connector_uid bigint created_at varchar log_id tinyint status bigint duration mediumtext input mediumtext output varchar error_code mediumtext fail_reason bigint input_tokens bigint output_tokens bigint updated_at bigint root_execution_id varchar parent_node_id bigint app_id FK mediumint node_count bigint resume_event_id bigint agent_id FK tinyint sync_pattern varchar commit_id } node_execution { bigint id PK bigint execute_id FK varchar node_id varchar node_name varchar node_type bigint created_at tinyint status bigint duration mediumtext input mediumtext output mediumtext raw_output mediumtext error_info varchar error_level bigint input_tokens bigint output_tokens bigint updated_at bigint composite_node_index mediumtext composite_node_items varchar parent_node_id bigint sub_execute_id mediumtext extra } %% 插件相关 plugin_draft { bigint id PK bigint space_id FK bigint developer_id FK bigint app_id FK varchar icon_uri varchar server_url tinyint plugin_type bigint created_at bigint updated_at datetime deleted_at json manifest json openapi_doc } plugin { bigint id PK bigint space_id FK bigint developer_id FK bigint app_id FK varchar icon_uri varchar server_url tinyint plugin_type bigint created_at bigint updated_at varchar version text version_desc json manifest json openapi_doc } tool_draft { bigint id PK bigint plugin_id FK bigint created_at bigint updated_at varchar sub_url varchar method json operation tinyint debug_status tinyint activated_status } tool { bigint id PK bigint plugin_id FK bigint created_at bigint updated_at varchar version varchar sub_url varchar method json operation tinyint activated_status } %% 知识库相关 knowledge { bigint id PK varchar name bigint app_id FK bigint creator_id FK bigint space_id FK bigint created_at bigint updated_at datetime deleted_at tinyint status text description varchar icon_uri tinyint format_type } knowledge_document { bigint id PK bigint knowledge_id FK varchar name varchar file_extension int document_type text uri bigint size bigint slice_count bigint char_count bigint creator_id FK bigint space_id FK bigint created_at bigint updated_at datetime deleted_at int source_type int status text fail_reason json parse_rule json table_info } knowledge_document_slice { bigint id PK bigint knowledge_id FK bigint document_id FK text content decimal sequence bigint created_at bigint updated_at datetime deleted_at bigint creator_id FK bigint space_id FK int status text fail_reason bigint hit } %% 对话相关 conversation { bigint id PK bigint connector_id bigint agent_id FK tinyint scene bigint section_id bigint creator_id FK text ext tinyint status bigint created_at bigint updated_at } message { bigint id PK bigint run_id FK bigint conversation_id FK varchar user_id bigint agent_id FK varchar role varchar content_type mediumtext content varchar message_type text display_content text ext bigint section_id int broken_position tinyint status mediumtext model_content text meta_info text reasoning_content bigint created_at bigint updated_at } run_record { bigint id PK bigint conversation_id FK bigint section_id bigint agent_id FK varchar user_id tinyint source varchar status bigint creator_id FK bigint created_at bigint updated_at bigint failed_at text last_error bigint completed_at text chat_request text ext json usage } %% 模型相关 model_meta { bigint id PK varchar model_name varchar protocol varchar icon_uri json capability json conn_config int status varchar description bigint created_at bigint updated_at bigint deleted_at varchar icon_url } model_entity { bigint id PK bigint meta_id FK varchar name text description json default_params bigint scenario int status bigint created_at bigint updated_at bigint deleted_at } %% 关系定义 user ||--o{ space : "owns" user ||--o{ space_user : "belongs_to" space ||--o{ space_user : "has_members" user ||--o{ api_key : "has" space ||--o{ app_draft : "contains" app_draft ||--o{ app_release_record : "releases" space ||--o{ single_agent_draft : "contains" single_agent_draft ||--o{ single_agent_version : "versions" single_agent_draft ||--o{ single_agent_publish : "publishes" space ||--o{ workflow_meta : "contains" workflow_meta ||--|| workflow_draft : "has_draft" workflow_meta ||--o{ workflow_version : "has_versions" workflow_meta ||--o{ workflow_execution : "executes" workflow_execution ||--o{ node_execution : "contains_nodes" space ||--o{ plugin_draft : "contains" plugin_draft ||--|| plugin : "publishes_to" plugin ||--o{ tool : "has_tools" plugin_draft ||--o{ tool_draft : "has_draft_tools" space ||--o{ knowledge : "contains" knowledge ||--o{ knowledge_document : "has_documents" knowledge_document ||--o{ knowledge_document_slice : "has_slices" conversation ||--o{ message : "contains" conversation ||--o{ run_record : "has_runs" run_record ||--o{ message : "generates" model_meta ||--o{ model_entity : "defines" user ||--o{ conversation : "creates" user ||--o{ knowledge : "creates" user ||--o{ workflow_meta : "creates"

搭建GO项目框架

新建文件夹,明天继续

相关推荐
hqxstudying7 分钟前
SpringBoot相关注解
java·spring boot·后端
Livingbody2 小时前
ubuntu25.04完美安装typora免费版教程
后端
阿华的代码王国2 小时前
【Android】RecyclerView实现新闻列表布局(1)适配器使用相关问题
android·xml·java·前端·后端
码农BookSea2 小时前
自研 DSL 神器:万字拆解 ANTLR 4 核心原理与高级应用
java·后端
lovebugs2 小时前
Java并发编程:深入理解volatile与指令重排
java·后端·面试
海奥华22 小时前
操作系统到 Go 运行时的内存管理演进与实现
开发语言·后端·golang
codervibe2 小时前
Spring Boot 服务层泛型抽象与代码复用实战
后端
_風箏2 小时前
Shell【脚本 04】传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明
后端
斜月2 小时前
Python Asyncio以及Futures并发编程实践
后端·python