-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy path.env.example
More file actions
178 lines (166 loc) · 11.7 KB
/
Copy path.env.example
File metadata and controls
178 lines (166 loc) · 11.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# Matrix Live Diarizer 配置文件
# 复制此文件为 .env 并按需修改
#
# 注释约定:
# [可选, 默认: xxx] 留空时使用默认值,绝大多数都是这种
# [必填 when LLM=公网] 启用公网 LLM 时必填
# [安全开关] 默认拒绝,显式 true 才放行
#
# 99% 场景你只需要修改 LLM 区块;其它都是开箱即用。
# ===========================================
# 服务器配置
# ===========================================
HOST=127.0.0.1 # [默认: 127.0.0.1] 仅本机;LAN 才改 0.0.0.0
PORT=8000 # [可选, 默认: 8000] 监听端口
WORKERS=1 # [可选, 默认: 1] 必须保持 1(Mac MPS 防 OOM)
DEBUG=false # [可选, 默认: false] 开发调试模式
DEPLOYMENT_MODE=local # [可选, 默认: local] local | lan | public
# lan/public 会强制要求 JWT_SECRET 和非 * 的 ALLOWED_ORIGINS
# public 不建议裸露部署,请放在 HTTPS/反向代理/防火墙后
# ===========================================
# 声纹引擎配置
# ===========================================
SPEAKER_ENGINE=campplus # [可选, 默认: campplus] 可选: campplus / eres2net / wespeaker
# 身份匹配仅产生待确认建议;不同声纹模型使用各自可校准的阈值/歧义间隔。
PERSON_MATCH_THRESHOLD_CAMPPLUS=0.78
PERSON_MATCH_MARGIN_CAMPPLUS=0.03
PERSON_MATCH_THRESHOLD_ERES2NET=0.78
PERSON_MATCH_MARGIN_ERES2NET=0.03
PERSON_MATCH_THRESHOLD_WESPEAKER=0.78
PERSON_MATCH_MARGIN_WESPEAKER=0.03
# 自动显示真实姓名使用更严格的阈值;低于它但通过上方阈值时仅显示建议。
PERSON_AUTO_MATCH_THRESHOLD_CAMPPLUS=0.88
PERSON_AUTO_MATCH_MARGIN_CAMPPLUS=0.08
PERSON_AUTO_MATCH_THRESHOLD_ERES2NET=0.88
PERSON_AUTO_MATCH_MARGIN_ERES2NET=0.08
PERSON_AUTO_MATCH_THRESHOLD_WESPEAKER=0.88
PERSON_AUTO_MATCH_MARGIN_WESPEAKER=0.08
# ===========================================
# 音频处理配置(高级调优,新手不要改)
# ===========================================
AUDIO_SAMPLE_RATE=16000 # [可选, 默认: 16000] 固定 16kHz,改会破坏模型
AUDIO_BUFFER_THRESHOLD=32000 # [可选, 默认: 32000] 2秒触发推理
AUDIO_OVERLAP_SAMPLES=4000 # [可选, 默认: 4000] 0.25秒重叠
AUDIO_SILENCE_THRESHOLD=0.008 # [可选, 默认: 0.008] 静音检测阈值
AUDIO_TIMEOUT_SECONDS=30.0 # [可选, 默认: 30.0] 无音频超时断开
VAD_THRESHOLD=0.5 # [可选, 默认: 0.5] VAD 灵敏度,越小越灵敏
VAD_MIN_SPEECH_DURATION=200 # [可选, 默认: 200] 最小语音时长(毫秒)
AUDIO_TARGET_RMS=0.08 # [可选, 默认: 0.08] 目标音量
AUDIO_MAX_GAIN=10.0 # [可选, 默认: 10.0] 最大增益倍数
AUDIO_QUEUE_SIZE=8 # [可选, 默认: 8] 队列容量
AUDIO_SKIP_FRAME_THRESHOLD=3 # [可选, 默认: 3] 跳帧阈值
AUDIO_QUEUE_MONITOR_INTERVAL=5.0 # [可选, 默认: 5.0] 队列监控间隔(秒)
HEARTBEAT_INTERVAL=10 # [可选, 默认: 10] 心跳间隔(秒)
HEARTBEAT_TIMEOUT=30 # [可选, 默认: 30] 心跳超时(秒)
AUDIO_MAX_BUFFER_SECONDS=10 # [可选, 默认: 10] 音频缓冲上限(秒)
AUDIO_MAX_SEGMENT_SECONDS=5 # [可选, 默认: 5] 单段最大时长(秒)
UPLOAD_MAX_DURATION=3600 # [可选, 默认: 3600] 上传最大时长(秒),默认 1 小时
UPLOAD_CHUNK_DURATION=30 # [可选, 默认: 30] 分段时长(秒)
UPLOAD_OVERLAP_DURATION=1.0 # [可选, 默认: 1.0] 分段重叠(秒)
# ASR 推理设备
ASR_ENGINE=qwen3 # [可选, 默认: qwen3] qwen3 | sensevoice | paraformer | paraformer_streaming
# qwen3: 高质量模式,当前默认
# sensevoice: 快速多语种模式,适合上传/快速转写,需 pip install funasr
# paraformer: 中文稳定模式,适合会议/访谈离线转写,需 pip install funasr
# paraformer_streaming: 中文实时低延迟,需 pip install funasr
ASR_DEVICE=auto # [可选, 默认: auto] auto | cpu | mps | cuda
# auto: 优先 mps,90s 死锁回退 cpu
# cpu: 稳定,慢(~1x realtime)
# mps: 快,macOS 偶发死锁
ASR_LOAD_TIMEOUT_SEC=90 # [可选, 默认: 90] mps→cpu 回退等待秒数
ASR_WORD_TIMESTAMPS=false # [可选, 默认: false] 启用字级时间戳(words 数组)
# true: SRT/VTT 字幕按字切分(0.3s/字 vs 3s/段)
# 会议详情和字幕导出可使用精确时间
# 副作用1: 首次启用会下载 Qwen3-ForcedAligner-0.6B (~600MB)
# 副作用2: 启动时 ASR 加载时间多 5-10s(MPS 偶发超时回退 CPU)
# 副作用3: 每次 ASR 推理多 50-200ms(对齐计算)
# 关闭时: SRT/VTT 按整段切(几秒一卡),前端不渲染 .word
# 推荐: 个人学习保持 false(轻量);需要精确字幕/视频剪辑场景开 true
# 断网环境需要先配 HF 镜像:
# export HF_ENDPOINT=https://hf-mirror.com # 国内
# # 或
# export http_proxy=http://127.0.0.1:7890 # 代理
ASR_CAPABILITIES_JSON= # [可选] 覆盖 /v1/models 返回的 ASR 能力
# 示例:
# {"qwen3":{"capabilities":{"word_timestamps":false},"notes":"本部署关闭字级时间戳"}}
ASR_CAPABILITIES_FILE= # [可选] 从 JSON 文件读取能力覆盖,与上方格式一致
# ===========================================
# 存储
# ===========================================
STORAGE_DB_PATH=./data/matrix.db # [可选, 默认: ./data/matrix.db] SQLite 路径
STORAGE_MEDIA_DIR=./data/media # [可选, 默认: ./data/media] 会议和声音样本目录
# ===========================================
# 速率限制(防滥用,生产建议保留)
# ===========================================
RATE_LIMIT_ENABLED=true # [可选, 默认: true]
RATE_LIMIT_REQUESTS_PER_MINUTE=60 # [可选, 默认: 60] 单 IP 每分钟请求数
RATE_LIMIT_REQUESTS_PER_HOUR=1000 # [可选, 默认: 1000] 单 IP 每小时请求数
# ===========================================
# LLM 配置 — 唯一需要主动改的区块
# ===========================================
# 三种典型配置见 docs/LLM_SETUP.md:
# A. 本机 Ollama → LLM_ENABLED=true, 其他保持
# B. 局域网 vLLM → LLM_ENABLED=true, LLM_ENDPOINT=http://vllm-host:8000/v1
# C. 公网 OpenAI → LLM_ENABLED=true, LLM_ALLOW_PUBLIC=true, LLM_API_KEY=sk-xxx
LLM_ENABLED=false # [可选, 默认: false] 关闭时所有 LLM 端点走本地 TextRank 兜底
LLM_ENDPOINT=http://127.0.0.1:11434/v1 # [可选, 默认: Ollama] OpenAI 兼容 /chat/completions 端点
LLM_MODEL=qwen2.5:1.5b # [可选, 默认: qwen2.5:1.5b] 模型名
LLM_API_KEY= # [必填 when 公网 LLM] Bearer token;本机 Ollama 留空
LLM_ALLOW_PUBLIC=false # [安全开关, 默认: false] 公网 endpoint 必须显式 true,默认拒绝
LLM_ALLOWED_HOSTS=127.0.0.1,::1,localhost # [可选, 默认: localhost 三件套] 总是放行的 host 白名单
LLM_TIMEOUT_SEC=60 # [可选, 默认: 60] 单次 LLM 调用超时(秒)
LLM_MAX_INPUT_TOKENS=8000 # [可选, 默认: 8000] 输入上限(超长截断)
LLM_MOCK=false # [可选, 默认: false] 调试用,返回固定文本不真调 LLM
# ===========================================
# CORS 跨域
# ===========================================
# 默认只允许本机生产页和 Vite 开发页。LAN 必须改成实际 HTTPS Origin。
ALLOWED_ORIGINS=http://127.0.0.1:8000,http://localhost:8000,http://127.0.0.1:5173,http://localhost:5173
# CORS_ALLOW_CREDENTIALS=false # [可选, 默认: false] Matrix 不用 cookie 认证,无需开
# CORS_ALLOW_METHODS=* # [可选, 默认: *] 允许所有 HTTP 方法
# CORS_ALLOW_HEADERS=* # [可选, 默认: *] 允许所有 header
# ===========================================
# 完整配置说明
# ===========================================
# 配置文件优先级: 环境变量 > .env > 代码默认值
# 99% 用户只需改 LLM 区块
# 所有可选参数省略时使用代码默认值,见 app/config.py
# ============================================
# 鉴权
# ============================================
# 默认账户: admin / admin(首次登录强制改密)
# 全部 /v1/* 端点需 Authorization: Bearer <token>
# 详见 docs/SECURITY.md
#
# JWT_SECRET= # [生产必设, 默认: 随机生成] JWT HMAC 签名密钥
# # 不设的话 token 跨重启失效,所有用户会被强制重登
# # 生产建议 32+ 字节随机: openssl rand -hex 32
# TOKEN_TTL_HOURS=24 # [可选, 默认: 24] JWT 有效期(小时)
# SKIP_DEFAULT_ADMIN=false # [可选, 默认: false] true 时不自动建 admin 账户
# LOCAL_AUTH_DISABLED=true # 本机可信 Origin 免登录;LAN 必须设 false
# ============================================
# 离线高准确度说话人分离 (pyannote Community-1)
# ============================================
# 用于上传会议模式。未配置时转写仍完成,但说话人保持匿名并显示 unavailable。
#
# 设置步骤:
# 1. https://huggingface.co/pyannote/speaker-diarization-community-1 接受用户条款
# 2. https://huggingface.co/settings/tokens 创建 Read-Only Access Token
# 3. 在 .env 加:
# HF_TOKEN=
# Model revisions are pinned for reproducible downloads. Override only after review.
# QWEN_ASR_REVISION=4ce9cc728b473a5aedbe7b6e1ea45646316824dc
# QWEN_ALIGNER_REVISION=cf1c50164ea3ac48240d12bef5ead74aee0720cc
# SILERO_VAD_REVISION=76e3dc408eb2a5c655c34e230d2d5459b4439daa
# PYANNOTE_MODEL_REVISION=3533c8cf8e369892e6b79ff1bf80f7b0286a54ee
# CAMPPLUS_MODEL_REVISION=v2.0.2
# ERES2NET_MODEL_REVISION=v1.0.2
# WESPEAKER_MODEL_REVISION=89de0177e452fd9770ce2d4b26085de46dae65a0
# PYANNOTE_DEVICE=auto # auto | cpu | cuda,默认 auto
#
# 项目会把 librosa 解码后的 waveform 直接传给 pyannote,因此 TorchCodec
# 和 FFmpeg 不是说话人分离的硬依赖。若需要读取某些 MP3/M4A 等压缩格式,
# 请单独安装 FFmpeg 并确认新终端执行 `ffmpeg -version` 成功。Windows 不要
# 为此混装多个 conda channel;推荐系统包管理器安装后加入 PATH。
# Torch/Torchaudio/Torchvision 必须成套安装,启动日志会给出只读诊断;
# pyannote 缺失或不可用时不会阻止服务启动,只会让上传会议保持匿名。