Skip to content

BH1IXO/HennessyNight

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

智能会议纪要系统 - 后端服务

📋 项目概述

这是一个生产级的智能会议纪要系统后端,提供实时语音转录、声纹识别和AI纪要生成功能。

🎯 核心亮点

  • ⭐ 实时声纹识别引擎 - 基于声纹库的实时说话人识别
  • 🎤 多Provider架构 - 支持多种语音和声纹识别服务
  • 🤖 AI智能分析 - DeepSeek驱动的智能纪要生成
  • 📡 RESTful API - 完整的REST API接口
  • 🔄 实时通信 - WebSocket支持(即将推出)
  • 🗄️ 完整数据管理 - Prisma + PostgreSQL

🏗️ 系统架构

┌─────────────────────────────────────────────────────────────────┐
│                         Frontend                                │
│                  (meetingsystm.html)                           │
└────────────────────┬────────────────────────────────────────────┘
                     │ HTTP/WebSocket
┌────────────────────▼────────────────────────────────────────────┐
│                    Express API Server                           │
│   ┌──────────┬──────────┬──────────┬──────────┬──────────┐    │
│   │ Meetings │ Speakers │Transcripts│Summaries │ Sessions │    │
│   │   API    │   API    │   API    │   API    │   API    │    │
│   └────┬─────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘    │
└────────┼──────────┼──────────┼──────────┼──────────┼──────────┘
         │          │          │          │          │
┌────────▼──────────▼──────────▼──────────▼──────────▼──────────┐
│                      Service Layer                              │
│  ┌──────────────┐  ┌─────────────┐  ┌──────────────────────┐  │
│  │ Voiceprint   │  │ DeepSeek AI │  │  Audio Processor     │  │
│  │   Engine     │  │  Service    │  │                      │  │
│  │  ⭐ Real-time │  │             │  │  - Format Conversion │  │
│  │  Recognition │  │  - Summary  │  │  - Noise Reduction   │  │
│  │              │  │  - Analysis │  │  - Segmentation      │  │
│  └──────┬───────┘  └──────┬──────┘  └──────────────────────┘  │
│         │                  │                                     │
│  ┌──────▼───────┐  ┌──────▼───────┐                           │
│  │ iFlytek      │  │ pyannote     │                           │
│  │ Transcription│  │ Voiceprint   │                           │
│  └──────────────┘  └──────┬───────┘                           │
└────────────────────────────┼─────────────────────────────────┘
                             │
                      ┌──────▼───────┐
                      │   Python     │
                      │ ML Models    │
                      └──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│                     Data Layer                                  │
│   ┌──────────────┐    ┌──────────┐    ┌───────────────┐       │
│   │ PostgreSQL   │    │  Redis   │    │  File Storage │       │
│   │  (Prisma)    │    │ (Cache)  │    │   (MinIO/S3)  │       │
│   └──────────────┘    └──────────┘    └───────────────┘       │
└─────────────────────────────────────────────────────────────────┘

🚀 快速开始

1. 环境要求

  • Node.js 18+
  • Python 3.8+ (用于pyannote.audio)
  • PostgreSQL 14+
  • Redis (可选,用于缓存和队列)
  • ffmpeg (用于音频处理)

2. 安装依赖

# 1. 安装Node依赖
npm install

# 2. 设置Python环境(用于声纹识别)
cd python
chmod +x setup.sh
./setup.sh
# Windows: 运行 setup.bat

# 3. 激活Python环境
source python/pyannote-env/bin/activate  # Linux/Mac
# Windows: python\pyannote-env\Scripts\activate.bat

# 4. 测试Python环境
cd python
python test_pyannote.py

3. 配置环境变量

复制 .env.example.env 并填写配置:

# 数据库
DATABASE_URL="postgresql://user:password@localhost:5432/meeting_system"

# Redis (可选)
REDIS_URL="redis://localhost:6379"

# 讯飞语音
IFLYTEK_APP_ID=your_app_id
IFLYTEK_API_KEY=your_api_key
IFLYTEK_API_SECRET=your_api_secret

# DeepSeek AI
DEEPSEEK_API_KEY=your_deepseek_api_key

# pyannote.audio
PYANNOTE_DEVICE=cuda  # 或 cpu
PYANNOTE_MODEL_PATH=pyannote/speaker-diarization

# 服务器
PORT=3000
HOST=0.0.0.0
NODE_ENV=development

4. 初始化数据库

# 生成Prisma Client
npx prisma generate

# 运行数据库迁移
npx prisma migrate dev

# (可选) 查看数据库
npx prisma studio

5. 启动服务

# 开发模式(热重载)
npm run dev

# 生产模式
npm run build
npm start

服务启动后访问:

  • API: http://localhost:3000/api/v1
  • 健康检查: http://localhost:3000/health
  • API文档: http://localhost:3000/api/v1/docs

📖 API 文档

Meetings API (会议管理)

# 创建会议
POST /api/v1/meetings
{
  "title": "项目讨论会",
  "scheduledAt": "2024-01-20T10:00:00Z",
  "description": "讨论Q1项目计划",
  "attendeeIds": ["speaker_1", "speaker_2"]
}

# 获取会议列表
GET /api/v1/meetings?status=IN_PROGRESS&limit=20&offset=0

# 获取会议详情
GET /api/v1/meetings/:id

# 更新会议
PUT /api/v1/meetings/:id

# 开始会议
POST /api/v1/meetings/:id/start

# 结束会议
POST /api/v1/meetings/:id/finish

# 删除会议
DELETE /api/v1/meetings/:id

Speakers API (说话人管理)

# 创建说话人
POST /api/v1/speakers
{
  "name": "张三",
  "email": "zhangsan@example.com"
}

# 获取说话人列表
GET /api/v1/speakers?status=ENROLLED

# 注册声纹
POST /api/v1/speakers/:id/enroll
{
  "audioUrl": "https://..."
}

# 获取说话人详情
GET /api/v1/speakers/:id

# 更新说话人
PUT /api/v1/speakers/:id

# 删除说话人
DELETE /api/v1/speakers/:id

Sessions API (实时识别会话)

# 创建识别会话
POST /api/v1/sessions/create
{
  "meetingId": "meeting_123",
  "candidateSpeakerIds": ["speaker_1", "speaker_2"],
  "engineConfig": {
    "bufferDuration": 3,
    "identificationThreshold": 0.75
  }
}

# 获取会话状态
GET /api/v1/sessions/:id/status

# 暂停会话
POST /api/v1/sessions/:id/pause

# 恢复会话
POST /api/v1/sessions/:id/resume

# 销毁会话
DELETE /api/v1/sessions/:id

# 获取统计信息
GET /api/v1/sessions/stats

Summaries API (会议纪要)

# 生成会议纪要
POST /api/v1/summaries/generate
{
  "meetingId": "meeting_123",
  "language": "zh",
  "style": "formal",
  "saveToDatabase": true
}

# 获取会议纪要
GET /api/v1/summaries/meeting/:meetingId

# 重新生成纪要
POST /api/v1/summaries/:id/regenerate

Audio API (音频处理)

# 上传音频文件
POST /api/v1/audio/upload
Content-Type: multipart/form-data
- audio: [file]
- meetingId: "meeting_123"

# 处理音频(转录 + 声纹识别)
POST /api/v1/audio/process
{
  "audioFileId": "audio_123"
}

# 获取音频信息
GET /api/v1/audio/:id/info

Transcripts API (转录管理)

# 获取会议转录
GET /api/v1/transcripts/meeting/:meetingId

# 创建转录记录
POST /api/v1/transcripts
{
  "meetingId": "meeting_123",
  "speakerId": "speaker_1",
  "speakerLabel": "张三",
  "content": "大家好,我是张三",
  "timestamp": "2024-01-20T10:05:00Z"
}

🔧 核心服务

1. 实时声纹识别引擎 ⭐

import { getVoiceprintEngineManager } from '@/services/voiceprint/VoiceprintEngineManager';

// 初始化管理器
const manager = getVoiceprintEngineManager({
  maxConcurrentSessions: 10,
  sessionTimeout: 3600000,
  cleanupInterval: 60000,
  iflytekConfig: { /* ... */ },
  pyannoteConfig: { /* ... */ }
});

// 创建会话
const sessionId = await manager.createSession({
  meetingId: 'meeting_123',
  candidateSpeakerIds: ['speaker_1', 'speaker_2']
});

// 监听事件
manager.on('speaker_identified', (sid, speakerId, speakerName, confidence) => {
  console.log(`识别到: ${speakerName} (${confidence})`);
});

// 发送音频
await manager.sendAudio(sessionId, audioBuffer);

// 销毁会话
await manager.destroySession(sessionId);

详细文档: src/services/voiceprint/README.md

2. DeepSeek AI 服务

import { DeepSeekService } from '@/services/ai/DeepSeekService';
import { MeetingSummaryGenerator } from '@/services/ai/MeetingSummaryGenerator';

// 初始化
const deepseek = new DeepSeekService({
  apiKey: process.env.DEEPSEEK_API_KEY!
});

const generator = new MeetingSummaryGenerator(deepseek);

// 生成纪要
const result = await generator.generate({
  meetingId: 'meeting_123',
  language: 'zh',
  style: 'formal',
  saveToDatabase: true
});

console.log(result.summary);

详细文档: src/services/ai/README.md

3. 音频处理服务

import { AudioProcessor } from '@/services/audio/AudioProcessor';

const processor = new AudioProcessor();

// 转换为标准格式
await processor.convertToStandardWav('input.mp3', 'output.wav');

// 降噪
await processor.denoise('input.wav', 'output.wav');

// 智能分段
const segments = await processor.smartSegment('input.wav');

📁 项目结构

meeting-system-backend/
├── src/
│   ├── app.ts                      # Express应用配置
│   ├── server.ts                   # 服务器入口
│   ├── api/
│   │   ├── routes/                 # API路由
│   │   │   ├── meetings.ts         # 会议管理
│   │   │   ├── speakers.ts         # 说话人管理
│   │   │   ├── sessions.ts         # 实时会话
│   │   │   ├── summaries.ts        # 纪要生成
│   │   │   ├── transcripts.ts      # 转录管理
│   │   │   ├── audio.ts            # 音频处理
│   │   │   └── health.ts           # 健康检查
│   │   └── middleware/             # 中间件
│   │       ├── errorHandler.ts     # 错误处理
│   │       ├── requestLogger.ts    # 请求日志
│   │       └── rateLimiter.ts      # 速率限制
│   └── services/
│       ├── voiceprint/             # 声纹识别 ⭐
│       │   ├── RealtimeVoiceprintEngine.ts
│       │   ├── VoiceprintEngineManager.ts
│       │   ├── demo.ts
│       │   └── README.md
│       ├── ai/                     # AI服务
│       │   ├── DeepSeekService.ts
│       │   ├── MeetingSummaryGenerator.ts
│       │   └── README.md
│       ├── audio/                  # 音频处理
│       │   └── AudioProcessor.ts
│       └── providers/              # Provider接口
│           ├── types.ts            # 统一接口
│           ├── transcription/
│           │   └── IFlytekTranscription.ts
│           └── voiceprint/
│               └── PyannoteVoiceprint.ts
├── prisma/
│   └── schema.prisma               # 数据库Schema
├── python/                         # Python环境
│   ├── setup.sh                    # Linux/Mac安装脚本
│   ├── setup.bat                   # Windows安装脚本
│   ├── test_pyannote.py            # 测试脚本
│   ├── requirements.txt            # Python依赖
│   └── README.md                   # Python环境文档
├── docs/                           # 文档
│   └── PROVIDERS.md                # Provider对比
├── package.json
├── tsconfig.json
├── .env.example
└── README.md

🎯 核心功能实现状态

功能 状态 说明
✅ 数据库Schema 完成 Prisma + PostgreSQL,15+表
✅ 多Provider架构 完成 统一接口,支持多种服务
✅ 讯飞语音转录 完成 WebSocket实时转录
✅ pyannote声纹识别 完成 开源方案,SOTA性能
✅ 实时声纹识别引擎 ⭐ 完成 核心亮点
✅ DeepSeek AI集成 完成 智能纪要生成
✅ 音频处理工具 完成 格式转换、降噪、分段
✅ RESTful API 完成 完整的REST接口
⏳ WebSocket实时通信 进行中 实时音频流传输
⏳ 任务队列 待实现 Bull Queue异步任务
⏳ 文件存储 待实现 MinIO/S3音频存储
⏳ 认证授权 待实现 JWT + RBAC
⏳ 集成测试 待实现 Jest单元测试
⏳ Docker部署 待实现 容器化部署

🧪 测试

# 运行所有测试
npm test

# 运行特定测试
npm test -- meetings.test.ts

# 测试覆盖率
npm run test:coverage

# 测试pyannote环境
cd python
python test_pyannote.py

📊 性能指标

转录性能

  • 讯飞实时转录: ~200ms延迟
  • CPU处理: 60-120秒/分钟音频
  • GPU处理: 10-20秒/分钟音频

声纹识别性能

  • 说话人分离: ~5-10秒/分钟音频
  • 1:N识别: ~100ms (N<100)
  • 内存占用: ~2-3GB (CPU) / ~1-2GB VRAM (GPU)

API性能

  • 平均响应时间: <100ms
  • 并发会话数: 10+ (可配置)
  • 数据库查询: <50ms

🐛 故障排查

1. 数据库连接失败

# 检查PostgreSQL是否运行
ps aux | grep postgres

# 测试连接
psql postgresql://user:password@localhost:5432/meeting_system

# 重新生成Prisma Client
npx prisma generate

2. Python环境问题

# 重新安装Python环境
cd python
rm -rf pyannote-env
./setup.sh

# 测试安装
python test_pyannote.py

3. 讯飞API错误

检查 .env 中的配置:

  • IFLYTEK_APP_ID
  • IFLYTEK_API_KEY
  • IFLYTEK_API_SECRET

4. CUDA/GPU问题

# 检查CUDA
nvidia-smi

# 使用CPU模式
PYANNOTE_DEVICE=cpu npm run dev

🔒 安全考虑

  • ✅ Helmet.js 安全头
  • ✅ CORS 配置
  • ✅ 速率限制
  • ✅ 输入验证 (Zod)
  • ✅ SQL注入防护 (Prisma)
  • ⏳ JWT认证 (待实现)
  • ⏳ RBAC授权 (待实现)

🚢 部署

Docker部署 (即将推出)

# 构建镜像
docker build -t meeting-system-backend .

# 运行容器
docker-compose up -d

PM2部署

# 安装PM2
npm install -g pm2

# 启动服务
pm2 start npm --name "meeting-backend" -- start

# 查看日志
pm2 logs meeting-backend

# 重启
pm2 restart meeting-backend

📝 许可证

MIT License

👥 贡献

欢迎贡献代码!请提交Pull Request或Issue。

🔗 相关资源


🎉 这是一个生产级的智能会议纪要系统后端!

如有问题,请提交Issue或查看详细文档。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •