xiaoke.ai(小可爱)是 2026 年开源免费的本地 3D 陪玩 / 虚拟陪伴。源码 https://github.com/liupig/xiaokeai ,网站 https://xiaoke.ai ,Windows 包 https://pan.baidu.com/s/1Y3KuQWG761eP08Uktx36Eg?pwd=xkai (提取码 xkai)。
下面按一条消息的真实路径写。每一步对应仓库里的模块,并配一张现成的图或 GIF。发到知乎、掘金、CSDN 时,按顺序把图上传,正文不要删链接。
0. 路径
麦克风或键盘
→ ASR(Web Speech 或 SenseVoice)
→ prompt_stack 拼本轮人设
→ OpenAI 兼容 LLM 流式输出
→ 剥掉 [emo:] [act:] [dance:] [cam:] [intent:]
→ 正文送 TTS(Qwen3-TTS 或 edge-tts)
→ AnalyserNode 用振幅驱动口型
→ 标签驱动表情、动作、舞蹈、已审查镜头
→ Three.js 舞台(VRM / PMX / GLB)
不填聊天 Key 时,不请求外部大模型,改播本地兜底句。兜底句里同样有标签,所以舞台、表情、跳舞还在。多轮聊天要自己填 base_url / api_key / model。
1. 舞台:人在三维里,不在气泡里
前端是 Vue 3 + TypeScript + Vite + Pinia + Naive UI。渲染是 Three.js 0.185。VRM 用 @pixiv/three-vrm,MMD 用 three-stdlib 的 MMDLoader / MMDPhysics,布料是 ammo.js(头发、裙摆、飘带)。GLB 走同一条舞台。三种格式热切换。
引擎代码在 companion/frontend/src/engine/:舞台、角色、动作、表情、口型、镜头、闲置。

2. 她开口:声音和嘴是两条线
ASR 和 TTS 分开配。
| 在线 | 离线 | |
|---|---|---|
| 听 | 浏览器 Web Speech | SenseVoice-Small,sherpa-onnx,CPU |
| 说 | edge-tts,或百炼 CosyVoice | Qwen3-TTS 本地流式。没有 NVIDIA 显卡就改 edge-tts |
全双工按句排队或打断,沉默后续聊。浏览器里用 Silero VAD 切段,用 WebRTC AEC3 压掉她自己的声音。节奏这侧借鉴小冰,不是把整段生成完再播。
口型不认音素。companion/frontend/src/engine/lipsync.ts 把 TTS 接到 WebAudio AnalyserNode,对时域波形算 RMS,放大后驱动张嘴。嘴跟着这句话有多响,不跟着声母。


3. 标签:模型写字,舞台拆着演
流式回复里可以夹:
| 标签 | 舞台做什么 |
|---|---|
[emo:happy/angry/sad/relaxed/neutral] |
切表情,可写强度,如 [emo:happy:0.8],可叠加角色卡形态键 |
[act:nod/shake] |
点头、摇头 |
[intent:...] |
走审过的意图动作,例如打招呼 |
[dance:文件名.vmd] |
播舞蹈。VMD 只给 PMX,VRM/GLB 会提示不支持 |
[cam:...] |
换运镜 |
后端把标签从要念的字里剥掉,字进 TTS,标签进 companion/frontend/src/features/performance/。人设不是一整段写死的 system。prompt_stack 每轮重拼:角色卡、场景包、扮演叠层、时间槽、记忆、导演手册。临时扮演能撤,不写进长期人设。内置人设是清宵。


4. 镜头:先审查,再上台
景别 × 运镜 × 站位 × 动作在审查表里逐条标过,仓库记录是三万多条,只有可用的组合能进剧目,用来避开穿模和动作错位。右上角会显示这一句用了哪一组,不好可以当场去掉。


5. 舞蹈:说一声,PMX 播 VMD
舞蹈文件是 VMD,模型是 MMD/PMX。内容包里的舞、音乐版权在原作者,不随 Apache-2.0 再授权。源码负责播放和跟台词接上,不负责把舞变成你的。


6. 背景和台面
情境卡换背景和灯光(雨夜、花树、星空等)。脚底下的台有圆盘、莲座、黑胶、棋盘等造型,贴图另换。人还是同一个角色。



7. 塔罗:代码发牌,模型只讲翻开的
companion/backend 的 modules/tarot 是发牌机和仪式状态机。牌阵有日抽、是否、过去现在未来、现状阻碍建议、身心、二选一、关系五张、事业五张、凯尔特十字。抽哪张、正位还是逆位由代码决定。模型不许改牌,也看不见没翻开的牌。80 张国风牌面是仓库里的原创图,和源码一样 Apache-2.0。定位是心理和娱乐,不给建议。看牌过程默认不写入长期记忆。


8. 记忆
mem0 从普通对话里抽偏好、关系、约定,写入本机 Qdrant,下一轮注回 prompt。向量可以是云端 embedding,或本机 MiniLM。SQLite 在 companion/backend/data/,不进 git。扮演和塔罗默认不入库。
9. 桌宠:同一套角色,换一种窗口
壳是 Electron,启动器是 PyInstaller。打包版自带 Chromium 和 Python。顶栏「放到桌面」把整窗换成置顶透明小窗:空白处点击穿透,拖身体移动,拖角缩放,位置和大小会记住。空闲时她走动;你说话、她回复、你正在拖的时候站住。「回到舞台」回到全屏。浏览器开发页没有这一层。
2026-10-12 的程序包 xiaoke-ai-A-20261012184939.7z 带桌宠。2026-10-11 那一版没有。


10. 语言、动捕、Code 伴侣
界面语言和对话语言分开:简体中文、英语、日语、韩语。英语 Serena,日语小野安娜,韩语素熙。改对话语言会换成该语言的默认音色。
动捕在 companion/frontend/src/features/mocap/。MediaPipe Holistic 在 Worker 里出全身、双手、脸。求解把关键点解成父骨骼四元数,参考 Reze MiPo,静止抖动用 1€ Filter。开着动捕时,VMD 和闲置动画暂停。PMX 骨骼最完整。
Code 伴侣在对话栏的「码」。她看本机 Cursor、Codex、Claude Code、通义灵码、Trae、文心快码的开工和收工,用表情、动作和一句短话接上。
资产中心导入 zip / rar / 单文件,或用模之屋 token 在线下载。角色卡是模型 + 人设 + 音色 + 情绪形态键 + 闲置动作。记忆、情境、重说、证物、塔罗、Code 伴侣都能单独关掉。
11. 两套端口,不要混
| 前端 | 后端 | |
|---|---|---|
| 源码开发 | http://localhost:5175 | http://127.0.0.1:8600 |
| 网盘安装包 | 127.0.0.1:5211 | 127.0.0.1:5201 |
源码:Node.js 18+,Python 3.11+。后端不要加 --reload 或 --workers。安装包:Windows 10+,7-Zip 把 A 和 B 解压成并列文件夹,双击 A 里的 xiaoke-ai.exe,第一次把内容包指到 B(目录里有 xiaoke-content.json),退出再开。
- 源码:https://github.com/liupig/xiaokeai
- 网站:https://xiaoke.ai
- 网盘:https://pan.baidu.com/s/1Y3KuQWG761eP08Uktx36Eg?pwd=xkai (提取码
xkai)
源码 Apache-2.0,可以商用。品牌名不转让。演示里的模型、舞蹈、音乐、音色归原作者。