2.4 KiB
2.4 KiB
ASR Pipeline on tools-pve
独立的录音转写、精修、人工审核和导出服务。WebUI 与 Agent API 共用 192.168.50.49:8788;worker 调用 unRaid 上的 Qwen3-ASR/CAM++ 服务以及 ZenMux 模型 API。
数据边界
/mnt/truenas/personal/ASR-Pipeline→ 容器/data:原始录音、转写、ASR 原始响应、草稿、正式稿、日志和 SQLite 在线备份。/opt/asr-pipeline/state→ 容器/state:活动 SQLite、worker heartbeat、revision queue。SQLite WAL 不放在 NFS。/srv/asr/inbox:指向 TrueNAS inbox 的宿主机链接,供scp/sftp上传。- Secret 只存在于 Arcane Project 环境和 tools-pve 的
0600恢复副本,不进入 Git。
SSH 大文件建议先上传为 .part,完成后在同一目录原子改名为受支持扩展名:
scp call.m4a tools@192.168.50.49:/srv/asr/inbox/call.m4a.part
ssh tools@192.168.50.49 'mv /srv/asr/inbox/call.m4a.part /srv/asr/inbox/call.m4a'
Agent API
所有 /api/v1/* 路由使用 Authorization: Bearer $ASR_AGENT_TOKEN。
curl -X POST http://192.168.50.49:8788/api/v1/jobs \
-H "Authorization: Bearer $ASR_AGENT_TOKEN" \
-H 'X-Filename: call.m4a' -H 'X-Title: 项目通话' \
-H 'X-Context: 参与人和项目背景' --data-binary @call.m4a
curl -H "Authorization: Bearer $ASR_AGENT_TOKEN" \
http://192.168.50.49:8788/api/v1/jobs/JOB_ID
路由:
POST /api/v1/jobs:上传并创建异步任务。GET /api/v1/jobs?limit=&offset=&status=:分页查询。GET /api/v1/jobs/{id}:任务详情、事件时间线与产物链接。GET /api/v1/jobs/{id}/artifacts/{transcript|draft|result}:读取产物。GET /api/v1/jobs/{id}/reviews:待人工确认项。POST /api/v1/jobs/{id}/reviews/{question_id}:JSON{"answer":"..."}。POST /api/v1/jobs/{id}/retry:重试失败任务。
/healthz 仅表示 Web 进程存活;/readyz 同时检查数据库与 worker heartbeat。
通知
ASR_NOTIFY_BACKEND=none|telegram|hermes。Telegram 需要 TELEGRAM_BOT_TOKEN 与 TELEGRAM_CHAT_ID;Hermes 需要一个明确存在的签名 webhook URL 与共享密钥。发送失败只影响提醒,不改变任务结果。
运维
项目由 Arcane Git Sync 管理,自动同步、自动 pull 和自动 redeploy 均关闭。Compose 变更先在 Git 中验证,再对 tools-pve 的准确 Sync 手动同步。活动数据库每小时通过 SQLite backup API 写到 /data/backups/*.latest。