Speakr介绍与部署

in 默认分类 with 0 comment

2025-09-05T07:18:50.png

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

2025-09-05T07:20:56.png

(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# pip install fastapi uvicorn

2025-09-05T07:21:35.png

(yorick) root@yorickbao-ZHENGJIUZHE-REN7000-28IMB:~# sudo apt install ffmpeg

2025-09-05T07:28:04.png

在/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)

2025-09-05T08:09:01.png

启动改脚本

(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

2025-09-05T08:14:35.png

最终启动后如下图所示:

2025-09-05T08:18:36.png

在Windows 任意目录下创建 【.env】文件和【docker-compose.yml】

2025-09-05T08:21:33.png

.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

2025-09-05T08:26:55.png

docker 出现speakr后,在浏览器中访问speakr。(地址为:speakr 服务器IP:8899)

2025-09-05T08:27:44.png

此时上传音频格式文件则会让whisper模型转换为文字,转换出的文字交给语言模型进行总结,总结后输出在summary中;

2025-09-05T08:29:50.png

2025-09-05T08:31:55.png

Speakr推荐设置


设置无限文字输入

2025-09-05T08:36:45.png

添加提示词(以下为speakr官方提供提示词)

请极其详细地总结这份记录。首先,请提供会议纪要。然后,请提供讨论的关键问题。然后,请提供所有关键要点。然后,请提供所有后续步骤。最后,请提供所有我没有要求但需要记录的重要事项。确保涵盖所有重要的细节。

示例格式:
### 会议纪要

**会议参与者:**
- [姓名] - [部门/职位]
- [姓名] - [部门/职位]

**日期:** [会议日期]
**时长:** [长度]

---

**1. 介绍和概述:**
- [参与者] 以 [具体细节] 开头
- 概述的关键目标:[逐一列出]

**2. [主题名称]:**
- [参与者] 提交了 [详细的演讲摘要]
- 提出的讨论要点:
• [具体观点及提出者]
• [反驳或赞同]
- 达成的决定:[确切的决定及理由]

### 讨论的关键问题
1. **[问题]:** [完整描述,包含所有观点]
2. **[问题]:** [完整的背景,包括制约因素和机遇]

### 关键要点
- [具体结论及支持细节]
- [重要的认识或学习]

### 后续步骤
- [行动事项] - 负责人:[姓名] - 截止日期:[日期]
- [行动事项] - 负责人:[姓名] - 截止日期:[日期]

### 补充说明
- [任何偏离主题但重要的提及]
- [讨论了未来的考虑事项]

2025-09-05T08:39:33.png

使用上面的提示词后,Speakr将按照上面提示词进行归纳总结;
2025-09-05T09:02:13.png

在账户中将语言习惯等修改为中文

2025-09-05T08:41:17.png

最终使用

当使用现场会议或在线会议录音时,需在谷歌浏览器中打开chrome://flags/#unsafely-treat-insecure-origin-as-secure 然后输入speakr 服务器IP地址,启动后点击重启浏览器;

2025-09-05T08:46:44.png

点击【Record Both】->【整个屏幕】->点击【共享屏幕】->一定要点击【共享音频】->点击分享;

2025-09-05T09:01:16.png

可以点击隐藏录音框;
2025-09-05T08:54:22.png

当结束后,点击上传,此时会将上传音频上传至Speakr服务器的upload文件夹中,并按上述进行音频转换,AI总结等。
2025-09-05T08:54:38.png

在目录下生成两个文件夹,upload 为上传的音频文件容纳,instance 是数据文件
2025-09-05T08:32:40.png

Responses