仓库地址:github.com/moeru-ai/ai… 在线体验:airi.moeru.ai
一、这是什么?为什么要做这个?
你有没有想过,拥有一个像 Neuro-sama 那样的 AI 虚拟主播——她能陪你聊天、一起打游戏、看着你写代码,甚至能实时语音对话?
Neuro-sama 是目前最著名的 AI 虚拟直播主,她能玩 Minecraft、和观众聊天、甚至打 osu!——但她是闭源的,下线了就消失了,你也无法把她"带回家"。
Project AIRI(アイリ) 就是要打破这个局面:一个完全自托管、你做主的 AI 虚拟伴侣框架,灵感来自 Neuro-sama,梦想是让每个人都能拥有自己的"数字生命"。
你问:AIRI 能做什么?
✅ 实时语音对话(浏览器麦克风 / Discord)
✅ 控制 Live2D 或 VRM 3D 虚拟形象(嘴型同步、眼神追踪、自动眨眼)
✅ 玩 Minecraft(通过 Mineflayer 自动化)
✅ 玩 Factorio(通过 RCON API 自动化,WIP)
✅ 在 Telegram / Discord 聊天
✅ 纯浏览器端本地推理(WebGPU,无需服务器)
✅ 记忆系统(DuckDB WASM / PGVector)
✅ 插件系统(Home Assistant / Bilibili / Claude Code / 棋类游戏…)
✅ 跨平台:Web / macOS / Windows / iOS(PWA)
二、整体架构:一图胜千文
先从全局看懂这个系统的结构,再深入各个部分。
2.1 整体分层架构
┌─────────────────────────────────────────────────────────────────┐
│ 用户界面层 (Stage) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ stage-web │ │stage-tamagot-│ │ stage-pocket │ │
│ │ (浏览器版) │ │ chi(桌面版) │ │ (手机版) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │
│ └─────────────────┴──────────────────────┘ │
│ ↓ │
│ ┌────────────────┐ │
│ │ stage-ui │ ← 核心业务组件/Store/逻辑 │
│ │ (共享UI包) │ │
│ └───────┬────────┘ │
└───────────────────────────┼─────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 能力层 (Packages) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │core-agent│ │ audio │ │ stage-ui │ │ server-runtime │ │
│ │(AI代理 │ │(音频处理)│ │ -live2d │ │ (服务端运行时) │ │
│ │ 逻辑) │ │ │ │ -three │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │
│ │ memory │ │plugin-sdk│ │ xsAI │ │ duckdb-wasm │ │
│ │(记忆系统)│ │(插件SDK) │ │(LLM接入) │ │ (浏览器数据库)│ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 集成层 (Integrations & Agents) │
│ │
│ ┌────────────────┐ ┌──────────────────────────────────────┐ │
│ │ Minecraft Agent│ │ Factorio Agent │ │
│ │ (Mineflayer) │ │ (Factorio RCON API + autorio) │ │
│ └────────────────┘ └──────────────────────────────────────┘ │
│ │
│ ┌────────────────┐ ┌──────────────────────────────────────┐ │
│ │ Discord/TG │ │ VSCode Integration │ │
│ │ Chat Bridge │ │ (看你写代码的那只AI) │ │
│ └────────────────┘ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
2.2 声音处理全链路流程
这是 AIRI 实现"听→想→说"的完整管道:
┌─────────────┐ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 麦克风输入 │───▶│ VAD检测 │───▶│ STT语音识别 │───▶│ LLM思考 │
│ (WebAudio) │ │(说话检测) │ │ (浏览器本地 │ │ (xsAI) │
│ │ │ │ │ 或 unspeech │ │ │
└─────────────┘ └─────────────┘ └──────────────┘ └──────┬───────┘
│
┌──────────────────────────────────────────────────────────┘
↓
┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ TTS语音合成 │───▶│ 音频播放 │───▶│ 模型口型同步 │
│ (ElevenLabs │ │ │ │ (Live2D/VRM │
│ 或本地推理) │ │ │ │ Lipsync) │
└──────────────┘ └─────────────┘ └──────────────┘
2.3 插件系统架构
┌──────────────────────────────────────────────┐
│ Plugin Host │
│ ┌─────────────────────────────────────────┐ │
│ │ Plugin SDK (通信层) │ │
│ │ ┌──────────────┐ ┌───────────────┐ │ │
│ │ │ ContextInit │ │ Plugin接口 │ │ │
│ │ │ .channels │ │ .init() │ │ │
│ │ │ .apis │ │ .setupModules│ │ │
│ │ └──────────────┘ └───────────────┘ │ │
│ │ ↕ Eventa (类型安全IPC/RPC) │ │
│ └─────────────────────────────────────────┘ │
└──────────────────────────────────────────────┘
↕ ↕ ↕
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ plugin- │ │ plugin- │ │ plugin- │
│ bilibili │ │ chess │ │ homeassist │
│ (弹幕读取) │ │ (下棋游戏) │ │ (智能家居) │
└──────────────┘ └──────────────┘ └──────────────┘
三、Monorepo 目录结构详解
AIRI 是一个 pnpm + Turborepo 管理的 monorepo,理解目录结构是参与开发的第一步。
airi/
├── apps/ # 🖥️ 最终产品应用
│ ├── stage-web/ # 浏览器版(airi.moeru.ai)
│ ├── stage-tamagotchi/ # 桌面版(Electron,macOS/Windows)
│ ├── stage-pocket/ # 手机版(Capacitor,iOS/Android)
│ ├── server/ # 后端服务
│ └── ui-server-auth/ # 认证UI
│
├── packages/ # 📦 可复用功能包(45个)
│ ├── core-agent/ # AI代理核心逻辑
│ ├── core-character/ # 角色定义
│ ├── stage-ui/ # 核心业务UI(Store + 组件 + Composable)
│ ├── stage-ui-live2d/ # Live2D渲染
│ ├── stage-ui-three/ # Three.js 3D渲染
│ ├── audio/ # 音频工具
│ ├── plugin-sdk/ # 插件开发SDK
│ ├── plugin-sdk-tamagotchi/ # 桌面端插件SDK扩展
│ ├── server-runtime/ # 服务端运行时
│ ├── server-sdk/ # 服务端SDK
│ ├── duckdb-wasm/ # 浏览器端数据库
│ ├── memory-pgvector/ # 向量记忆存储
│ ├── model-driver-lipsync/ # 口型同步驱动
│ ├── model-driver-mediapipe/ # MediaPipe 面部追踪
│ ├── stream-kit/ # 流媒体工具
│ ├── ui/ # 基础UI组件(基于 reka-ui)
│ └── i18n/ # 国际化翻译
│
├── plugins/ # 🔌 官方插件
│ ├── airi-plugin-bilibili-laplace/ # B站弹幕
│ ├── airi-plugin-claude-code/ # Claude Code集成
│ ├── airi-plugin-game-chess/ # 下棋
│ ├── airi-plugin-homeassistant/ # 智能家居(WIP)
│ └── airi-plugin-web-extension/ # 浏览器插件
│
├── integrations/ # 🔗 第三方集成
│ └── vscode/ # VSCode插件
│
├── services/ # 🌐 后端微服务
└── docs/ # 📚 文档站(VitePress)
四、技术栈全景
| 层面 | 技术 |
|---|---|
| 前端框架 | Vue 3 + Vue Router + Pinia + VueUse |
| 构建工具 | Vite + Turborepo + pnpm workspace |
| 桌面端 | Electron + electron-vite |
| 移动端 | Capacitor(iOS/Android) |
| 样式 | UnoCSS(Tailwind 超集) |
| UI 组件 | Reka UI(无头组件库) |
| 类型检查 | TypeScript + vue-tsc |
| 测试 | Vitest |
| Lint | ESLint(统一配置) |
| 3D 渲染 | Three.js(VRM 模型) |
| 2D 渲染 | Live2D Cubism SDK |
| AI 接入 | xsAI(Vercel AI SDK 的轻量替代) |
| 音频 | WebAudio + WebAssembly(VAD) |
| 数据库 | DuckDB WASM(浏览器内)+ PGVector(向量) |
| IPC/RPC | Eventa(类型安全事件总线) |
| 依赖注入 | injeca |
| Schema验证 | Valibot |
| 游戏接入 | Mineflayer(Minecraft)+ RCON API(Factorio) |
五、快速上手:从零到运行
5.1 环境准备
# 需要 Node.js 20+,推荐用 mise(原 asdf)管理版本
# 项目根目录有 .tool-versions 文件定义版本
# 安装 pnpm(如果没有)
npm install -g pnpm
# 克隆仓库
git clone https://github.com/moeru-ai/airi.git
cd airi
# 安装所有依赖(会自动处理 workspace 关系)
pnpm i
5.2 启动各个版本
# 🌐 启动浏览器版(最简单,推荐新手从这里开始)
pnpm dev
# 访问 http://localhost:5173
# 🖥️ 启动桌面版(需要先看 CONTRIBUTING.md 配置 Electron 环境)
pnpm dev:tamagotchi
# 📱 启动手机版(需要 Xcode/Android Studio)
pnpm dev:pocket:ios --target <DEVICE_ID>
# 📚 启动文档站
pnpm dev:docs
5.3 Nix 用户的优雅方案
# 直接运行,不需要手动配置环境
nix run github:moeru-ai/airi
# NixOS 上运行桌面版(Electron 需要 FHS 兼容层)
nix develop .#fhs
pnpm dev:tamagotchi
# Windows 用户可以用 Scoop
scoop bucket add airi https://github.com/moeru-ai/airi
scoop install airi/airi
六、核心概念深度解析
6.1 LLM Provider 接入:xsAI
AIRI 使用 xsAI 作为统一的 LLM 调用层,它类似 Vercel AI SDK 但体积更小。项目内置了超过 30 个 LLM 服务提供商的支持:
支持的提供商(部分):
OpenAI / Anthropic Claude / DeepSeek / Qwen / Gemini
Ollama(本地) / vLLM(本地) / SGLang(本地)
OpenRouter / AIHubMix / 302.AI
Groq / Mistral / Cloudflare Workers AI
国内:Zhipu / SiliconFlow / MiniMax / Moonshot / Baichuan...
在 UI 设置中,你可以选择任意一个提供商并填入 API Key,AIRI 会通过统一接口调用。
6.2 角色系统(Character)
AIRI 的核心抽象之一是"角色"。每个角色定义了:
- 名字、性格描述(System Prompt)
- 使用的 TTS 音色
- 绑定的 Live2D 或 VRM 模型
- 记忆配置
// packages/core-character 定义角色的数据结构(简化示意)
interface Character {
id: string
name: string
systemPrompt: string // 角色的人设 prompt
voiceId?: string // TTS 音色ID
modelType: 'live2d' | 'vrm'
modelPath?: string
}
6.3 Stage(舞台):三端共用一套逻辑
AIRI 的精妙之处在于 "Stage" 抽象——Web、桌面、手机三个端共享同一套业务逻辑(packages/stage-ui),但各自有独立的运行时适配层:
┌─────────────────────────────────────────────────────┐
│ packages/stage-ui │
│ (业务逻辑、Store、组件 - 三端共享) │
│ │
│ stores/llm.ts → LLM 对话状态管理 │
│ stores/chat.ts → 聊天历史管理 │
│ stores/audio.ts → 音频设备管理 │
│ stores/live2d.ts → Live2D 模型状态 │
│ stores/providers.ts → LLM/TTS/STT 提供商配置 │
│ stores/mcp.ts → MCP 工具调用 │
└────────────────┬─────────────────┬───────────────────┘
↓ ↓
┌────────────────┐ ┌──────────────────┐
│ stage-web │ │stage-tamagotchi │
│ (Vite 构建) │ │(Electron+IPC) │
└────────────────┘ └──────────────────┘
6.4 IPC 通信:Eventa
桌面版需要在 Electron 主进程和渲染进程之间通信。AIRI 使用自研的 Eventa 库来做类型安全的 IPC/RPC,避免了 ipcMain.on('some-string') 这种容易出错的字符串匹配方式:
// 定义通信契约(类型安全)
// apps/stage-tamagotchi/src/shared/events.ts
// 发送(渲染进程 → 主进程)
await events.invoke('window:minimize')
// 监听(主进程处理)
events.handle('window:minimize', () => {
mainWindow.minimize()
})
七、示例:由简到难
🟢 初级示例:修改角色人设
最简单的玩法——给 AIRI 换个人设,让她扮演一个不同的角色。
打开 AIRI 的设置页面(Settings → Character),找到 System Prompt 字段,修改为:
你是一只傲娇的猫娘,名字叫「凛」。
你说话简短、带点傲气,但内心其实很在乎用户。
每次回答都要带上一个"喵~"或"哼"。
不要超过3句话。
保存后重新对话,AIRI 就会以这个人设跟你互动了。
🟡 中级示例:接入本地 Ollama 模型
不想花钱用 API?用本地 Ollama 运行开源模型:
# 第1步:安装并启动 Ollama
# 下载地址:https://ollama.ai
ollama pull qwen2.5:7b # 拉取千问模型(约4GB)
ollama serve # 启动本地服务(默认 11434 端口)
# 第2步:在 AIRI 设置中配置
Settings → LLM Provider → 选择 "Ollama"
Base URL: http://localhost:11434
Model: qwen2.5:7b
现在 AIRI 就完全在你本地运行,数据不出门!
🟡 中级示例:开启实时语音对话
# 在 AIRI 设置中:
1. Settings → Speech → STT(语音识别)
→ 选择 "Browser Native"(浏览器原生,无需API)
→ 或选择 "Whisper" 本地推理(需要 WebGPU 支持)
2. Settings → Speech → TTS(语音合成)
→ 选择 "ElevenLabs",填入 API Key
→ 或选择本地 TTS(如 Edge TTS)
3. 点击页面右下角的麦克风图标开启对话
说话时,你会看到 Live2D 模型的嘴型实时跟着动。
🟠 进阶示例:让 AIRI 陪你玩 Minecraft
这需要启动桌面版(stage-tamagotchi)和 Minecraft 服务器。
# 第1步:启动桌面版
pnpm dev:tamagotchi
# 第2步:在设置中配置 Minecraft
Settings → Minecraft Agent:
Server IP: localhost
Port: 25565
Bot Name: AIRI
LLM Provider: (选择你配置好的)
AIRI 会通过 Mineflayer(Node.js Minecraft 机器人库)连入游戏,能够自主探索、挖矿、对话,甚至响应你在游戏内说的话:
# Minecraft 聊天中发送:
[你] AIRI,帮我挖点煤炭
[AIRI] 好的!我去找找附近的洞穴~ 喵
# AIRI 的角色会自己开始行动
AIRI 玩 Minecraft 的技术栈:
server-runtime → Minecraft Agent → Mineflayer → 服务器
↑ ↑
xsAI LLM (定期截图分析 + 执行指令)
🔴 高级示例:开发一个自定义插件
插件系统是 AIRI 最强大的扩展机制。下面从零实现一个"天气播报"插件,让 AIRI 能定期播报天气。
第1步:创建插件包
# 在 plugins/ 目录下创建新包
mkdir plugins/airi-plugin-weather
cd plugins/airi-plugin-weather
// package.json
{
"name": "airi-plugin-weather",
"version": "0.1.0",
"type": "module",
"main": "./src/index.ts",
"dependencies": {
"@proj-airi/plugin-sdk": "workspace:*"
}
}
第2步:实现插件逻辑
// plugins/airi-plugin-weather/src/index.ts
import type { Plugin } from '@proj-airi/plugin-sdk'
// 定义插件,实现 Plugin 接口
export const plugin: Plugin = {
// init 在插件被宿主加载时执行
async init(ctx) {
console.log('[weather-plugin] 初始化天气插件...')
// 订阅宿主事件(例如每分钟触发)
ctx.channels.host.on('tick:minute', async () => {
const weather = await fetchWeather('Beijing')
// 通过 APIs 向 AIRI 的 LLM 注入上下文
await ctx.apis.chat.injectSystemMessage(
`当前北京天气:${weather.desc},气温 ${weather.temp}°C`
)
})
},
// setupModules 可以注册额外的 MCP 工具
async setupModules(ctx) {
// 注册一个工具,让 AIRI 可以主动查询天气
await ctx.apis.tools.register({
name: 'get_weather',
description: '查询指定城市的实时天气',
parameters: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名称' }
},
required: ['city']
},
execute: async ({ city }) => {
const data = await fetchWeather(city)
return `${city}现在${data.desc},气温${data.temp}°C,湿度${data.humidity}%`
}
})
}
}
async function fetchWeather(city: string) {
// 调用天气 API(示意)
const res = await fetch(`https://wttr.in/${city}?format=j1`)
const data = await res.json()
return {
desc: data.current_condition[0].weatherDesc[0].value,
temp: data.current_condition[0].temp_C,
humidity: data.current_condition[0].humidity
}
}
第3步:在桌面版加载插件
在 stage-tamagotchi 的插件设置界面,选择"从本地文件加载",指向你的插件包入口文件即可。
加载后,你就可以问 AIRI:"北京今天天气怎么样?",她会实时查询后告诉你。
🔴 高级示例:自定义 Live2D 模型
AIRI 支持导入你自己制作或购买的 Live2D 模型:
1. 准备 .moc3 格式的 Live2D 模型文件
2. 打开 Settings → Display Model → Add Custom Model
3. 上传模型文件夹(包含 .moc3, .model3.json, 贴图等)
4. 配置骨骼绑定:
- MouthOpen → 开口说话
- EyeBlink → 自动眨眼
- HeadX/HeadY → 鼠标跟随视线
如果你是开发者,可以深入 packages/stage-ui-live2d 自定义更多动作:
// packages/stage-ui-live2d 内部实现示意
import { useLive2DModel } from '@proj-airi/stage-ui-live2d'
const { model, setExpression, triggerMotion } = useLive2DModel()
// 根据 LLM 返回的情绪标签触发表情
watch(emotionTag, (tag) => {
if (tag === 'happy') setExpression('smile')
if (tag === 'surprised') triggerMotion('surprise')
})
// 根据 TTS 音频实时驱动嘴型
onAudioAmplitude((amplitude) => {
model.setParameterValueById('ParamMouthOpenY', amplitude)
})
八、记忆系统:让 AIRI 记住你
AIRI 内置了两套记忆方案,支持在浏览器内完整运行:
8.1 DuckDB WASM(结构化记忆)
┌─────────────────────────────────────────────────┐
│ 浏览器内存储(无需服务器) │
│ │
│ @proj-airi/duckdb-wasm │
│ └─→ @proj-airi/drizzle-duckdb-wasm │
│ (Drizzle ORM 适配器) │
│ ↓ │
│ 存储对话历史、用户偏好、角色记忆... │
│ │
│ DuckDB WASM 的优势: │
│ ✅ 完全在浏览器内运行(WebAssembly) │
│ ✅ 支持完整 SQL 查询 │
│ ✅ 数据存在 IndexedDB,刷新不丢失 │
└─────────────────────────────────────────────────┘
8.2 PGVector(语义记忆/RAG)
// packages/memory-pgvector 提供向量记忆存储
// 用于 RAG(检索增强生成),让 AIRI 能"想起"相关记忆
// 存入一段记忆
await memory.store({
content: '用户喜欢听爵士乐',
embedding: await getEmbedding('用户喜欢听爵士乐'),
metadata: { timestamp: Date.now() }
})
// 语义搜索:找到相关记忆注入上下文
const related = await memory.search('用户的音乐喜好', { topK: 3 })
// → 返回:"用户喜欢听爵士乐"(语义相关)
九、服务端通道:让插件能玩游戏
AIRI 的游戏代理(Minecraft、Factorio)依赖一套服务端运行时(Server Runtime),它负责在后端维持游戏连接,并通过 WebSocket 通道将游戏画面、状态同步给前端的 AIRI 核心。
┌──────────────────────────────────────────────────────┐
│ AIRI 桌面/浏览器端 │
│ (stage-tamagotchi) │
│ │
│ server-sdk → WebSocket ────────────────────────┐ │
└───────────────────────────────────────────────────────┘
│
WebSocket
│
┌──────────────────────────────────────────────────────┐
│ server-runtime │
│ │
│ ┌──────────────┐ ┌───────────────────────┐ │
│ │ Minecraft │ │ Factorio Agent │ │
│ │ Agent │ │ RCON API wrapper │ │
│ │ (Mineflayer) │ │ (autorio mod) │ │
│ └──────┬───────┘ └──────────┬────────────┘ │
└──────────┼──────────────────────────┼────────────────┘
↓ ↓
Minecraft Server Factorio Server
十、开发者工作流
10.1 日常开发命令
# 只构建/测试特定包(用 workspace filter,速度快)
pnpm -F @proj-airi/stage-ui build
pnpm -F @proj-airi/stage-tamagotchi typecheck
# 运行特定测试文件
pnpm exec vitest run packages/stage-ui/src/stores/llm.test.ts
# 运行所有测试
pnpm test:run
# 代码检查 & 自动修复格式
pnpm lint
pnpm lint:fix
# 发布版本(基于 bumpp)
npx bumpp --no-commit --no-tag
10.2 添加新功能的正确姿势
AIRI 团队有一套清晰的代码规范(定义在 AGENTS.md 中):
// ✅ 正确:用数组形式写 UnoCSS 类名,便于阅读
:class="[
'px-2 py-1',
'flex items-center',
'bg-white/50 dark:bg-black/50'
]"
// ❌ 错误:一长串类名
class="px-2 py-1 flex items-center bg-white/50 dark:bg-black/50"
// ✅ 正确:用 errorMessageFrom 处理错误
import { errorMessageFrom } from '@moeru/std'
const msg = errorMessageFrom(error) ?? '未知错误'
// ❌ 错误:手动判断 Error 类型
const msg = error instanceof Error ? error.message : String(error)
// ✅ 正确:IPC 用 Eventa(类型安全)
events.handle('window:close', () => mainWindow.close())
// ❌ 错误:裸字符串 ipcMain
ipcMain.on('window:close', () => mainWindow.close())
十一、子生态:AIRI 孵化的相关项目
AIRI 在发展过程中孵化了很多独立的小工具,可以单独使用:
| 项目 | 功能 | 适合谁用 |
|---|---|---|
| unspeech | 统一的语音 API 代理(像 LiteLLM 但针对 STT/TTS) | 需要接多个语音服务的开发者 |
| xsai | 超轻量的 LLM 调用 SDK | 想要比 Vercel AI SDK 更小体积的项目 |
| @proj-airi/duckdb-wasm | 简化封装的浏览器端 DuckDB | 需要在浏览器里跑 SQL 的项目 |
| AIRI Factorio | 让 AI 玩 Factorio 的框架 | 游戏 AI 研究者 |
| Velin | 用 Vue SFC 写 LLM Prompt | 需要复杂 Prompt 状态管理的开发者 |
| MCP Launcher | 一键管理所有 MCP 服务器(像 Ollama 管模型一样管 MCP) | 重度 MCP 用户 |
十二、常见问题 & 注意事项
Q:性能如何?Web 版会很慢吗? A:Web 版主要展示"浏览器能做什么"的可能性。桌面版(Electron)会使用原生 NVIDIA CUDA / Apple Metal 加速推理,不用担心性能问题。
Q:数据安全吗?会上传我的对话吗? A:完全自托管,你的数据只存在你自己的机器上。如果用本地 Ollama/vLLM,连 API 请求都不出门。
Q:目前项目的成熟度如何? A:处于活跃开发阶段(当前版本 v0.9.x)。核心语音对话、Live2D/VRM 渲染、Minecraft 游玩已相对完整;插件系统 API 仍在快速迭代,不保证向后兼容。
⚠️ 重要提醒:官方声明没有发行任何加密货币或代币,遇到声称与 AIRI 相关的代币请务必警惕。
十三、参与贡献
AIRI 是一个开放的社区项目,欢迎各种形式的贡献:
🎨 艺术/设计
→ Live2D / VRM 模型建模
→ UI 设计、动效设计
🤖 AI/ML
→ 语音识别(STT)优化
→ 语音合成(TTS)研究
→ 计算机视觉(面部追踪)
→ 强化学习(游戏 AI)
💻 前端/全栈
→ Vue 3 组件开发
→ Three.js / WebGL 渲染
→ WebGPU 推理优化
→ Electron / Capacitor 适配
🌐 本地化
→ 翻译项目在 Crowdin 上管理
加入 Discord 社区,介绍自己