Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎙️ Voice Chat App — 实时语音对话助手

基于 LLM 的实时语音对话 Android 应用,全链路流式处理,无需后端服务器

个人项目,客户端直连 API,零运维成本。


✨ 特性

  • 🎤 长按说话 — 按住麦克风录音,松开自动识别
  • 🤫 VAD 自动检测 — 静音 800ms 自动判定说话结束
  • 🧠 LLM 流式对话 — 逐 token 生成,不等完整回复
  • 🔊 边生成边播 — 遇到断句即送 TTS,流式播放
  • 🔧 一键切换模型 — 改一行配置即可换 OpenAI / DeepSeek / 智谱 / 通义等
  • 📱 纯 Android — Flutter 构建,个人使用优先

架构概览

┌─────────────────────────────────────────────────┐
│                 Flutter App                      │
│                                                  │
│  🎤 录音 → VAD检测 → ASR识别 → LLM流式生成       │
│                              ↓ 断句              │
│                        TTS合成 → 🔊 流式播放      │
└─────────────────────────────────────────────────┘
         │              │              │
    Whisper API    LLM API(SSE)    TTS API
    (语音识别)     (对话生成)      (语音合成)

无需后端服务器,全部在客户端内完成。


快速开始

前置要求

工具 版本 安装方式
Flutter SDK ≥ 3.0 官方文档
Android Studio 最新版 官方下载
Android SDK API 33+ Android Studio 内置
JDK 17 Flutter 自动配置

首次安装 Flutter 请先运行 flutter doctor 确认环境正常。

1. 克隆项目

git clone https://github.com/<你的用户名>/voice_chat_app.git
cd voice_chat_app

2. 安装依赖

flutter pub get

3. 配置 API Key

编辑 lib/config/app_config.dart

class AppConfig {
  // LLM 配置 — 必填
  static const String llmBaseUrl = 'https://api.openai.com/v1';
  static const String llmApiKey = 'sk-xxxxxxxxxxxxxxxx';  // ← 填你的 Key
  static const String llmModel = 'gpt-4o-mini';

  // ASR 配置 — 必填
  static const String asrApiKey = 'sk-xxxxxxxxxxxxxxxx';  // ← Whisper API Key

  // TTS 配置 — 用 OpenAI TTS 则必填,用 Edge TTS 可留空
  static const String ttsProvider = 'edge';  // edge(免费) | openai
  static const String ttsApiKey = '';        // Edge TTS 无需 Key
}

4. 连接 Android 设备

# USB 调试模式连接手机,或使用模拟器
flutter devices

5. 运行

flutter run

切换 LLM 服务商

只需改 app_config.dart 中 3 个字段,所有服务商均兼容 OpenAI 接口格式:

服务商 llmBaseUrl llmModel 价格参考
OpenAI https://api.openai.com/v1 gpt-4o-mini $0.15/1M input
DeepSeek https://api.deepseek.com/v1 deepseek-chat ¥1/1M input
智谱 GLM https://open.bigmodel.cn/api/paas/v4 glm-4-flash 免费额度
通义千问 https://dashscope.aliyuncs.com/compatible-mode/v1 qwen-turbo 免费额度
月之暗面 https://api.moonshot.cn/v1 moonshot-v1-8k 免费额度
零一万物 https://api.lingyiwanwu.com/v1 yi-lightning 免费额度

推荐:国内用户首选 DeepSeek(便宜稳定)或智谱 GLM(有免费额度)。


使用说明

交互方式

操作 效果
长按麦克风 🔴 开始录音,按钮变红并放大
松开 停止录音,自动进入 识别→对话→播报 流程
静音 800ms VAD 自动判定说话结束(无需手动松开)
处理中 按钮变灰,等待当前对话完成

对话流程详解

1. 用户按住麦克风说话
       ↓
2. VAD 检测到静音 → 自动停止录音
       ↓
3. 音频文件发送到 Whisper API → 返回文字
       ↓
4. 文字发送到 LLM API(流式 SSE)
       ↓
5. LLM 逐 token 返回,实时显示在聊天气泡
       ↓
6. 遇到句号/问号等断句 → 该句送 TTS 合成
       ↓
7. TTS 返回音频 → 加入播放队列
       ↓
8. 播放队列按顺序播放音频片段
       ↓
9. 全部完成,等待下一轮对话

断句策略

LLM 流式输出时,遇到以下标点立即送 TTS:

。 ! ? ; . ! ? ; 换行符

这样用户在 LLM 还在生成后续内容时,就能听到前几句的语音播报,显著降低感知延迟


项目结构

voice_chat_app/
├── lib/
│   ├── main.dart                         # 应用入口
│   ├── config/
│   │   └── app_config.dart               # ★ API 配置(改这里)
│   ├── models/
│   │   └── chat_message.dart             # 消息数据模型
│   ├── core/
│   │   ├── audio/
│   │   │   ├── audio_recorder.dart       # 录音器 + VAD 集成
│   │   │   └── audio_player.dart         # 播放队列管理
│   │   ├── network/
│   │   │   ├── llm_service.dart          # LLM 流式 SSE 调用
│   │   │   ├── asr_service.dart          # Whisper 语音识别
│   │   │   └── tts_service.dart          # TTS 语音合成
│   │   └── vad/
│   │       └── simple_vad.dart           # 简易 VAD 检测
│   └── features/
│       └── chat/
│           └── chat_screen.dart           # 对话界面
├── android/
│   └── app/src/main/
│       └── AndroidManifest.xml            # Android 权限声明
├── pubspec.yaml                           # 依赖配置
├── README.md                              # 本文件
├── CHANGELOG.md                           # 工作日志
└── .gitignore

常见问题

Q: 录音权限被拒绝?

在 Android 设置 → 应用 → 语音助手 → 权限 → 开启麦克风。

Q: LLM 请求超时?

检查网络环境,国内访问 OpenAI 需要代理。建议使用国内模型服务(DeepSeek / 智谱 / 通义)。

Q: TTS 播放没声音?

  1. 检查手机音量(媒体音量,不是铃声音量)
  2. 确认 ttsProvider 配置正确
  3. Edge TTS 模式需要网络连接

Q: 如何查看日志?

flutter logs

Q: 如何构建 Release APK?

flutter build apk --release

产物在 build/app/outputs/flutter-apk/app-release.apk


后续优化方向

  • 集成 silero-vad ONNX 模型替换简易 VAD
  • 全双工模式(支持说话时打断 AI)
  • Edge TTS WebSocket 协议直连(完全免费 TTS)
  • 对话历史本地持久化(SQLite)
  • 音频可视化波形
  • 多轮对话上下文管理
  • 设置页面(可视化配置 API Key)
  • 深色/浅色主题切换

技术栈

层级 技术
框架 Flutter 3.x (Dart)
状态管理 Provider
音频录制 record
音频播放 audioplayers
网络请求 http + SSE
ASR OpenAI Whisper API
LLM OpenAI 兼容 API(流式 SSE)
TTS Edge TTS / OpenAI TTS API
VAD 自研简易能量检测

License

MIT

About

Real-time voice chat app powered by LLM - ASR to LLM to TTS streaming pipeline

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages