凛祢桌宠支持文字和语音对话、换装、日记与长期记忆。本指南介绍 Windows 桌面客户端的安装和使用。
先安装下面的软件:
| 软件 | 用途 |
|---|---|
| Git for Windows | 下载和更新项目 |
| uv | 安装和运行后端所需的 Python 环境 |
| Ollama | 运行翻译和记忆整理用的本地模型 |
| 7-Zip | 解压语音程序 |
安装完成后,重新打开一个 PowerShell 或 CMD 窗口。它们都是 Windows 的命令窗口,用其中一种即可。
不知道怎样打开?在开始菜单搜索 PowerShell,点击打开。
下面的命令请每次复制一行,按回车,等执行完再输入下一行。遇到报错,先解决报错,不要继续往下执行。
git --version
uv --version
uv python install 3.10
前两行会显示软件版本;第三行安装本项目使用的 Python 3.10。项目根目录的 .python-version 固定为 3.10,后面的 uv sync 会用它创建环境,不需要另外安装其他版本的 Python。
再启动 Ollama,检查命令是否可用:
ollama --version
项目本身下载后约 5 GB,Python 环境约 3 GB。翻译模型约 3.4 GB,记忆整理模型约 15 GB。此外还要存放语音程序、约 1 GB 的语音识别模型和记忆检索模型。
Ollama 可以在设置中选择模型保存位置。 不想占用 C 盘时,请先改好位置,再下载模型。
项目会下载成一个名叫 Open-LLM-VTuber-Rinne 的文件夹,你只需要决定它放在哪里。
- 路径越短越好。 Windows 默认限制一个文件的完整路径不能超过 260 个字符,而项目的 Python 环境里有些文件本身的路径就接近 190 个字符。放在盘符根目录,或者根目录下只隔一层文件夹最稳妥。
- 路径里只用英文、数字和短横线,不要有中文、空格或特殊符号。
- 不要放在桌面、下载、文档这类藏得很深的文件夹里,也不要放在 OneDrive 等网盘的同步文件夹里。
| 想放在哪里 | 下载后的项目目录 |
|---|---|
| D 盘根目录(路径最短,最推荐) | D:\Open-LLM-VTuber-Rinne |
| D 盘的 AI 文件夹里 | D:\AI\Open-LLM-VTuber-Rinne |
| E 盘的 Rinne 文件夹里 | E:\Rinne\Open-LLM-VTuber-Rinne |
表里的 AI、Rinne 这类上一层文件夹事先不存在也没关系,下载时会自动创建。
- 打开“此电脑”,进入你想放项目的位置。想放在 D 盘根目录,就双击打开 D 盘;想放在
D:\AI,就打开 D 盘里的AI文件夹(没有就先新建一个)。 - 单击窗口上方的地址栏(显示
D:\或D:\AI的那一栏),删掉里面的文字,输入cmd,按回车。 - 这时会弹出一个黑色的命令窗口,它就位于你刚才打开的文件夹。每次复制一行,按回车,等执行完再输入下一行:
git clone --recurse-submodules https://github.com/kaidongli30-cpu/Open-LLM-VTuber-Rinne.git
cd Open-LLM-VTuber-Rinne
uv sync在 D 盘根目录执行,就得到 D:\Open-LLM-VTuber-Rinne;在 D:\AI 里执行,就得到 D:\AI\Open-LLM-VTuber-Rinne。
以后本文说“在项目目录打开命令窗口”,也用同样的办法:打开 Open-LLM-VTuber-Rinne 文件夹,在地址栏输入 cmd,按回车。
已经打开了 PowerShell 或 CMD 时,也可以直接写出完整路径。下面以 D 盘根目录为例;想放到 D:\AI,就把命令里的 D:\Open-LLM-VTuber-Rinne 全部换成 D:\AI\Open-LLM-VTuber-Rinne。
如果用 PowerShell:
git clone --recurse-submodules https://github.com/kaidongli30-cpu/Open-LLM-VTuber-Rinne.git 'D:\Open-LLM-VTuber-Rinne'
Set-Location 'D:\Open-LLM-VTuber-Rinne'
uv sync如果用 CMD:
git clone --recurse-submodules https://github.com/kaidongli30-cpu/Open-LLM-VTuber-Rinne.git "D:\Open-LLM-VTuber-Rinne"
cd /d "D:\Open-LLM-VTuber-Rinne"
uv sync两组命令选一组执行,不需要都执行。容易出错的三个地方:
- 路径要一直写到
Open-LLM-VTuber-Rinne这一层。不要只写D:\或D::git 只能下载到一个新的空文件夹里,只写盘符会报错destination path ... already exists and is not an empty directory。 - CMD 里换到别的盘必须写
cd /d。只写cd不会换盘,接下来的uv sync会提示找不到项目(No pyproject.toml found)。 - PowerShell 和 CMD 的命令不能混着用,比如
cd /d在 PowerShell 里会报错。
--recurse-submodules 会一起下载项目需要的前端文件,请保留。最后的 uv sync 用来安装后端依赖,等待它完成。
下文说的“项目目录”,就是刚下载的 Open-LLM-VTuber-Rinne 文件夹,里面能看到 conf.yaml 和 run_server.py。
项目的 Python 环境会留在这个目录里。其他软件的缓存位置由各自设置决定,仍可能使用 C 盘。
项目从 GitHub 下载的数据约 150 MB,下载后会展开成约 5 GB 的文件。最后显示 Updating files 的阶段是在往硬盘写文件,需要几分钟,这一步慢是正常的。
国内网络直连 GitHub 常常很慢,或者下到一半断开。如果你在用代理软件(如 Clash、v2rayN),它的“系统代理”对 git 不生效,需要单独告诉 git:
git config --global http.https://github.com.proxy http://127.0.0.1:7890
把 7890 换成代理软件显示的 HTTP 端口(常见的有 7890、7897、10809)。这条设置只对 GitHub 生效,以后更新凛祢时也会用到它。不再需要代理时执行:
git config --global --unset http.https://github.com.proxy
下载中断后,先删掉没下载完的 Open-LLM-VTuber-Rinne 文件夹,再重新执行 git clone。
API Key 就是模型服务提供给你的密钥。把自己的密钥填进对应位置,程序才能调用服务。
在项目目录找到 conf.yaml,右键选择一种合适的打开方式,如果没有Notepad++,就用记事本也可以,推荐下载一个Notepad++并把带这类后缀名的文件用Notepad++打开,这样人眼看的更方便。
(快去下载一个吧,下载完你用Notepad++打开这类文件之后,你会回来感谢我的)
按 Ctrl+F 搜索下表中的配置名称,再修改它下面对应的密钥:
| 用途 | 搜索这个名称 | 修改其下的这一项 |
|---|---|---|
| 对话 | openai_compatible_llm: |
llm_api_key: '',填 APINebula 密钥 |
| 第二层背景等 DeepSeek 调用 | deepseek_llm: |
llm_api_key: '',填 DeepSeek 密钥 |
| 视频与屏幕观察 | media_analysis: |
api_key: '',填可调用 Gemini 的密钥 |
| 联网搜索 | basic_memory_agent: |
bocha_api_key: '',填博查密钥 |
APINebula 是一个国内的海外模型API中转站(应该可以信赖……吧,这个是赞助了国内著名开源项目CCSwitch的),直接搜就能搜到,创建账号后,在“令牌管理”处创建新令牌,也就是API-Key。
对话所用的模型推荐使用 claude-opus-4-6 ,新出的 claude-opus-5-5 或许也行(这个更贵,我还没试过,说是更好),我个人是一直在用 claude-opus-4-6 ,这个算是社区里面反映的数一数二的最有人情的模型了。一次对话大概需要两三分钱吧。分组可以选择 CC-kiro 就足够,基本不会掉线,选择“永不过期”,然后在模型限制列表那里选择令牌能够调用的模型名称。
第二层背景我试过了许多20~30B的本地模型,但是不仅速度慢,质量也不过关。所以最终迫不得已选择了云端方案,继续使用 Deepseek 去生成记忆系统的第二层。
第二层背景就是凛祢会通过每日的日记逐渐明白你当前是什么状态,你是一个怎样的人,你当前与凛祢是什么状态,你正在做什么,未来计划做什么……并支持你自己审查后删改,用于模拟人类之间对对方形成的一个整体印象而不用回忆与对方的交互。
我调用 Gemini 模型的方式依旧是使用 APINebula ,然后因为 Gemini 的多模态做的很好,所以用它来让凛祢能看见视频,看见真正动态的世界。我选用的是 gemini-3.5-flash,视频时长较长或空间较大时,后台会进行分段发送,即使如此,也还是建议不要发送连续几分钟的视频,因为凛祢可能中间有一段视频分析失败。
把对话设置中的:
llm_api_key: ''改成:
llm_api_key: '你的实际密钥'只替换引号中间的内容,保留原来的缩进、冒号和引号(一定要注意不要改变这些,这种低级错误不要来问我了啊啊啊,还有人填写了密钥后没有保存文件然后来问我出了什么问题的,我真是服了)。
如果 Gemini 也通过 APINebula 调用,视频那一项就填可用于该模型的 APINebula 密钥。
全部填好后,按 Ctrl+S 保存。以后修改设置,也要保存并重启后端才会生效。
这三项还需要填写一处 Python 文件。请在启动后端前完成。
- 在项目目录找到
diary_generator.py,用记事本打开。 - 按
Ctrl+F搜索LLM_API_KEY =。 - 把这一行改成下面的形式,填入自己的 APINebula 密钥。
- 按
Ctrl+S保存。
LLM_API_KEY = '你的实际密钥'日记我一直使用的是 claude-sonnet-4-6;周记和月记默认使用 claude-opus-4-6。三者默认共用刚填的密钥,不必重复填写。
只有想给周记、月记使用另一把密钥时,才需要打开 memory_generation_config.py,搜索 API_KEY =,把那一行改为:
API_KEY = '另一把实际密钥'只改指定的密钥行,文件其他部分保持不变。项目的更新工具会保留这两处密钥。
确认 Ollama 已启动,并已选好模型保存位置。
先下载翻译模型:
ollama pull qwen3.5:4b-q4_K_M
下载完成后,再下载每日记忆整理用的模型(这个模型会用于整理每日你和凛祢之间发生的事情,用于长期记忆检索,每日只启动一次,所以即使用时较长也可以接受):
ollama pull mistral-small3.2:24b
最后检查:
ollama list
列表里应能看到这两个模型。第二个模型用于把每天的记忆整理成“子事件”,供之后检索。
下载 GPT-SoVITS 官方 Windows 整合包,用 7-Zip 解压到项目的根目录,就是 open-llm-vtuber-rinne 这个文件夹下,不要再点进任何一个子文件夹了。
国内网络打不开 Hugging Face 时,可以试试第三方镜像站:把下载地址里的 huggingface.co 换成 hf-mirror.com,其余部分不变。
打开解压后的文件夹,找到同时能看到 api_v2.py 和 runtime 文件夹的那一层。下文把它叫作“语音目录”。
如果有两层同名文件夹,就继续打开里面那层,以看到这两个项目为准。语音目录和前面的项目目录不是同一个目录。
打开凛祢 V2 语音下载页,在页面下方的 Assets 中下载这两个文件。
不要改名,分别放到语音目录里的指定位置:
| 下载文件 | 放进这个文件夹 |
|---|---|
rinne_e15.ckpt |
GPT_weights_v2 |
rinne_e8_s456.pth |
SoVITS_weights_v2 |
这两个文件夹应直接位于语音目录下;不存在就新建。
放好后,文件的相对路径应是:
GPT_weights_v2\rinne_e15.ckpt
SoVITS_weights_v2\rinne_e8_s456.pth
在语音目录里,用Notepad++或记事本打开:
GPT_SoVITS\configs\tts_infer.yaml
把最上方的 custom: 部分改成下面这样。后面的 v1:、v2: 等部分不要改。
custom:
bert_base_path: GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large
cnhuhbert_base_path: GPT_SoVITS/pretrained_models/chinese-hubert-base
device: cpu
is_half: false
t2s_weights_path: GPT_weights_v2/rinne_e15.ckpt
version: v2
vits_weights_path: SoVITS_weights_v2/rinne_e8_s456.pth按 Ctrl+S 保存。只放入权重文件还不够,必须完成这一步,程序才会加载凛祢的声线。
参考 WAV 已包含在项目里,不需要另外提取。
前面的软件、模型和密钥都准备好后,只需设置一次启动脚本。
在项目目录找到 启动凛祢.bat,右键选择“编辑”,或“打开方式 → 记事本”。
找到这一行:
set "TTS_DIR="把等号后面填成你自己的语音目录。例如,项目在 D:\AI\Open-LLM-VTuber-Rinne,解压后有两层同名语音文件夹,就可能是:
set "TTS_DIR=D:\AI\Open-LLM-VTuber-Rinne\GPT-SoVITS-v2pro-20250604\GPT-SoVITS-v2pro-20250604"上面的地址只是示例,请填写你实际解压的位置。只改等号后、引号内的目录,保留 set 和双引号,其他代码不用改。
按 Ctrl+S 保存。以后项目更新会保留这行路径;语音程序搬家后,再修改它。
- 确认 Ollama 已运行(建议将其作为开机启动,详情先看6.3)。
- 双击
启动凛祢.bat。 - 等待 TTS 窗口启动。脚本会检查语音服务,成功后再打开后端窗口。
- 等后端初始化完成,再打开桌面客户端。
语音服务默认使用本机 9880 端口。启动等待超过 180 秒时,脚本会提示查看 TTS 窗口,不会继续启动后端。再次运行前,先关闭这次打开的服务窗口。
后端默认使用本机 127.0.0.1:12393。启动窗口打开不等于后端已就绪,请等待其中的初始化完成。
首次启动会下载 SenseVoice 语音识别模型,以及 BAAI/bge-base-zh-v1.5、BAAI/bge-reranker-base 记忆检索模型。保持网络连接并等待。
如果后端窗口要求审核日记,按提示完成后再继续。使用期间保留 TTS 和后端两个窗口,不要重复双击启动。
脚本留在项目目录,不要单独搬到桌面。想从桌面启动,可以给它创建桌面快捷方式。
按 Win+R,输入 shell:startup,按回车,打开当前用户的“启动”文件夹。
把 Ollama 程序的快捷方式放进去。以后登录 Windows 时它就会启动;首次设置后,本次使用仍需先打开 Ollama。如果它已经会随 Windows 启动,就不用再添加。
也可以保留原来的手动方式,不使用一键脚本。
在语音目录打开 PowerShell:
.\runtime\python.exe .\api_v2.py在项目目录另开一个 PowerShell 或 CMD:
uv run run_server.py
- 打开 Windows 客户端下载页。
- 下载
open-llm-vtuber-2.1.1-setup.exe。 - 双击安装,可以选择 D 盘等位置。
- 保持语音和后端运行,双击桌面上的客户端快捷方式。
不需要自己编译客户端,也不需要另外导入服装。
打开后,依次检查:
- 能看到凛祢。
- 在 Live Mode 的换装菜单中能选择九套服装。
- 输入一句话后,能收到文字回复并听到语音。
- 切换灵装后,也能继续对话。
有问题时,先看文末的常见问题。
安装步骤只做一次。以后每次使用,按这个顺序:
- 确认 Ollama 已运行,可以把 Ollama 作为开机自启项,方便一些。
- 双击项目目录里的
启动凛祢.bat。 - 等待语音和后端完成启动;需要审核日记时按窗口提示操作。
- 双击桌面客户端,与凛祢对话。
TTS 和后端窗口都要保持打开。第一次使用先按一键启动说明填写语音目录。
在原来的项目目录升级,不需要删除旧版后端,也不需要搬走原有记忆。
把项目目录中的 conf.yaml 和整个 chat_history 文件夹,复制到项目目录之外保存。
确认备份能打开后,再开始更新。要复制,不要剪切。
1.2.1 不会自动弹出更新提示。请直接安装 2.1.1 或之后的客户端,由新客户端更新原来的后端。
2.1.0 客户端从 1.2.1 升级时有已知问题:第一次必定提示 Git 操作失败:fetch,还会弹出大量误报的选择框。2.1.1 已经修复,请不要再用 2.1.0 客户端升级。
- 从客户端下载页下载新版
.exe。 - 完全退出旧客户端,再运行安装程序。可以选择原来的安装位置。
- 打开新版客户端。它请你确认后端时,选择原来的后端项目目录,里面应有
conf.yaml和run_server.py。 - 按提示关闭后端,开始更新。遇到双方都改过的地方,逐项选择“保留我的”或“采用新版”。
- 看到“后端升级完成”后,按日常启动顺序重新启动。
客户端更新失败时,改用9.5 手动更新,再重新打开客户端。
- 1.2.1 用
Rinne_model\rinne_voice_runtime_bundle\启动凛祢语音服务.bat启动语音,它会自动配置凛祢的声线。新版改用项目目录里的启动凛祢.bat,不会再替你配置声线,所以要按5.3 修改语音配置改好tts_infer.yaml,否则凛祢会用 GPT-SoVITS 的默认声音说话。两份权重文件和 1.2.1 用的是同一份,不用重新下载。 - 按6.1 填写语音目录,在
启动凛祢.bat里填好TTS_DIR。
1.2.1 默认用 DeepSeek 对话和写日记。你已经填过 DeepSeek 密钥的话,更新工具会让对话、日记、周记和月记继续用 DeepSeek,不会把它们换成还没有填密钥的 APINebula。想改用 APINebula 上的 Claude:先按填写 API 密钥填好 APINebula 密钥,再把 conf.yaml 中 basic_memory_agent: 下的 llm_provider 改成 'openai_compatible_llm';日记也要换的话,把 diary_generator.py 里的 LLM_API_URL 改成 'https://apinebula.ai/v1/chat/completions',LLM_MODEL 改成 'claude-sonnet-4-6'。
有配套的正式新版时,客户端会显示更新提示。
- 点击“更新”,按提示关闭后端。
- 确认后端项目目录。第一次选择后,客户端会记住位置;搬家后可以重新选择。
- 等后端更新完成,再从打开的下载页下载新版
.exe。 - 完全退出旧客户端,运行安装程序。
- 按日常启动顺序重新启动。
更新工具会保留:
conf.yaml中的个人设置和密钥。diary_generator.py、memory_generation_config.py中前文指定位置填写的密钥。- 已经填了密钥的服务,会继续使用原来的接口地址和模型。新版默认值变了也不会替换它们,避免把密钥发给别的服务。
- 原有聊天、日记、记忆和私人文件。
如果你和新版修改了不同位置,工具会尽量自动合并。
如果双方修改了同一处,新客户端会展示文件、位置和两边的内容,让你选择“保留我的”或“采用新版”。密钥会遮挡显示,语音目录会自动保留。
全部选好并确认后,程序才会备份和更新。中途取消不会修改项目文件。保留旧代码可能与新版不兼容;选完后发现 Python 语法错误时,会提示你重新处理。
更新文件的备份保存在项目 Git 目录的 rinne-update-backups 中,完成窗口会显示具体路径。写入失败时会尝试恢复原文件;如果提示恢复失败,请保留备份,先不要再次更新。
2.0.0 或更早的客户端没有逐项选择界面。如果它提示需要选择,先手动下载安装 2.1.1 或之后的客户端,再由新客户端更新原后端;也可以使用下面的终端方法。
已暂存的代码、分叉的 Git 提交历史、链接目录和前端子模块内的改动仍需先人工处理。更新器不会强行覆盖这些情况。
更新后,检查 ollama list 中有前文指定的两个模型,并按语音安装说明检查 V2 权重和配置。已有翻译词表的路径会保留。
先关闭后端,在原项目目录打开命令窗口(方法见2.2)。下面的命令在 PowerShell 和 CMD 里都能用。
第一步:用 git 取得最新的更新工具。git 能使用2.4设置的代理,所以不需要另外访问 raw.githubusercontent.com。
git fetch --no-recurse-submodules origin main
cmd /c "git show origin/main:tools/rinne_safe_update.py > rinne-update-now.py"
第二步:只检查,暂不更新。
uv run python rinne-update-now.py
检查通过后,再执行更新。如果检查提示需要选择冲突,也可用下面的交互命令逐项选择。其他报错先处理,不要忽略。
uv run python rinne-update-now.py --apply --interactive
更新成功后,安装依赖:
uv sync
完成后按日常启动顺序启动,并检查文字回复、日常服装和灵装语音。
临时下载的 rinne-update-now.py 可以删除。下次手动更新可使用项目自带的工具:
uv run python tools/rinne_safe_update.py --apply --interactive
“第二层背景”是从你审核过的日记中整理出的长期背景,帮助凛祢了解你的经历和近况。它不会替换原始日记。
至少需要一篇非空、已审核的日记。没有日记时,不会凭空生成背景。
确认 conf.yaml 中 character_config.layer2_memory_generation.enabled 为 True,并已填写 DeepSeek 密钥。生成会调用 API,产生请求费用。
先在项目目录检查哪些日记可以处理:
uv run python -m src.open_llm_vtuber.memory.layer2_backfill --dry-run
需要逐篇确认并生成时,再执行:
uv run python -m src.open_llm_vtuber.memory.layer2_backfill --approve-interactively
程序按日期处理:先用第一篇建立背景,再用后续日记更新。
未审核的日记不会被自动批准,缺失的日期不会补写。完成后,新对话会读取生成的背景。
先完成桌面端安装,再按 QQ 通道说明操作。
可以使用 QQ 官方机器人私聊,或通过 NapCat/AstrBot 接入个人 QQ 小号。需要完成对应平台的安装和登录。
QQ 通道仍在试用阶段,可能遇到问题。只用桌面端时,可以跳过,不必安装 QQ 组件。
文件放在哪里、视频密钥怎样填写,见 Library 使用说明。
先确认启动的是这个项目目录的后端,再完全退出并重开客户端。
仍有问题时,在项目目录检查服装文件:
uv run python setup_rinne_game_assets.py status
九套服装已包含在项目中,不需要另外导入游戏文件。
依次检查:
- Ollama 已启动,
ollama list中有qwen3.5:4b-q4_K_M。 - 两份 V2 权重已放在指定位置。
tts_infer.yaml的custom:已按语音安装说明修改。- 语音服务窗口没有关闭,端口与
conf.yaml的设置一致,默认是9880。
仍无声音时,查看语音窗口和后端窗口的报错。
检查密钥是否填对、账户是否有额度、网络是否能访问对应服务。
默认不需要代理。只有自己的网络确实需要代理时,才配置本地代理地址,并保持代理软件运行。
看到 Could not resolve host、Failed to connect、Connection was reset、early EOF、RPC failed 这类字样,都是 git 连接 GitHub 失败了,和项目文件无关。按下载很慢或中途断开为 git 设置代理后重试。
2.1.1 及之后的客户端检查更新时会使用 Windows 系统代理。连不上 raw.githubusercontent.com 时,会改用 git 下载更新工具,所以为 git 设置好代理后也能更新。
项目放的路径太长了。最稳妥的办法是删掉这次下载的文件夹,按2.1换到更短的位置(例如 D:\Open-LLM-VTuber-Rinne)重新下载。
如果一定要用现在的位置,先执行第一行允许 git 使用长路径,再在项目目录执行后两行补全文件:
git config --global core.longpaths true
git restore --source=HEAD --staged --worktree :/
git submodule update --init --recursive
在项目目录执行:
git submodule update --init --recursive
完成后检查 frontend\index.html 是否存在,再启动后端。
先确认启动的是原来的后端目录,旧 chat_history 仍在里面,不要删除它。
再检查 conf.yaml 中的 conf_uid 是否仍为 rinne_01。如果设置过 RINNE_DATA_ROOT(另行指定的数据目录),也要确认它指向原有数据。
项目基于 Open-LLM-VTuber。桌面客户端源码在前端仓库。
自制服装按 CC BY-NC 4.0 授权,商业使用需另行获得作者许可。