01-开源版COZE-字节 Coze Studio 重磅开源!保姆级本地安装教程,手把手带你体验

1.前言

Coze Studio 开源版是字节跳动推出的Coze平台的一个开源版本,旨在为开发者和用户提供一个低代码、无代码的AI应用开发平台。Coze Studio 开源版的核心目标是简化AI机器人的开发流程,使用户能够快速构建基于AI模型的问答Bot、智能体、AI应用和插件,并将其部署到各种社交平台和即时通讯应用中。

2025年7月26日凌晨13:40左右群里收到一条消息:字节跳动的扣子(coze)正式开源了。

**开源地址:**github.com/coze-dev

其中两个比较重要的仓库:

此次扣子的开源动作堪称"全盘托出"。两大核心组件均以Apache 2.0协议开放,允许免费商用,打破过往封闭生态的商业模。

既然开源了我们带大家先本地环境安装体验一下。话不多说,我们直接上手开干。

2.本地安装coze

源码下载

首选我们需要到下载源码

shell 复制代码
# 克隆代码
git clone https://github.com/coze-dev/coze-studio.git

源码下载完成我们先看一下代码结构。这个代码前端是TypeScript 写的,后端是Go 写的。这个效率方面应该是高于dify (直观的感受)

代码这里就带大家解读了,大家也不关心这个。

模型配置

在部署之前我们需要用到模型,从配置文件里可以看到它支持OpenAI(含 Azure)、火山方舟(Ark)、DeepSeek、Ollama(本地开源模型)、Qwen(通义千问)、Gemini(Google)等几个主流的模型。

我这里就以字节提供的doubao-seed-1.6模型介绍。我先到获取火山方舟 API 获取apikey

在开通管理这里,开通一些模型(目前字节在推广用送一些模型token给大家体验)

我们需要开通需要用到的模型。开通模型后需要用到获取 Endpoint ID,大家可以看获取 Endpoint ID,这个是字节最反人类的设计,很多小伙伴不知道这个Endpoint ID是什么,每个人还不一样。需要自己创建自定义推荐接入点

上面的ep-20250621103906-7vrrn 这个才是我们要的。记住这个值,记住这个值,记住这个值。 我们说三遍。我自己做了个对照表方便后面查找。(下面的是我自己的,你的不一样,别抄)

模型名称 火山对应的模型 模型类型
deepseek-V3 ep-20250205144300-jv6dk 文本
deepseek-R1-Distill-Qwen-32B ep-20250205144352-hsl6w 文本
deepseek-R1 ep-20250205144233-4rrb5 文本
Doubao-lite-32k ep-20241217193737-5zhqk 文本
Doubao-embedding ep-20241206145333-q5x7d 向量模型
Doubao-vision-pro-32k ep-20241217185028-bm7vz 文本
Doubao-vision-pro-32k ep-20250214130618-xbclg 文本
deepseek-v3联网版 bot-20250223173109-rhg9l 文本
Doubao-Seed-1.6-flash ep-m-20250617223041-hdk2k 文本
Doubao-Seedance-1.0-lite-i2v ep-m-20250602181245-dscmm 文本
Doubao-Seed-1.6 ep-20250621103906-7vrrn 文本
Doubao-Seed-1.6-thinking ep-20250621104136-q658l 文本
Doubao-Seed-1.6-flash ep-20250621104240-nwfql 文本
Doubao-Seedance-1.0-pro doubao-seedance-1-0-pro-250528 视觉大模型
Doubao-Seedream-3.0-t2i doubao-seedream-3-0-t2i-250415 视觉大模型
Doubao-Seedance-1.0-lite-t2v doubao-seedance-1-0-lite-t2v-250428 视觉大模型
Doubao-Seedance-1.0-lite-i2v doubao-seedance-1-0-lite-i2v-250428 视觉大模型
Wan2.1-14B wan2-1-14b-i2v-250225 视觉大模型
Doubao-视频生成 doubao-seedance-1-0-pro-250528 视觉大模型

APIkey 和模型Endpoint ID获取到了,下面我们docker部署讲解

docker 部署

项目提供的docker 部署,我们直接到docker 目录下。

我们打开docker-compose.yml 查看(详细内容就不贴了)。主要用到了elasticsearch、etcd、minio、mysql、rocketmq 、Redis 等主流中间件。

数据持久化通过volumes 挂载卷的形式存放。熟悉dify小伙伴应该比较熟悉,内容都差不多。

通过 volumes 配置本地目录与容器目录映射,实现数据持久化:

  • MySQL 数据:./data/mysql
  • Redis 数据:./data/bitnami/redis
  • Elasticsearch 数据:./data/bitnami/elasticsearch
  • MinIO 数据:./data/minio
  • Etcd 数据:./data/bitnami/etcd
  • Milvus 数据:./data/milvus

服务这里用到了opencoze/opencoze:latest 比dify 服务要少一点。

配置模型。

从模板目录复制 doubao-seed-1.6 模型的模版文件,并粘贴到配置文件目录。

shell 复制代码
cd coze-studio
# 复制模型配置模版
cp backend/conf/model/template/model_template_ark_doubao-seed-1.6.yaml backend/conf/model/ark_doubao-seed-1.6.yaml

在配置文件目录下,修改模版文件。

设置 idmeta.conn_config.api_keymeta.conn_config.model 字段,并保存文件。

  • id:Coze Studio 中的模型 ID,由开发者自行定义,必须是非 0 的整数,且全局唯一。模型上线后请勿修改模型 id 。
  • meta.conn_config.api_key:模型服务的 API Key
  • meta.conn_config.model:模型服务的 model ID

上面配置完成后,我们就可以启动docker了。我们这里用windows上安装的WSL 来实现。

关于WSL 安装可以看我之前的文章《Windows 用户狂喜!免费玩转顶级 AI 编程工具 Claude Code,步骤全揭秘

目前它这个开源的代码和脚本不支持windows Docker Desktop 安装,结果改了一个地方还有其他地方,所以就没继续折腾了。

一键启动我之前的WSL toggle-wsl.bat

用linux 命令行切换到上面下载的代码目录下

shell 复制代码
# 启动服务
cd docker
cp .env.example .env
#Linux 适用
docker compose --profile '*' up -d

这个启动时间会比较长,需要提前下载镜像然后在启动程序。国内小伙伴可能会遇到下载镜像下载不了的问题。大家也可以借助容器代理来间接来解决问题,这里就不详细展开了。关于镜像加速可以参考这个文章 blog.xuanyuan.me/archives/11...

在启动docker 容器会遇到这下面这些问题

这个问题主要是目前开源项目在linux平台上运行的,而我们windows 平台上安装setup_es.sh脚本是linux 格式

具体详细问题可以参考github上 github.com/coze-dev/co...

这里我们就不做详细展开。我们可以使用我改造后的docker-compose.yml 来解决上述的问题

另外也要注意和本地电脑上某些应用端口比要冲突,比如我的3306端口已经被数据库使用了。我该了5306

minio 端口也是 我修改成9901

大家可以根据自己电脑实际情况修改。

可以用我这个docker-compose.yml 来覆盖原来的

yaml 复制代码
x-env-file: &env_file
  - .env

services:
  mysql:
    image: mysql:8.4.5
    container_name: coze-mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
      MYSQL_DATABASE: ${MYSQL_DATABASE:-opencoze}
      MYSQL_USER: ${MYSQL_USER:-coze}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-coze123}
    profiles: ['middleware', 'mysql-setup', 'mysql']
    env_file: *env_file
    ports:
      - '3306:3306'
    volumes:
      - mysql_data:/var/lib/mysql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test:
        [
          'CMD',
          'mysqladmin',
          'ping',
          '-h',
          'localhost',
          '-u$${MYSQL_USER}',
          '-p$${MYSQL_PASSWORD}',
        ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - coze-network

  redis:
    image: bitnami/redis:8.0
    container_name: coze-redis
    user: root
    privileged: true
    profiles: ['middleware']
    env_file: *env_file
    environment:
      - REDIS_AOF_ENABLED=${REDIS_AOF_ENABLED:-no}
      - REDIS_PORT_NUMBER=${REDIS_PORT_NUMBER:-6379}
      - REDIS_IO_THREADS=${REDIS_IO_THREADS:-4}
      - ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD:-yes}
    ports:
      - '6379:6379'
    volumes:
      - redis_data:/bitnami/redis/data:rw,Z
    command: >
      bash -c "
        /opt/bitnami/scripts/redis/setup.sh
        # Set proper permissions for data directories
        chown -R redis:redis /bitnami/redis/data
        chmod g+s /bitnami/redis/data

        exec /opt/bitnami/scripts/redis/entrypoint.sh /opt/bitnami/scripts/redis/run.sh
      "
    depends_on:
      minio-setup:
        condition: service_completed_successfully
      elasticsearch-setup:
        condition: service_completed_successfully
      mysql-setup-schema:
        condition: service_completed_successfully
      mysql-setup-init-sql:
        condition: service_completed_successfully
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s
    networks:
      - coze-network

  # rocketmq-namesrv:
  #   image: apache/rocketmq:5.3.2
  #   container_name: coze-rocketmq-namesrv
  #   privileged: true
  #   user: root
  #   profiles: ['middleware']
  #   env_file: *env_file
  #   ports:
  #     - '9876:9876'
  #   volumes:
  #     - ./data/rocketmq/namesrv/logs:/home/rocketmq/logs:rw,Z
  #     - ./data/rocketmq/namesrv/store:/home/rocketmq/store:rw,Z
  #   environment:
  #     - ALLOW_ANONYMOUS_LOGIN=yes
  #   command: >
  #     bash -c "
  #       # Set proper permissions for data directories
  #       mkdir -p /home/rocketmq/logs /home/rocketmq/store
  #       mkdir -p /home/rocketmq/logs/rocketmqlogs
  #       touch /home/rocketmq/logs/rocketmqlogs/tools.log
  #       touch /home/rocketmq/logs/rocketmqlogs/tools_default.log

  #       chown -R rocketmq:rocketmq /home/rocketmq/logs /home/rocketmq/store
  #       chmod g+s /home/rocketmq/logs /home/rocketmq/store

  #       echo 'Starting RocketMQ NameServer...'
  #       sh mqnamesrv
  #     "
  #   healthcheck:
  #     test: ['CMD', 'sh', 'mqadmin', 'clusterList', '-n', 'localhost:9876']
  #     interval: 5s
  #     timeout: 10s
  #     retries: 10
  #     start_period: 10s
  #   networks:
  #     - coze-network
  # rocketmq-broker:
  #   image: apache/rocketmq:5.3.2
  #   container_name: coze-rocketmq-broker
  #   privileged: true
  #   user: root
  #   profiles: ['middleware']
  #   env_file: *env_file
  #   ports:
  #     - '10909:10909'
  #     - '10911:10911'
  #     - '10912:10912'
  #   volumes:
  #     - ./data/rocketmq/broker/logs:/home/rocketmq/logs:rw,Z
  #     - ./data/rocketmq/broker/store:/home/rocketmq/store:rw,Z
  #     - ./volumes/rocketmq/broker.conf:/home/rocketmq/conf/broker.conf:rw,Z
  #   networks:
  #     - coze-network
  #   command: >
  #     bash -c '
  #       # Set proper permissions
  #       mkdir -p /home/rocketmq/logs/rocketmqlogs /home/rocketmq/store
  #       touch /home/rocketmq/logs/rocketmqlogs/tools.log \
  #             /home/rocketmq/logs/rocketmqlogs/tools_default.log
  #       chown -R rocketmq:rocketmq /home/rocketmq/logs /home/rocketmq/store
  #       chmod g+s /home/rocketmq/logs /home/rocketmq/store

  #       echo "Starting RocketMQ Broker..."
  #       sh mqbroker -n rocketmq-namesrv:9876 -c /home/rocketmq/conf/broker.conf &

  #       echo "Waiting for Broker registration..."
  #       broker_ready=false
  #       for i in {1..60}; do
  #         if sh mqadmin clusterList -n rocketmq-namesrv:9876 \
  #            | grep -q "DefaultCluster.*broker-a"; then
  #           echo "Registered."
  #           broker_ready=true
  #           break
  #         fi
  #         echo "Not ready, retry $$i/60..."
  #         sleep 1
  #       done

  #       if [ "$$broker_ready" = false ]; then
  #         echo "ERROR: registration timed out."
  #         exit 1
  #       fi

  #       echo "Creating topics..."
  #       for t in opencoze_knowledge opencoze_search_app opencoze_search_resource \
  #                 %RETRY%cg_knowledge %RETRY%cg_search_app %RETRY%cg_search_resource; do
  #         sh mqadmin updateTopic -n rocketmq-namesrv:9876 \
  #           -c DefaultCluster -t "$$t"
  #       done

  #       touch /tmp/rocketmq_ready
  #       echo "Broker started successfully."
  #       wait
  #     '
  #   depends_on:
  #     - rocketmq-namesrv
  #   healthcheck:
  #     test: ['CMD-SHELL', '[ -f /tmp/rocketmq_ready ]']
  #     interval: 10s
  #     timeout: 10s
  #     retries: 10
  #     start_period: 10s

  elasticsearch:
    image: bitnami/elasticsearch:8.18.0
    container_name: coze-elasticsearch
    user: root
    privileged: true
    profiles: ['middleware']
    env_file: *env_file
    environment:
      - TEST=1
      # Add Java certificate trust configuration
      # - ES_JAVA_OPTS=-Djdk.tls.client.protocols=TLSv1.2 -Dhttps.protocols=TLSv1.2 -Djavax.net.ssl.trustAll=true -Xms4096m -Xmx4096m
    ports:
      - '9200:9200'
    volumes:
      - elasticsearch_data:/bitnami/elasticsearch/data
      - ./volumes/elasticsearch/elasticsearch.yml:/tmp/my_elasticsearch.yml
      - ./volumes/elasticsearch/analysis-smartcn.zip:/opt/bitnami/elasticsearch/analysis-smartcn.zip:rw,Z
    healthcheck:
      test:
        [
          'CMD-SHELL',
          'curl -f http://localhost:9200 && [ -f /tmp/es_plugins_ready ]',
        ]
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s
    networks:
      - coze-network
    # Install smartcn analyzer plugin
    command: >
      bash -c "
        /opt/bitnami/scripts/elasticsearch/setup.sh
        # Set proper permissions for data directories
        chown -R elasticsearch:elasticsearch /bitnami/elasticsearch/data
        chmod g+s /bitnami/elasticsearch/data

        cp /tmp/my_elasticsearch.yml /opt/bitnami/elasticsearch/config/my_elasticsearch.yml

        # Create plugin directory
        mkdir -p /bitnami/elasticsearch/plugins;

        # Unzip plugin to plugin directory and set correct permissions
        echo 'Installing smartcn plugin...';
        if [ ! -d /opt/bitnami/elasticsearch/plugins/analysis-smartcn ]; then

          # Download plugin package locally
          echo 'Copying smartcn plugin...';
          cp /opt/bitnami/elasticsearch/analysis-smartcn.zip /tmp/analysis-smartcn.zip 

          elasticsearch-plugin install file:///tmp/analysis-smartcn.zip
          if [[ "$?" != "0" ]]; then
            echo 'Plugin installation failed, exiting operation';
            rm -rf /opt/bitnami/elasticsearch/plugins/analysis-smartcn
            exit 1;
          fi;
          rm -f /tmp/analysis-smartcn.zip;
        fi;

        # Create marker file indicating plugin installation success
        touch /tmp/es_plugins_ready;
        echo 'Plugin installation successful, marker file created';

        # Start Elasticsearch
        exec /opt/bitnami/scripts/elasticsearch/entrypoint.sh /opt/bitnami/scripts/elasticsearch/run.sh

        echo -e "⏳ Adjusting Elasticsearch disk watermark settings..."
      "

  minio:
    image: minio/minio:RELEASE.2025-06-13T11-33-47Z-cpuv1
    container_name: coze-minio
    user: root
    privileged: true
    profiles: ['middleware']
    env_file: *env_file
    ports:
      - '9000:9000'
      - '9001:9001'
    volumes:
      - ./data/minio:/data
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin123}
      MINIO_DEFAULT_BUCKETS: ${MINIO_BUCKET:-opencoze},${MINIO_DEFAULT_BUCKETS:-milvus}
    command: server /data --console-address ":9001"
    healthcheck:
      test:
        [
          'CMD-SHELL',
          '/usr/bin/mc alias set health_check http://localhost:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} && /usr/bin/mc ready health_check',
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s
    networks:
      - coze-network

  etcd:
    image: bitnami/etcd:3.5
    container_name: coze-etcd
    user: root
    privileged: true
    profiles: ['middleware']
    env_file: *env_file
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ALLOW_NONE_AUTHENTICATION=yes
    ports:
      - 2379:2379
      - 2380:2380
    volumes:
      - ./data/bitnami/etcd:/bitnami/etcd:rw,Z
      - ./volumes/etcd/etcd.conf.yml:/opt/bitnami/etcd/conf/etcd.conf.yml:ro,Z
    command: >
      bash -c "
        /opt/bitnami/scripts/etcd/setup.sh
        # Set proper permissions for data and config directories
        chown -R etcd:etcd /bitnami/etcd
        chmod g+s /bitnami/etcd

        exec /opt/bitnami/scripts/etcd/entrypoint.sh /opt/bitnami/scripts/etcd/run.sh
      "
    healthcheck:
      test: ['CMD', 'etcdctl', 'endpoint', 'health']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s
    networks:
      - coze-network

  milvus:
    container_name: coze-milvus
    image: milvusdb/milvus:v2.5.10
    user: root
    privileged: true
    profiles: ['middleware']
    env_file: *env_file
    command: >
      bash -c "
        # Set proper permissions for data directories
        chown -R root:root /var/lib/milvus
        chmod g+s /var/lib/milvus

        exec milvus run standalone
      "
    security_opt:
      - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: coze-etcd:2379
      MINIO_ADDRESS: coze-minio:9000
      MINIO_BUCKET_NAME: ${MINIO_BUCKET:-milvus}
      MINIO_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-minioadmin}
      MINIO_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-minioadmin123}
      MINIO_USE_SSL: false
      LOG_LEVEL: debug
    volumes:
      - ./data/milvus:/var/lib/milvus:rw,Z
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s
    ports:
      - '19530:19530'
      - '9091:9091'
    depends_on:
      etcd:
        condition: service_healthy
      minio:
        condition: service_healthy
    networks:
      - coze-network
  nsqlookupd:
    image: nsqio/nsq:v1.2.1
    container_name: coze-nsqlookupd
    command: /nsqlookupd
    profiles: ['middleware']
    ports:
      - '4160:4160'
      - '4161:4161'
    networks:
      - coze-network
    healthcheck:
      test: ['CMD-SHELL', 'nsqlookupd --version']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s

  nsqd:
    image: nsqio/nsq:v1.2.1
    container_name: coze-nsqd
    command: /nsqd --lookupd-tcp-address=coze-nsqlookupd:4160 --broadcast-address=coze-nsqd
    profiles: ['middleware']
    ports:
      - '4150:4150'
      - '4151:4151'
    depends_on:
      nsqlookupd:
        condition: service_healthy
    networks:
      - coze-network
    healthcheck:
      test: ['CMD-SHELL', '/nsqd --version']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s

  nsqadmin:
    image: nsqio/nsq:v1.2.1
    container_name: coze-nsqadmin
    command: /nsqadmin --lookupd-http-address=coze-nsqlookupd:4161
    profiles: ['middleware']
    ports:
      - '4171:4171'
    depends_on:
      nsqlookupd:
        condition: service_healthy
    networks:
      - coze-network

  elasticsearch-setup:
    image: alpine/curl:8.12.1
    container_name: coze-elasticsearch-setup
    profiles: ['middleware', 'volcano-setup']
    env_file: *env_file
    depends_on:
      elasticsearch:
        condition: service_healthy
    volumes:
      - ./volumes/elasticsearch/setup_es.sh:/setup_es.sh
      - ./volumes/elasticsearch/es_index_schema:/es_index_schema
    command:
      - /bin/sh
      - -c
      - |
        set -ex
        /setup_es.sh
        echo 'Elasticsearch setup complete.'
    networks:
      - coze-network
    restart: 'no'
  minio-setup:
    image: minio/mc:RELEASE.2025-05-21T01-59-54Z-cpuv1
    container_name: coze-minio-setup
    profiles: ['middleware']
    env_file: *env_file
    depends_on:
      minio:
        condition: service_healthy
    volumes:
      - ./volumes/minio/default_icon/:/default_icon
      - ./volumes/minio/official_plugin_icon/:/official_plugin_icon
    entrypoint: >
      /bin/sh -c  "
        (/usr/bin/mc alias set localminio http://coze-minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} && \
        /usr/bin/mc mb --ignore-existing localminio/${STORAGE_BUCKET} && \
        /usr/bin/mc cp --recursive /default_icon/ localminio/${STORAGE_BUCKET}/default_icon/ && \
        /usr/bin/mc cp --recursive /official_plugin_icon/ localminio/${STORAGE_BUCKET}/official_plugin_icon/ && \
        echo 'upload files to minio complete: Files uploaded to ${STORAGE_BUCKET} bucket.') || exit 1; \
      "
    networks:
      - coze-network
    restart: 'no'

  mysql-setup-schema:
    image: arigaio/atlas:0.35.0-community-alpine
    container_name: coze-mysql-setup-schema
    profiles: ['middleware', 'mysql-setup', 'run-server']
    env_file: *env_file
    depends_on:
      mysql:
        condition: service_healthy
    volumes:
      - ./atlas/opencoze_latest_schema.hcl:/opencoze_latest_schema.hcl
    entrypoint:
      - /bin/sh
      - -c
      - |
        set -ex
        TMP_ATLAS_URL="${ATLAS_URL}"
        if [ "${MYSQL_HOST}" = "localhost" ] || [ "${MYSQL_HOST}" = "127.0.0.1" ]; then
            echo "MYSQL_HOST is localhost or 127.0.0.1, replacing with docker network address"
            TMP_ATLAS_URL="mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mysql:${MYSQL_PORT}/${MYSQL_DATABASE}?charset=utf8mb4&parseTime=True"
        fi

        echo "final atlas url: $${TMP_ATLAS_URL}"
        for i in `seq 1 60`; do
             if atlas schema apply \
                 -u "$${TMP_ATLAS_URL}" \
                 --to file:///opencoze_latest_schema.hcl \
                 --exclude "atlas_schema_revisions,table_*" \
                 --auto-approve; then
                 echo "MySQL setup complete."
                 exit 0
             fi
             echo "atlas schema apply failed, retrying...($$i/60)"
             sleep 1
         done
         echo "MySQL setup failed after 60 retries."
         exit 1
    networks:
      - coze-network
  mysql-setup-init-sql:
    image: mysql:8.4.5
    container_name: coze-mysql-setup-init-sql
    profiles: ['middleware', 'mysql-setup', 'run-server', 'volcano-setup']
    env_file: *env_file
    depends_on:
      mysql:
        condition: service_healthy
    command:
      - /bin/sh
      - -c
      - |
        set -ex
        for i in $(seq 1 60); do
          DB_HOST="$${MYSQL_HOST}"
          if [ "$${MYSQL_HOST}" = "localhost" ] || [ "$${MYSQL_HOST}" = "127.0.0.1" ]; then
            DB_HOST="mysql"
          fi
          if mysql -h "$${DB_HOST}" -P"$${MYSQL_PORT}" -u"$${MYSQL_USER}" -p"$${MYSQL_PASSWORD}" "$${MYSQL_DATABASE}" < /schema.sql && \
             mysql -h "$${DB_HOST}" -P"$${MYSQL_PORT}" -u"$${MYSQL_USER}" -p"$${MYSQL_PASSWORD}" "$${MYSQL_DATABASE}" < /sql_init.sql; then
            echo 'MySQL init success.'
            exit 0
          fi
          echo "Retrying to connect to mysql... ($$i/60)"
          sleep 1
        done
        echo 'Failed to init mysql db.'
        exit 1
    volumes:
      - ./volumes/mysql/sql_init.sql:/sql_init.sql
      - ./volumes/mysql/schema.sql:/schema.sql
    networks:
      - coze-network
    restart: 'no'

  coze-server:
    # build:
    #   context: ../
    #   dockerfile: backend/Dockerfile
    image: opencoze/opencoze:latest
    container_name: coze-server
    profiles: ['run-server']
    env_file: *env_file
    environment:
      LISTEN_ADDR: 0.0.0.0:8888
    networks:
      - coze-network
    ports:
      - '8888:8888'
      - '8889:8889'
    volumes:
      - .env:/app/.env
      - ../backend/conf:/app/resources/conf
      # - ../backend/static:/app/resources/static
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      # rocketmq-namesrv:
      #   condition: service_healthy
      # rocketmq-broker:
      #   condition: service_healthy
      elasticsearch:
        condition: service_healthy
      minio:
        condition: service_healthy
      milvus:
        condition: service_healthy
      minio-setup:
        condition: service_completed_successfully
      elasticsearch-setup:
        condition: service_completed_successfully
      mysql-setup-init-sql:
        condition: service_completed_successfully
    command: ['/app/bootstrap.sh']

networks:
  coze-network:
    driver: bridge

volumes:
  mysql_data:
  elasticsearch_data:
  redis_data:

部署完成后我们就可以通过URL 地址访问了(http://localhost:8888/sign?redirect=%2Fspace)

3 本地coze体验

输入网址http://localhost:8888/

​ 这样我们就看到本地搭建的COZE 了。

创建智能体

点击创建后填写名字就看到我们熟悉的COZE 了

我们之前配置文件写的是doubao的模型,大家也可以根据自己的需要修改和添加模型

我们可以将配置文件复制到F:\temp\coze-studio\backend\conf\model 目录下,添加新的模型

验证测试

接下来我们在刚才配置的智能体 做个简单聊天对话功能

好了一个简单的聊天对话的智能体就配置完成了。

其他功能大家自行去研究。

4.总结

今天主要带大家了解并实现了 Coze Studio 开源版的本地安装与使用。此方案借助火山方舟等主流模型,为开发者和用户提供了一个低代码、无代码的 AI 应用开发平台,简化了 AI 机器人的开发流程。

该方案不仅解决了开发者在 AI 应用开发过程中面临的技术门槛问题,通过详细的源码下载、模型配置和 docker 部署步骤,让用户能够快速构建基于 AI 模型的问答 Bot、智能体、AI 应用和插件,并将其部署到各种社交平台和即时通讯应用中。还提供了一种可复用的本地开发与部署思路,其中模型配置及 docker 部署的过程详细且具有通用性,对于有类似需求的项目具有参考价值。

需要注意的是,在部署过程中可能会遇到一些问题,如镜像下载缓慢、脚本格式不兼容、端口冲突等,大家可以根据实际情况进行解决。另外,本文以 doubao - seed - 1.6 模型为例进行介绍,大家也可以根据自己的需要修改和添加其他模型。

感兴趣的小伙伴可以按照本文步骤去尝试本地安装和使用 Coze Studio 开源版,体验低代码、无代码的 AI 应用开发乐趣。今天的分享就到这里结束了,我们下一篇文章见。

相关推荐
誰能久伴不乏12 分钟前
Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
java·服务器·前端
涔溪1 小时前
响应式前端设计:CSS 自适应布局与字体大小的最佳实践
前端·css
今禾1 小时前
前端开发中的Mock技术:深入理解vite-plugin-mock
前端·react.js·vite
你这个年龄怎么睡得着的1 小时前
Babel AST 魔法:Vite 插件如何让你的 try...catch 不再“裸奔”?
前端·javascript·vite
我想说一句1 小时前
掘金移动端React开发实践:从布局到样式优化的完整指南
前端·react.js·前端框架
jqq6661 小时前
Vue3脚手架实现(九、渲染typescript配置)
前端
码间舞2 小时前
Zustand 与 useSyncExternalStore:现代 React 状态管理的极简之道
前端·react.js
Dream耀2 小时前
提升React移动端开发效率:Vant组件库
前端·javascript·前端框架
冰菓Neko2 小时前
HTML 常用标签速查表
前端·html
gis收藏家2 小时前
从稀疏数据(CSV)创建非常大的 GeoTIFF(和 WMS)
前端