体验 EchoMe 的实时语音交互、多模态内容理解和智能角色对话功能。
- @CORCTON (CRT) - 整体业务架构设计、前端开发
- @Rson9 (LJX) - 后端架构开发、Demo视频录制
1. 跨语言沟通需求用户
- 核心能力匹配: 实时翻译 + VAD语音检测 + 实时翻译官角色
- 痛点: 需要进行多语言实时沟通,传统翻译工具延迟高、准确性差
- 用户故事: "作为一名国际商务人员,我希望能够与外国客户进行流畅的语音对话,实时翻译官角色帮我准确传达商务意图,VAD技术确保对话自然流畅"
2. 求职面试准备用户
- 核心能力匹配: 角色扮演 + 联网搜索 + 图像识别 + 模拟面试角色
- 痛点: 缺乏真实面试练习机会,无法获得及时反馈和最新行业信息
- 用户故事: "作为一名求职者,我希望通过模拟面试角色进行真实的语音面试练习,AI能联网获取最新行业动态,分析我上传的简历文档,给出针对性建议"
3. 学习研究用户
- 核心能力匹配: 图像识别 + 联网搜索 + 苏格拉底/助理研究员角色
- 痛点: 需要深度理解复杂学术材料,缺乏启发式学习指导
- 用户故事: "作为一名研究生,我希望苏格拉底角色通过启发式提问帮我深度思考,助理研究员角色帮我分析PDF论文图表,联网搜索最新研究进展"
4. 娱乐互动用户
- 核心能力匹配: 角色扮演 + 实时语音交互 + 哈利波特等娱乐角色
- 痛点: 缺乏沉浸式娱乐体验,传统聊天机器人缺乏个性
- 用户故事: "作为一名哈利波特粉丝,我希望能够与哈利波特角色进行真实的语音对话,体验魔法世界的沉浸式交互"
5. 日常办公助手用户
- 核心能力匹配: 联网搜索 + 图像识别 + VAD语音检测 + 通用助手角色
- 痛点: 需要高效处理多种办公任务,传统工具切换成本高
- 用户故事: "作为一名办公人员,我希望通用助手角色能够帮我处理文档分析、信息查询、会议记录等多种任务,通过语音交互提高工作效率"
P0 (核心功能)
- 实时语音对话 - 基础交互能力
- 多模态内容理解 - 文档/图像分析
- 联网搜索增强 - 实时信息获取
P1 (重要功能)
- 多角色语音系统 - 个性化体验
- VAD实时语音检测 - 交互体验优化
- 实时翻译 - 多语言支持
P2 (增强功能)
- 图像识别 - 扩展理解能力
- 角色定制 - 个性化定制
本次重点开发 P0 和 P1 级别功能,构建完整的语音AI交互体验,为用户提供智能、高效的多模态对话助手。
选择: 阿里云通义千问系列模型
对比分析:
- OpenAI GPT-4: 能力强但成本高,API稳定性在国内存在问题
- 百度文心一言: 中文优化好,但多模态能力相对较弱
- 阿里云通义千问: 性价比高,多模态能力强,国内访问稳定
选择理由:
- 成本效益: 相比GPT-4价格更优,适合高频语音交互场景
- 多模态能力: 原生支持图像理解,满足文档分析需求
- 服务稳定性: 国内部署,网络延迟低,服务可靠性高
- 生态整合: 与阿里云ASR/TTS服务深度整合,技术栈统一
除语音聊天外,AI角色还具备:
- 📚 知识管理: 文档解析、信息提取、知识图谱构建
- 🔍 实时搜索: 联网获取最新信息,保持知识时效性
- 🌐 多语言处理: 实时翻译、跨语言理解与交流
- 📊 数据分析: 图表识别、数据解读、趋势分析
- 🎨 创意协作: 内容创作、头脑风暴、创意激发
- 📝 文档处理: PDF解析、内容总结、要点提取
- 🤖 个性化定制: 根据用户偏好调整交互风格和专业领域
- VAD实时语音检测: ONNX模型精确检测语音活动边界
- 流式ASR识别: 独立WebSocket通道处理实时语音转文字
- Real-time TTS合成: 高质量语音合成,支持角色语音克隆
- 双向流式通信: 音频和文本双向实时传输
- Tavily API集成: 实时获取网络最新信息
- 上下文自动融合: 搜索结果智能整合到对话中
- 知识实时更新: 为AI角色提供最新信息获取能力
- PDF智能解析: PDF.js引擎转换文档为高清图像
- 图像识别分析: 多模态大模型理解图像内容
- 文档结构提取: 自动识别文字、图表、表格等元素
- 知识整合: 提取内容融入对话上下文
- 多语言语音识别: 支持中英文等多种语言输入
- 智能语言检测: 自动识别输入语言并切换
- 实时翻译输出: 支持多语言文本和语音输出
- 角色个性定制: 可配置多个AI角色,各具特色
- 语音克隆技术: 阿里云TTS实现角色专属语音
- 角色轮播选择: 直观的角色选择和切换界面
- 独立对话历史: 每个角色维护独立的对话记录
graph TB
subgraph "浏览器环境"
subgraph "表现层 - Next.js App Router"
UI[React 组件层]
ROUTE[路由与页面]
INTL[国际化层 next-intl]
end
subgraph "状态管理层"
ZUSTAND[Zustand 状态树]
QUERY[TanStack Query 缓存]
PERSIST[IndexedDB 持久化]
end
subgraph "服务层"
API_SERVICE[HTTP API 服务]
WS_SERVICE[WebSocket 服务]
UPLOAD[文件上传服务]
end
subgraph "媒体处理层"
VAD[ONNX VAD 引擎]
PDFJS[PDF.js 文档处理]
AUDIO[Web Audio API]
OSS_CLIENT[阿里云 OSS 客户端]
end
end
subgraph "网络通信层"
HTTP[RESTful API]
WS[WebSocket 实时通信]
end
subgraph "后端服务 - 洋葱架构"
subgraph "应用层 - Application"
APP[Echo HTTP 服务器]
MW[中间件栈]
VALID[配置验证器]
end
subgraph "控制层 - Handlers"
CHAR_HANDLER[角色控制器]
WS_HANDLER[WebSocket 控制器]
ROUTE_HANDLER[路由管理器]
end
subgraph "领域层 - Domain"
CHAR_SERVICE[角色服务]
CONV_SERVICE[对话服务]
AI_SERVICE[AI 服务接口]
end
subgraph "基础设施层 - Infrastructure"
CHAR_REPO[角色仓储]
DB_CONN[GORM 数据库连接]
ALI_CLIENT[阿里云客户端]
WS_HUB[WebSocket 连接池]
end
end
subgraph "外部服务"
POSTGRES[(PostgreSQL 数据库)]
ALI_ASR[阿里云 ASR]
ALI_TTS[阿里云 TTS]
ALI_LLM[阿里云 LLM]
ALI_OSS[阿里云 OSS]
TAVILY[Tavily 搜索 API]
end
%% 前端内部连接
UI --> ZUSTAND
UI --> QUERY
ROUTE --> API_SERVICE
API_SERVICE --> HTTP
WS_SERVICE --> WS
VAD --> AUDIO
PDFJS --> UPLOAD
UPLOAD --> OSS_CLIENT
OSS_CLIENT --> ALI_OSS
%% 网络连接
HTTP --> APP
WS --> WS_HANDLER
%% 后端内部连接 (Wire DI)
APP --> CHAR_HANDLER
APP --> WS_HANDLER
CHAR_HANDLER --> CHAR_SERVICE
WS_HANDLER --> CONV_SERVICE
CHAR_SERVICE --> CHAR_REPO
CONV_SERVICE --> AI_SERVICE
AI_SERVICE --> ALI_CLIENT
CHAR_REPO --> DB_CONN
WS_HANDLER --> WS_HUB
%% 外部服务连接
DB_CONN --> POSTGRES
ALI_CLIENT --> ALI_ASR
ALI_CLIENT --> ALI_TTS
ALI_CLIENT --> ALI_LLM
AI_SERVICE --> TAVILY
- WebSocket双通道: ASR识别和主要数据传输分离处理
- 实时流处理: LLM文本流和TTS音频流的并行处理架构
- 前端多媒体: PDF.js转换、OSS直传、Web Audio音频处理
- 多模态AI: 集成图像识别、联网搜索、实时语音合成
- 流式响应: 所有AI服务都采用流式处理,最小化延迟
sequenceDiagram
participant U as 前端界面
participant V as VAD引擎
participant WS1 as WebSocket(ASR)
participant BE as 后端服务
participant ASR as 阿里云ASR
participant LLM as 大语言模型
participant TTS as Real-time TTS
participant WS2 as WebSocket(主通道)
participant TAV as Tavily搜索
participant MM as 多模态模型
Note over U,MM: 🎤 实时语音识别流程
U->>V: 用户开始说话
V->>V: ONNX VAD 检测语音活动
V->>WS1: 发送音频帧 (PCM)
WS1->>BE: 转发音频数据
BE->>ASR: 调用阿里云实时ASR
ASR-->>BE: 返回增量识别文本
BE-->>WS1: 转发ASR结果
WS1-->>U: 实时显示识别文本
Note over U,MM: 🧠 LLM处理与实时TTS
U->>WS2: 发送完整对话请求
WS2->>BE: 接收用户文本
BE->>TAV: 联网搜索增强上下文
TAV-->>BE: 返回搜索结果
BE->>LLM: 发送增强后的Prompt
loop LLM流式输出
LLM-->>BE: 输出文本token流
par 双路实时转发
BE-->>WS2: 转发文本流给前端
BE->>TTS: 同时发送给Real-time TTS
end
WS2-->>U: 实时显示AI回复文本
TTS-->>BE: 返回音频二进制流
BE-->>WS2: 转发音频流
WS2-->>U: 实时播放合成语音
end
Note over U,MM: 📄 多模态内容处理
U->>U: PDF.js转换文档为图像
U->>OSS: 直接上传图像文件
U->>WS2: 发送图像分析请求
WS2->>BE: 转发图像数据
BE->>MM: 调用多模态大模型
MM-->>BE: 返回图像理解结果
BE-->>WS2: 转发分析结果
WS2-->>U: 显示图像理解内容
flowchart TD
subgraph "前端核心处理"
A1[VAD 语音活动检测] --> A2[音频帧采集]
A2 --> A3[WebSocket ASR通道]
B1[PDF.js 文档处理] --> B2[页面转图像]
B2 --> B3[直接上传 OSS]
C1[音频流接收] --> C2[Web Audio API]
C2 --> C3[实时音频播放]
end
subgraph "后端核心处理"
D1[WebSocket 连接管理] --> D2[音频数据转发]
D2 --> D3[阿里云 ASR]
E1[文本接收] --> E2[Tavily 联网搜索]
E2 --> E3[上下文增强]
E3 --> E4[LLM 处理]
F1[LLM 流式输出] --> F2[双路实时转发]
F2 --> F3[前端文本流]
F2 --> F4[Real-time TTS]
F4 --> F5[音频流转发]
G1[图像数据] --> G2[多模态大模型]
G2 --> G3[图像理解结果]
end
subgraph "外部AI服务"
ASR_SVC[阿里云 ASR]
TTS_SVC[Real-time TTS]
LLM_SVC[大语言模型]
MM_SVC[多模态模型]
TAV_SVC[Tavily API]
OSS_SVC[阿里云 OSS]
end
A3 --> D1
D3 --> ASR_SVC
B3 --> OSS_SVC
E4 --> LLM_SVC
F4 --> TTS_SVC
G2 --> MM_SVC
E2 --> TAV_SVC
F3 --> C1
F5 --> C1
- 角色创建: 用户定义角色基本信息和个性特征
- 属性配置: 设置系统提示词、行为模式、专业领域
- 语音训练: 上传示例音频,训练专属语音模型
- 角色部署: 角色就绪,可参与对话交互
- 持续优化: 根据对话反馈调整角色表现
- 语音检测: 前端VAD引擎实时检测语音活动边界
- 实时转录: 独立WebSocket通道进行流式ASR识别
- 联网增强: 后端使用Tavily API获取最新信息
- LLM处理: 大语言模型基于角色人设生成回复
- 双路转发: LLM输出流同时转发给前端和Real-time TTS
- 实时合成: Real-time TTS生成高质量音频流
- 音频播放: 前端Web Audio API处理音频播放逻辑
- 文档预处理: 前端PDF.js将PDF文档转换为高清图像
- 直接上传: 图像文件直接上传到阿里云OSS存储
- 多模态理解: 后端调用多模态大模型进行图像识别分析
- 内容提取: 自动识别文档结构、文字、图表等关键信息
- 知识整合: 提取的内容融入对话上下文和角色知识体系
- Next.js 15.5.3: App Router + React 19
- TypeScript 5: 完整类型安全
- Tailwind CSS + shadcn/ui: 现代UI组件系统
- Zustand + TanStack Query: 状态管理与数据缓存
- Web Audio API: 音频处理与播放
- PDF.js 4.4.168: PDF文档解析
- ONNX Runtime: VAD语音检测模型
- Go 1.24.3: 高性能后端服务
- Echo v4: Web框架与WebSocket支持
- PostgreSQL + GORM: 数据持久化
- Google Wire: 依赖注入
- 阿里云AI服务: ASR/TTS/LLM集成
- Docker + Docker Compose: 容器化部署
- GitHub Actions: CI/CD自动化
- 阿里云OSS: 对象存储服务
- Node.js 20+
- Go 1.24+
- PostgreSQL 15+
- pnpm 9+
cd echome-fe/
pnpm install
pnpm devcd echome-be/
# 配置环境
cp config/etc/config.yaml.example config/etc/config.yaml
# 编辑 config.yaml 填入配置信息
# 数据库迁移
go run tools/migrate.go
# 启动服务
go run cmd/main/main.gogit clone https://github.com/CORCTON/EchoMe.git
cd EchoMe/deploy
docker-compose up -dEchoMe/
├── echome-fe/ # Next.js 前端应用
│ ├── app/ # App Router 页面
│ ├── components/ # React 组件
│ ├── store/ # Zustand 状态管理
│ └── services/ # API 服务
├── echome-be/ # Go 后端服务
│ ├── internal/
│ │ ├── domain/ # 领域层
│ │ ├── handler/ # 控制器层
│ │ └── infra/ # 基础设施层
│ └── config/ # 配置管理
└── deploy/ # 部署配置
# 前端不再需要 OSS 密钥,文件上传由后端负责
API_BASE_URL=http://localhost:8081server:
port: "8080"
ai:
timeout: 30
asr:
provider: "mimo"
model: "mimo-v2.5-asr"
sample_rate: 16000
format: "pcm"
tts:
provider: "mimo"
model: "mimo-v2.5-tts"
voice: "mimo_default"
sample_rate: 24000
format: "pcm16"
min_segment_runes: 12
max_segment_runes: 100
max_segment_wait_ms: 800
llm:
provider: "mimo"
model: "mimo-v2.5"
providers:
aliyun:
api_key: "your-alibailian-api-key"
endpoint: "https://dashscope.aliyuncs.com"
region: "cn-beijing"
mimo:
api_key: "your-mimo-api-key"
endpoint: "https://api.xiaomimimo.com/v1"
database:
host: "localhost"
port: 5432
user: "postgres"
password: "your-password"
db_name: "echome"- Fork 项目
- 创建特性分支:
git checkout -b feat/new-feature - 提交更改:
git commit -m 'feat: add new feature' - 推送分支:
git push origin feat/new-feature - 创建 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情