Open-LLM-VTuber部署及相关问题
Open-LLM-VTuber部署及相关问题
乄げ灬落幕注意:
本文章大部分内容是GitHub项目中readme.md中的内容,还有一部分是群友总结整理
如果是检索或常规错误问题,请下滑至 常见问题
一、加群以及项目警告
如果有更多实际疑难问题无法通过文档解决,请点击加群询问解决问题
如果您从没有语音中断功能的旧版本更新,请阅读以下内容: 最新版本更改了打开 live2d 服务器和后端的方式:现在可以启动它需要的一切(除了浏览器)。要使用 Live2D 和浏览器运行,请在浏览器中启动并打开网页。您不再需要使用 .运行时假设有浏览器的 Live2D 模式,没有浏览器的运行没有 Live2D 模式。此外,配置文件中的 options 和 不再具有任何效果,并且由于后端的更改而被弃用。server.py
、server.py
、main.py
、server.py
、server.py
、main.py
、MIC-IN-BROWSER
、LIVE2D
该项目处于早期阶段,目前正在积极开发中。功能不稳定,代码混乱,并且会发生重大更改。此阶段的主要目标是使用易于集成的技术构建最小可行原型。
这个项目目前在 Windows 上有很多问题。理论上,它应该都可以工作,但许多使用 Windows 的人在许多依赖项方面存在许多问题。我可能会在将来修复这些功能,但 Windows 支持目前需要测试和调试。如果您有 Mac 或 Linux 计算机,请暂时使用它们。如果您需要帮助或获取有关此项目的更新,请加入 Discord 服务器。
如果您想在服务器上运行此程序并在笔记本电脑上远程访问它,则前端的麦克风将仅在安全上下文(也称为 https 或 localhost)中启动。请参阅 MDN Web 文档。因此,如果要在远程计算机(非 localhost)上访问页面,则可能需要使用反向代理配置 https。
二、概述
这个项目是什么?
Open-LLM-VTuber 允许您通过 Live2D 说话人脸的语音(免提)在本地与任何 LLM 交谈(和打断)任何 LLM。LLM 推理后端、语音识别和语音合成器都设计为可交换的。此项目可以配置为在 macOS、Linux 和 Windows 上脱机运行。还支持在线 LLM/ASR/TTS 选项。
MemGPT 的长期记忆可以配置为实现永久聊天、无限* 上下文长度和外部数据源。
该项目最初是试图使用可以在 Windows 以外的平台上离线运行的开源替代方案重新创建闭源 AI VTuber。neuro-sama
部分可能原readme文档有不同
三、功能
演示
注意:YouTube源没有魔法上网视频可以能无法加载
已实现的部分
- 通过语音与 LLM 对话。离线。
基于聊天历史的检索增强生成 (RAG)*(暂时移除)*
当前支持的 LLM 后端
- 任何与 OpenAI API 兼容的后端,例如 Ollama、Groq、LM Studio、OpenAI 等。
- MemGPT(需要设置)
当前支持的语音识别后端
- FunASR,支持 SenseVoiceSmall 和许多其他模型。(
本地目前需要互联网连接才能加载。本地计算) - Faster-Whisper (本地)
- 使用 python 绑定 pywhispercpp 的 Whisper-CPP(本地,可以配置 mac GPU 加速)
- Whisper (本地)
- Groq Whisper(需要 API 密钥)。这是一个托管的 Whisper 端点,速度很快,每天都有大量的免费限制。
- Azure 语音识别 (需要 API 密钥)
- 默认情况下将使用服务器终端中的麦克风。您可以更改
conf.yaml
中的MIC_IN_BROWSER
设置,将麦克风(和语音激活检测)移动到浏览器(目前以延迟为代价)。如果您在不同的机器或 VM 或 docker 中运行后端,您可能希望使用客户端(浏览器)上的麦克风而不是服务器上的麦克风。
当前支持的文本转语音后端
- py3-tts(本地,它使用您系统的默认 TTS 引擎)
- meloTTS(本地,快速)
- Coqui-TTS (本地,速度取决于您运行的模型。)
- bark (本地,非常消耗资源)
- CosyVoice (本地,非常消耗资源)
- xTTSv2 (本地,非常消耗资源)
- Edge TTS (在线,无需 API 密钥)
- Azure 文本转语音 (在线,需要 API 密钥)
快速文本合成
- 语句到达后立即合成,因此无需等待整个 LLM 响应。
- 具有多线程的生产者-消费者模型:音频将在后台连续合成。只要新音频准备好,它们就会一个接一个地播放。音频播放器不会阻塞音频合成器。
Live2D 动画面部
- 使用
config.yaml
更改 Live2D 模型(模型需要在 model_dict.json 中列出) - 加载本地 Live2D 模型。有关文档,请查看
doc/live2d.md
。 - 使用 LLM 响应中的表情关键词来控制面部表情,因此不需要额外的模型进行情绪检测。表情关键词会自动加载到系统提示中,并从语音合成输出中排除。
live2d 技术细节
- 使用 guansss/pixi-live2d-display 在浏览器中显示 live2d 模型
- 使用 WebSocket 控制服务器和前端之间的面部表情和说话状态
- 所有必需的包都可以在本地获得,因此前端可以离线工作。
- 您可以从 URL 或本地存储在
live2d-models
目录中的模型加载 live2d 模型。默认的shizuku-local
存储在本地并可以离线工作。如果 model_dict.json 中模型的 URL 属性是一个 URL 而不是以/live2d-models
开头的路径,则每次打开前端时都需要从指定的 URL 获取它们。阅读doc/live2d.md
以获取有关从本地加载 Live2D 模型的文档。 - 运行
server.py
以运行 WebSocket 通信服务器,在./static
文件夹中打开index.html
以打开前端,并运行launch.py
main.py
以运行 LLM/ASR/TTS 处理的后端。
四、安装和使用
要求:(系统环境)
- ffmpeg
- Python >= 3.10 ,< 3.13 (目前Python 3.13可能存在依赖安装问题。如果遇到这种情况,请使用3.12或更低版本,应该可以解决)
- 需要在 Python 3.13 上进行更多测试(等待后续项目维护,可能会解决此问题?)
首先你需要克隆此存储库。
接下来,您需要准备好并运行 Ollama 或任何其他与 OpenAI API 兼容的后端。如果您想使用 MemGPT 作为后端,请向下滚动到 MemGPT 部分。
准备您选择的 LLM。编辑项目目录 conf.yaml
中的 BASE_URL 和 MODEL。
强烈建议使用 conda 或 venv 等虚拟 Python 环境!(因为依赖关系很乱!)。
在终端中运行以下命令以安装依赖项。
1 | pip install -r requirements.txt # 在项目目录中运行此命令 |
默认情况下,此项目启动音频交互模式,这意味着您可以通过语音与 LLM 对话,LLM 将通过语音与您交谈。
编辑 conf.yaml
进行配置。您可以按照演示视频中使用的配置进行操作。
如果您想使用 live2d,请运行 server.py
。使用浏览器打开页面 localhost:12393
(您可以更改此设置),您就准备好了。一旦 Live2D 模型出现在屏幕上,它就准备好与您交谈了。
如果您不想要 live2d,可以使用 Python 运行 main.py
以进入 cli 模式。
某些模型将在您首次启动时下载,这可能需要互联网连接,并且可能需要一段时间。
更新
如果您编辑过配置文件 conf.yaml
,请备份它们,然后更新存储库。
或者只需再次克隆存储库并确保传输您的配置。配置文件有时会更改,因为此项目仍处于早期阶段。更新程序时要小心。
正式安装步骤
第 1 步:下载存储库
在您的计算机中找到一个合适的位置并克隆存储库或下载最新版本。
1 | git clone https://github.com/t41372/Open-LLM-VTuber |
好。现在去 GitHub 并给这个项目加星标,如果你还没有这样做,否则你会 &&Eujehruedjhnoeire4939 #pE$
第2步:[可选] 为该项目创建虚拟环境
这是可选的,但我强烈建议您为这个项目创建一个虚拟环境。
本项目使用 Python 3.10.13 开发。Python 3.11 已经测试过。其他一些版本可能也能工作,但未经测试。
如果您不知道什么是虚拟环境,这里有一个简单的解释:
Python 虚拟环境(venv)是一个包含 Python 解释器、第三方库和其他脚本的文件夹。虚拟环境与其他虚拟环境是隔离的,所以依赖项的更改不会影响其他虚拟环境或系统范围的库。
为什么?
我强烈建议您为这个项目使用虚拟环境的原因是因为这会使您的生活轻松很多。这个项目使用了很多依赖项,依赖冲突经常发生。使用虚拟环境来隔离它们可以保住您的头发。
Venv
如果您不知道什么是 conda,我们可以使用 venv
,它是 Python 内置的,而且非常好用。
1 | 创建虚拟环境 |
要激活虚拟环境,运行以下命令:
1 | open-llm-vtuber\Scripts\activate |
1 | source open-llm-vtuber/bin/activate |
或者使用 conda
如果您知道什么是 conda,那么您就知道该怎么做。这是我个人使用的命令。如果您不知道什么是 conda,我建议您使用 venv
。
1 | 在项目目录中创建 conda 环境 |
第3步:安装基本依赖
在项目根目录下运行以下命令来安装依赖项。
1 | pip install -r requirements.txt # 在项目目录中运行此命令 |
第4步:设置 LLM
您需要有 Ollama 或任何其他兼容 OpenAI-API 的后端准备就绪并运行。您可以使用 llama.cpp、vLLM、LM Studio、groq、OpenAI 等等。
MemGPT
如果您想使用 MemGPT 的长期记忆功能,您需要将 MemGPT 设置为您的 LLM 后端,而不是上面提到的那些。查看 MemGPT 部分了解更多信息(除非您已经知道如何运行 MemGPT,否则这并不容易,所以我建议您先从 ollama 或其他 OpenAI 兼容的 LLM 后端开始)。
Ollama 和 OpenAI 兼容的 LLM 后端
准备好您选择的 LLM 并让 LLM 推理服务器(如 ollama)运行起来。
在 conf.yaml
文件中,在 ollama
选项下,您可以编辑所有 OpenAI 兼容的 LLM 推理后端的配置。
这是 conf.yaml
中的设置:
1 | # ============== LLM 后端设置 =================== |
如果您不使用 LLM_API_KEY
、ORGANIZATION_ID
和 PROJECT_ID
,就保持原样即可。
如果您现在非常兴奋,想要在没有语音交互的情况下尝试这个项目,您可以在 conf.yaml
中将 LIVE2D、VOICE_INPUT_ON
和 TTS_ON
设置为 False
,这样就可以通过输入而不是语音与 LLM 对话,也没有 Live2D。记得稍后再把它们打开。
第5步:设置自动语音识别(ASR)
本项目支持多种语音识别。查看 ASR 部分了解安装说明。
总的来说,以下是设置语音识别的步骤:
- 安装依赖项
- 在
conf.yaml
中编辑您使用的 ASR 的配置。如果支持的话,您通常可以在那里更改语言或模型。 - 将
ASR_MODEL
设置为您选择的 ASR。
截至写作时,本项目支持以下 ASR:
- FunASR,支持 SenseVoiceSmall 和其他一些模型。(本地目前需要网络连接来加载。本地计算)
- Faster-Whisper(本地)
- Whisper-CPP 使用 Python 绑定 pywhispercpp(本地,mac GPU 加速可配置)
- Whisper(本地)
- Azure Speech Recognition(需要 API 密钥)
一些建议:
如果您不在意它在启动时连接到互联网(将来会修复),我推荐使用带有 SenseVoiceSmall 的 FunASR。它非常快,准确率也相当好。
如果您想要完全离线工作的东西,如果您有 Nvidia GPU,我推荐 Faster-Whisper,如果您使用 macOS,推荐使用带有 coreML 加速的 Whisper-CPP。
如果您碰巧有 API 密钥,您也可以使用 Azure Speech Recognition。
⚠️ 如果您想在容器内或远程机器上运行此应用程序(服务器),并使用本地设备访问 webui,您需要在 conf.yaml
中将 MIC_IN_BROWSER
设置为 True。还有更多需要考虑的事情,它们在本页面的顶部。
第6步:设置文本转语音(TTS)
查看 TTS 部分了解设置您想要的 TTS 的说明。
总的来说,以下是设置文本转语音服务的步骤:
- 安装依赖项
- 在
conf.yaml
中编辑您使用的 TTS 的配置。如果支持的话,您通常可以在那里更改语言或说话者。 - 将
TTS_MODEL
设置为您选择的 TTS。
以下是截至写作时支持的一些 TTS:
- py3-tts(本地,使用您系统的默认 TTS 引擎)
- bark(本地,非常消耗资源)
- CosyVoice(本地,非常消耗资源)
- MeloTTS(本地,快速)
- Edge TTS(在线,不需要 API 密钥)
- Azure Text-to-Speech(在线,需要 API 密钥)
第7步:运行程序
目前,如果您使用 live2D 和上面提到的所有内容,以下是运行程序的步骤:
- 运行
server.py
- 用浏览器打开
localhost:12393
(默认设置,但您可以在 conf.yaml 中更改) 运行 main.py(不再需要)- 一旦 Live2D 模型加载完成,就可以与 LLM 对话。
如果您只想对话而不想要 Live2D 和浏览器之类的东西,您可以直接运行main.py
进入命令行模式。
conf.yaml
中一些您可能感兴趣的相关设置:
- 在
LIVE2D
关闭live2D
(和 webui,这样您就不需要 server.py) - 在
VOICE_INPUT_ON
关闭语音识别并开始在终端中输入 - 在
MIC_IN_BROWSER
让麦克风在浏览器而不是终端中监听 - 在
TTS_ON
关闭 TTS - 在
SAY_SENTENCE_SEPARATELY
让 TTS 一次说出所有内容 - 在
PERSONA_CHOICE
和DEFAULT_PERSONA_PROMPT_IN_YAML
更改/编辑人设提示 - 在
HOST
和PORT
更改服务器监听的主机和端口 - 以及
VERBOSE
在您第一次启动时,一些模型将被下载,这可能需要一段时间。
插件说明
=============================如果你没有安装个别服务插件,请参考下方的安装===============================
安装语音识别 (ASR)
编辑 conf.yaml
中的 ASR_MODEL 设置以更改提供商。
以下是您可以选择的语音识别选项:
FunASR
(本地)(即使在 CPU 上也能非常快速地运行。不知道他们是怎么做到的)
- FunASR 是来自 ModelScope 的基本端到端语音识别工具包,可以运行许多 ASR 模型。使用来自 FunAudioLLM 的 SenseVoiceSmall,结果和速度都非常好。
- 使用
pip install -U funasr modelscope huggingface_hub
安装。另外,确保您拥有 torch (torch>=1.13) 和 torchaudio。使用pip install torch torchaudio
安装它们。 - _即使模型在本地可用_,它在启动时也需要互联网连接。请参阅 https://github.com/modelscope/FunASR/issues/1897
Faster-Whisper
(本地)
- Whisper,但速度更快。在 macOS 上,它仅在 CPU 上运行,速度不是很快,但易于使用。
- 对于 Nvidia GPU 用户,要使用 GPU 加速,您需要安装以下 NVIDIA 库:
- 或者,如果您不需要速度,可以将
conf.yaml
中Faster-Whisper
下的device
设置为cpu
以减少麻烦。
WhisperCPP
(本地)(如果配置正确,在 Mac 上运行速度非常快)
- 如果您使用的是 Mac,请阅读以下有关设置支持 coreML 的 WhisperCPP 的说明。如果您想使用 CPU 或 Nvidia GPU,请通过运行
pip install pywhispercpp
来安装软件包。 - whisper cpp python 绑定。它可以通过配置在 coreML 上运行,这使得它在 macOS 上非常快。
- 在 CPU 或 Nvidia GPU 上,它可能比 Faster-Whisper 慢
WhisperCPP coreML 配置:
- 如果您已经安装了原始的
pywhispercpp
,请卸载它。我们正在构建软件包。 - 使用 Python 运行
install_coreml_whisper.py
以自动为您克隆和构建支持 coreML 的pywhispercpp
。 - 准备合适的 coreML 模型。
- 您可以根据 Whisper.cpp 存储库上的文档将模型转换为 coreml
- …或者您可以找到一些神奇的 huggingface 存储库,恰好拥有那些转换后的模型。只需记住解压缩它们即可。如果程序无法加载模型,它将产生段错误。
- 您无需在
conf.yaml
中的模型名称中包含那些奇怪的前缀。例如,如果 coreML 模型的名称看起来像ggml-base-encoder.mlmodelc
,只需将base
放入conf.yaml
中WhisperCPP
设置下的model_name
中即可。
Whisper
(本地)
- 来自 OpenAI 的原始 Whisper。使用
pip install -U openai-whisper
安装它 - 所有中最慢的。添加它作为一个实验,看看它是否可以利用 macOS GPU。它没有。
GroqWhisperASR
(在线,需要 API 密钥)
- 来自 Groq 的 Whisper 端点。它非常快,每天都有很多免费使用量。它是预先安装的。从 groq 获取 API 密钥并将其添加到
conf.yaml
中的 GroqWhisper 设置中。 - 需要 API 密钥和互联网连接。
AzureASR
(在线,需要 API 密钥)
- Azure 语音识别。使用
pip install azure-cognitiveservices-speech
安装。 - 需要 API 密钥和互联网连接。
- ⚠️ ‼️
api_key.py
在v0.2.5
中已弃用。请在conf.yaml
中设置 API 密钥。
安装语音合成(文本转语音)(TTS)
安装相应的软件包并使用 conf.yaml
中的 TTS_MODEL
选项将其打开。
pyttsx3TTS
(本地,快速)
- 使用命令
pip install py3-tts
安装。 - 此软件包将使用您系统上的默认 TTS 引擎。它在 Windows 上使用
sapi5
,在 Mac 上使用nsss
,在其他平台上使用espeak
。 - 使用
py3-tts
而不是更著名的pyttsx3
,是因为pyttsx3
似乎未维护,而且我无法让最新版本的pyttsx3
正常工作。
meloTTS
(本地,快速)
- 根据他们的文档 安装 MeloTTS(不要通过 docker 安装)(克隆存储库的一个好地方是 submodule 文件夹,但您可以将其放在任何您想要的地方)。如果您遇到与
mecab-python
相关的问题,请尝试此 fork(截至 2024 年 7 月 16 日尚未合并到主分支)。 - 它不是最好的,但绝对比 pyttsx3TTS 好,而且在我的 mac 上速度很快。如果我无法访问互联网,我会暂时选择这个(如果我可以访问互联网,我会使用 edgeTTS)。
coquiTTS
(本地,可以快或慢,取决于您运行的模型)
- 似乎很容易安装
- 使用命令
pip install "coqui-tts[languages]"
安装 - 支持许多不同的 TTS 模型。使用
tts --list_models
命令列出所有受支持的模型。 - 默认模型是仅英语模型。
- 对中文模型使用
tts_models/zh-CN/baker/tacotron2-DDC-GST
。(但一致性很奇怪…) - 如果你找到了一些好的模型可以使用,请告诉我!有太多模型了,我都不知道从哪里开始…
barkTTS
(本地,慢)
- 使用此命令
pip install git+https://github.com/suno-ai/bark.git
安装 pip 软件包,并在conf.yaml
中将其打开。 - 首次启动时将下载所需的模型。
cosyvoiceTTS
(本地,慢)
- 根据他们的文档配置 CosyVoice 并启动 WebUI 演示。
- 编辑
conf.yaml
以匹配您所需的配置。查看他们的 WebUI 和 WebUI 上的 API 文档,以了解conf.yaml
中cosyvoiceTTS
设置下配置的含义。
xTTSv2
(本地,慢)
- 建议使用 xtts-api-server,它有清晰的 api 文档,部署起来相对容易。
edgeTTS
(在线,无需 API 密钥)
- 使用此命令
pip install edge-tts
安装 pip 软件包,并在conf.yaml
中将其打开。 - 听起来很不错。运行速度很快。
- 使用 edge tts 时,请记住连接到互联网。
AzureTTS
(在线,需要 API 密钥) (这与 neuro-sama 使用的 TTS 完全相同)
- 使用命令
pip install azure-cognitiveservices-speech
安装 Azure SDK。 - 从 Azure 获取 API 密钥(用于文本转语音)。
- ⚠️ ‼️
api_key.py
在v0.2.5
中已弃用。请在conf.yaml
中设置 API 密钥。 conf.yaml
中的默认设置是 neuro-sama 使用的语音。
如果您使用的是 macOS,则需要启用终端模拟器的麦克风权限(您是在终端中运行此程序的,对吧?为您的终端启用麦克风权限)。如果您未能这样做,语音识别将无法听到您的声音,因为它没有使用麦克风的权限。
翻译
实现了 DeepLX 翻译,让程序可以用与对话语言不同的语言说话。例如,LLM 可能用英语思考,字幕是英语,您说的是英语,但 LLM 的语音是日语。这是通过在发送句子进行音频生成之前对其进行翻译来实现的。
目前 DeepLX 是唯一支持的翻译后端。其他提供商将很快实施。
启用音频翻译
- 将
conf.yaml
中的TRANSLATE_AUDIO
设置为 True - 将
DEEPLX_TARGET_LANG
设置为您想要的语言。确保此语言与 TTS 说话者的语言匹配(例如,如果DEEPLX_TARGET_LANG
是“JA”,即日语,则 TTS 也应说日语。)。
MemGPT (可能已损坏)
:warning: MemGPT 已重命名为 Letta,并更改了许多与其 API 及其功能相关的内容。截至目前,此项目中 MemGPT 的集成尚未使用最新更改进行更新。
MemGPT 集成非常实验性,需要大量设置。此外,MemGPT 需要一个强大的 LLM(大于 7b 且量化高于 Q5),具有大量的标记占用空间,这意味着它要慢得多。
不过,MemGPT 确实有自己的免费 LLM 端点。您可以用它来测试。查看他们的文档。
此项目可以使用 MemGPT 作为其 LLM 后端。MemGPT 使 LLM 具有长期记忆。
要使用 MemGPT,您需要配置并运行 MemGPT 服务器。您可以使用 pip
或 docker
安装它,或者在不同的机器上运行它。查看他们的 GitHub 存储库 和官方文档。
:warning:
我建议您在单独的 Python 虚拟环境或 docker 中安装 MemGPT,因为此项目和 MemGPT 之间目前存在依赖项冲突(在快速 API 上,似乎是这样)。您可以查看此问题 您能否升级依赖项中的 typer 版本 #1382。
以下是一个清单:
- 安装 memgpt
- 配置 memgpt
- 使用
memgpt server
命令运行memgpt
。记住在启动 Open-LLM-VTuber 之前让服务器运行。 - 通过其 cli 或 web UI 设置一个代理。将您的系统提示以及 Live2D 表达式提示和您要使用的表达式关键字(在
model_dict.json
中找到它们)添加到 MemGPT 中 - 将
server admin password
和Agent id
复制到./llm/memgpt_config.yaml
中。顺便说一句,agent id
不是代理的名称。 - 在
conf.yaml
中将LLM_PROVIDER
设置为memgpt
。 - 请记住,如果您使用
memgpt
,conf.yaml
中所有与 LLM 相关的配置都将被忽略,因为memgpt
不是那样工作的。
Mem0(开发中)
另一个长期记忆解决方案。仍在开发中。高度实验性。
优点
- 与 MemGPT 相比,它更容易设置
- 它比 MemGPT 快一点(但仍然需要更多的 LLM 标记来处理)
缺点
- 它只记住你的偏好和想法,其他什么都不记得。它不记得 LLM 说过什么。
- 它并不总是把东西放入内存。
- 它有时会记住错误的东西
- 它需要一个具有非常好的函数调用能力的 LLM,这对于较小的模型来说是相当困难的
五、注意事项
缺少 PortAudio
- 通过您的包管理器(如 apt)将
libportaudio2
安装到您的计算机上
在容器中运行 [高度实验性]
警告:
您可以自己构建镜像,也可以从 docker hub 中提取它。
- (但镜像大小非常大)
- docker hub 上的镜像可能不会像它那样定期更新。GitHub action 无法构建如此大的镜像。我可能会研究其他选项。
当前问题:
- 镜像大小很大(~20GB),并且需要更多空间,因为某些模型是可选的,并且仅在使用时才会下载。
- 需要 Nvidia GPU(GPU 直通限制)
- 需要配置 Nvidia 容器工具包 以进行 GPU 直通。
- 如果您停止容器,则必须再次下载某些模型。(将修复)
- 不要在 Arm 机器上构建镜像。由于某种原因,其中一个依赖项(准确地说是 grpc)将失败 https://github.com/grpc/grpc/issues/34998。
- 正如前面提到的,除非网页有 https,否则您无法在远程服务器上运行它。这是因为前端的网络麦克风将仅在安全上下文中启动(这意味着仅限本地主机或 https 环境)。
大多数 asr 和 tts 将预先安装。但是,bark TTS 和原始 OpenAI Whisper(Whisper
,而不是 WhisperCPP)不包含在默认构建过程中,因为它们很大(~8GB,这使得整个容器大约 25GB)。此外,它们也没有提供最佳性能。要在镜像中包含 bark 和/或 whisper,请将参数 --build-arg INSTALL_ORIGINAL_WHISPER=true --build-arg INSTALL_BARK=true
添加到镜像构建命令中。
设置指南:
在构建之前查看
conf.yaml
(当前已刻录到镜像中,很抱歉):构建镜像:
1 | docker build -t open-llm-vtuber . |
(去喝杯饮料,这需要一段时间)
获取
conf.yaml
配置文件。
从此存储库获取conf.yaml
文件。或者您可以直接从此 链接 获取它。运行容器:
$(pwd)/conf.yaml
应该是您的 conf.yaml
文件的路径。
1 | docker run -it --net=host --rm -v $(pwd)/conf.yaml:/app/conf.yaml -p 12393:12393 open-llm-vtuber |
- 打开 localhost:12393 进行测试
六、开发(代称)
(这个项目处于积极的原型设计阶段,所以很多东西都会改变)
本项目中使用的一些缩写:
- LLM:大型语言模型
- TTS:文本转语音、语音合成、语音合成
- ASR:自动语音识别、语音识别、语音转文本、STT
- VAD:语音激活检测
关于采样率
您可以假设整个项目中的采样率为 16000
。
前端将采样率为 16000
的 Float32Array
块流式传输到后端。
添加对新 TTS 提供商的支持
- 实现
tts/tts_interface.py
中定义的TTSInterface
。 - 将您的新 TTS 提供商添加到
tts_factory
中:用于实例化和返回 tts 实例的工厂。 - 将配置添加到
conf.yaml
。具有相同名称的字典将作为 kwargs 传递到您的 TTSEngine 的构造函数中。
添加对新语音识别提供商的支持
- 实现
asr/asr_interface.py
中定义的ASRInterface
。 - 将您的新 ASR 提供商添加到
asr_factory
中:用于实例化和返回 ASR 实例的工厂。 - 将配置添加到
conf.yaml
。具有相同名称的字典将作为 kwargs 传递到您的类的构造函数中。
添加对新 LLM 提供商的支持
- 实现
llm/llm_interface.py
中定义的LLMInterface
。 - 将您的新 LLM 提供商添加到
llm_factory
中:用于实例化和返回 LLM 实例的工厂。 - 将配置添加到
conf.yaml
。具有相同名称的字典将作为 kwargs 传递到您的类的构造函数中。
项目致谢
- https://github.com/dnhkng/GlaDOS
- https://github.com/SchwabischesBauernbrot/unsuperior-ai-waifu
- https://codepen.io/guansss/pen/oNzoNoz
- https://github.com/Ikaros-521/AI-Vtuber
- https://github.com/zixiiu/Digital_Life_Server
七、常见问题
让免费的 AI 帮你解决部署问题!解决不了再去群里或者issue里面询问。
Kimi: https://kimi.moonshot.cn/share/cskmiivdsr0o3j1pgt6g
ChatGPT: https://chatgpt.com/share/67296dba-2fb8-800b-bd69-c6d8ecb0c145
DeepSeek, 通义千问或其他AI,自己把群文件上传上去。
网络问题(重灾区)
这么说吧,将近一半的问题出现在各种资源模型的下载出错(大多数的资源都是国外的),常见关键词和代码有 SSL、Connection Refused、502、HTTP、HTTPS等等,如果你在报错信息中发现了任何可疑的、与网络相关的词、代码等,请尝试科学上网,或寻找国内的加速地址。目前,已知在开启系统代理的情况下,与Ollama的本地api通讯会出问题,具体后台表现为语音转文字结果出现后像卡住一样长时间没有语言大模型的回复内容,最终报502错误代码,原理尚不清楚,但解决办法就是关掉代理使用。
ASR (语音识别) 相关
这种报错是麦克风没有权限(谷歌浏览器)点击网页设置将麦克风设置调为允许就行
还有,Live2D 模式 (就是 server.py 运行的那个模式) 下的文字输入功能还没实现(对应conf.yaml中“VOICE_INPUT_ON: False”)(2024年11月8日),如果你设置为False(默认为True即开启语音输入),那么你将无法与AI交流,所以请正常设置ASR。
文字输入目前仅限于运行 main.py 的命令行模式。
所以,一切的前提,是你有一个可以用的麦克风,如果你发现所有东西都设置好了,启动也成功了,但说话没反应,后台也没有显示,那么请检查你的麦克风是不是坏的!
TTS (文字转语音)相关
edge-tts
edge-tts 遇到类似
“aiohttp.client_exceptions.WSServerHandshakeError: 403, message=’Invalid response status’, url=URL(‘wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?TrustedClientToken=6A5AA1D4EAFF4E9FB37E23D68491D6F4&ConnectionId=4b190acbbb4548049ac8faa8772ce020’)” 问题的,这个是edge-tts 在国内被微软封了,目前尚未解决。
进度可参考edge-tts 项目关于这个问题的 issue: https://github.com/rany2/edge-tts/issues/290
MeloTTS
对于Windows (和mac) 用户来说,官方提供的docker安装在本项目中并不适用,如果一定要尝试使用melotts,可以参考
【这也许是CPU推理TTS的天花板了罢——MeloTTS安装教程-哔哩哔哩】 https://b23.tv/DqYEhuW
注意:此安装方法较为小众,产生的问题请优先尝试自行解决。
CoquiTTS
默认的conf.yaml中,coqui启用的是单英文输出,如果要用中文,请更换模型,具体的值以及查看可用模型列表的方法在conf.yaml中有。
对于多语言模型,请设置speaker_wav 和language
其中speaker_wav的意思是参考音频文件,随后生成的语音的音色将以这个文件作为参考,另外这个参数与language参数有联动
language可以理解为优先语言,如果你主要以中文交流,那么这里应该设置为“zh”,同时你的参考音频也应该是中文的,还要注意对于中文参考有字数限制,应该为88字符,请注意参考音频长度(超出字符限制会报错)
这两个参数在使用单语言模型时无效。
终端
vscode中
很多人跟着Tim(也就是up主、群主)用vscode一步步操作,会有关于“怎么把右侧打东西的那块弄出来”的疑问,其实只需要随便建一个.py文件,点一下右上角的ᐅ(运行,或按F5)就可以启动了,这个就是终端之一PowerShell(可以看到在命令行的最前端有PS的缩写)(Linux、mac待补充),是Windows中相对较新且高级的,但在这个项目中一般不建议用PowerShell,原因在于项目的文档基于CMD,另外一个终端,两者在细微部分有所区别,例如启动虚拟环境时,cmd的命令可以为“open-llm-vtuber-env\Scripts\activate”,PowerShell中则为“.\open-llm-vtuber-env\Scripts\activate”这里还可能会遇到“无法执行命令”的问题,而使用cmd则不会,所以建议本项目中终端一律使用cmd
那么vscode如何切换终端类型呢,只需要在终端中输入“cmd”即可,如果你的vscode默认启动了cmd,那就更好。
favicon报错(可忽视)
这个favicon错误所有人都有的,真想避免,往static文件夹里丢一个图片 命名为favicon.ico的图片即可。但这个错误不会影响项目。
Python相关
(如无特殊标注,默认操作系统为Windows 10/11)
版本
保证你的Python版本在3.10.x~3.12.x,而且最好只安装一个版本的Python,有多的请卸载,除非你知道如何切换全局Python版本。如果你的Python版本不对,可以下载conda,conda 可以为虚拟环境单独选择Python版本。
虚拟环境
为什么要虚拟环境:
这是个很大的项目,涵盖了语大模型(LLM)、语音转文字(ASR)、文字转语音(TTS),组合在一起需要很复杂的环境,如果不隔离开来,再去用其他项目的话可能会因为环境产生很多额外麻烦,所以虚拟环境就相当于沙箱,让一个项目在单独的沙箱内运行互不干扰。如何设置虚拟环境:
接下来用“项目”代指“Open-LLM-VTuber项目”
这里,在不使用Conda等管理工具的前提下(因为学习使用他们也是耗费精力的事情)用Python自带的venv模块即可快速设置,具体操作如下:
(1)在你的项目目录下打开cmd,可以点击资源管理器的地址栏空白位置,将其变为可输入状态,然后输入“cmd”即可。或使用cd命令定位(请自行搜索教程
(2)在打开的cmd中输入“python -m venv <你想设置的名字>”例如“python -m venv open-llm-vtuber-env”这里注意虚拟环境名不要带中文,以及其他特殊字符
(3)命令执行完毕后,不会有返回值,这是正常的,同时应该能在项目目录下,看到以你设置的虚拟环境名称为名的文件夹,在示例中,是“open-llm-vtuber-env”
(4)如果没有看到对应的文件夹被创建,那么应该尝试重新安装Python,如果有其他解决方案,请修改此处启动虚拟环境:
设置好虚拟环境后,一定要记得进入虚拟环境进行任何与Python有关的操作,包括后续启动项目,这里还是以上一步创建的“open-llm-vtuber-env”为例:
(1)还是在项目目录下打开cmd,输入“open-llm-vtuber-env\Scripts\activate”,成功后,应注意到输入行前端的地址前加上了“(open-llm-vtuber-env)”代表当前在虚拟环境下,后续有些问题如模块缺失,部分就是因为没有在虚拟环境下运行。
(2)虚拟环境下,继续后续安装依赖步骤,再次强调,启动项目时,不要双击server.py直接运行,要进入虚拟环境以“python server.py”的方式运行。
安装依赖
这里比较常见的问题是pip下载速度过慢,像项目所需的torch等模块,动辄几百MB,而下载速度却以可怜的kb/s计算,解决方案也很简单,使用国内镜像源即可,设置方法如下:
打开cmd(注意虚拟环境),输入
1 | pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple” # 这里使用的是清华pypi镜像源,如需使用其他镜像源,请自行搜索设置方法。 |
设置好镜像源后即可进行后续依赖安装,即使用
1 | pip install -r requirements.txt |
cmd小贴士:像启动虚拟环境时输入“open-llm……”以及安装依赖时“-r req……txt”,适当使用键盘上的“Tab”键可快速补全,如输入“open”按下“Tab”会自动补全到“open-llm-vtuber-env\”利用这一特性也可以检测你当前是否处在正确目录下,如果没有补全,请检查你cmd打开的目录,是不是正确的项目目录。
Python版本不对会遇到的问题
安装 requirements.txt 项目依赖时报错
安装 requirements.txt 失败十有八九是 Python 版本的问题。
检查一下你的Pythonn 版本,看看是不是 3.13。3.13 不行。
如果你Python版本不对,可以使用 conda 来部署虚拟环境,因为conda 虚拟环境可以指定python版本,可以让虚拟环境里的python版本独立于你电脑上原有的Python。
运行 server.py 或 main.py 时报错,错误信息: TypeError: unsupported operand type(s) for |: ‘type’ and ‘NoneType’
一眼 python 3.10 以下。检查你的 python 版本。
如果你Python版本不对,可以使用 conda 来部署虚拟环境,因为conda 虚拟环境可以指定python版本,可以让虚拟环境里的python版本独立于你电脑上原有的Python。
- 更新时间轴
2024
11-08
终于整合的差不多了,下次把GitHub的issue也整理上