ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Project AIRI v0.5.0 开发日志解析:Character Card 角色卡体系、浏览器实时语音链路与 WebGPU 本地推理

Project AIRI v0.5.0 开发日志解析:Character Card 角色卡体系、浏览器实时语音链路与 WebGPU 本地推理 Project AIRI v0.5.0 开发日志解析Character Card 角色卡体系、浏览器实时语音链路与 WebGPU 本地推理【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi本文基于 Project AIRI 官方开发者日志 DevLog 2025.05.16即 v0.5.0 发布日志展开。日志记录了这几个月社区维护者在 Character Card角色卡支持、Tauri MCP、Android 设备接入、实时语音工作流、WebGPU 本地推理、Telegram Bot、Velin 提示词工具等多个方向的成果。读完本文你将掌握 AIRI 角色卡Airi Card从导入、编辑到运行时生效的完整链路理解 VAD/ASR/TTS 实时语音管线的设计思路并了解浏览器端 WebGPU 推理与背景移除工具的实现细节。这篇 DevLog 由 Project AIRI 发起人 Neko 撰写发布于 2025 年 5 月 16 日同时标志着 v0.5.0 版本发布。由于 3 月以来的大型 UI 重构与发布消耗了大量精力日志坦诚地提到核心功能进展趋缓大量工作由社区维护者完成——其中最突出的是 Character Card 支持LemonNekoGH、RainbowBird、LittleSound等人的贡献以及 Tauri MCP 支持与 Android 设备连接LemonNekoGH。Character Card 角色卡AIRI 的灵魂容器什么是 Character Card日志用一个 Tip 框解释了 Character Card 的概念本地优先的聊天应用如 SillyTavern、RisuAI或在线服务如 JanitorAI使用一个文件来承载每个角色的背景、性格及其他角色扮演所必需的上下文信息。角色卡是存储与分享 LLM 驱动的角色扮演角色的一种载体而 Lorebook 在角色扮演领域扮演着另一个关键角色日志提示读者可自行查阅 Voids Lorebook Types 与 AI Dynamic Storytelling Wiki 了解相关概念。在 AIRI 中这套能力被命名为Airi Card并沉淀为一个独立的协议包 packages/cccproj-airi/cccCharacter Card protocol primitives for AIRI。如何在应用内启用 Airi Card日志给出的操作路径非常明确进入应用Settings 页面网页端位于应用右上角桌面端悬停齿轮图标找到并点击Airi Card按钮打开角色卡菜单进入Airi Card 编辑器上传并编辑角色卡完成人设个性化定制。这套编辑器背后对应的是airi-card运行时 Storepackages/stage-ui/src/stores/modules/airi-card.ts以及角色卡展示组件 packages/stage-ui/src/components/menu/character-card.story.vue可在 UI 组件库中以 ReLU 为例直接试玩。CCv3 协议层解析、校验与兼容性分类社区角色卡生态的事实标准是 Character Card Spec V3CCv3。proj-airi/ccc包在 packages/ccc/src/codec/characterCardV3.ts 中实现了完整的 CCv3 JSON 信封envelope校验。核心 API 用法如下import { parseCharacterCardV3 } from proj-airi/ccc const { card, compatibility } parseCharacterCardV3(jsonText) const characterName card.data.name const versionSupport compatibility // older | current | newer该实现有三个值得注意的设计决策见 characterCardV3.ts兼容性分类resolveCompatibility将spec_version与当前版本3比较返回older | current | newer。旧版与更新版本的spec_version都可导入compatibility让调用方自行决定是否向用户告警未知字段向前兼容所有 schema 均使用objectWithRest包裹未来 CCv3 新增字段会原样保留在校验输出上不会在导入/导出时被静默删除明确错误边界JSON 损坏或结构非法时抛出InvalidCharacterCardError并保留原始sourceisInvalidCharacterCardError用于区分协议失败与存储/文件系统错误。数据契约覆盖的字段characterCardV3.ts包括name、description、personality、scenario、first_mes、mes_example、alternate_greetings、character_book角色专属 Lorebook、character_version、creator、creator_notes、extensions、post_history_instructions、system_prompt、tags、assets、group_only_greetings、nickname、source等其中extensions还定义了depth_prompt、fav、talkativeness、world等社区常用扩展字段。card.ts中的 define/card.ts 进一步提供了应用侧统一的Card类型与defineCard/defineCardFn辅助函数将 CCv3 原始字段映射为更友好的驼峰命名。应用层Airi Card 如何驱动运行时导入的角色卡并不会直接注入运行时。airi-cardStorepackages/stage-ui/src/stores/modules/airi-card.ts承担了协议 → 应用模型 → 运行时模块的桥接持久化卡片集合与激活卡片 ID 分别保存在本地存储键airi-cards与airi-card-active-id中内置default卡角色 ReLU作为所有运行时配置文件的兜底回退System Prompt 组装resolveSystemPromptairi-card.ts按固定顺序拼接systemPrompt、description、personality、scenario以及 artistry 模块的widgetInstruction用空行分隔。日志明确提到位置敏感的 CCv3 字段被刻意排除因为它们的顺序与角色语义应由 provider 消息组装层负责模块配置合并resolveAiriExtension角色卡通过 CCv3 的extensions.airi扩展携带 AIRI 专属运行时配置包括consciousness意识/LLM 的 provider 与 model、vision、speechprovider/model/voice_id以及 pitch、rate、ssml、language、displayModelId身体模型、activeBackgroundId、artistry绘画模块enabled、provider、model、promptPrefix、widgetInstruction、spawnMode、autonomousEnabled/autonomousThreshold/autonomousTarget与agents。合并时以现有配置优先、缺失时回退到全局默认值切换即生效activateCard/applyActiveCardSettings选中角色卡后其模块配置会立即写入 consciousness、speech、vision、artistry 与舞台模型等运行时 Store——也就是说切换角色卡相当于一次性切换整套人设、语音、视觉与身体模型配置。所有相关 action 均通过 Pinia 的synced选项在跨窗口间同步执行。角色卡分享Airi Card Package 格式为了分享角色卡而不只是导入他人卡AIRI 还定义了可移植的打包格式实现在 packages/stage-ui/src/services/airi-card-import-export.ts导出时生成一个 ZIP 包包含manifest.jsonformat: airi-character-card、version: 1、card.json路径及spec: chara_card_v3与card.jsonCCv3 文档若角色卡配置了显示模型则把模型文件打包进resources.displayModel支持 Live2D zip、Spine zip、Tachie zip、VRM 四种格式导入时通过 valibot schema 严格校验 manifest 与 card.json并从白名单中恢复字段airi-card-import-export.ts该格式刻意不是无损备份它只包含创建编辑器允许发送方审查的字段、经过净化的 AIRI 模块子集和所选显示模型未审查的 CCv3 元数据、自定义扩展、agent 提示词与机器本地的运行时引用都会被省略sanitizeAiri防止导入即被注入的安全风险。实时语音链路从 VAD 到 TTS 的简化革命问题旧工作流过度复杂从 4 月 15 日起作者发现 AIRI 中的 VAD语音活动检测、ASR自动语音识别与 TTS语音合成链路非常复杂且难以理解。过去没有这些抽象时需要手动包装一个队列结构再叠加上 Vue 响应式驱动的工作流系统才能把大量异步任务串起来处理数据。期间作者与himself65合作为 Llama Index 的新项目llama-flow一个用于处理 LLM 流式 token 与音频字节事件流的类型安全小型库改进与测试使用场景。得益于这种类型安全的小型库作者开始大量实验如何简化 VAD/ASR/TTS 工作流最终产出了 WebAI Realtime Voice Chat Examples 示例集——用300500 行 TypeScript即可在浏览器中实现 ChatGPT 级别的实时语音对话系统对应视频见日志附带的webai-examples-demo.MP4。该示例集按渐进式阶段拆分每一步都是可复用的小件VAD纯语音活动检测VAD ASR检测到语音后自动识别VAD ASR LLM Chat加入大模型对话VAD ASR LLM Chat TTS完整实时语音对话闭环。此外社区成员luoling还基于 k2-fsa/sherpa-onnx一个跨 macOS / Windows / Linux / Android / iOS、支持 18 种语音处理任务、12 种以上语言的项目制作了 Sherpa ONNX 版 VAD ASR LLM Chat TTS 演示。仓库中的落地产物VAD Worker这一轮探索在 AIRI 仓库内也有直接对应实现apps/stage-web/src/workers/vad/ 下的 VAD workervad.ts、manager.ts、process.worklet.ts。vad.ts 的默认配置参数值得直接参考参数默认值含义sampleRate16000采样率speechThreshold0.3判定开始说话的概率阈值exitThreshold0.1判定停止说话的概率阈值minSilenceDurationMs400最短静音时长达到即视为语句结束speechPadMs80语句前后保留的缓冲minSpeechDurationMs250最短有效语音时长maxBufferDuration30环形缓冲最大时长秒newBufferSize512每帧音频块大小模型方面通过huggingface/transformers的AutoModel.from_pretrained加载onnx-community/silero-vadfp32 精度在 Worker 线程中维护推理链将 VAD 计算完全移出主线程避免阻塞 UI。xsAI Transformers.js云端/本地一键切换VAD、ASR、Chat、TTS 一系列演示工作催生了新的子项目 xsAI Transformers.js用 Worker 承载 WebGPU 驱动的模型推理与服务同时保持与先前成功的 xsAI 项目 API 兼容。安装方式npm install xsai-transformers其意义在于日志 Tip 框你可以在云端 LLM/语音服务与本地 WebGPU 模型之间用一条 if 切换从而能够在浏览器中直接实验甚至实现简单的 RAG 与重排序系统无需任何服务端代码或后端服务器且 Node.js 同样受支持。WebGPU 背景移除内置抠图工具Character Card 生态需要大量立绘素材作者过去常手动寻找在线抠图方案。为了摆脱外部依赖他基于 Xenova 的工作在 AIRI 中集成了一个 WebGPU 驱动的背景移除工具线上体验入口为 AIRI 的devtools/background-remove。仓库中的页面实现位于 apps/stage-web/src/pages/devtools/background-removal.vue其工程要点Worker 自动降级createBackgroundRemovalAdapter()加载时自动探测 WebGPU不可用时回退到 WASMbackground-removal.vue主线程零推理图片先绘制到 canvas 取ImageData再交给adapter.processImage(imageData)在 Worker 中处理结果putImageData回 canvas 导出 PNGbackground-removal.vue批量工作流支持多图上传、自动处理开关、逐图/全部下载自动追加-background-removed文件名后缀、悬停预览并提供进度百分比与状态徽标pending / processing / done / error。Velin用前端框架编写 LLM 提示词引入 Character Card 后作者发现模板变量渲染与组件复用体验不佳。由此诞生了思考我们能不能用 Vue 或 React 这类前端框架来编写 LLM 提示词 这引出了 Velinvelin-dev/core维护可复用的组件提示词库供其他 Agent 或角色扮演应用、甚至角色卡使用。例如预设中世纪奇幻世界观魔法、巨龙创作新角色时只需专注角色本身外层包裹世界设定即可支持通过if/if-else控制流注入条件提示词例如入夜后才注入特定提示词借助 Vue SFC 或 React JSX 解析模板、识别 props在编写提示词时渲染表单面板用于调试测试将整个 lorebook 与角色卡在单个交互式页面中可视化附带可实时渲染的 Playground可导入任意 npm 包并提供编程式 API支持 MarkdownMDX 开发中MDC 已支持。安装方式npm install velin-dev/coreTelegram Bot动图贴纸与提示词瘦身日志还报告了 Telegram Bot 的更新动图贴纸理解为 Telegram Bot 增加了处理动画贴纸animated stickers的能力底层由ffmpeg驱动现在可以读取并理解用户发送的动画贴纸甚至视频。这与仓库中 integrations/telegram-bot 的数据模型drizzle 迁移中可见 sticker/媒体相关的表结构演化相互印证提示词瘦身 80%系统提示词此前过于庞大作者大幅缩减其体积节省了80% 以上的 token 用量。UI 组件与配色更新v0.5.0 的 UI 侧新增了三个组件均可在 AIRI 组件库中直接查看 storyTutorial stepper引导教程用的步骤条组件File uploadInputFile文件上传组件背景移除工具即复用了它Textarea多行文本输入组件。此外还修复了颜色相关问题并改进了排版Typography。Character Card 展示层character-card.story.vue以 ReLU 为例提供主色、辅色、背景色、文字色、文字阴影、描述文字色、副标题文字色等主题化控制项且纯 CSS 与 JavaScript 控制布局无需担心 canvas 计算。v0.5.0 里程碑回顾日志作为 v0.5.0 的发布说明汇总了过去数周的里程碑达成 700 stars新增 4 贡献者、72 Discord 新成员ReLU 角色设计、建模完成Roadmap v0.5 共完成92 项任务按类别拆解UI加载屏与教程模块、多项 bug 修复含加载状态与 Firefox 兼容性问题Body身体/动作基于语义的 Motion embedding 与 RAG开发于私有仓库moeru-ai/motion-gen使用 embedding provider 与 DuckDB WASM 进行向量存储与检索Inputs修复 Discord 语音频道语音识别Outputs实验性歌唱能力Engineering跨项目共享 UnoCSS 配置、moeru-ai/inventory中的模型目录、跨组织包重组Assets新角色素材贴纸、UI 元素、VTuber 标志、语音线选择功能、角色 Me 与 ReLU 的 Live2D 建模Community Support Marketing日文 README 与全面文档。其中DuckDB WASM 向量存储与仓库中的 packages/duckdb-wasm、packages/drizzle-duckdb-wasm 等实验包对应跨项目 UnoCSS 配置则体现在各应用根目录共享的 uno.config.ts 之上。结语这篇 DevLog 折射出 Project AIRI v0.5.0 的两条主线一是把社区成熟的角色卡生态CCv3深度内化为可运行、可分享、可主题化的 Airi Card 体系从proj-airi/ccc协议层到airi-card运行时 Store 再到分享包格式二是把浏览器端实时语音VAD/ASR/TTS与本地推理WebGPU/WASM从复杂且难懂推进到几百行代码即可复现的可教学状态。对于想为 AIRI 写角色卡、或想理解端侧多模态管线的开发者本文提到的 packages/ccc、airi-card.ts、airi-card-import-export.ts 与 vad.ts 是最直接的阅读起点。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表