Skip to content

An AI game live streaming virtual character based on LLM, CV, TTS, and ASR technologies, with multi-sensory capabilities of seeing, hearing, and speaking.

Notifications You must be signed in to change notification settings

AkagawaTsurunaki/ZerolanLiveRobot

Repository files navigation

Zerolan Live Robot

Static Badge Static Badge Static Badge Static Badge

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge

Docs Languages: 简体中文 | English | 日本語

你或许已经听说过著名的 Neurosama,或者是来自中国的木几萌。 你是否也想要拥有一个自己的 AI 虚拟形象陪你直播聊天、打游戏? 开源的 Zerolan Live Robot 正致力于实现您的梦想!而这仅仅需要一张消费级显卡!

Zerolan Live Robot 是一款多功能的直播机器人(AI VTuber),它可以自动在 Bilibili 直播间中读取弹幕,观察电脑屏幕的指定窗口,理解其画面内容,操纵 Minecraft 中的游戏角色,做出带情感的语音聊天回应。

本项目持续开发中,当前的版本为 1.0,您可以关注开发者的Bilibili账号赤川鶴鳴_Channel,正在根据此项目调教 AI 猫娘,不定时直播展示最新进展。

希望每个人都能拥有自己的 AI 猫娘喵!

目前的基本功能

  1. 实时读取 Bilibili 直播间弹幕。
  2. 识别并理解指定窗口的内容,例如 Minecraft。
  3. 基于大语言模型 ChatGLM 3 的游戏实况聊天对话。
  4. 基于 GPT-SoVITS 的语音合成,且带有语气切换功能。
  5. 基于 mineflayer 的 Minecraft 智能体陪玩。

模型组合选择

运行本项目,您需要有支持 CUDA 的显卡。下表为您展示了一些可能的组合,请根据您的显卡的显存大小,决定使用什么模型组合。以下数据已经过开发者的直播测试(测试时还有直播姬、Minecraft Server 等程序在后台运行),仅供参考。

组合 Large Language Model Text to Speech Image-Text Captioning OBS Minecraft 显存占用
1 ChatGLM3 (4-bit Quantized) GPT-SoVTIS blip-image-captioning-large 应用高质量编码器 1.20.4 无光影 默认材质包 10.9 GB
2 ChatGLM3 (4-bit Quantized) GPT-SoVTIS blip-image-captioning-large 应用高质量编码器 - 9.3 GB
3 ChatGLM3 (4-bit Quantized) GPT-SoVTIS blip-image-captioning-large - - 8.8 GB
4 ChatGLM3 (4-bit Quantized) GPT-SoVTIS - - - 7.7 GB
5 ChatGLM3 (4-bit Quantized) - - - - 5.4 GB

注:这里的 ChatGLM3 是指参数量为 6B 的模型。

开发者测试时的电脑配置如下,仅供参考。

设别名称 设备型号 补充说明
Windows Windows 11 -
CPU i9-13900HX 24 内核
GPU NVIDIA GeForce RTX 4080 Laptop 12 GB 显存
内存 - 32 GB 内存

此外您还需注意:

  1. 多个程序同时抢占 GPU 资源可能导致服务响应中断。例如,OBS 在进行解码时对 GPU 的占用显著提高,从而导致 LLM 或 TTS 服务被操作系统挂起。
  2. 项目运行时可能会持续消耗显卡资源,请注意散热,避免引发火灾风险。
  3. 上述数据在不同系统和硬件上可能存在差异,请注意留足冗余量。
  4. 本项目尚不支持多卡运行,如果有需要您可以自行更改代码。

准备工作

我们假定您已经正确地安装了 Anaconda 和 Python。

克隆仓库

确保您已经正确安装了 Git,然后执行以下指令,它将克隆本仓库到您的本机。

git clone https://github.com/AkagawaTsurunaki/ZerolanLiveRobot.git

安装依赖

首先,让我们使用 Anaconda 创建一个虚拟环境。

conda create --name zerolanliverobot python=3.10 -y # 创建虚拟环境

这将命令 Anaconda 创建一个名为zerolanliverobot的虚拟环境,且指定了 Python 版本为 3.10。

cd YourDirectory/ZerolanLiveRobot # 切换目录至本仓库的目录
conda activate zerolanliverobot # 激活刚刚创建的虚拟环境
pip install -r requirements.txt # 安装依赖

在这里注意的是,本项目中的依赖 torch~=2.1.1+cu118 可能因为您的 CUDA 设备具有不同的驱动版本而在安装时报错,如果报错请切换至对应的版本。

要运行 Minecraft AI Agent,您还需要安装 Node.js 20.9.0,并执行以下指令。

cd YourDirectory/ZerolanLiveRobot # 切换目录至本仓库的目录
npm install # 安装必要依赖

这会下载必要的依赖。

下载必要模型

模型名称 下载与安装方式 用途
ChatGLM3 git clone https://huggingface.co/THUDM/chatglm3-6b 大语言模型
GPT-SoVITS 请仔细阅读这里 文字转语音
blip-image-captioning-large git clone https://huggingface.co/Salesforce/blip-image-captioning-large 图片转文字

您需要自行下载模型,并且放置在一个合适的位置。在某些国家或地区,访问 Hugging Face 可能存在困难,请自行搜寻解决方案,通常您可以选择一个值得信赖的镜像网站或代理来解决。

修改配置

您需要找到并修改本项目中的配置文件config/template_config.yaml,并将template_config.yaml更名为global_config.yaml

接下来,我们将会详细介绍配置文件中的每块内容。

Bilibli 直播服务

这项配置用于连接至 Bilibili 服务器,并登录您的账号,获取指定直播间的内容。

# Bilibili 直播配置
bilibili_live_config:
  # 获取方式[详见](https://nemo2011.github.io/bilibili-api/#/get-credential)
  sessdata:
  bili_jct:
  buvid3:
  # 直播间 ID (应为数字)
  room_id:

其中,

  1. sessdatabili_jctbuvid3 这三项用于向 Bilibili 服务器校验您的身份,如果不登录将无法获取直播间的弹幕信息。具体如何填写这三个值,详见此处。请注意,不要将这三项泄露给他人,尤其在直播的时候,这将会有盗号风险。
  2. room_id 是您要连接的直播间的ID,通常为直播间URL中的从左到右第一次出现的数字。当然,您可以设置为他人直播间的ID,这样会接受他人直播间的弹幕信息。

截屏服务

这一部分是为了让 ZEROLAN LIVE ROBOT 可以识别当前画面中的的实时内容,你可以指定ta可以看到的窗口,例如游戏画面。

# 截屏配置
screenshot_config:
  # 窗口标题(会自动查找符合该标题的第一个窗口)
  win_title:
  # 缩放因子(为了防止屏幕被截取窗口)
  k: 0.9
  # 截取的图片存放位置
  save_dir: .tmp/screenshots

其中,

  1. win_title 代表要识别的窗口标题,您也可以不填全,这样会在自动匹配的窗口列表中选择第一个窗口进行观测。
  2. k 缩放因子,它的作用是防止窗口的边框和标题栏被识别到,从而使 AI 失去沉浸感。取值越小,AI 可识别的范围越小,取值 0 ~ 1 之间。
  3. save_dir 截取的图片存放目录,会保存为若干个时间戳.png这样的图片。程序停止不会自动清除这里的图片。

视觉识别服务

我们使用 [blip-image-captioning-large](Salesforce/blip-image-captioning-large · Hugging Face) 这一模型以完成 Image-to-Text 任务,这里要注意的是,这个模型输出的是英文

关于配置文件,

# 模型 blip-image-captioning-large 的配置
blip_image_captioning_large_config:
  # 模型地址
  model_path: Salesforce/blip-image-captioning-large
  # 模型默认文本提示词(只能是英文)
  text_prompt: There

其中,

  1. model_path 表示模型的存放位置。
  2. text_prompt 表示模型的文本提示词(必须是英文),例如当你使用There 时,模型的输出就会以There开头。

配置并启动 GPT-SoVITS 服务

关于本项目采用的 TTS 模型GPT-SoVITS,这是一个可以支持仅需3到10秒的音频克隆的模型。请移步至官方仓库,了解如何下载并使用该模型。

关于 GPT-SoVITS 官方的 API 如何支持中英、日英混读,请参考如下的教程修改。

请按照上述仓库中文档中的操作步骤配置 GPT-SoVITS 服务,并启动 API 服务,也请记住您的 API 服务的相关配置。

GPTSoVITSServiceConfig:
  # 是否以调试模式运行
  debug: False
  # GPT-SoVITS 服务地址
  host: 127.0.0.1
  # GPT-SoVITS 服务端口
  port: 9880
  # 音频临时文件夹
  tmp_dir: .tmp/wav_output

其中,

  1. debug:是否以调试模式启动Flask服务,默认为False

  2. host:GPT-SoVITS 服务地址,如果您在本机上启动,那么默认地址为127.0.0.1

  3. prot:GPT-SoVITS 服务端口,如果您未进行改动,那么默认端口为9880

  4. tmp_dir用于临时存放生成的音频文件,您可以选择一个合适的位置,默认为.tmp/wav_output

语气分析服务配置

为了能让虚拟形象以不同的语气说话,您需要在 template/tone_list.yaml 配置中修改自定义的Prompt。以下是一个示例。

EMOTION_ID:
  refer_wav_path: 1.wav
  prompt_text: 你好,请多关照。
  prompt_language: zh

其中,

  1. EMOTION_ID 表示此 Prompt 所包含的语气,例如“开心”、“生气”。请注意,根据您使用的大语言模型所支持的语言,来设定EMOTION_ID的效果可能会更好。
  2. refer_wav_path:此 Prompt 音频文件的路径。注意音频的长度必须大于 3 秒但小于 10 秒
  3. prompt_text:此 Prompt 音频文件中表述的内容。
  4. prompt_language:此此 Prompt 音频所用的语言。GPT-SoVITS 目前仅支持zh(中文)、en(英语)、ja(日语)这三国语言。

ChatGLM3 服务配置

ChatGLM3是本项目的核心,如果您无法正确启动此服务,那么将无法启动本项目。以下是配置文件:

# ChatGLM3 服务配置
chatglm3_service_config:
  # 是否以调试模式运行
  debug: False
  # ChatGLM3 服务地址
  host: 127.0.0.1
  # ChatGLM3 服务端口
  port: 8085
  # Tokenizer 路径
  tokenizer_path: THUDM/chatglm3-6b
  # 模型路径
  model_path: THUDM/chatglm3-6b
  # 量化
  quantize: 4

其中,

  1. debug:参数用来指定 Flask 是否以 debug 模式启动,默认为 Flase
  2. host:ChatGLM 服务地址,如果您在本机上启动,那么默认地址为127.0.0.1
  3. port:ChatGLM 服务端口,如果您未进行改动,那么默认端口为8085
  4. tokenizer_path:ChatGLM 模型目录。
  5. model_path:ChatGLM 分词器目录,通常和 tokenizer_path 一样。
  6. quantize:ChatGLM 的量化等级,通常为 4,如果您的显存足够支持更大的量化等级,可以使用 8。

OBS 服务配置

OBS 是一款免费且开源的视频录制和直播软件。以下的配置文件主要是为了您能够显示相关字幕。当然,如果不需要直播等功能,您也可以不使用此配置文件。

# OBS 服务配置
obs_config:
  # 弹幕输出字幕文件
  danmaku_output_path: .tmp/danmaku_output/output.txt
  # 语气输出字幕文件
  tone_output_path: .tmp/tone_output/output.txt
  # 大语言模型输出字幕文件
  llm_output_path: .tmp/llm_output/output.txt

其中,

  1. danmaku_output_path:被选择读取到的弹幕会被输出到这个路径的文件中。
  2. tone_output_path:模型输出的语气会被输出到这个路径的文件中。
  3. llm_output_path:模型输出的文字会被输出到这个路径的文件中。

Zerolan 配置

这是针对本项目的配置文件。

# 本项目配置
zerolan_live_robot_config:
  # 提示词模板
  custom_prompt_path: template/custom_prompt.json

提示词模板 custom_prompt.json 中的内容举例如下:

{
  "query": "",
  "history": [
    {
      "content": "你现在是一只猫娘,无论说什么都要带喵字。记住了的话,只需要回复:好的主人喵!",
      "metadata": "",
      "role": "user"
    },
    {
      "content": "好的主人喵!",
      "metadata": "",
      "role": "assistant"
    },
    {
      "content": "现在你是什么?",
      "metadata": "",
      "role": "user"
    },
    {
      "content": "主人,我是一只猫娘喵!",
      "metadata": "",
      "role": "assistant"
    }
  ],
  "temperature": 1,
  "top_p": 1
}

其中,history 列表中可以填入若干轮对话,可以按照您自己的需求进行修改和扩充。这里的 role 属性中,user 代表用户的输入,而 assistant 表示模型输出。

开始运行

首先,启动 ChatGLM3 服务。

cd YourDirectory/ZerolanLiveRobot # 切换目录至本仓库的目录
conda activate zerolanliverobot # 激活刚刚创建的虚拟环境
python api_run.py # 启动大语言模型 ChatGLM3

大语言模型需要一段时间去加载,请耐心等待。

接着,启动 GPT-SoVTIS 服务。启动脚本请遵循 GPT-SoVTIS 原项目的文档要求进行设置。

确保 ChatGLM3 和 GPT-SoVTIS 均被正确启动后,您可以运行以下代码来运行本项目。

cd YourDirectory/ZerolanLiveRobot # 切换目录至本仓库的目录
conda activate zerolanliverobot # 激活刚刚创建的虚拟环境
python main.py # 启动主程序

如果一切正常,稍后就能听到合成的语音被自动播放了(注意系统音量,不要损伤您的听力)。

如果您需要开启 Minecraft AI Agent 与您一同在服务器中游玩,可以使用以下命令。

node minecraft/service.js host port username password

其中,

  1. host:Minecraft 服务器的地址,如果您在本机开启了服务器,请使用 127.0.0.1
  2. port:Minecraft 服务器的端口,如果您没有修改默认的端口号,那么通常为 25565
  3. username:Minecraft AI Agent 将要登入的服务器的玩家名称,在游戏中将以此名称显示。
  4. password:Minecraft AI Agent 将要登入的服务器的密码,如果没有设置密码,请忽略这个字段。

常见问题

GPT-SoVTIS 服务无法连接

CRITICAL | gptsovits.service:init:26 - ❌️ GPT-SoVTIS 服务无法连接至 http://127.0.0.1:9880

出现这种情况,是因为程序无法访问这个地址 http://127.0.0.1:9880(根据您的配置不同可能略有差异),请检查您在 GPT-SoVITS 项目中是否正确启动了 api 服务。注意您应该启动的是 api.py 或者 api2.py 而不是启动 webui.py

无法找到窗口

WARNING  | scrnshot.service:screen_cap:32 - 无法找到窗口 xxx

如字面意思,程序无法找到您在配置文件中设置的 screenshot_config.win_title 所指定的窗口。请检查您对应的窗口确实开启了,或者是否存在拼写错误。

开源许可证

本项目使用“GNU通用公共许可证”(GNU GENERAL PUBLIC LICENSE,GPLv3),我们希望以自由的方式使用户从本项目中受益。

特别鸣谢

本项目用到了以下开源项目的部分或全部的技术,再此特别感谢开源社区为人类社会的贡献。

THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 (github.com)

RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) (github.com)

Salesforce/blip-image-captioning-large · Hugging Face

Nemo2011/bilibili-api: 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api

PrismarineJS/mineflayer: Create Minecraft bots with a powerful, stable, and high level JavaScript API. (github.com)

此处可能未能详尽展示,如有疏漏,可以联系开发者。

联系方式

如果您对本项目有何建议或问题等,可以通过以下联系方式与开发者交流。

邮箱:[email protected]

About

An AI game live streaming virtual character based on LLM, CV, TTS, and ASR technologies, with multi-sensory capabilities of seeing, hearing, and speaking.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published