【GitHub】Meetily:隐私优先的本地 AI 会议助手深度解析
项目概览
Meetily 是由 Zackriya Solutions 团队开发的一款隐私优先的 AI 会议助手,定位为"自托管、开源的 AI 会议记录工具"。项目目前在 GitHub 上获得了22.2k Stars和2.2k Forks,累计 556 次提交,最新版本为 v0.4.0(2026年6月5日发布)。
它的核心卖点非常明确:所有会议录音、语音转写、AI 摘要生成都在本地完成,数据永远不离开你的设备。这直接瞄准了 Otter.ai、Fireflies.ai 等云端会议工具留下的隐私痛点——IBM 2024 年报告显示数据泄露平均成本达 440 万美元,而 GDPR 罚款累计已达 58.8 亿欧元。
项目采用 MIT 许可证,支持 macOS、Windows 和 Linux 三大平台。
仓库地址:https://github.com/Zackriya-Solutions/meetily
官网:https://meetily.ai
为什么需要 Meetily?
现有会议 AI 工具的隐私风险主要体现在:
- 云端存储路径不透明,数据驻留在第三方服务器
- 合规风险(GDPR、HIPAA 等法规对数据出境的严格限制)
- 非授权访问风险(服务端人员、数据泄露事件)
- 供应商锁定
Meetily 的解法是:数据主权完全归属用户——录音、转写模型、转写文本和摘要全部在本地存储和处理,零供应商锁定。
核心功能
| 功能 | 说明 |
|---|---|
| 实时本地转写 | 使用 Whisper 或 Parakeet 模型,全程本地处理 |
| AI 摘要生成 | 支持 Ollama(本地)、Claude、Groq、OpenRouter 及自定义 OpenAI 兼容端点 |
| 音频导入与增强 | 导入已有音频文件进行转写,或用不同模型/语言重新转写(Beta) |
| 说话人分离 | 基于 SortFormer 的说话人识别(社区版基础支持,PRO 版增强) |
| 专业音频混合 | 麦克风和系统音频同步捕获,RMS 自动漫入慢出和削波防护 |
| GPU 加速 | macOS Metal+CoreML、NVIDIA CUDA、AMD/Intel Vulkan,构建时自动启用 |
| 多语言摘要 | 支持用不同语言生成会议摘要(v0.4.0 新增) |
| OTA 更新 | 应用内自动更新 |
| 转写恢复 | 应用崩溃或中断后自动恢复转写数据 |
技术栈分析
Meetily 的语言构成反映了其架构选择:
| 语言 | 占比 | 用途 |
|---|---|---|
| Rust | 46.2% | 核心后端:音频捕获、转写引擎、存储、Tauri 命令 |
| TypeScript | 29.7% | 前端 UI(Next.js + React) |
| C++ | 9.9% | Whisper.cpp 和 llama.cpp 的底层实现 |
| PowerShell/Shell | 8.4% | 构建脚本和 GPU 自动检测 |
| Python | 3.1% | 已归档的遗留 FastAPI 后端 |
核心技术选型
- 桌面框架:Tauri 2.x(Rust),替代了 Electron,大幅减少内存占用和安装体积
- 前端:Next.js 14 + React 18 + TypeScript + Tailwind CSS
- 语音识别:Whisper.cpp(通过 whisper-rs 绑定)和 NVIDIA Parakeet(通过 ONNX 格式)
- LLM 推理:llama.cpp(通过 llama-cpp-2 Rust 绑定),作为 Tauri sidecar 运行
- 富文本编辑:BlockNote 0.36.0 + Tiptap 2.10 + Remirror 3.0
- UI 组件库:Radix UI 全家桶 + Lucide Icons + Framer Motion 动画
- 本地存储:嵌入式 SQLite
架构深度解析
整体架构
Meetily 经历了一次重要的架构演进。早期版本(v0.0.x)采用 Python/FastAPI 后端 + 独立 Whisper 服务器 + Docker 的三层架构。从 v0.1.1 开始,项目重构为单一自包含 Tauri 桌面应用,彻底消除了独立服务器依赖。
┌─────────────────────────────────────────────────────────────┐ │ Frontend (Tauri Desktop App) │ │ ┌──────────────────┐ ┌─────────────────┐ ┌──────────────┐ │ │ │ Next.js UI │ │ Rust Backend │ │ Whisper 引擎 │ │ │ │ (React/TS) │←→│ (音频+IPC) │←→│ (本地 STT) │ │ │ └──────────────────┘ └─────────────────┘ └──────────────┘ │ │ ↑ Tauri Events ↑ Audio Pipeline │ └─────────────────────────────────────────────────────────────┘旧的 Python/FastAPI 后端代码保留在backend/目录中,但被明确标记为归档状态,不再支持新开发或生产部署。
Rust 工作空间结构
项目的 Cargo.toml 定义了一个 Rust 工作空间,包含两个成员:
[workspace] resolver = "2" members = [ "frontend/src-tauri", # 主 Tauri 应用后端 "llama-helper" # LLM 推理 sidecar ]llama-helper是一个独立的 Rust 二进制,封装了llama-cpp-2(版本 =0.1.146),用于在本地运行 LLM 推理。它通过 Cargo feature flags 支持 Metal、CUDA 和 Vulkan 三种 GPU 加速方式,并针对体积进行了优化(LTO + opt-level=“s” + codegen-units=1)。
音频处理管线
这是 Meetily 最具技术含量的部分。音频系统有两条并行路径:
原始音频 (麦克风 + 系统) ↓ ┌──────────────────────────────────────────────────────────┐ │ 音频管线管理器 │ │ (frontend/src-tauri/src/audio/pipeline.rs) │ └─────────────┬──────────────────────────┬─────────────────┘ ↓ ↓ ┌─────────────────┐ ┌─────────────────────┐ │ 录音路径 │ │ 转写路径 │ │ (预混合) │ │ (VAD 过滤) │ └─────────────────┘ └─────────────────────┘ ↓ ↓ RecordingSaver.save() WhisperEngine.transcribe()关键设计:
- 环形缓冲区混合:麦克风和系统音频以不同速率异步到达,环形缓冲区(
VecDeque)累积采样,直到两个流都对齐到 50ms 窗口 - 专业混音:基于 RMS 的 ducking 算法,防止系统音频淹没麦克风声音
- VAD(语音活动检测):只将包含语音的片段发送给 Whisper,减少约 70% 的 Whisper 负载
音频模块经过模块化重构,从原来 1028 行的单体core.rs拆分为聚焦的子模块:
audio/ ├── devices/ # 设备发现与配置 │ ├── discovery.rs # 设备列表、权限触发 │ ├── microphone.rs # 默认输入设备 │ ├── speakers.rs # 默认输出设备 │ ├── configuration.rs # 设备类型与解析 │ └── platform/ # 平台特定实现 │ ├── windows.rs # WASAPI (~200行) │ ├── macos.rs # ScreenCaptureKit │ └── linux.rs # ALSA/PulseAudio ├── capture/ # 音频流捕获 │ ├── microphone.rs # 麦克风捕获流 │ ├── system.rs # 系统音频捕获流 │ └── core_audio.rs # macOS ScreenCaptureKit 集成 ├── pipeline.rs # 混音与 VAD 处理 ├── recording_manager.rs # 高层录音协调 ├── recording_commands.rs # Tauri 命令接口 └── recording_saver.rs # 音频文件写入Tauri 通信机制
前端与 Rust 后端通过两种模式通信:
命令模式(前端 → Rust):
// 前端调用awaitinvoke('start_recording',{mic_device_name:"Built-in Microphone",system_device_name:"BlackHole 2ch",meeting_name:"Team Standup"});事件模式(Rust → 前端):
// Rust 发射事件app.emit("transcript-update",TranscriptUpdate{text:"Hello world".to_string(),timestamp:chrono::Utc::now(),})?;// 前端监听awaitlisten<TranscriptUpdate>('transcript-update',(event)=>{setTranscripts(prev=>[...prev,event.payload]);});GPU 加速策略
GPU 加速在构建时通过 Cargo feature flags 配置,无需运行时设置:
| 平台 | GPU | 加速方式 | Feature Flag |
|---|---|---|---|
| macOS | Apple Silicon | Metal + CoreML | --features metal |
| Windows/Linux | NVIDIA | CUDA | --features cuda |
| Windows/Linux | AMD | ROCm/HIPBlas | --features hipblas |
| 全平台 | AMD/Intel | Vulkan | --features vulkan |
| 全平台 | CPU | OpenBLAS | --features openblas |
Linux 构建脚本(build-gpu.sh)实现了自动 GPU 检测,优先级为:NVIDIA CUDA → AMD ROCm → Vulkan → OpenBLAS → CPU-only。关键点是:仅有 GPU 驱动不够,还需要安装对应的开发 SDK(CUDA Toolkit、ROCm 或 Vulkan SDK)。
转写引擎
Meetily 支持两种转写引擎:
Whisper.cpp
OpenAI Whisper 模型的 C++ 实现,通过whisper-rsRust 绑定集成。项目从 Whisper.cpp 借鉴了部分代码。模型支持从tiny到large-v3的全系列,建议开发环境用base/small快速迭代,生产环境用medium/large-v3获取最佳质量。
NVIDIA Parakeet
NVIDIA 开发的语音识别模型,项目使用的是 istupakov 提供的 ONNX 格式转换版本。Parakeet 号称比 Whisper 快 4 倍,在 v0.1.1 版本中引入后带来了 3 倍的转写速度提升。v0.4.0 中修复了 Parakeet TDT duration head 的 greedy decoder 问题。
模型存储位置
- 开发环境:
frontend/models/ - macOS 生产环境:
~/Library/Application Support/Meetily/models/ - Windows 生产环境:
%APPDATA%\Meetily\models\
LLM 摘要集成
Meetily 的摘要生成支持灵活的 AI 提供商选择:
- Ollama(推荐):完全本地运行,零数据外泄
- Claude:通过 Anthropic API
- Groq:高速推理平台
- OpenRouter:多模型聚合平台
- 自定义 OpenAI 兼容端点:支持 Azure OpenAI、自建推理服务等
v0.2.0 引入了内置离线 AI 能力——即使用户没有安装 Ollama 或配置云服务,也能通过 llama-helper sidecar 生成摘要。v0.4.0 新增了 Qwen 3.5 内置模型支持和多语言摘要功能。
摘要生成支持 7 种会议模板(站会、项目同步、销售电话等),并在 BlockNote 富文本编辑器中渲染。
版本演进
| 版本 | 日期 | 关键变化 |
|---|---|---|
| v0.0.1.1 | 早期 | 初始预发布 |
| v0.0.5 | 2025.08 | Docker 支持、安装流程改进 |
| v0.1.1 | 2025.10 | 架构重写:统一为 Tauri 单体应用,3x 转写加速,Parakeet 引擎 |
| v0.2.0 | 2025.12 | Custom OpenAI 集成、OTA 更新、转写恢复、离线 AI |
| v0.2.1 | 2026.02 | Whisper 模型修复、FFmpeg 构建时打包 |
| v0.3.0 | 2026.03 | 音频导入功能、重新转写、Beta 功能门控 |
| v0.4.0 | 2026.06 | 多语言摘要、Qwen 3.5 模型、系统托盘、分析默认 opt-in |
从 v0.0.5 的前后端分离架构到 v0.1.1 的统一 Tauri 应用,是项目最重要的架构决策。这次重构消除了独立服务器、FastAPI 层和 Docker 依赖,大幅降低了安装门槛和使用复杂度。
商业模式
Meetily 采用开源核心 + 商业版本的策略:
社区版(CE):MIT 许可证,永久免费开源。包含本地转写、AI 摘要、核心功能。
PRO 版:独立代码库,增强转写精度、自定义摘要模板、PDF/DOCX/Markdown 导出、自动会议检测与加入、说话人识别、会议问答、日历集成、自托管团队部署、GDPR 合规审计、优先支持。
企业版:面向 100+ 用户组织,提供托管合规方案。
亮点与不足
技术亮点
- Rust + Tauri 选型精准:相比 Electron 方案,内存占用更低、启动更快、安全模型更强
- 音频管线设计成熟:双路径分离(录音/转写)、VAD 过滤、专业混音,工程化程度高
- GPU 加速全平台覆盖:自动检测 + 手动覆盖,覆盖 Metal/CUDA/Vulkan/ROCm/OpenBLAS 全谱系
- 模块化音频系统:从 1028 行单体文件重构为按职责拆分的模块树,可维护性好
- 渐进式 AI 集成:从完全本地(Ollama)到云端 API 的平滑过渡,用户自主选择隐私/性能权衡
值得关注的设计决策
- 保留
backend/目录中的遗留 Python 代码而非删除,为迁移用户提供上下文参考 - 性能日志通过
perf_debug!/perf_trace!宏在 release 构建中零开销消除 llama-helper使用 sidecar 模式而非 Tauri 内嵌,实现关注点分离和独立编译
当前局限
- Linux 仍需从源码构建,无预编译安装包
- macOS 系统音频捕获需要安装 BlackHole 虚拟音频设备
- Whisper 模型切换需要重启应用或手动卸载/重载
- Windows WASAPI 独占模式可能与其他应用冲突
- 社区版的说话人分离能力有限(PRO 版增强中)
- 项目仍处于 Pre-Release 阶段,部分功能标记为 Beta
开发者体验
项目提供了完善的构建工具链:
# macOS 一键开发./clean_run.sh# 清构建并运行./clean_run.sh debug# 调试日志./clean_build.sh# 生产构建# Windows 一键开发clean_run_windows.bat clean_build_windows.bat# GPU 特定构建pnpmrun tauri:dev:metal# macOS Metalpnpmrun tauri:dev:cuda# NVIDIA CUDApnpmrun tauri:dev:vulkan# AMD/Intel Vulkan# 仅前端开发pnpmrun dev# Next.js dev server (port 3118)贡献流程采用devtest分支开发、main分支发布的策略,PR 需要至少一位维护者审查。提交信息遵循<type>(<scope>): <subject>约定式格式。
致谢与依赖
项目坦诚承认了代码来源:
- Whisper.cpp:转写引擎的核心依赖
- Screenpipe:部分代码借鉴
- transcribe-rs:Rust 转写库
- NVIDIA Parakeet:语音识别模型
- istupakov:Parakeet 的 ONNX 格式转换
总结
Meetily 在"隐私优先的本地 AI 会议助手"这一赛道上做出了扎实的技术工程。它的核心价值不在于发明了新技术,而在于将 Whisper、Parakeet、llama.cpp、Tauri 等成熟组件有机整合为一个端到端的本地化会议智能方案——从音频捕获、实时转写、VAD 过滤、专业混音到 LLM 摘要生成,全链路在用户设备上完成。
对于需要数据主权的企业(国防、金融、医疗、法律),以及偏好自托管的技术用户,Meetily 提供了一个可行的开源替代方案。22.2k Stars 的社区热度也验证了市场对"本地 AI 会议工具"的强烈需求。
项目仍处于快速发展期(v0.4.0,Pre-Release),但架构设计已趋于成熟。v0.1.1 的统一 Tauri 重构是一个关键转折点,将分散的三层架构收敛为单体应用,大幅降低了使用门槛。后续版本在功能丰富度(多语言摘要、音频导入、自定义端点)和工程质量(模块化音频系统、GPU 加速、OTA 更新)上持续提升,值得关注。
项目地址:https://github.com/Zackriya-Solutions/meetily
官网:https://meetily.ai
许可证:MIT
