fei67896/elab-meeting-sys

1

stars

6

commits

Python

primary language

Jun 3, 2026

updated

README

eLab Meeting Sys · 智能会议秘书

基于 Linly-Talker-Stream 构建的 AI 会议秘书 + 实时数字人 演示系统:语音/文字下达指令,LLM Agent 自动订会、查会、管理议程与参会人,数字人同步播报结果。

DEMO · 复旦大学 · 非商用 · 赵一飞信息
本仓库为教学/演示用途,请勿用于商业场景。

功能概览

模块说明
会议秘书 Agent通义千问 function calling,支持创建/查询/取消会议、议程、参会人、指令历史等
MCP 能力映射工具调用结果映射为预订 / 议程 / 查询 / 历史等结构化展示
web-meeting :3000统一前端:工作台、会议管理、历史查询、会议秘书#/voice)、移动秘书(#/douyin
数字人推流WebRTC + Wav2Lip,EdgeTTS 女声播报,口型与字幕近似同步
语音识别默认服务端 Whisper(medium);Edge 等浏览器走 MediaRecorder + /api/transcribe

会议秘书(#/voice)界面要点

  • 数字人窗口固定居中,左右侧栏向外展开,半透明毛玻璃样式
  • 左侧 已定会议:滚动列表,一键跳转会议详情
  • 右侧 专注历史:最近检测会议的专注度迷你曲线
  • 底部抖音风输入栏:打字 + 麦克风,播报中可打断
  • 顶栏复旦大学 Logo +「会议秘书」标题
  • 页脚 DEMO 标注与开源库致谢

系统架构

┌─────────────────────────────────────────┐
│           web-meeting (Vue3 :3000)       │
│  / 工作台  /meetings  /history  /voice   │
└────────────────────┬────────────────────┘
                     │  HTTPS 代理 /api
                     ▼
         ┌──────────────────────┐
         │  Python 后端 :3080     │
         │  WebRTC / TTS / ASR    │
         │  meeting + legacy API  │
         └──────────┬─────────────┘
                    ▼
              SQLite (meeting.db)
              LLM (DashScope qwen-plus)

目录结构

elab-meeting-sys/
├── config/config_wav2lip.yaml   # 主配置(端口、Avatar、TTS、ASR、LLM)
├── src/
│   ├── server/                  # aiohttp + WebRTC 服务
│   └── meeting/                 # 会议 CRUD、Agent intent、MCP 注册、Legacy 专注度
├── web-meeting/                 # 统一前端(含会议秘书 #/voice)
├── web-voice/                   # [已停用] 旧独立前端,见 web-voice/README.md
├── scripts/                     # 安装与启动脚本
├── models/                      # Wav2Lip 模型权重(Git LFS)
└── data/                        # 数字人素材、会议数据库

环境要求

  • Python 3.10–3.11
  • Node.js 18+
  • Git LFS(拉取 models/wav2lip.pth 大文件)
  • (推荐)NVIDIA GPU + CUDA,用于 Wav2Lip 口型推理与 Whisper ASR
  • 阿里云 DashScope API Key(通义千问)
  • 自签名 HTTPS 证书(ssl_certs/,已入库;也可 bash scripts/create_ssl_certs.sh 重新生成)

仓库已包含 / 需本机准备

内容位置说明
Wav2Lip 权重models/wav2lip.pthGit LFS,clone 后需 git lfs pull
数字人素材data/avatars/已入库,含当前形象 wav2lip_secretary_weixin
会议数据库data/meeting.db已入库,含示例会议与历史专注度
HTTPS 证书ssl_certs/已入库
Whisper 权重~/.cache/whisper/不在仓库,首次启动后端自动下载 medium(约 1.4GB)
API Key.env不在仓库,从 .env.example 复制后填入

快速开始

1. 克隆、拉取 LFS 与 Python 环境

git clone https://github.com/fei67896/elab-meeting-sys.git
cd elab-meeting-sys

# 拉取大文件(wav2lip.pth 约 205MB;未执行则只有几 KB 的 LFS 指针)
git lfs install
git lfs pull

python3 -m venv .venv
source .venv/bin/activate
pip install -e .
pip install -e src/avatars/wav2lip/

完整 Wav2Lip / PyTorch 依赖可参考 README_zh.mdscripts/setup-env.sh。RTX 50 系显卡需 PyTorch nightly cu128,勿用 uv run 以免版本被回退。

若已有另一台机器下载过 Whisper,可复制缓存以跳过下载:scp -r 旧机:~/.cache/whisper/ ~/.cache/whisper/

2. 配置密钥

cp .env.example .env
# 编辑 .env,填入 DASHSCOPE_API_KEY

或导出环境变量:

export DASHSCOPE_API_KEY="your_dashscope_api_key"

3. 启动后端(HTTPS :3080)

source .venv/bin/activate
set -a && source .env && set +a   # 若使用 .env
python src/server/app.py --config config/config_wav2lip.yaml

首次启动会下载 Whisper medium~/.cache/whisper/medium.pt(约 1.4GB),请预留时间与磁盘空间;之后启动直接读缓存,不再重复下载。

4. 启动前端

只需启动 一个 前端应用:

cd web-meeting && npm install && npm run dev
# https://localhost:3000

web-voice:3001)已合并进 web-meeting无需再启动

默认账号见 src/meeting/db.py 初始化逻辑(owner 用户 seed,如 zhaoyifei / 123456)。

秘书 Agent 示例

只需说出日期和时间即可订会,标题可省略(系统自动生成标题与 1 小时时长):

  • 「帮我订明天下午三点的会」
  • 「查一下下周有哪些会议」
  • 「给当前会议加一条议程:项目进度汇报」
  • 「看看最近的指令记录」

API 入口:POST /api/secretary/command
返回含 intentreply_textmcp_callsmcp_cards(供前端展示)。

主要 API

路径说明
POST /api/secretary/command自然语言指令 → Agent 执行
GET /api/meetings会议列表
GET /api/secretary/history指令历史
POST /api/transcribe服务端语音识别(Whisper)
GET /api/legacy/sessions检测会议列表(专注度等)
GET /api/legacy/sessions/{id}/overview单场专注度/情绪/行为概览
POST /offerWebRTC 建连

配置说明

编辑 config/config_wav2lip.yaml

配置项说明
app.listenport后端端口(默认 3080)
model.avatar_id数字人形象 ID(data/avatars/ 下)
tts.ref_fileEdgeTTS 音色(默认 zh-CN-XiaoxiaoNeural 女声)
asr.modeserver:浏览器录音后送服务端识别
asr.model_sizeWhisper 模型:tiny / small / medium(推荐 Edge 用 medium
llm.model默认 qwen-plus

致谢与开源库

感谢本项目用到的库与上游项目:

本项目继承上游 Apache-2.0 许可证,详见 LICENSE

Contributors

fei67896

6 commits

fei67896/elab-meeting-sys

1

stars

6

commits

Python

primary language

Jun 3, 2026

updated

README

eLab Meeting Sys · 智能会议秘书

基于 Linly-Talker-Stream 构建的 AI 会议秘书 + 实时数字人 演示系统:语音/文字下达指令,LLM Agent 自动订会、查会、管理议程与参会人,数字人同步播报结果。

DEMO · 复旦大学 · 非商用 · 赵一飞信息
本仓库为教学/演示用途,请勿用于商业场景。

功能概览

模块说明
会议秘书 Agent通义千问 function calling,支持创建/查询/取消会议、议程、参会人、指令历史等
MCP 能力映射工具调用结果映射为预订 / 议程 / 查询 / 历史等结构化展示
web-meeting :3000统一前端:工作台、会议管理、历史查询、会议秘书#/voice)、移动秘书(#/douyin
数字人推流WebRTC + Wav2Lip,EdgeTTS 女声播报,口型与字幕近似同步
语音识别默认服务端 Whisper(medium);Edge 等浏览器走 MediaRecorder + /api/transcribe

会议秘书(#/voice)界面要点

  • 数字人窗口固定居中,左右侧栏向外展开,半透明毛玻璃样式
  • 左侧 已定会议:滚动列表,一键跳转会议详情
  • 右侧 专注历史:最近检测会议的专注度迷你曲线
  • 底部抖音风输入栏:打字 + 麦克风,播报中可打断
  • 顶栏复旦大学 Logo +「会议秘书」标题
  • 页脚 DEMO 标注与开源库致谢

系统架构

┌─────────────────────────────────────────┐
│           web-meeting (Vue3 :3000)       │
│  / 工作台  /meetings  /history  /voice   │
└────────────────────┬────────────────────┘
                     │  HTTPS 代理 /api
                     ▼
         ┌──────────────────────┐
         │  Python 后端 :3080     │
         │  WebRTC / TTS / ASR    │
         │  meeting + legacy API  │
         └──────────┬─────────────┘
                    ▼
              SQLite (meeting.db)
              LLM (DashScope qwen-plus)

目录结构

elab-meeting-sys/
├── config/config_wav2lip.yaml   # 主配置(端口、Avatar、TTS、ASR、LLM)
├── src/
│   ├── server/                  # aiohttp + WebRTC 服务
│   └── meeting/                 # 会议 CRUD、Agent intent、MCP 注册、Legacy 专注度
├── web-meeting/                 # 统一前端(含会议秘书 #/voice)
├── web-voice/                   # [已停用] 旧独立前端,见 web-voice/README.md
├── scripts/                     # 安装与启动脚本
├── models/                      # Wav2Lip 模型权重(Git LFS)
└── data/                        # 数字人素材、会议数据库

环境要求

  • Python 3.10–3.11
  • Node.js 18+
  • Git LFS(拉取 models/wav2lip.pth 大文件)
  • (推荐)NVIDIA GPU + CUDA,用于 Wav2Lip 口型推理与 Whisper ASR
  • 阿里云 DashScope API Key(通义千问)
  • 自签名 HTTPS 证书(ssl_certs/,已入库;也可 bash scripts/create_ssl_certs.sh 重新生成)

仓库已包含 / 需本机准备

内容位置说明
Wav2Lip 权重models/wav2lip.pthGit LFS,clone 后需 git lfs pull
数字人素材data/avatars/已入库,含当前形象 wav2lip_secretary_weixin
会议数据库data/meeting.db已入库,含示例会议与历史专注度
HTTPS 证书ssl_certs/已入库
Whisper 权重~/.cache/whisper/不在仓库,首次启动后端自动下载 medium(约 1.4GB)
API Key.env不在仓库,从 .env.example 复制后填入

快速开始

1. 克隆、拉取 LFS 与 Python 环境

git clone https://github.com/fei67896/elab-meeting-sys.git
cd elab-meeting-sys

# 拉取大文件(wav2lip.pth 约 205MB;未执行则只有几 KB 的 LFS 指针)
git lfs install
git lfs pull

python3 -m venv .venv
source .venv/bin/activate
pip install -e .
pip install -e src/avatars/wav2lip/

完整 Wav2Lip / PyTorch 依赖可参考 README_zh.mdscripts/setup-env.sh。RTX 50 系显卡需 PyTorch nightly cu128,勿用 uv run 以免版本被回退。

若已有另一台机器下载过 Whisper,可复制缓存以跳过下载:scp -r 旧机:~/.cache/whisper/ ~/.cache/whisper/

2. 配置密钥

cp .env.example .env
# 编辑 .env,填入 DASHSCOPE_API_KEY

或导出环境变量:

export DASHSCOPE_API_KEY="your_dashscope_api_key"

3. 启动后端(HTTPS :3080)

source .venv/bin/activate
set -a && source .env && set +a   # 若使用 .env
python src/server/app.py --config config/config_wav2lip.yaml

首次启动会下载 Whisper medium~/.cache/whisper/medium.pt(约 1.4GB),请预留时间与磁盘空间;之后启动直接读缓存,不再重复下载。

4. 启动前端

只需启动 一个 前端应用:

cd web-meeting && npm install && npm run dev
# https://localhost:3000

web-voice:3001)已合并进 web-meeting无需再启动

默认账号见 src/meeting/db.py 初始化逻辑(owner 用户 seed,如 zhaoyifei / 123456)。

秘书 Agent 示例

只需说出日期和时间即可订会,标题可省略(系统自动生成标题与 1 小时时长):

  • 「帮我订明天下午三点的会」
  • 「查一下下周有哪些会议」
  • 「给当前会议加一条议程:项目进度汇报」
  • 「看看最近的指令记录」

API 入口:POST /api/secretary/command
返回含 intentreply_textmcp_callsmcp_cards(供前端展示)。

主要 API

路径说明
POST /api/secretary/command自然语言指令 → Agent 执行
GET /api/meetings会议列表
GET /api/secretary/history指令历史
POST /api/transcribe服务端语音识别(Whisper)
GET /api/legacy/sessions检测会议列表(专注度等)
GET /api/legacy/sessions/{id}/overview单场专注度/情绪/行为概览
POST /offerWebRTC 建连

配置说明

编辑 config/config_wav2lip.yaml

配置项说明
app.listenport后端端口(默认 3080)
model.avatar_id数字人形象 ID(data/avatars/ 下)
tts.ref_fileEdgeTTS 音色(默认 zh-CN-XiaoxiaoNeural 女声)
asr.modeserver:浏览器录音后送服务端识别
asr.model_sizeWhisper 模型:tiny / small / medium(推荐 Edge 用 medium
llm.model默认 qwen-plus

致谢与开源库

感谢本项目用到的库与上游项目:

本项目继承上游 Apache-2.0 许可证,详见 LICENSE

Contributors

fei67896

6 commits

Languages

Python

59.9%

Vue

17.3%

Cuda

11.7%

JavaScript

6.8%

Shell

1.7%