Speakr是AI 会议记录软件,作用为将音频通过whisper模型转换为文字,由语言大模型进行归纳总结。Speakr支持现场录音记录、线上会议记录及音频文件上传等方式。
此次实验环境如下:
1)语言大模型:Qwen3-32B
2)whisper 模型服务器:ubuntu 22版本,whisper模型为:medium (由于安装whisper 的服务器显存不够,只能选择中等模型)
3)Speakr服务器:Windows 主机一台(安装Dokcer Desktop)
whisper 模型服务器配置可参考下文(Python 版本建议选择3.11,到虚拟环境安装完所必要插件后即可):
文档链接:Ubuntu22.04 +魔搭社区大模型安装
安装下面依赖
在虚拟环境中安装以下依赖:
(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# pip install openai-whisper
(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# pip install fastapi uvicorn
(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# sudo apt install ffmpeg
在/etc/model创建whisper_api.py
import os
import whisper
from fastapi import FastAPI, UploadFile, Form
from fastapi.responses import JSONResponse
import uvicorn
app = FastAPI()
# 预加载模型(medium),强制使用 GPU(CUDA)
model = whisper.load_model("/etc/model/whisper", device="cuda")
@app.post("/v1/audio/transcriptions")
async def transcribe(file: UploadFile, model_name: str = Form("whisper-1")):
try:
# 保存临时文件
temp_file = f"/tmp/{file.filename}"
with open(temp_file, "wb") as f:
f.write(await file.read())
# 转录(也可以再次指定 device)
result = model.transcribe(temp_file, fp16=True)
# 返回结果(仿 OpenAI 格式)
return JSONResponse(content={
"text": result["text"]
})
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=9020)
启动改脚本
(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# nohup python3 whisper_api.py > whisper.log 2>&1 &
PS:启动时可以通过查看日志文件是否正常启动
(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:/etc/model# cat whisper.log
最终启动后如下图所示:
在Windows 任意目录下创建 【.env】文件和【docker-compose.yml】
.env 如下所示:
# --- Text Generation Model ---
TEXT_MODEL_BASE_URL=http://192.168.x.x:端口号/v1 /*语言大模型IP地址:端口号*/
TEXT_MODEL_API_KEY=Sx /*语言大模型密钥*/
TEXT_MODEL_NAME=Qwen3-32B /*语言大模型名称*/
# --- Transcription Service ---
TRANSCRIPTION_BASE_URL=http://10.x.x.x:端口号/v1/ /*whisper 服务器IP地址:端口号*/
TRANSCRIPTION_API_KEY=Sx /*whisper 服务器密钥,无可随意写但不能留空*/
WHISPER_MODEL=whisper-1
# --- Large File Chunking ---
ENABLE_CHUNKING=true
CHUNK_LIMIT=20MB
# --- Application Settings ---
ALLOW_REGISTRATION=false
ADMIN_USERNAME=admin
[email protected] /*管理员邮箱,可以随意设置*/
ADMIN_PASSWORD=Byf7987. /*设置管理员邮箱密码*/
# --- Docker Settings ---
SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db
UPLOAD_FOLDER=/data/uploads
docker-compose.yml
services:
app:
image: learnedmachine/speakr:latest
container_name: speakr
restart: unless-stopped
ports:
- "8899:8899"
env_file:
- .env
volumes:
- ./uploads:/data/uploads
- ./instance:/data/instance
启动docker
docker 出现speakr后,在浏览器中访问speakr。(地址为:speakr 服务器IP:8899)
此时上传音频格式文件则会让whisper模型转换为文字,转换出的文字交给语言模型进行总结,总结后输出在summary中;
Speakr推荐设置
设置无限文字输入
添加提示词(以下为speakr官方提供提示词)
请极其详细地总结这份记录。首先,请提供会议纪要。然后,请提供讨论的关键问题。然后,请提供所有关键要点。然后,请提供所有后续步骤。最后,请提供所有我没有要求但需要记录的重要事项。确保涵盖所有重要的细节。
示例格式:
### 会议纪要
**会议参与者:**
- [姓名] - [部门/职位]
- [姓名] - [部门/职位]
**日期:** [会议日期]
**时长:** [长度]
---
**1. 介绍和概述:**
- [参与者] 以 [具体细节] 开头
- 概述的关键目标:[逐一列出]
**2. [主题名称]:**
- [参与者] 提交了 [详细的演讲摘要]
- 提出的讨论要点:
• [具体观点及提出者]
• [反驳或赞同]
- 达成的决定:[确切的决定及理由]
### 讨论的关键问题
1. **[问题]:** [完整描述,包含所有观点]
2. **[问题]:** [完整的背景,包括制约因素和机遇]
### 关键要点
- [具体结论及支持细节]
- [重要的认识或学习]
### 后续步骤
- [行动事项] - 负责人:[姓名] - 截止日期:[日期]
- [行动事项] - 负责人:[姓名] - 截止日期:[日期]
### 补充说明
- [任何偏离主题但重要的提及]
- [讨论了未来的考虑事项]
使用上面的提示词后,Speakr将按照上面提示词进行归纳总结;
在账户中将语言习惯等修改为中文
最终使用
当使用现场会议或在线会议录音时,需在谷歌浏览器中打开chrome://flags/#unsafely-treat-insecure-origin-as-secure 然后输入speakr 服务器IP地址,启动后点击重启浏览器;
点击【Record Both】->【整个屏幕】->点击【共享屏幕】->一定要点击【共享音频】->点击分享;
可以点击隐藏录音框;
当结束后,点击上传,此时会将上传音频上传至Speakr服务器的upload文件夹中,并按上述进行音频转换,AI总结等。
在目录下生成两个文件夹,upload 为上传的音频文件容纳,instance 是数据文件
本文由 yorickbao 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。