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项目框架

新建文件夹,明天继续

相关推荐
小蒜学长6 小时前
springboot多功能智能手机阅读APP设计与实现(代码+数据库+LW)
java·spring boot·后端·智能手机
追逐时光者7 小时前
精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!
后端·.net
你的人类朋友8 小时前
【Docker】说说卷挂载与绑定挂载
后端·docker·容器
间彧9 小时前
在高并发场景下,如何平衡QPS和TPS的监控资源消耗?
后端
间彧9 小时前
QPS和TPS的区别,在实际项目中,如何准确测量和监控QPS和TPS?
后端
间彧9 小时前
消息队列(RocketMQ、RabbitMQ、Kafka、ActiveMQ)对比与选型指南
后端·消息队列
brzhang10 小时前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang10 小时前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
Roye_ack11 小时前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis
AAA修煤气灶刘哥12 小时前
面试必问的CAS和ConcurrentHashMap,你搞懂了吗?
后端·面试