一个实时语音 AI 角色对话项目。
它不只是“发消息 + 播语音”,而是尽量把对话做得更像真人交流:你可以开口说话、随时打断、继续追问,角色会用自己的语气持续接话。
实时说话、实时接话、实时打断。 让 AI 角色聊天从“消息收发”变成更接近真人的互动体验。
像在和角色通电话,而不是在等一个聊天机器人回复。
| 能力 | 描述 |
|---|---|
| 流式回复 | 回复不是整段憋出来,而是边生成边出来 |
| 语音打断 | AI 说到一半,可以直接插话 |
| 角色感 | 不同角色可以有不同性格、语气和说话方式 |
| 多轮对话 | 能连续聊,不是一轮就断 |
| 多模型接入 | STT / LLM / TTS 可以灵活切换组合 |
- 和 AI 角色进行实时语音对话
- 支持文本聊天和语音聊天两种模式
- 角色回复支持流式输出,不用整段生成完再看到结果
- 语音回复支持边生成边播放,等待感更低
- 用户插话时可以直接打断 AI,不必等它说完
- 支持多轮连续聊天,保留会话上下文
- 支持角色创建与角色设定管理
- 支持根据不同角色切换不同语气、性格和说话风格
- 支持历史会话查看与消息持久化
- 支持多种 STT / TTS / LLM 服务接入与切换
这个项目想做出来的感觉是:
- AI 不要“慢半拍”
- 对话不要“一问一答像接口调用”
- 角色不要每轮都像失忆
- 用户说到一半时,AI 应该能被打断
- 回复应该更像聊天,而不是一整段说明文
- 用户开口后,系统开始持续识别
- 模型生成到哪,文本就显示到哪
- 语音不必等全文结束再统一播报
- AI 在“说话”的时候,用户可以直接插进来
- 对话节奏更像来回接话,而不是轮流提交任务
- 连续追问时不会那么容易掉出聊天状态
- 不同角色可以有不同人设与说话口吻
- 同一句话,不同角色能聊出不一样的感觉
- 更适合做陪伴感、代入感、故事感比较强的对话
- 音频输入后可持续识别文本
- 模型回复按文本流返回
- 语音合成按句子切片输出
- 首段回复更快出来,聊天节奏更自然
- AI 正在说话时,用户可以重新开口
- 新输入到来后,旧语音可以立即停止
- 避免“用户已经插话,AI 还在继续念稿”
- 每个角色都可以配置独立人设
- 支持性格、说话风格、示例对话等设定
- 更适合做陪伴、故事代入、角色闲聊这类场景
- 支持不同 LLM 服务切换
- 支持不同 STT / TTS 服务接入
- 更方便根据速度、效果、成本做组合
- 支持角色会话列表
- 支持历史消息保存
- 支持持续多轮聊天
- 想做一个能“开口聊”的 AI 角色陪伴应用
- 想体验比普通聊天框更自然的实时语音交互
- 想做二次元角色、原创 OC、虚拟人、故事角色对话
- 想把
STT + LLM + TTS串成完整语音链路 - 想验证流式输出、语音打断、多轮上下文这类能力
Realtime Voice Chat AI Roleplay Streaming Response Barge-in WebSocket STT LLM TTS
.
├── vocata-server # 后端服务
├── vocata-web # 用户端前端
├── vocata-admin # 管理后台
├── docs # 开发与部署文档
├── docker-compose.yml
├── docker-compose.test.yml
└── docker-compose.prod.yml
- 后端:
Spring Boot 3、Java 17、WebSocket、Reactor - 前端:
Vue 3、TypeScript、Vite - 数据库:
PostgreSQL、Redis - AI 能力:
STT、LLM、TTS
docker compose up -dcd vocata-server
mvn spring-boot:runcd vocata-web
npm install
npm run devcd vocata-admin
npm install
npm run dev- 开发环境说明:
docs/开发环境说明.md - Docker 开发环境:
docs/Docker开发环境.md - 部署环境说明:
docs/部署环境说明.md - 验证清单:
docs/验证清单.md - 开发工作流:
docs/开发工作流.md - 提交规范:
docs/提交规范.md