一个能够从对话中学习、支持实时语音交互的AI陪伴机器人,可以模拟特定人物的声音,提供情感陪伴。
这是一个全栈AI应用,包含:
- 后端: FastAPI + Python,集成国产LLM API
- 前端: React + TypeScript,现代化聊天界面
- 核心功能: 对话记忆、实时语音对话、声音克隆
- 部署: Docker容器化,支持本地和云端部署
- 全双工语音交互: 像打电话一样与AI实时对话
- 延迟低于1秒: 基于WebRTC的实时音视频传输
- 声音克隆: 支持Noiz.ai音色克隆(15-45秒音频素材)
- 自然对话: AI能够实时响应,支持打断和连续对话
- LiveKit框架: 专业级实时音视频解决方案
- 模块化设计: 更清晰的代码结构和依赖管理
- 性能优化: 更低的延迟和更好的用户体验
- 集成智谱AI、百度文心一言等国产LLM
- 上下文感知,保持对话连贯性
- 个性化回复,模拟人类对话风格
- 向量数据库存储对话历史
- 基于语义搜索相关记忆
- 长期记忆用户偏好和重要信息
- 实时语音对话: 基于LiveKit的全双工语音交互
- 语音输入: 传统模式下的语音识别
- 语音回复: AI生成的语音回复
- 支持Noiz.ai音色克隆服务
- 用15-45秒的语音素材克隆任何人的声音
- 多种预设声音可选
- WebSocket双向通信
- Server-Sent Events流式响应
- LiveKit实时音视频流
- Python 3.8+
- Node.js 18+
- Redis(可选,用于缓存)
- Docker(可选,用于容器化部署)
- LiveKit Server(可选,用于实时语音对话)
git clone <repository-url>
cd aiCompanionshipcd backend
cp .env.example .env
# 编辑.env文件,配置你的API密钥需要配置的API密钥:
- DeepSeek API Key(默认使用
deepseek-v4-flash-vision-exp) - Xiaomi MiMo API Key(语音识别与语音合成)
- 智谱AI API Key
- Noiz.ai API Key(声音克隆)
- LiveKit API密钥(实时语音对话,可选)
cd backend
python run.py后端将在 http://localhost:8000 启动
cd frontend
npm install
npm run dev前端将在 http://localhost:3000 启动
# 安装LiveKit Server
brew install livekit
# 启动LiveKit Server
livekit-server --dev# 使用Docker Compose启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -faiCompanionship/
├── backend/ # FastAPI后端
│ ├── api/ # API路由
│ ├── services/ # 业务逻辑服务
│ │ ├── llm_service.py # LLM服务
│ │ ├── memory_service.py # 记忆服务
│ │ ├── voice_service.py # 语音服务
│ │ ├── livekit_agent.py # LiveKit实时语音Agent
│ │ └── streaming_service.py # 流式服务
│ ├── models/ # 数据模型
│ ├── config.py # 配置管理
│ ├── main.py # 主应用
│ ├── run.py # 启动脚本
│ ├── requirements.txt # Python依赖
│ └── Dockerfile # Docker配置
├── frontend/ # React前端
│ ├── src/
│ │ ├── components/ # React组件
│ │ │ ├── LiveKitVoiceChat.tsx # LiveKit语音对话组件
│ │ │ └── ...
│ │ ├── hooks/ # React Hooks
│ │ │ ├── useLiveKit.ts # LiveKit Hook
│ │ │ └── ...
│ │ ├── lib/ # 工具函数
│ │ ├── types.ts # TypeScript类型
│ │ └── App.tsx # 主应用
│ ├── package.json # Node.js依赖
│ └── Dockerfile # Docker配置
├── voice_samples/ # 声音样本
├── docker-compose.yml # Docker Compose配置
└── README.md # 项目文档
启动后端服务后,访问 http://localhost:8000/docs 查看完整的API文档。
POST /api/conversation- 发送消息GET /api/memories/{conversation_id}- 获取对话记忆DELETE /api/memories/{conversation_id}- 清除对话记忆
POST /api/tts- 文本转语音POST /api/stt- 语音转文本
WS /ws/conversation- WebSocket实时对话POST /stream/conversation/sse- SSE流式对话POST /stream/voice- 流式语音合成
POST /api/voice-clone- 创建语音克隆GET /api/voice-clone- 列出语音克隆GET /api/voice-clone/{voice_id}- 获取语音克隆详情DELETE /api/voice-clone/{voice_id}- 删除语音克隆
GET /health- 健康检查GET /api/statistics- 系统统计
# LLM API配置
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_API_BASE_URL=https://api.deepseek.com
DEEPSEEK_MODEL=deepseek-v4-flash-vision-exp
ZHIPU_API_KEY=your_zhipu_api_key
# 语音API配置
MIMO_API_KEY=your_mimo_api_key
MIMO_API_BASE_URL=https://api.xiaomimimo.com/v1
MIMO_ASR_MODEL=mimo-v2.5-asr
MIMO_TTS_MODEL=mimo-v2.5-tts
MIMO_TTS_VOICE=mimo_default
# Noiz.ai语音克隆配置
NOIZ_API_KEY=your_noiz_api_key
NOIZ_API_BASE_URL=https://api.noiz.ai/v1
# LiveKit配置(可选)
LIVEKIT_URL=ws://localhost:7880
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
# 应用配置
DEBUG=true
PORT=8000
CORS_ORIGINS=http://localhost:3000# LiveKit配置
VITE_LIVEKIT_URL=ws://localhost:7880
VITE_LIVEKIT_TOKEN=your_livekit_token# macOS
brew install livekit
# Linux
curl -sSL https://get.livekit.io | bash
# 或使用Docker
docker run --rm -p 7880:7880 livekit/livekit-server --dev在 backend/.env 中添加:
LIVEKIT_URL=ws://localhost:7880
LIVEKIT_API_KEY=your_api_key
LIVEKIT_API_SECRET=your_api_secretfrom livekit import api
token = api.AccessToken(api_key, api_secret) \
.with_identity("user-identity") \
.with_name("User Name") \
.with_grants(api.VideoGrants(
room_join=True,
room="my-room"
)).to_jwt()import useLiveKit from './hooks/useLiveKit';
const { connect, disconnect, toggleMicrophone } = useLiveKit(
'ws://localhost:7880',
'your-token'
);- 收集目标人物的清晰录音(建议5-10分钟)
- 保存为WAV格式,采样率16kHz
- 确保录音环境安静,无背景噪音
# 通过API创建克隆
curl -X POST http://localhost:8000/api/voice-clone \
-H "Content-Type: application/json" \
-d '{
"audio_data": "base64编码的音频数据",
"voice_name": "我的声音",
"description": "温柔的女声"
}'# 使用克隆声音进行TTS
curl -X POST http://localhost:8000/api/tts \
-H "Content-Type: application/json" \
-d '{
"text": "你好,我是你的AI陪伴助手",
"voice_id": "noiz_123456"
}'# 构建并启动
docker-compose -f docker-compose.prod.yml up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f# 后端
cd backend
pip install -r requirements.txt
python main.py --port 8000 --workers 4
# 前端
cd frontend
npm run build
# 将dist目录部署到Nginx/Apache# 应用配置
DEBUG=false
PORT=8000
CORS_ORIGINS=https://your-domain.com
# 数据库配置
REDIS_URL=redis://redis:6379/0
CHROMA_PERSIST_DIRECTORY=./chroma_db
# LLM API配置
ZHIPU_API_KEY=your_zhipu_api_key
BAIDU_API_KEY=your_baidu_api_key
BAIDU_SECRET_KEY=your_baidu_secret_key
# 语音API配置
MIMO_API_KEY=your_mimo_api_key
# Noiz.ai配置
NOIZ_API_KEY=your_noiz_api_key
# LiveKit配置
LIVEKIT_URL=wss://your-livekit-server.com
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret-
LiveKit连接失败
# 检查LiveKit Server是否运行 curl http://localhost:7880 # 检查API密钥配置 # 确保LIVEKIT_API_KEY和LIVEKIT_API_SECRET正确
-
语音克隆失败
# 检查Noiz.ai API密钥 # 确保音频格式正确(WAV, 16kHz) # 检查音频质量(建议15-45秒)
-
后端启动失败
# 检查Python版本 python --version # 检查依赖 pip install -r requirements.txt # 检查端口占用 lsof -i :8000
-
前端无法连接后端
# 检查后端是否运行 curl http://localhost:8000/health # 检查CORS配置 # 确保CORS_ORIGINS包含前端地址
# Docker日志
docker-compose logs backend
docker-compose logs frontend
# 后端日志
tail -f backend/logs/app.log
# 前端日志
# 浏览器开发者工具 Console- 启用Redis缓存频繁查询
- 使用连接池管理数据库连接
- 启用Gzip压缩响应
- 配置合理的超时设置
- 启用自适应流(Adaptive Stream)
- 启用动态广播(Dynacast)
- 优化音频编码参数
- 使用合适的音频采样率
- 启用代码分割(Code Splitting)
- 使用CDN加载静态资源
- 启用浏览器缓存
- 优化图片和音频资源
-
API密钥安全
- 不要将API密钥提交到版本控制
- 使用环境变量管理敏感信息
- 定期轮换API密钥
-
输入验证
- 对所有用户输入进行验证和清理
- 防止SQL注入和XSS攻击
- 限制文件上传类型和大小
-
访问控制
- 启用CORS保护
- 实施速率限制
- 使用HTTPS加密通信
-
数据隐私
- 加密存储敏感数据
- 定期备份重要数据
- 遵守数据保护法规
- Fork项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建Pull Request
在另一台有显卡的机器上启用 VoxCPM 本地克隆:
# 1. 安装PyTorch(按CUDA版本选择,参考 https://pytorch.org/get-started)
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121
# 2. 安装VoxCPM
pip install voxcpm启动后端后访问以下端点自检:
GET /api/system/resources— 硬件能力诊断(GPU/CPU/内存/能力矩阵)GET /api/voice-clone/voxcpm/status— VoxCPM就绪状态(首次合成时自动从HuggingFace下载模型约1GB)
使用流程:
POST /api/voice-clone/voxcpm上传15-45秒参考音频(可传transcript文字转写;不传会用MiMo ASR自动提取)- 用返回的
voice_id(voxcpm_前缀)调用/api/tts或对话接口即可用克隆音色说话 - 克隆相似度不佳时可
PUT /api/voice-clone/voxcpm/{id}/transcript补充修正转写
可选环境变量:VOXCPM_MODEL_ID、VOXCPM_INFERENCE_TIMESTEPS(默认10,越小越快)、VOXCPM_CFG_VALUE(默认2.0)
- 蒸馏:
POST /api/persona/distill从聊天记录/直播语料自动生成人格Skill - 评估:
POST /api/persona/{id}/evaluate探针采样+LLM评审(一致性/自然度/独特性打分) - 优化:
POST /api/persona/{id}/optimize根据反馈自动调整风格参数并升版本 - 历史:
GET /api/persona/{id}/history查看全部评估与优化记录
- 看图聊天:
POST /api/multimodal/image上传图片+提问,视觉模型结合当前人格回复,回复记入记忆。前端入口在侧边栏"设置 → 看图聊天"。
MIT License
如有问题或建议,请通过以下方式联系:
- 提交Issue
- 发送邮件
- 加入讨论群
注意: 本项目为开源项目,使用第三方API服务可能需要付费。请遵守各API服务商的使用条款。