feat(asr-pipeline): merge PR #1 webauth/CSRF/locking hardening and web_password fallback
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# 录音上传与审核工作台
|
||||
|
||||
## 入口
|
||||
|
||||
- Web:`http://192.168.50.145:8765/`
|
||||
- 健康检查:`GET /health`
|
||||
- 最近任务:`GET /api/jobs`
|
||||
- 人工确认:`GET /review/`
|
||||
|
||||
服务只面向 LAN 与 tailnet,没有实现公网身份认证。未来暴露到公网时,应在反向代理层
|
||||
增加认证、上传大小限制和请求速率限制,不要直接转发当前端口。
|
||||
|
||||
## 工作流
|
||||
|
||||
1. 浏览器把录音以原始二进制流上传到隐藏临时目录。
|
||||
2. 文件完整写入并 `fsync` 后,原子移动到 `recordings/inbox/`。
|
||||
3. 既有 `obsidian-recording-watch.service` 接管转写、CAM++ 分角色和声纹识别。
|
||||
4. 转写落入 `.asr-inbox/`,独立整理程序生成私有草稿。
|
||||
5. Telegram 发送确认链接;Web 回答写入 SQLite。
|
||||
6. 全部确认后生成正式纪要并写入 Obsidian。
|
||||
|
||||
上传时填写的背景单独保存在任务元数据中,进入整理提示时会标为“用户提供的背景”,
|
||||
不会混入或伪装成 ASR 转写内容。
|
||||
|
||||
## Hook
|
||||
|
||||
`POST /hook/intake` 与 Web 上传使用相同的流式协议,便于以后在外网部署一个很薄的上传
|
||||
前端或反向代理:
|
||||
|
||||
```bash
|
||||
curl --fail-with-body \
|
||||
-X POST \
|
||||
-H 'Content-Type: application/octet-stream' \
|
||||
-H 'X-Filename: call.m4a' \
|
||||
-H 'X-Title: 项目通话' \
|
||||
-H 'X-Context: 参与人、项目和希望重点确认的事项' \
|
||||
--data-binary @call.m4a \
|
||||
http://192.168.50.145:8765/hook/intake
|
||||
```
|
||||
|
||||
响应中的 `job_id` 是任务标识。状态可从 `/api/jobs` 查询。
|
||||
|
||||
## 运行
|
||||
|
||||
```bash
|
||||
systemctl --user status asr-review-web.service
|
||||
systemctl --user restart asr-review-web.service
|
||||
journalctl --user -u asr-review-web.service -n 100 --no-pager
|
||||
curl -fsS http://127.0.0.1:8765/health
|
||||
```
|
||||
|
||||
持久数据:
|
||||
|
||||
- `asr-pipeline/state/intake.db`:上传任务与状态。
|
||||
- `recordings/state/uploads/`:上传标题、背景和任务关联。
|
||||
- `recordings/inbox/.uploading/`:未完成上传;正常完成后为空。
|
||||
|
||||
默认单文件上限为 4 GiB,可通过 `ASR_UPLOAD_MAX_BYTES` 调整。
|
||||
Reference in New Issue
Block a user