# 故障排除

当 Speakr 出现问题时，本指南可帮助您快速识别和解决常见问题。大多数问题归为以下几类 — [安装问题](getting-started/installation.md)、转录失败、性能问题或特定功能异常。同时请参阅 [常见问题](faq.md) 了解常见疑问。了解从哪里着手以及需要检查什么可以节省大量排错时间。

## 安装与设置问题

### 容器无法启动

当 Docker 容器拒绝启动或立即退出时，问题通常出在配置上。首先检查您的 [环境配置文件](getting-started.md#step-3-configure-your-transcription-service) — API 密钥中的任何拼写错误或不匹配的引号都可能导致启动失败。查看 [安装指南](getting-started/installation.md) 了解正确的设置方式。运行 `docker-compose logs app` 查看实际的错误信息。常见原因包括端口冲突（其他服务占用了 8899 端口）、缺少卷挂载或数据目录文件权限不正确。

如果遇到数据库连接错误，请确保数据库文件具有正确的权限。容器以特定用户身份运行，需要对数据目录具有读写权限。在 Linux 系统上，您可能需要使用 `chown -R 1000:1000 ./uploads ./instance` 调整文件所有者。

### 无法访问 Web 界面

当 Speakr 成功启动但您无法访问 Web 界面时，通常是网络配置问题。首先使用 `docker ps` 验证容器是否实际在运行。检查端口 8899 是否正确映射 — docker-compose 文件的 ports 部分应显示 `"8899:8899"`。

防火墙规则经常阻止访问，尤其是在云服务器上。确保防火墙、安全组（AWS）或网络策略中已开放 8899 端口。如果从其他机器访问，请注意 `localhost` 无效 — 需要使用服务器的实际 IP 地址或主机名。

### 管理员登录失败

如果无法使用 [管理员凭据](getting-started.md#step-4-configure-admin-account) 登录，首先验证您使用的是环境配置文件中完全相同的用户名和密码。有关用户管理问题，请参阅 [管理员指南](admin-guide/user-management.md)。这些值区分大小写，必须完全匹配。检查 Docker 日志中的管理员用户创建消息 — 首次启动时应看到 "Admin user created successfully"。

有时如果密码不符合要求，管理员用户创建会静默失败。确保管理员密码至少为 8 个字符。如果管理员用户未创建，您可能需要删除数据库文件并重启容器以重新触发初始化。

## 转录问题

### 转录从未开始

当录音一直处于 "pending" 状态时，后台处理器可能已停止。检查日志中是否有关于 [转录服务](features.md#multi-engine-support) 的错误消息。在 [向量存储](admin-guide/vector-store.md) 管理面板中监控处理状态。API 密钥问题是最常见的原因 — 验证您的 OpenAI 或 OpenRouter API 密钥是否有效且具有可用额度。

网络连接问题也可能阻止转录。容器需要能够访问外部 API 端点。如果您在公司代理后面，需要在 Docker 环境中配置代理设置。

### 转录立即失败

快速失败通常表明 API 身份验证问题。仔细检查环境配置文件中的 API 密钥。请注意 OpenAI 和 OpenRouter 使用不同的密钥格式。OpenAI 密钥以 "sk-" 开头，而 OpenRouter 密钥格式不同。确保您为已配置的服务使用了正确的密钥。

API 速率限制或额度不足也会导致立即失败。登录您的 API 提供商仪表板检查使用情况和限制。某些 API 计划的速率限制较为严格，Speakr 处理大文件时可能超出限制。

### ASR 端点返回 405 或 404 错误

如果使用 Whisper ASR webservice 时遇到 "405 Method Not Allowed" 或 "404 Not Found" 错误，请检查您的 ASR_BASE_URL 配置。URL 不应包含尾部注释或描述 — 删除环境配置文件中 # 符号之后的任何内容。对于 Whisper ASR webservice，仅使用基础 URL，如 `http://whisper-asr:9000`，不要在末尾添加 `/asr`。

使用 Docker Compose 时，始终使用容器名称而非 IP 地址进行服务通信。不要使用 `http://192.168.1.132:9000`，而应使用 `http://whisper-asr-webservice:9000`，其中 `whisper-asr-webservice` 是您的容器名称。

### 转录质量不佳

转录准确率高度依赖于音频质量。背景噪音、多个重叠说话人或麦克风摆放位置不当都会降低结果质量。AI 模型在清晰的单人音频或分离良好的多人音频上效果最佳。

语言不匹配也会导致结果不佳。如果您在设置中指定了特定的转录语言，但上传了不同语言的音频，准确率会受到影响。请设置正确的语言或留空以启用自动检测。

对于多人录音，使用 [带说话人分离功能的 ASR 端点](features.md#speaker-diarization) 可显著提高可用性。了解如何在转录后 [识别说话人](user-guide/transcripts.md#speaker-identification)，即使原始转录准确率相似。

### 中文转录问题

对于 [中文语言转录](features.md#language-support)，模型选择至关重要。有关更多详细信息，请参阅 [关于语言支持的常见问题](faq.md#can-speakr-transcribe-languages-other-than-english)。

**重要提示**：Distil 模型（如 distil-large-v3）不支持正确的中文转录。即使您将语言设置为 "zh"，这些模型也可能将中文音频识别为英文并产生错误输出。对于中文内容，请始终使用完整版的 large-v3 模型或类似的非蒸馏模型。如果您的中文音频被转录为英文，或输出为拼音而非中文字符，请从 distil 模型切换到 large-v3。

### 摘要语言与偏好不匹配

如果点击 "Reprocess Summary" 后 [摘要](features.md#automatic-summarization) 回退到英文，尽管已设置了 [语言偏好](user-guide/settings.md#language-preferences)，这可能是模型限制。配置 [自定义提示词](admin-guide/prompts.md) 以强制执行语言要求。某些模型（如 Qwen3-30B）不一定能正确遵循语言指令。尝试使用能更好地遵循语言指令的不同模型，或确保您的自定义提示词明确指定了输出语言。

## 性能问题

### 转录处理缓慢

大音频文件自然需要更长时间处理，但过度延迟表明存在问题。检查您的 [服务器资源](getting-started.md#prerequisites) 并查看 [系统统计信息](admin-guide/statistics.md) 获取性能指标 — Speakr 需要足够的 CPU 和 RAM，尤其是在同时处理多个录音时。`docker stats` 命令可显示当前资源使用情况。

网络速度影响转录时间，因为音频必须上传到 API 服务。慢速互联网连接会造成瓶颈，尤其是对于大文件。如果您经常处理长录音，请考虑分块设置。

转录模型的选择影响速度。Whisper Large 更准确但比 Whisper Base 慢。如果速度比完美准确率更重要，请考虑通过 API 设置使用较小的模型。

### 超过 25MB 的文件在 OpenAI 上失败

OpenAI 的 Whisper API 有 25MB 文件大小限制。对于更大的文件，请在环境配置中启用 [分块](features.md#audio-chunking)。了解 [分块策略](faq.md#whats-the-difference-between-chunking-by-size-vs-duration)：
```
ENABLE_CHUNKING=true
CHUNK_LIMIT=20MB  # or use duration: CHUNK_LIMIT=1400s
CHUNK_OVERLAP_SECONDS=3
```

您可以按文件大小（MB）或时长（秒）指定分块限制。对于有特定时长限制的模型（如 Azure 的 1500 秒上限），请使用基于时长的分块。系统会自动拆分录音并重新组装转录。

### 长录音 ASR 超时

长录音（超过 30 分钟）在 ASR 处理期间可能超时。在管理设置 > 系统设置 > "ASR Timeout Seconds" 中增加超时时间。对于 2 小时的录音，请至少设置为 7200 秒（2 小时）。非常长的录音（如 3 小时以上）可能需要更长的超时时间，具体取决于您用于转录的 GPU（如果是本地转录）。

### Web 界面响应迟缓

浏览器在处理非常大的转录时性能会下降。超过 2 小时的录音可能生成大量文本，某些浏览器可能难以流畅显示。说话人标记转录的气泡视图尤其消耗资源。

如果界面随时间推移逐渐变慢，请清除浏览器缓存。Speakr 会在本地缓存数据以提高性能，但此缓存可能会损坏。在 Chrome 或 Firefox 中，使用 Ctrl+Shift+R 硬刷新以重新加载最新资源。

## 特定功能问题

### 说话人识别不起作用

[说话人分离](features.md#speaker-diarization) 需要 [ASR 端点](getting-started.md#option-b-custom-asr-endpoint-configuration)，而非标准 Whisper API。在 [系统设置](admin-guide/system-settings.md) 中配置说话人设置。验证您已在环境配置文件中正确配置 ASR 设置。ASR_BASE_URL 应指向支持说话人分离的有效 ASR 服务。

即使启用了 ASR，您也必须在上传或重新处理录音时明确请求说话人分离。Speakr 默认应执行此操作，但用户设置可能会覆盖此行为。检查说话人数量设置 — 如果将最小和最大说话人数都设置为 1，说话人分离实际上已禁用。对于大多数录音，使用 2-6 个说话人的合理范围。

转录后，说话人显示为通用标签（SPEAKER_01 等）。您必须手动 [识别说话人](user-guide/transcripts.md#speaker-identification)，方法是点击标签并分配名称。在账户设置中管理您的 [说话人库](user-guide/settings.md#speakers-management-tab)。

### WhisperX 显示 UNKNOWN_SPEAKER

如果 WhisperX 仅显示 "UNKNOWN_SPEAKER" 而不是编号说话人（SPEAKER_00、SPEAKER_01 等），请检查以下常见问题：

1. **错误的 ASR_ENGINE**：您必须在 ASR 容器的 Docker 环境中使用 `ASR_ENGINE=whisperx`。`faster_whisper` 引擎不支持说话人分离，尽管它可以转录音频。

2. **缺少或无效的 HF_TOKEN**：ASR 容器需要有效的 HuggingFace 令牌来下载说话人分离模型。确保您的 ASR 容器配置中设置了 `HF_TOKEN` 环境变量。

3. **未启用 ASR_DIARIZE**：虽然当 `USE_ASR_ENDPOINT=true` 时应自动启用，但如果未检测到说话人，请在 Speakr .env 文件中显式设置 `ASR_DIARIZE=true`。

4. **Docker 网络问题**：如果在同一 docker-compose 中使用 Speakr 和 ASR webservice 容器，容器必须通过服务名称通信（如 `http://whisper-asr:9000`），而非 localhost 或外部 IP。

检查 ASR 容器日志中的 pyannote/VAD 消息，以确认说话人分离模型已正确加载。

### Mac 上的 ASR 服务显示 GPU 错误

如果在 macOS 上运行 ASR webservice 并遇到 GPU 相关错误或 "no matching manifest" 错误：

- **使用 CPU 镜像**：将 `onerahmet/openai-whisper-asr-webservice:latest-gpu` 替换为 `onerahmet/openai-whisper-asr-webservice:latest`
- **移除 GPU 配置**：从 docker-compose.yml 中删除包含 GPU 设备预留的整个 `deploy` 部分
- **预期处理速度较慢**：基于 CPU 的转录可以工作，但比 GPU 加速慢得多

这是 macOS 上 Docker 的限制 — GPU 直通不受支持，因为 Docker 运行在 Linux VM 中。请参阅 [常见问题](faq.md#can-i-use-the-asr-webservice-for-speaker-diarization-on-mac) 了解完整的 Mac 配置。

### 分享链接不起作用

[分享](user-guide/sharing.md) 功能要求您的 Speakr 实例可通过互联网使用 HTTPS 访问。请参阅 [分享要求](user-guide/sharing.md#requirements-for-sharing) 和 [安全注意事项](user-guide/sharing.md#security-and-privacy-considerations)。本地安装或非 SSL 设置无法生成有效的分享链接。分享按钮将禁用或显示错误，说明相关要求。

如果您的实例满足要求但分享仍然失败，请检查环境配置中配置的 URL 是否与实际情况匹配。URL 不匹配会导致分享链接指向错误位置。URL 必须与外部用户访问您实例时使用的地址完全一致。

### 询问模式无结果

[语义搜索](user-guide/inquire-mode.md) 需要正确安装和初始化嵌入模型。在管理设置中查看 [向量存储选项卡](admin-guide/vector-store.md)，并查看 [向量存储故障排除](admin-guide/vector-store.md#troubleshooting-common-issues) — 应显示 "Available" 状态。如果不是，sentence-transformers 库可能缺失或加载失败。

所有录音在可搜索之前都需要进行处理。向量存储选项卡显示已处理与待处理的录音数量。如果自动处理停滞，请使用处理按钮手动触发嵌入生成。

查询表述方式非常重要。[询问模式](user-guide/inquire-mode.md) 理解上下文和含义，而不仅仅是关键词。在用户指南中了解 [有效的搜索策略](user-guide/inquire-mode.md#asking-effective-questions)。提出完整的问题，而不是输入孤立的单词。"我们关于预算做了什么决定？" 比仅输入 "预算 决定" 效果更好。

## 其他注意事项

### 录音免责声明（法律合规）

在许多司法管辖区，您必须告知参与者他们正在被录音。在 [系统设置](admin-guide/system-settings.md#recording-disclaimer) 中启用录音免责声明。查看 [关于录音合规的常见问题](faq.md#do-i-need-to-inform-people-theyre-being-recorded)。设置在任何录音开始前显示的自定义文本，例如关于同意要求的法律通知。此功能在具有严格录音法律的地区（如澳大利亚或加利福尼亚州）尤为重要。

### 离线部署

Speakr 可以完全离线运行，因为所有依赖项都内置在 Docker 镜像中。对于离线部署，使用 Ollama 的本地模型进行 [文本生成](features.md#automatic-summarization)，并确保您的 ASR 端点在本地托管。正确配置后，系统无需互联网访问即可工作。

### 非 Docker 安装

虽然 Docker 是唯一官方支持的安装方式，但您可以尝试使用 npm 和 Python 进行手动安装。您需要自行处理依赖项、环境设置和配置。此方式不推荐用于常规使用，您需要独立排查问题。

## 获取帮助

### 检查日志

Docker 日志包含宝贵的调试信息。使用 `docker-compose logs -f app` 查看实时日志。查找与问题发生时间对应的 ERROR 或 WARNING 消息。Python 追溯信息表明可能是代码级问题，可能需要寻求支持。

对于 ASR 问题，同时检查 ASR 容器日志：`docker-compose logs -f whisper-asr-webservice`

### 系统信息

请求帮助时，请提供账户设置中 About 选项卡的系统配置信息。包括 Speakr 版本、配置的 AI 模型、转录服务类型以及任何错误消息。这些上下文信息有助于他人了解您的具体设置。

### 社区支持

GitHub 仓库的 issue 追踪器是报告错误或请求功能的最佳资源。请先搜索现有 issue — 可能有人已经遇到并解决了您的问题。创建新 issue 时，请包含重现问题的具体步骤。

---

下一步：[常见问题](faq.md) →
