Synapse Live 是一个 AI 增强的互动直播平台后端项目。它不仅仅是一个传统的直播推拉流服务,而是深度整合了现代大语言模型 (LLM) 和语音识别 (ASR) 技术,旨在通过 AI 赋能,极大地提升主播与观众之间的互动深度和直播内容的可访问性。
本项目采用 Go 语言构建,并遵循了云原生最佳实践,实现了微服务架构、事件驱动通信以及全面的可观测性。
- 直播推拉流: 基于 SRS 实现稳定高效的 RTMP 推流和 HTTP-FLV/HLS/WebRTC 分发。
- 用户系统: 支持本地用户名密码注册登录,以及 Google/GitHub OAuth2 无缝登录。
- 实时弹幕: 基于 WebSocket 和 NATS 消息队列,构建了可水平扩展的高性能实时弹幕系统。
- 录播与回放 (VOD): 支持直播自动录制,并通过 MinIO (S3 兼容) 进行对象存储,提供回放 API。
- 虚拟货币与礼物系统: 完整的内部虚拟经济系统,支持钱包管理、礼物赠送、平台抽成和实时广播。
- 社区系统: 支持用户间的关注/取关,构建社区关系基础。
- 实时字幕 (ASR): 自动将主播的语音实时转换为字幕,并通过 WebSocket 广播给所有观众。
- 弹幕情绪分析: 后台 AI Worker 实时分析观众弹幕的情绪倾向,并将结果持久化。
- 热点话题提炼: 周期性地分析弹幕内容,提取观众正在热议的关键词。
- 智能 Q&A 助手: 主播可预设知识库,AI 助手能通过 LLM 语义理解,自动在聊天室中回答观众的常见问题。
- 高光时刻自动标记: 通过分析弹幕密度等指标,自动识别并记录直播中的精彩瞬间。
- AI 内容审核: “AI 房管” 实时审查弹幕内容,自动处理违规信息,维护社区健康。
- AI 直播摘要: 直播结束后,自动整合字幕、高光、热点等信息,通过 LLM 生成 VOD 的内容摘要和章节目录。
- 语言: Go
- 微服务框架:
- HTTP API / WebSocket: Gin
- 服务间同步通信: gRPC
- 数据库:
- 业务数据: PostgreSQL
- 缓存/会话管理: Redis
- 消息队列/事件总线: NATS (JetStream)
- 流媒体服务: SRS (Simple Realtime Server)
- 对象存储: MinIO (S3 兼容)
- AI / 大语言模型:
- 抽象层: 自定义
LLMClient和ASRClient接口 - 具体实现: 通义千问 (Qwen)
- 抽象层: 自定义
- 可观测性 (Observability):
- 指标 (Metrics): Prometheus
- 日志 (Logging): Loki + Promtail
- 追踪 (Tracing): Jaeger + OpenTelemetry
- 可视化 (Visualization): Grafana
- 容器化与编排: Docker, Docker Compose
- 核心依赖库: GORM, Zap, Viper,
golang.org/x/oauth2,prometheus/client_golang等。
Synapse Live 采用现代化的微服务架构,通过 Docker Compose 进行编排。服务之间遵循“同步 gRPC,异步 NATS”的通信原则。
- core-service: 核心业务服务。作为大部分 HTTP API 的入口,处理所有核心业务逻辑,如用户、认证、房间、VOD、礼物、关注等。同时,它也作为 gRPC 服务端,向其他内部服务提供核心数据。
- im-service: 实时消息服务。职责单一且明确,专门负责处理和管理所有 WebSocket 长连接。它通过 NATS 消息总线与后端的 AI 服务和核心服务解耦。
- ai-service: AI 服务。包含了所有后台的 AI Worker。它通过订阅 NATS 事件来异步处理任务(如情绪分析、内容审核),并通过 gRPC 暴露一些查询服务(如分析数据查询)。
- SRS: 独立的流媒体服务器,负责所有视频流的接收、转码和分发,通过 Webhooks 与
core-service进行状态同步。
项目采用清晰的 monorepo 结构,服务代码与共享代码分离。
synapse-live/
├── core-service/ # 核心服务源码
│ ├── cmd/server/main.go # 启动入口
│ ├── configs/ # 专属配置文件
│ ├── internal/ # 内部实现 (API, gRPC, Service, Repo)
│ └── ...
├── ai-service/ # AI 服务源码
│ ├── cmd/server/main.go
│ ├── configs/
│ ├── internal/ # (Client, gRPC, Service, Repo, API)
│ └── Dockerfile
│ └── go.mod
├── im-service/ # 实时消息服务源码
│ ├── cmd/server/main.go
│ ├── configs/
│ ├── internal/ # (API, Service)
│ └── Dockerfile
│ └── go.mod
├── pkg/ # 所有服务共享的公共包
│ ├── auth/ # 认证 (JWT Claims)
│ ├── common/ # 公共常量和事件定义
│ ├── config/ # 共享配置结构体
│ ├── database/ # 数据库初始化
│ ├── domain/entity/ # 核心领域实体 (GORM Models)
│ ├── gutils/ # 泛型工具函数
│ ├── middleware/ # 共享中间件
│ ├── mq/ # 消息队列抽象层与实现
│ ├── repository/ # 仓储层接口定义
│ ├── realtime/ # 实时消息结构体
│ └── tracing/ # 分布式追踪初始化
├── proto/ # Protobuf 定义文件
│ ├── analysis/
│ ├── room/
│ └── ...
├── monitoring/ # 监控配置文件 (Prometheus, Grafana, Loki)
├── Dockerfile # core-service 的 Dockerfile
├── docker-compose.yml # 项目总编排文件
└── go.mod # core-service 及共享库的 Go 模块文件
请确保您已安装 Go (1.21+), Docker, Docker Compose, 和 protoc 编译器。
git clone https://github.com/zhashut/synapse-live.git
cd synapse-live在 core-service/configs/config.local.yaml 和 ai-service/configs/config.local.yaml 等配置文件中,填入您自己的数据库密码、OAuth2 凭证、AI 服务 API Key 等。
# 在项目根目录运行
protoc --go_out=. --go-grpc_out=. proto/**/*.proto# 在根目录
go mod tidy
# 在 ai-service 目录
cd ai-service && go mod tidy && cd ..
# 在 im-service 目录
cd im-service && go mod tidy && cd ..docker-compose up --build- Core Service API:
http://localhost:8081 - AI Service API (QnA):
http://localhost:8083 - IM Service WebSocket:
ws://localhost:8084 - Grafana (监控):
http://localhost:3000(admin/admin) - Jaeger (追踪):
http://localhost:16686 - Prometheus:
http://localhost:9090 - MinIO Console:
http://localhost:9001(minioadmin/minioadmin)
本项目采用 MIT License 授权。