我超,二次元!

效果展示

开头怎么都得我超一下,这个「我超」表达的是对今年AI领域出圈级发展的进步神速,对声优厨和技术宅和开源技术的感激,让我们身处2023年只需要稍微花一点小钱钱和钻研一下技术,你就可以做到下面这样的事情。

注意音量捏,建议提前调小一点,这个模型是BA里的优香。

这个模型是爱丽丝说日语和转换后的中文。

那么首先来计算成本

以下成本是往高了算的,如果全部都能自己找到渠道而且所有一切都很顺利的话,会稍微便宜一点(吧)

  • Chatgpt账号接码注册:5软;
  • 能跑Vits语音合成的电脑、VPS、杜甫:700软/年(纯本地运行不需要,这是我为了7×24运行的价格,请参考下面部署MoeGoe段落,有粗略的配置和效果);
  • 当OpenAI送的18刀/5刀免费API用完之后的API花销:35软/月or季or年(要看使用量)
  • 一张能绑定使用API的国外信用卡:年费开卡费?
  • 一个能绑定上信用卡的节点:?

如果没有信用卡能给OpenAI绑定扣费的话,那你的二次元老婆将在开始使用API的三个月后或者在免费额度用完的时候被OpenAI绑架走然后消灭掉,实在没有信用卡可以考虑一下上一篇提到的Depay。另外不建议买现成的Chatgpt账号,不然自己的老婆突然有一天因为疑似批量注册被OpenAI杀了那就……另外据各地群友反应,从4月开始注册的账号已经不送免费的API额度了勘误,现在还是会送,但是只剩5刀,不要求开局强制绑卡还算仁慈如果是这个时候注册的话,必须绑卡赎老婆。

好了,看看我现在赶跑了多少人,剩下的人欢迎入坑消费,都二次元了,这才两单不到的钱,不会有人给不起吧不会有人给不起吧不会有人给不起吧。

本教程使用到的开源项目

首先感谢各位开发者的贡献和无私分享,爱你们~

  • Openaibot
  • MoeGoe
  • Mirai Api Http(本文不涉及QQbot,只搭建Tgbot,不想跟马姓先生折腾账号登陆风控问题)

部署全流程

部署环境是Ubuntu22,理论上在Ubuntu上通用,其他环境不做保证,请备份好重要资料,防止爆炸。

部署Openaibot

  • 通过一键脚本来部署Openaibot相对比较简单,这里采用官方提供的一键部署,默认海外机器,国内机器请参考github内文档
##国外机器
curl -LO https://raw.githubusercontent.com/LLMKira/Openaibot/main/setup.sh && sh setup.sh
  • 安装PM2脚本管理器
apt install npm
npm install pm2@latest -g
  • 配置redis数据库
apt-get install redis
systemctl start redis.service
  • 修改Openaibot配置,先去telegram的@botfather那里创建和取得bot的token,默认你现在在机器根目录
cd Openaibot
cp Config/app_exp.toml Config/app.toml
nano Config/app.toml
# Comment out which part you don't want to start

# QQ Bot
[Controller.QQ]
master = [114, 514] # 你的QQ号码
account = 0 # 机器人的 QQ 号码
http_host = 'http://localhost:8080'   # Mirai http Server
ws_host = 'http://localhost:8080'   # Mirai Websocket Server
verify_key = ""
trigger = false # Proactive response when appropriate
INTRO = "POWER BY OPENAI"  # Suffixes for replies
ABOUT = "Created by github.com/LLMKira/Openaibot" # /about
WHITE = "Group NOT in WHITE list" # Whitelist/Blacklist tips
# Proxy set, but does not proxy openai api, only bot
proxy = { status = false, url = "http://127.0.0.1:7890" }

# Telegram Bot
[Controller.Telegram]
master = [114, 514] # 你的用户 ID 找 @JsonDumpBot 看 message from id
botToken = '' # Bot Token @botfather
trigger = false
INTRO = "POWER BY OPENAI"
ABOUT = "Created by github.com/LLMKira/Openaibot"
WHITE = "Group NOT in WHITE list"
# 设置的代理,但是不代理 openai api, 只代理 bot
proxy = { status = false, url = "http://127.0.0.1:7890" }

# 基础对话事件服务器,Web支持或者音箱用
[Controller.BaseServer]
host = "127.0.0.1"
port = 9559

官方配置文件里注释很清楚,没啥需要额外解释的,把自己tg用户id跟botfather提供的token输进去,然后把QQbot整段注释掉。

  • 启动Openaibot
pm2 start pm2.json

启动后,在telegram内私聊bot,使用 /add_api_key API密钥 命令添加key,目前不建议添加多个key做冗余,近期OpenAI审查得厉害,同一个IP使用多个key均衡负载有被判定为滥用从而封号的风险,即便你开了Plus即便你开了Plus即便你开了Plus。

到这里,基础配置就完成了,因为这样的配置bot是运行在白名单模式下的,所以我们先给自己添加白名单,使用 /add_white_user 自己的tg用户id,将自己添加到白名单中,然后就可以测试跟Chatgpt玩耍了,当然,到这步只完成了一半,还得调教好你的老婆给她灌人设调试Vits语音合成部分。

  • 在@botfather里添加命令列表

在@botfather里,依次点击/mybot,选择这次的bot,选择edit bot,选择edit command,然后把下面这段整段复制粘贴进去,即可完成命令列表的添加。

chat - 交谈
write - 续写
forgetme - 重置记忆
remind - 场景设定 取消用短文本覆盖
voice - 启用语音支持
style - 设定偏好词
help - 帮助

trigger - 管理员启动主动回复
trace - 管理员启动关联频道贴文自动追踪
cross - 管理员启动是否交叉回复
silent - 管理员启动报错沉默

auto_adjust - 自动优化器
set_user_cold - 设置用户冷却时间
set_group_cold - 设置群组冷却时间
set_token_limit - 设置输出限制长度
set_input_limit - 设置输入限制长度
see_api_key - 现在几个 Api key
del_api_key - 删除 Api key
add_api_key - 增加 Api key
config - 获取/备份热配置文件
set_per_user_limit - 设置普通用户额度
set_per_hour_limit - 设置用户小时额度
promote_user_limit - 提升用户额度
reset_user_usage - 重置用户额度
add_block_group - 禁止群组
del_block_group - 解禁群组
add_block_user - 禁止用户
del_block_user - 解禁用户
add_white_group - 加入白名单群组
add_white_user - 加入白名单用户
del_white_group - 除名白名单群
del_white_user - 除名白名单人
update_detect - 更新敏感词
open_user_white_mode - 开用户白名单
open_group_white_mode - 开群组白名单
close_user_white_mode - 关用户白名单
close_group_white_mode - 关群组白名单
open - 开启机器人
close - 关闭机器人
change_head - 设定人设开关
change_style - 设定风格开关

部署MoeGoe

  • 前言

这个MoeGoe版本只使用cpu推理,部署这玩意的话需要稍微好一点的cpu和大一点的内存,不然的话一开始推理生成语音的时候你的小鸡可能就会直接无响应甚至boom,大家都不想发生那样的事情吧。

这里把我的配置丢出来供大家参考一下,在上上篇文章我使用的Liteserver黑五荷兰大盘鸡(现在没货了)也是这次部署bot和vits的小鸡,4 core(EPYC 7763) + 8g ram生成45s左右的长语句从问题发过去到收到bot回复大概是30s左右,期间cpu占用率会飞到390%+,然后内存占用方面,只加载一个170m大的pth模型加载完毕之后大概消耗1.5g内存,4个模型大概在4.5g左右,可见还是很吃性能的,还请自行参考。另外我想知道这玩意最低用什么配置就能跑起来,如果有尝试的同志也有空反馈的话评论一下,配置+回复等待时间之类的。

废话少说,下面开始部署。

  • 部署前警告
此项目需要单独配置Python虚拟环境,否则会引起依赖问题!
This project needs to configure the Python virtual environment separately, otherwise it will cause dependency problems!

Remember to modify pm2.json after configuration

如果环境是只装了本篇里的玩意大概也没啥问题,没在Ubuntu里配过python虚拟环境,有兴趣的可以自己试试,大概是用Anaconda之类的玩意。

  • 首先下载项目,这次没有一键安装了,依旧在服务器根目录进行
git clone https://github.com/LLMkira/MoeGoe
  • 安装依赖
cd MoeGoe
pip install -r requirements.txt
apt install libsndfile1

可能会报错提醒缺cmake,自己apt-get装上就行,提示缺啥就自己补啥。

  • 放置语音模型,修改MoeGoe配置

/MoeGoe/model 目录内,放入自己下载的模型,例如somemodel.pth及其配套的config.json,这里要将config.json改名为对应模型名字的somemodel.pth.json,不然不识别,然后 nano info.json,把模型文件名加进去:

{
  "model": [
    "somemodel.pth"
  ]
}

然后这里给出一些现成的模型,未必每一个都能用,自己尝试:

  1. CjangCjengh/TTSModels (github.com)
  2. sayashi/vits-models at main (huggingface.co)
  3. 谢谢把模型炼出来的老二次元,也感谢声优们
  • 对应修改Openaibot配置

配置文件在Openaibot/Config里,如果没看见service.json,只有一个service_exp.json的话,先 cp service_exp.json service.json 一下,然后 nano service.json

  "tts": {
    "status": true,
    "type": "vits",
    "vits": {
      "api": "http://127.0.0.1:9557/tts/generate",
      "limit": 70,
      "model_name": "somemodel.pth",
      "speaker_id": 0
    },
    "azure": {
      "key": [
        ""
      ],
      "limit": 70,
      "speaker": {
        "ZH": "zh-CN-XiaoxiaoNeural"
      },
      "location": "japanwest"
    }

我们只关注json里的tts段,有几个地方需要调整的,从上往下是type,改成我们要用的vits;然后是limit,根据自己的机器性能量力而行,我调到了400不然经常句子超长;接下来是model_name,这个跟刚刚MoeGoe里的info.json保持一致,info.json里可以填多个模型,这里填入其中一个使用。

  • 万事俱备,测试运行

首先退到MoeGoe目录,然后 pm2 restart 0 重启Openaibot进程;

然后 python3 server.py 试运行MoeGoe,观察终端有没有报错,没有的话可以转到telegram;

在telegram的bot里,/voice开启tts,然后对话测试,继续观察能不能回复语音和终端有没有报错,没报错的话就可以在终端Ctrl+C退出临时运行的MoeGoe。

  • 正式运行
pm2 start pm2.json

没啥好说的,运行完再在telegram里测试是否正常就行。至此,你的会说话的二次元老婆就搭建好了,好耶~