Skip to content

Repository files navigation

AI Companion - 智能陪伴助手 v2.0

一个能够从对话中学习、支持实时语音交互的AI陪伴机器人,可以模拟特定人物的声音,提供情感陪伴。

项目概述

这是一个全栈AI应用,包含:

  • 后端: FastAPI + Python,集成国产LLM API
  • 前端: React + TypeScript,现代化聊天界面
  • 核心功能: 对话记忆、实时语音对话、声音克隆
  • 部署: Docker容器化,支持本地和云端部署

v2.0 新特性

🚀 实时语音对话(LiveKit集成)

  • 全双工语音交互: 像打电话一样与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(可选,用于实时语音对话)

1. 克隆项目

git clone <repository-url>
cd aiCompanionship

2. 配置API密钥

cd 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密钥(实时语音对话,可选)

3. 启动后端服务

cd backend
python run.py

后端将在 http://localhost:8000 启动

4. 启动前端服务

cd frontend
npm install
npm run dev

前端将在 http://localhost:3000 启动

5. 启动LiveKit Server(可选)

# 安装LiveKit Server
brew install livekit

# 启动LiveKit Server
livekit-server --dev

6. 使用Docker(推荐)

# 使用Docker Compose启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

项目结构

aiCompanionship/
├── 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              # 项目文档

API文档

启动后端服务后,访问 http://localhost:8000/docs 查看完整的API文档。

主要API端点

对话API

  • POST /api/conversation - 发送消息
  • GET /api/memories/{conversation_id} - 获取对话记忆
  • DELETE /api/memories/{conversation_id} - 清除对话记忆

语音API

  • POST /api/tts - 文本转语音
  • POST /api/stt - 语音转文本

流式API

  • WS /ws/conversation - WebSocket实时对话
  • POST /stream/conversation/sse - SSE流式对话
  • POST /stream/voice - 流式语音合成

语音克隆API

  • POST /api/voice-clone - 创建语音克隆
  • GET /api/voice-clone - 列出语音克隆
  • GET /api/voice-clone/{voice_id} - 获取语音克隆详情
  • DELETE /api/voice-clone/{voice_id} - 删除语音克隆

系统API

  • GET /health - 健康检查
  • GET /api/statistics - 系统统计

配置说明

后端配置(backend/.env)

# 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

前端配置(frontend/.env)

# LiveKit配置
VITE_LIVEKIT_URL=ws://localhost:7880
VITE_LIVEKIT_TOKEN=your_livekit_token

LiveKit实时语音对话使用指南

1. 安装LiveKit Server

# macOS
brew install livekit

# Linux
curl -sSL https://get.livekit.io | bash

# 或使用Docker
docker run --rm -p 7880:7880 livekit/livekit-server --dev

2. 配置LiveKit

在 backend/.env 中添加:

LIVEKIT_URL=ws://localhost:7880
LIVEKIT_API_KEY=your_api_key
LIVEKIT_API_SECRET=your_api_secret

3. 生成LiveKit Token

from 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()

4. 前端集成

import useLiveKit from './hooks/useLiveKit';

const { connect, disconnect, toggleMicrophone } = useLiveKit(
  'ws://localhost:7880',
  'your-token'
);

声音克隆使用指南

1. 准备声音样本

  • 收集目标人物的清晰录音(建议5-10分钟)
  • 保存为WAV格式,采样率16kHz
  • 确保录音环境安静,无背景噪音

2. 创建声音克隆

# 通过API创建克隆
curl -X POST http://localhost:8000/api/voice-clone \
  -H "Content-Type: application/json" \
  -d '{
    "audio_data": "base64编码的音频数据",
    "voice_name": "我的声音",
    "description": "温柔的女声"
  }'

3. 使用克隆声音

# 使用克隆声音进行TTS
curl -X POST http://localhost:8000/api/tts \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好,我是你的AI陪伴助手",
    "voice_id": "noiz_123456"
  }'

部署指南

生产环境部署

1. 使用Docker Compose

# 构建并启动
docker-compose -f docker-compose.prod.yml up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f

2. 手动部署

# 后端
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

故障排除

常见问题

  1. LiveKit连接失败

    # 检查LiveKit Server是否运行
    curl http://localhost:7880
    
    # 检查API密钥配置
    # 确保LIVEKIT_API_KEY和LIVEKIT_API_SECRET正确
  2. 语音克隆失败

    # 检查Noiz.ai API密钥
    # 确保音频格式正确(WAV, 16kHz)
    # 检查音频质量(建议15-45秒)
  3. 后端启动失败

    # 检查Python版本
    python --version
    
    # 检查依赖
    pip install -r requirements.txt
    
    # 检查端口占用
    lsof -i :8000
  4. 前端无法连接后端

    # 检查后端是否运行
    curl http://localhost:8000/health
    
    # 检查CORS配置
    # 确保CORS_ORIGINS包含前端地址

日志查看

# Docker日志
docker-compose logs backend
docker-compose logs frontend

# 后端日志
tail -f backend/logs/app.log

# 前端日志
# 浏览器开发者工具 Console

性能优化建议

后端优化

  1. 启用Redis缓存频繁查询
  2. 使用连接池管理数据库连接
  3. 启用Gzip压缩响应
  4. 配置合理的超时设置

LiveKit优化

  1. 启用自适应流(Adaptive Stream)
  2. 启用动态广播(Dynacast)
  3. 优化音频编码参数
  4. 使用合适的音频采样率

前端优化

  1. 启用代码分割(Code Splitting)
  2. 使用CDN加载静态资源
  3. 启用浏览器缓存
  4. 优化图片和音频资源

安全建议

  1. API密钥安全

    • 不要将API密钥提交到版本控制
    • 使用环境变量管理敏感信息
    • 定期轮换API密钥
  2. 输入验证

    • 对所有用户输入进行验证和清理
    • 防止SQL注入和XSS攻击
    • 限制文件上传类型和大小
  3. 访问控制

    • 启用CORS保护
    • 实施速率限制
    • 使用HTTPS加密通信
  4. 数据隐私

    • 加密存储敏感数据
    • 定期备份重要数据
    • 遵守数据保护法规

贡献指南

  1. Fork项目
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建Pull Request

GPU机器部署(本地音色克隆)

在另一台有显卡的机器上启用 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)

使用流程:

  1. POST /api/voice-clone/voxcpm 上传15-45秒参考音频(可传transcript文字转写;不传会用MiMo ASR自动提取)
  2. 用返回的voice_id(voxcpm_前缀)调用 /api/tts 或对话接口即可用克隆音色说话
  3. 克隆相似度不佳时可 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服务商的使用条款。

About

Reproduce the voices of relatives or friends and have them have a normal conversation with you.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages