pulsareonbot a0c4ca2307 feat(M2.1): AI 语音对话插件骨架 + 模型管理 + HTTP API + config schema 扩展
这是 M2.1(语音数字生命 V1)的后端骨架实现,不含 Web UI / Flutter / 设备部署。

新增文件:
- src/plugins/ai/mod.rs: AiPlugin 薄层(持有 ChatPipeline Arc,处理消息系统联动)
- src/plugins/ai/backend.rs: AiBackend trait + LocalCliBackend (whisper-cli/llama-cli/piper 子进程)
  + CloudBackend 占位(V1 返回"暂未支持")
- src/plugins/ai/chat.rs: ChatPipeline 对话管线执行器(HTTP 层 spawn_blocking 直接调用)
- src/plugins/ai/model_manager.rs: ModelManager 模型资产管理
  (清单/下载/切换/删除/配额/档位守门,参照 plugin_repo + version_manager 模式)

修改文件:
- src/core/message.rs: 新增 ChatRequest/ChatResponse/AiModelEvent 消息类型
- src/core/config.rs: AppConfig 新增 character 块(角色元信息+人设)+ ai 块(后端配置)
  均为 #[serde(default)] 向后兼容旧配置
- src/plugins/mod.rs: 注册 ai 模块
- src/plugins/http/mod.rs: HttpState 新增 ai_pipeline + ai_models 字段及注册方法;
  HttpPlugin 新增 set_ai_pipeline/set_ai_models 方法
- src/plugins/http/routes.rs: 新增 6 个 AI 相关路由
  - POST /api/chat/text (文字对话,Web 端主路径)
  - POST /api/chat/audio (语音对话,App 主路径)
  - GET /api/models (模型清单+水位+配额)
  - POST /api/models/download (下载模型,后台线程执行)
  - POST /api/models/switch (切换激活模型)
  - POST /api/models/delete (删除模型,保护当前激活)
- src/main.rs: 注册 AiPlugin,连接 pipeline 到 HttpPlugin

技术决策:
- 对话管线用 spawn_blocking 而非消息系统,满足 HTTP 同步响应需求
- ChatPipeline 用 Arc<Mutex> 共享,HTTP 和 AiPlugin 共用同一实例
- 互斥用 try_lock,忙时返回 409 而非阻塞
- Spike 结论固化: LLM t=2 锁大核、ctx=1024 限死、Qwen2.5-0.5B 默认档

待完成 (后续提交):
- Web 控制端 UI (文字对话 + 角色切换 + 模型管理界面)
- Flutter App (角色页/语音页/模型管理页)
- 设备端部署 llama.cpp/whisper.cpp/piper 二进制 + 模型下载
- 画面联动 (talk/idle 状态切换)
- 测试

注: Windows 开发环境缺 dbus,无法本地 cargo check;待目标机验证。
2026-07-04 15:01:00 +08:00

ShowenV2 — 数字生命窗口平台

基于 Rust 的跨平台插件微内核架构,支持全息/VR/AR/屏幕显示承载虚拟宠物、数字人、AI 歌姬、3D 模型等数字生命内容。

架构概览

ShowenV2/
├── src/
│   ├── core/              # 插件微内核
│   │   ├── message.rs     # 类型安全消息协议 (Serialize/Deserialize)
│   │   ├── plugin.rs      # Plugin trait 定义
│   │   ├── service_manager.rs  # 生命周期管理 + 消息路由 + 错误策略
│   │   ├── config.rs      # 配置解析/验证
│   │   ├── dispatch.rs    # 文本命令解析
│   │   ├── plugin_abi.rs  # C FFI 类型 (动态插件边界)
│   │   ├── dynamic_plugin.rs   # DynamicPlugin (libloading)
│   │   ├── plugin_loader.rs    # plugin_store/ 扫描/加载
│   │   ├── version_manager.rs  # 版本切换/回退/GC
│   │   └── plugin_repo.rs     # 远程仓库 HTTP 客户端
│   └── plugins/           # 功能插件
│       ├── video/         # 视频播放引擎 (OpenCV)
│       ├── http/          # Web UI + REST API (warp)
│       ├── ble/           # BLE 配网 (D-Bus BlueZ)
│       ├── wifi/          # WiFi 管理 (nmcli)
│       ├── device/        # 设备能力 (Display/SleepInhibit/Backlight/Cursor)
│       └── screen/        # 屏幕管理 (thin wrapper转发到 device)
├── plugin-sdk/            # 动态插件开发 SDK
├── plugins/
│   └── example-plugin/    # 示例动态插件 (cdylib)
├── configs/               # 配置文件 (状态机 JSON)
├── clients/               # 外部控制客户端应用
└── souls/                 # 团队成员档案

技术栈

  • 语言: Rust (edition 2021)
  • 视频: OpenCV 0.66
  • HTTP: warp + tokio
  • BLE: D-Bus + BlueZ (GATT)
  • WiFi: nmcli
  • 插件加载: libloading
  • 远程仓库: ureq + flate2 + tar

动态插件系统

ShowenV2 支持两种插件模式:

  1. 静态插件 — 编译时链接6 个内置插件 (video, http, ble, wifi, device, screen)
  2. 动态插件 — 运行时加载 .so 文件,通过 extern "C" FFI + JSON 序列化通信

动态插件特性:

  • 多版本管理 (plugin_store/ 目录结构)
  • 远程仓库下载安装 (HTTP + tar.gz)
  • 错误自动回退 (AutoRollback / DisableAndLog)
  • REST API 管理 (/api/plugins/*)

快速开始

# 验证配置
cargo run -- --validate --config configs/dog_state_machine.json

# 运行
cargo run -- --config configs/dog_state_machine.json

# 测试
cargo test --workspace

硬件与平台定位

  • 平台定位: ShowenV2 是通用数字生命窗口平台,不局限于“全息宠物播放器”
  • 分辨率支持: 支持 8K 以内所有分辨率显示
  • 显示类型: 支持 AR、VR、XR、普通屏幕、全息显示、投影、LED 矩阵,以及任何可运行的显示设备
  • 当前调试环境: Debian 11 KDE 桌面 (ARM64 / aarch64)
  • 跨平台策略: 当前以 Linux/ARM64 为主,架构已为扩展到其他平台预留空间
Description
No description provided
Readme 29 MiB
Languages
Rust 74.4%
Dart 22.5%
HTML 2.6%
Shell 0.4%
Java 0.1%