coze-studio学习笔记(一)

193 阅读3分钟

背景

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

版本

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

源仓库地址:https://github.com/coze-dev/coze-studio.git

学习工具

Cursor、GoLand

学习目标

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

Day1

git fork到自己的仓库

git clone

cursor分析

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

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

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

🎯 什么是领域设计(DDD)

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

📁 项目结构分析

后端DDD架构

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

前端Monorepo架构

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

新建文件夹,明天继续