🤖 基于 .NET 9.0 的多服务智能助手 | 跨平台 AI 语音交互解决方案
快速开始 • 功能特性 • 多平台支持 • 架构设计 • 开发指南 • 文档资源
绿荫助手(Verdure Assistant)是一个基于 .NET 9.0 开发的多服务智能助手,提供了完整的AI语音交互解决方案。项目采用现代化的软件架构设计,支持多种部署方式,可在Windows、Linux、macOS、Android等平台运行。
作为一个多服务集成平台,绿荫助手不仅支持原有的小智服务,还计划集成更多AI助手服务,为用户提供更丰富的智能交互体验。
本项目的 Verdure.Assistant.Api 为 VerdiBot(阿荫) 提供了语音对话和音乐播放API支持,可以部署在树莓派等嵌入式设备上,通过HTTP API与硬件机器人交互。
- VerdiBot 项目地址: https://github.com/maker-community/VerdiBot
- VerdiBot 文档: https://verdibot.verdure-hiro.cn/zh/
⚠️ 实验开发阶段说明本项目目前处于实验开发阶段,许多功能尚未完全完善,但核心功能已经可以正常使用。项目主要用于学习和技术探索目的,与社区分享开发经验和技术成果。
我们深知项目还有很多需要改进的地方,期待社区的理解和支持。如果您在使用过程中遇到问题,欢迎通过 Issues 或讨论区提出建设性的反馈,让我们一起完善这个项目。
感谢您的理解和支持!🙏
🎤 关键词唤醒支持:
- "你好小电"(默认)
- "你好小娜"
💻 双重使用体验:
- 控制台版本 - 绑定设备后,启动控制台程序,说"你好小电"即可开启对话
- WinUI版本 - 提供现代化图形界面(见下方截图),先点击连接按钮,然后说"你好小电"开启对话
- 跨平台兼容 - 支持 Windows、Linux、macOS、Android
- 模块化架构 - 清晰的分层设计,易于扩展
- 高性能 - 优化的音频处理和网络通信
- 多样化界面 - 提供桌面、移动、控制台、API等多种使用方式
- 学习友好 - 完整的文档和示例代码,适合学习.NET跨平台开发
- 生产可用 - 实际可用的AI语音助手解决方案
本项目是一个 完整的、真实的 .NET 跨平台应用示例,涵盖了现代 .NET 开发的各个方面:
- ✅ 真实项目经验 - 不是简单的demo,而是可实际使用的完整应用
- ✅ 多平台覆盖 - 一个项目学会 WinUI、MAUI、ASP.NET Core、Console开发
- ✅ 现代架构模式 - MVVM、DI、Repository、Service Layer等
- ✅ 丰富的技术栈 - 音频处理、网络通信、UI设计、API开发
- ✅ 详细的文档 - 每个技术决策都有文档说明
- ✅ 持续更新 - 跟随.NET最新版本更新
| 学习目标 | 推荐关注 |
|---|---|
| Windows桌面开发 | WinUI 3 项目、XAML界面设计 |
| Android移动开发 | MAUI项目、前台服务、原生集成 |
| Web API开发 | ASP.NET Core API、Swagger、RESTful设计 |
| 跨平台应用 | .NET Core、跨平台兼容性处理 |
| 音频处理 | Opus编解码、SoundFlow、音频流 |
| 实时通信 | WebSocket、双向音频流传输 |
| 架构设计 | MVVM、DI、状态机、事件驱动 |
| IoT/嵌入式 | 树莓派部署、硬件集成 |
📹 演示视频:点击在新标签页播放 ↗
现代化的 Windows 桌面应用界面,支持语音交互和实时状态显示
📹 演示视频:点击在新标签页播放 ↗
基于 .NET MAUI 的 Android 移动应用,支持后台语音处理和音乐播放
📹 演示视频:点击在新标签页播放 ↗
基于 .NET MAUI 的安卓手表应用,适配圆形/方形表盘,支持语音助手核心功能
📹 演示视频:点击在新标签页播放 ↗
轻量级命令行界面,适合服务器端部署和开发调试
- 实时语音识别 - 支持连续语音输入和识别
- 自然语音合成 - 高质量的TTS语音输出
- 音频编解码 - 基于Opus的高效音频处理
- 噪声抑制 - 智能音频预处理和降噪
- 关键词唤醒 - 支持"你好小电"和"你好小娜"唤醒词
- 语音打断 - 支持对话过程中的智能打断
- WebSocket支持 - 实时双向音频流和消息通信
- MQTT协议 - 物联网设备集成
- 加密传输 - WSS安全连接
- 断线重连 - 自动恢复连接机制
- RESTful API - 标准HTTP API接口
-
WinUI 3应用 - 现代化的Windows桌面应用
- Fluent Design 设计语言
- 响应式布局
- 深色/浅色主题支持
-
.NET MAUI应用 - Android移动应用
- Material Design 界面
- 前台服务支持后台运行
- 通知栏快捷控制
-
控制台程序 - 轻量级命令行界面
- 跨平台支持 (Windows/Linux/macOS)
- 交互式菜单
- 详细日志输出
-
Web API - HTTP RESTful接口
- Swagger文档
- 适合嵌入式设备集成
- 支持树莓派部署
- 音乐搜索 - 集成酷狗/酷我音乐API
- 在线播放 - 流媒体音乐播放
- 本地缓存 - 自动缓存管理
- 播放控制 - 播放/暂停/停止/跳转
- 音量调节 - 实时音量控制
- 自动对话模式 - 连续对话体验,无需重复唤醒
- 状态机管理 - 智能的设备状态切换
- 配置管理 - 灵活的参数配置和OTA更新
- 错误恢复 - 智能的异常处理和自动恢复
- 多服务集成 - 支持扩展更多AI助手服务
- 完整的依赖注入 - 松耦合的服务架构
- MVVM架构 - ViewModels跨平台共享
- 丰富的日志 - 详细的调试信息
- 单元测试 - 完整的测试覆盖
- 文档完善 - 详细的开发文档和示例
verdure-assistant/
├── src/ # 源代码
│ ├── Verdure.Assistant.Core/ # 核心库(音频、网络、服务)
│ ├── Verdure.Assistant.ViewModels/ # 共享视图模型(MVVM)
│ ├── Verdure.Assistant.Console/ # 控制台应用(跨平台CLI)
│ ├── Verdure.Assistant.WinUI/ # WinUI桌面应用(Windows)
│ ├── Verdure.Assistant.MAUI/ # MAUI移动应用(Android)
│ └── Verdure.Assistant.Api/ # Web API服务(Linux/树莓派)
├── tests/ # 测试项目
│ ├── CodecTest/ # 音频编解码测试
│ ├── OpusTest/ # Opus编解码器测试
│ ├── WebSocketAudioFlowTest/ # WebSocket音频流测试
│ ├── SoundFlowPlaybackTest/ # 音频播放测试
│ └── ... # 更多测试项目
├── samples/ # 示例代码
│ └── py-xiaozhi/ # Python版本参考实现
├── docs/ # 技术文档
│ ├── AUDIO_ARCHITECTURE_REFACTORING_SUMMARY.md
│ ├── MVVM_REFACTORING_COMPLETION_SUMMARY.md
│ └── ... # 详细技术文档
├── docs-website/ # 文档网站源码
├── scripts/ # 构建和部署脚本
├── assets/ # 资源文件(截图、视频)
├── .github/ # GitHub工作流和模板
└── Verdure.Assistant.sln # Visual Studio解决方案文件
本项目充分展示了 .NET 9.0 的跨平台能力,提供多种部署方式,适合不同场景和学习目标:
适用场景: Windows 10/11 桌面用户、现代化UI设计学习
技术栈:
- WinUI 3 (Windows App SDK)
- MVVM 架构模式
- 依赖注入 (DI)
- 响应式编程
学习要点:
- Windows 现代化应用开发
- XAML 界面设计
- Windows 音频 API 集成
- 异步编程最佳实践
文档: WinUI 项目文档
适用场景: 移动端语音助手、跨平台移动开发学习
技术栈:
- .NET MAUI 9.0
- Android 前台服务
- Material Design
- 共享 ViewModels (MVVM)
学习要点:
- .NET MAUI 跨平台开发
- Android 原生功能集成
- 前台服务和后台处理
- 移动端音频录制和播放
- Android 权限管理
文档: MAUI 项目文档
适用场景: 服务器部署、开发调试、自动化脚本
支持平台: Windows、Linux、macOS
技术栈:
- .NET 9.0 Console Application
- 跨平台音频处理
- 命令行交互
学习要点:
- 跨平台控制台应用开发
- 命令行参数解析
- 日志和诊断
- 跨平台兼容性处理
文档: Console 项目文档
适用场景: 机器人硬件集成、IoT设备、树莓派部署
支持平台: Linux (树莓派)、Windows、Docker
技术栈:
- ASP.NET Core Web API
- RESTful API 设计
- Swagger/OpenAPI
- 音乐播放服务 (mpg123)
- 关键词唤醒
主要功能:
- 🎵 音乐搜索和播放 API
- 🎤 语音对话 WebSocket 接口
- 🤖 与 VerdiBot 硬件机器人集成
- 📊 系统状态监控
学习要点:
- ASP.NET Core Web API 开发
- RESTful API 设计原则
- Linux 音频处理
- 嵌入式设备部署
- 与硬件设备通信
文档: API 项目文档
相关项目:
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ WinUI 应用 │ MAUI 应用 │ 控制台应用 │ Web API │
│ (Windows) │ (Android) │ (跨平台) │ (嵌入式/服务器) │
├──────────────┴──────────────┴──────────────┴────────────────┤
│ 视图模型层 (MVVM) │
├──────────────────────────────────────────────────────────────┤
│ Verdure.Assistant.ViewModels │
│ (共享业务逻辑和状态管理) │
├──────────────────────────────────────────────────────────────┤
│ 服务层 │
├────────────────┬────────────────┬──────────────┬─────────────┤
│ 语音聊天服务 │ 音乐播放服务 │ 配置服务 │ 验证服务 │
├────────────────┼────────────────┼──────────────┼─────────────┤
│ 音频录制服务 │ 音频播放服务 │ 编解码服务 │ 状态管理 │
├────────────────┴────────────────┴──────────────┴─────────────┤
│ 通信层 │
├────────────────┬─────────────────────────────────────────────┤
│ WebSocket客户端 │ MQTT客户端 │
├────────────────┴─────────────────────────────────────────────┤
│ 核心层 (Verdure.Assistant.Core) │
├──────────────────────────────────────────────────────────────┤
│ 模型定义 │ 接口定义 │ 常量定义 │ 工具类 │ 扩展方法 │
└──────────────────────────────────────────────────────────────┘
- 分层设计: 清晰的职责分离,易于维护和扩展
- MVVM模式: ViewModels 跨平台共享,减少重复代码
- 依赖注入: 使用 Microsoft.Extensions.DependencyInjection
- 接口抽象: 核心功能通过接口定义,支持多种实现
- 跨平台兼容: 同一套核心代码,运行在多个平台
- .NET 9.0 SDK 或更高版本 - 下载地址
- Visual Studio 2022 (17.8+) 或 Visual Studio Code
| 平台 | 额外要求 |
|---|---|
| WinUI (Windows) | Windows 10 1809+ 或 Windows 11 Windows App SDK |
| MAUI (Android) | Android SDK (API 21+) Android Emulator 或真机 |
| API (Linux/树莓派) | mpg123 音频播放器 PortAudio (可选) |
-
克隆仓库
git clone https://github.com/maker-community/Verdure.Assistant.git cd Verdure.Assistant -
还原依赖
< 3E8D div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="dotnet restore">dotnet restore
