SakuraChat 部署教程

项目地址:https://github.com/LovelyCatEx/SakuraChat

部署 SakuraChat

前置条件

请确保部署设备至少有 2 GB 的可用运行内存与 4 GB 的可用储存空间。

宝塔部署

首先打开宝塔面板,在左侧找到 Docker,然后点击容器编排,再点添加容器编排:

将下面的 docker-compose.yml.env 的内容复制到对应的输入框中:

docker-compose.yml

name: SakuraChat

services:
  mysql:
    container_name: sakurachat-mysql
    image: lovelycatv/sakurachat-mysql:v1.0.0
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=123456 --execute \"SHOW DATABASES;\""
      interval: 3s
      timeout: 1s
      retries: 5
    restart: unless-stopped
    ports:
      - ${MYSQL_PORT}:3306
    networks:
      - sakurachat-network
  phpmyadmin:
    image: phpmyadmin
    container_name: sakurachat-phpmyadmin
    depends_on:
      - mysql
    ports:
      - 8088:80
    environment:
      - PMA_ARBITRARY=1
    networks:
      - sakurachat-network
  backend:
    container_name: sakurachat-server
    image: lovelycatv/sakurachat-server:v1.0.0
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - mysql
    ports:
      - "${BACKEND_PORT}:8080"
    environment:
      - MYSQL_HOST=${MYSQL_HOST}
      - MYSQL_PORT=${MYSQL_PORT}
      - MYSQL_USERNAME=${MYSQL_USERNAME}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_TIMEZONE=${MYSQL_TIMEZONE}
    restart: unless-stopped
    networks:
      - sakurachat-network
  frontend:
    container_name: sakurachat-web
    image: lovelycatv/sakurachat-web:v1.0.0
    build:
      context: ./web-dashboard
      dockerfile: Dockerfile
    ports:
      - "${FRONTEND_PORT}:80"
    restart: unless-stopped
    depends_on:
      - backend
    networks:
      - sakurachat-network
  napcat:
    image: mlikiowa/napcat-docker:latest
    container_name: sakurachat-napcat
    environment:
      - NAPCAT_UID=1
      - NAPCAT_GID=1
    ports:
      - "3000:3000"
      - "3001:3001"
      - "6099:6099"
    restart: always
    network_mode: bridge

networks:
  sakurachat-network:
    driver: bridge

.env

MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USERNAME=root
MYSQL_PASSWORD=sakurachat
MYSQL_DATABASE=sakurachat
MYSQL_TIMEZONE=Asia/Shanghai

FRONTEND_PORT=5174
BACKEND_PORT=8080

然后点击确定,等待一段时间直到容器全部正常启动:

当容器启动成功之后你会看到:

其他具体步骤请看下面的快速开始。

命令行部署

先准备一个安装了 docker 环境的设备,复制下面的内容保存到 docker-compose.yml:

name: SakuraChat

services:
  mysql:
    container_name: sakurachat-mysql
    image: lovelycatv/sakurachat-mysql:v1.0.0
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=123456 --execute \"SHOW DATABASES;\""
      interval: 3s
      timeout: 1s
      retries: 5
    restart: unless-stopped
    ports:
      - ${MYSQL_PORT}:3306
    networks:
      - sakurachat-network
  phpmyadmin:
    image: phpmyadmin
    container_name: sakurachat-phpmyadmin
    depends_on:
      - mysql
    ports:
      - 8088:80
    environment:
      - PMA_ARBITRARY=1
    networks:
      - sakurachat-network
  backend:
    container_name: sakurachat-server
    image: lovelycatv/sakurachat-server:v1.0.0
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - mysql
    ports:
      - "${BACKEND_PORT}:8080"
    environment:
      - MYSQL_HOST=${MYSQL_HOST}
      - MYSQL_PORT=${MYSQL_PORT}
      - MYSQL_USERNAME=${MYSQL_USERNAME}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_TIMEZONE=${MYSQL_TIMEZONE}
    restart: unless-stopped
    networks:
      - sakurachat-network
  frontend:
    container_name: sakurachat-web
    image: lovelycatv/sakurachat-web:v1.0.0
    build:
      context: ./web-dashboard
      dockerfile: Dockerfile
    ports:
      - "${FRONTEND_PORT}:80"
    restart: unless-stopped
    depends_on:
      - backend
    networks:
      - sakurachat-network
  napcat:
    image: mlikiowa/napcat-docker:latest
    container_name: sakurachat-napcat
    environment:
      - NAPCAT_UID=1
      - NAPCAT_GID=1
    ports:
      - "3000:3000"
      - "3001:3001"
      - "6099:6099"
    restart: always
    network_mode: bridge

networks:
  sakurachat-network:
    driver: bridge

然后在同级目录下新建一个 .env 文件:

MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USERNAME=root
MYSQL_PASSWORD=sakurachat
MYSQL_DATABASE=sakurachat
MYSQL_TIMEZONE=Asia/Shanghai

FRONTEND_PORT=5174
BACKEND_PORT=8080

运行命令:

docker compose up -d

其他具体步骤请看下面的快速开始。

快速开始

初始化

打开 http://localhost:5174/initializer 完成初始化,这里的 ip 地址记得换成实际的 ip,如果是在本地部署保持 localhost 即可。

在表单中填入你想设置的管理员账号和密码,邮箱请务必使用一个有效的电子邮箱地址。

到这里就初始化完成啦,点击完成初始化即可进入登录页面,登录后进入仪表盘页面:

配置 NapCat

接下来需要将 NapCat 接入,首先要进入 NapCat 的容器查看管理页面的地址。

如果你使用的是宝塔,在左侧找到 Docker,在上方点击容器编排,然后在容器列表中找到 napcap,点击查看日志。

如果你使用的是命令行,先执行 docker ps -a 查看容器列表:

然后执行 docker logs sakurachat-napcat 查看日志,往上翻找到下面的字样:

然后打开图中红框内的地址(以你实际的为准)进入 NapCat 的管理页面:

如果是服务器请不要忘记在安全组放行 6099 端口。

点击扫码登录,然后将手机 QQ 的账号切换到你想用作机器人的那个账号,扫描二维码登录。

进去之后在左侧找到网络配置:

点击新建 -> Websocket客户端:

然后按下面的内容填写:

这里的 url 是:ws://host.docker.internal:8080/ws/v1/napcat

如果你在环境变量中修改了 BACKEND_PORT=8080 记得把 8080 改成实际的后端端口。

然后点击保存即可。

你可以执行 docker logs sakurachat-server 检查一下 NapCat 有没有成功连接到 SakuraChat 的后端,如果出现下面的字样说明就成功了。

基本配置

现在你已经成功启动了 SakuraChat 和 NapCat 并完成了连接,接下来需要设置模型提供商、聊天模型、凭证、添加智能体、绑定第三方账号。

添加模型提供商

模型供应商指的是提供模型的第三方平台,例如 DeepSeek、火山方舟、OpenAI 等,进入 SakuraChat 的管理页面,点击左侧的模型供应商,点击右上角的添加:

像这样填好之后点击完成。

添加凭证

接下来需要添加一个凭证,凭证就是 apikey,在模型列表中,你可以为同一个模型指定不同的 apikey,也就是凭证。

目前来说,大多数第三方模型平台都采用 Bearer Auth 作为认证,因此进入凭证管理,点击右上角的新增凭证:

上面我添加的是 deepseek 的模型提供商,因此这里的凭证数据直接填写 deepseek 的 apikey 即可,不需要任何前缀或后缀。

添加聊天模型

接下来就要添加语言模型了,点击右上角的新增模型:

其中的计费倍率的规则如下:

假设 SakuraChat 平台的规则是:1 元 = 100 万积分

而 DeepSeek 官方的模型定价是:

  • 输入:2 元 / M Tokens
  • 输出:3 元 / M Tokens
  • 缓存输入:0.2 元 / M Tokens

因此根据上述规则,每输入每消耗 100 M Tokens 对应要扣除 200 M 积分。

所以该模型每消耗 1 个 Token 就要扣除 2 积分。

根据计费倍率 10000 : 1,这里的输入 Token 费率就应该填写 10000 * 2 = 20000。

添加智能体

同样地来到智能体管理页面,点击右上角的新增智能体:

这里的分隔符用于分割模型输出的消息,这里的 \n 代表换行符。

也就是说,每遇到一个分隔符,就会把分隔符之前的消息发送出去,这样就能模拟发送多条连续的消息了。

你可以将下面的提示词嵌入到你自定义的提示词中,本质上是要让模型按照你预设的分隔符输出文本。

# 回复要求

## 基本规则

你是在通过一款即时聊天 APP 和对方交流,因此你的一句话不宜过长,最好是将完整的一段话拆分成多个子句回答,子句之间必须用换行符分割开,请见回复示例。

+ 禁止使用任何 emoji 或符号表情。
+ 禁止发送重复消息。
+ 单次回复控制在日常对话的长度,**越短越好**。同时请用轻松、口语化的方式回答,就像和朋友聊天一样,不要加任何列表符号、分点符号或特殊格式,直接说人话,读起来要像一条自然的消息。
+ 禁止使用括号旁白,或大量使用`......`等影响阅读体验的方式。
+ 子句禁止以不合适的标点符号结尾,例如逗号。
+ **子句不需要标点符号结尾,即使是问句也不需要出现问号,除非你有非常强烈的表达意图,例如:"你好呀~"需要用'~'来表达温柔的语气,但例如:"今天过的怎么样"这句话就不需要问号,例如:"我有没有说过别这样?"来表达情绪激动时的语句**

## 子句

子句是一段完整表达的一部分,可以以标点符号作为分隔符,在合适的位置切分成一个子句。

例如完整的句子:你好呀~你今天过的怎么样?有没有想我?对了,这周六晚上有空吗,我请你吃饭吧,没别的想法。

拆分成子句是:
+ 你好呀~
+ 你今天过的怎么样?
+ 有没有想我?
+ 对了
+ 这周六晚上有空吗
+ 我请你吃饭吧
+ 没别的想法

## 回复示例

你好呀~
你今天过的怎么样?
有没有想我?
我们好久没见了吧
要不
我们出来一起走走吧

绑定第三方账号

接下来你可以给这个 QQ 发送一条消息,理论上不会有任何反应,因为你还没有将智能体绑定到这个第三方账号。

再次回到智能体管理页面,点击操作中的小人:

然后点击选择账号绑定:

这样就把这个智能体绑定到对应的第三方账号了,当这个账号收到消息时,会交给绑定的智能体来处理。

接下来,再次向这个账号发送一条消息:

得到一条消息,里面包含了一个六位数字的绑定码。

然后来到第三方账号绑定,输入绑定码:

这样给这个智能体发送消息的第三方账号就成功绑定到 SakuraChat 平台了。

接下来,如果你没有积分,可以进入用户管理页面,点击操作中的编辑,给自己添加一些积分。

接下来你就可以开始聊天啦~

未经允许禁止转载本站内容,经允许转载后请严格遵守CC-BY-NC-ND知识共享协议4.0,代码部分则采用GPL v3.0协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇