项目简介
Speakr 是一款个人自托管的网络应用程序,专为转录音频记录(如会议)、生成简洁的摘要和标题,并通过聊天界面与内容互动而设计。您可以将所有会议记录和见解安全地保存在自己的服务器上。
功能
-
音频上传: 通过拖放或文件选择上传音频文件(MP3、WAV、M4A等,具体取决于您的转录端点)。 -
浏览器录音: 在“新录音”屏幕上直接从浏览器录制音频(需要HTTPS或HTTP的浏览器配置 – 参见部署指南)。 -
转录: 在标准OpenAI兼容API或更高级的ASR网络服务之间选择。 -
说话人分离: (仅限ASR/WhisperX)自动检测并分离转录中的不同说话人。 -
直观的说话人标记: 新的、更直观的界面用于识别和标记说话人。 -
AI摘要与标题生成: 使用可配置的LLM生成简洁的标题和摘要。 -
互动聊天: 使用AI模型提问并与转录内容互动。 -
元数据编辑: 编辑标题、参与者、会议日期、摘要和笔记。 -
用户管理: 安全的用户注册和登录系统,带有管理用户的管理面板。 -
自定义: 用户可以设置自己的语言偏好、自定义摘要提示和专业上下文,以改进AI结果。
安装说明
详细部署说明,请参阅部署指南
推荐的方法是使用预构建的Docker镜像,这种方法快速且简单。
简单设置(预构建Docker镜像)
此方法无需克隆此仓库。您只需安装Docker。
-
创建
docker-compose.yml
文件:创建一个名为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
-
-
创建配置(
.env
)文件:您的选择取决于您希望使用的转录方法。有关每个服务必须实现的端点的详细信息,请参阅上面的API端点要求部分。创建一个名为.env
的新文件,并将以下模板之一粘贴到其中。 -
选项A:标准Whisper API方法使用
/audio/transcriptions
端点。这是最简单的方法,适用于OpenAI、OpenRouter、本地API和其他实现OpenAI Whisper API格式的提供商。# --- 文本生成模型(使用/chat/completions端点) ---
TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1
TEXT_MODEL_API_KEY=your_openrouter_api_key
TEXT_MODEL_NAME=openai/gpt-4o-mini
# --- 转录服务(使用/audio/transcriptions端点) ---
TRANSCRIPTION_BASE_URL=https://api.openai.com/v1
TRANSCRIPTION_API_KEY=your_openai_api_key
WHISPER_MODEL=whisper-1
# --- 应用程序设置 ---
ALLOW_REGISTRATION=false
SUMMARY_MAX_TOKENS=8000
CHAT_MAX_TOKENS=5000
# --- 管理员用户(首次运行时创建) ---
ADMIN_USERNAME=admin
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=changeme
# --- Docker设置(很少需要更改) ---
SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db
UPLOAD_FOLDER=/data/uploads
现在,编辑
.env
文件,填入您的API密钥和设置。 -
选项B:ASR网络服务方法(用于说话人分离)使用
/asr
端点。此方法需要单独的ASR网络服务容器,但支持说话人识别。已测试与onerahmet/openai-whisper-asr-webservice
镜像兼容。有关如何运行ASR服务的说明,请参阅部署指南。# --- 文本生成模型(使用/chat/completions端点) ---
TEXT_MODEL_BASE_URL=https://openrouter.ai/api/v1
TEXT_MODEL_API_KEY=your_openrouter_api_key
TEXT_MODEL_NAME=openai/gpt-4o-mini
# --- 转录服务(使用/asr端点) ---
USE_ASR_ENDPOINT=true
ASR_BASE_URL=http://your_asr_host:9000 # 您运行的ASR网络服务的URL
ASR_DIARIZE=true
ASR_MIN_SPEAKERS=1
ASR_MAX_SPEAKERS=5
# --- 应用程序设置 ---
ALLOW_REGISTRATION=false
SUMMARY_MAX_TOKENS=8000
CHAT_MAX_TOKENS=5000
# --- 管理员用户(首次运行时创建) ---
ADMIN_USERNAME=admin
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=changeme
# --- Docker设置(很少需要更改) ---
SQLALCHEMY_DATABASE_URI=sqlite:////data/instance/transcriptions.db
UPLOAD_FOLDER=/data/uploads
现在,编辑
.env
文件,填入您的ASR服务URL和其他设置。 -
-
启动应用程序:在您的终端中,进入包含
docker-compose.yml
和.env
文件的目录,运行:docker compose up -d
-
高级设置(从源代码构建)
如果您想修改代码或自行构建Docker镜像,请先克隆仓库。
-
克隆仓库: git clone https://github.com/murtaza-nasir/speakr.git
cd speakr
-
-
创建 docker-compose.yml
和.env
文件:从仓库中复制示例文件。cp docker-compose.example.yml docker-compose.yml
# 标准API
cp env.whisper.example .env
# 或ASR网络服务
cp env.asr.example .env
编辑
.env
文件,填入您的设置。 -
-
构建并启动: docker compose up -d --build
-
推荐的ASR网络服务设置
说话人分离仅适用于ASR方法,并需要whisperx
引擎。 以下是运行ASR服务本身的docker-compose.yml
示例。您需要额外运行此容器与Speakr应用容器。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
services:
whisper-asr-webservice:
image: onerahmet/openai-whisper-asr-webservice:latest-gpu
container_name: whisper-asr-webservice
ports:
- "9000:9000"
environment:
- ASR_MODEL=distil-large-v3 # 或large-v3, medium
- ASR_COMPUTE_TYPE=float16 # 或int8, float32
- ASR_ENGINE=whisperx # 说话人分离必需
- HF_TOKEN=your_hugging_face_token # 可选
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
device_ids: ["0"]
restart: unless-stopped
关于说话人分离准确性的说明: 为了获得最佳结果,通常将说话人数量设置为比实际数量略高(例如多1-2个)。您可以在说话人识别模态中稍后合并说话人。
Speakr已测试与推荐的onerahmet/openai-whisper-asr-webservice
镜像兼容。其他ASR网络服务可能可用但未经测试。
ASR设置的重要提示: 说话人分离需要Hugging Face令牌并接受受保护模型(pyannote)的条款。如果遇到问题,请使用docker logs whisper-asr-webservice
检查ASR容器日志以进行故障排除。
完整的ASR设置说明、模型配置、故障排除和日志分析,请参阅部署指南
使用指南
-
注册/登录: 访问 http://localhost:8899
。管理员用户首次启动时从.env
文件中的ADMIN_*
变量创建。 -
设置偏好(推荐): 转到您的账户页面。在这里您可以: -
设置您偏好的转录和输出语言。 -
定义自定义摘要提示以根据您的需求定制摘要。 -
添加您的姓名、职位和公司,为AI聊天互动提供更多上下文。 -
查看和管理保存的说话人。 -
上传或录制: -
上传: 转到新录音或将音频文件拖放到页面上。 -
录制: 在“新录音”屏幕上使用浏览器录音功能直接从麦克风录制(需要HTTPS或浏览器配置 – 参见浏览器录音设置)。 -
上传和处理状态将显示在弹出窗口中。 -
查看与互动: -
主图库列出您的录音。点击一个以查看其详细信息。 -
收听内置播放器的音频。 -
阅读转录和AI生成的摘要。 -
编辑标题、参与者和其他元数据。 -
与转录聊天: 使用聊天面板提问关于录音的问题。 -
说话人分离工作流程: -
要启用说话人分离,您必须使用ASR端点方法并在 .env
文件中设置ASR_DIARIZE=true
。 -
当使用此选项处理录音时,说话人将自动检测并分配通用标签(例如 SPEAKER 00
、SPEAKER 01
)。 -
处理后,点击转录页面上的识别说话人按钮。 -
在说话人识别模态中,您可以手动为每个说话人分配名称。 -
或者,使用自动识别按钮让AI模型尝试根据对话上下文识别和命名说话人。 -
保存的说话人将在未来会话中建议自动完成。 -
如果需要,您还可以使用重新处理按钮以不同的说话人分离设置重新转录音频。
项目地址
https://github.com/murtaza-nasir/speakr/blob/master/README.md
扫码加入技术交流群,备注「开发语言-城市-昵称」
(文:GitHubStore)