Files
infra-docker-configs/servers/tools-pve/asr-pipeline/docs/current-state.md
T
Codex 3c70861463
Build image / build (push) Canceled after 0s
Build ASR Pipeline / image (push) Canceled after 0s
feat(asr-pipeline): merge PR #1 webauth/CSRF/locking hardening and web_password fallback
2026-11-02 06:37:33 -08:00

5.3 KiB
Raw Blame History

当前流程与独立项目交接

核对日期:2026-11-02,Asia/Shanghai。

已验证

原代码:/home/claw/claude-workspace/OBSIDIAN/asr-pipeline。 原音频编排:/home/claw/claude-workspace/OBSIDIAN/recordings/bin。 原通知脚本:/home/claw/claude-workspace/OBSIDIAN/bin/meeting-status-notify.py。

本机 systemd:

单元 本次状态 职责
asr-review-web.service running 8765 常驻上传、最近任务、审核界面
obsidian-recording-watch.service running 监听录音并请求外部 ASR
obsidian-asr-refine.path waiting 监听 vault/.asr-inbox
obsidian-asr-refine-native.service inactive 按需整理转写,当前未运行
asr-review-revise@.service 模板 人工确认后生成/发布

GET http://127.0.0.1:8765/health 返回 ok=true, pending=3。 这说明审核队列存在待确认项,不证明三个录音都在推理,也不证明通知正常。 本轮不导出待确认正文,不生成新稿、不注册声纹、不写 vault。

代码确认的链路

  • 监听单元显式选择 MEETING_ASR_BACKEND=qwen3cam。
  • 对应脚本默认请求 http://192.168.50.100:10099/asr,整文件上传, language=Chinese、save_voiceprint_session=true;服务内部切片。 本轮未对 GPU 服务发起真实录音测试,不据此宣称其健康或当前镜像版本。
  • 原始转写保留声纹 session 与 speaker;归档后桥接到 vault/.asr-inbox。
  • 独立 Python 管线包含模糊音/别名、关系与近期权重、数字归一、纯清洗与纠错分阶段。
  • 初稿和中间状态在程序私有目录,正式纪要等待 Web 审核通过。
  • 人物/公司卡提议与声纹确认存在代码路径;不等于当前外部注册服务验证通过。

运行数据边界

  • asr-pipeline/state/lexicon.db:人工确认、关系、纠错、审核队列,不能重建后替代。
  • asr-pipeline/state/intake.db:上传任务与状态。
  • state/drafts/、state/published/:私有稿与发布回执。
  • recordings/{inbox,processing,processed,failed,transcripts,state}:音频及编排状态。
  • vault/.asr-inbox/.state:整理处理标记,切换漏迁可能造成重复处理。
  • .asr-refine.env:私有凭据,未读取值、未复制、未入 Git。

本次只提取源代码、专业词库、现有测试、文档、unit 快照。没有复制生产音频、 个人 SQLite、缓存、会话、凭据或 .venv。历史设计文档有过时路径和模型,保留作来源。

已发现的风险(尚未改生产)

  1. 通知脚本默认 127.0.0.1:8644 和 ~/.hermes/webhook_subscriptions.json。 结合 Hermes 已迁走的资产记录,这是通知失效风险;本次未验证远端 webhook。
  2. 本仓库代码的模型缺省已是 LiteLLM(清洗 aistudio/gemini-flash-lite-latest,成稿 codex/gpt-sol-latest),不是 ZenMux,也不是 Sonnet 5。生产 unit 若仍加载旧 .asr-refine.env,以那个文件为准;本次未读取凭据,不把代码缺省当成现网正在用的路由。
  3. 路径耦合旧工作目录;本项目配置根目录、通知器、监听数据库已可外置, 但声纹地址、审核 systemd 单元名等仍有历史耦合。deploy/systemd/ 保持现网快照,没有改 ExecStart。
  4. 历史 HANDOFF 中写的是一次性页面。代码里有两个常驻界面:旧 asrpipe.control_web(快照单元,默认 8765)和新 asrservice.web(compose,默认 8788)。旧文档不作现态。
  5. 产物删除和在线编辑会拒绝允许根以外的路径。发布到 minutes/、People/、Companies/ 仍没有对照 vault SOP 的不可绕过白名单。本轮不冒充已审计完成。

代码已修复、生产未切换

下面这些是仓库里的新行为。现网单元没有改,不能当成已经在 8765/8788 的生产进程上生效。

  • 未设置 ASR_WEB_PASSWORD 时,两个浏览器界面都拒绝上传、审核和改配置。临时放开只认 ASR_WEB_ALLOW_ANON=1。
  • 登录后的写操作校验 CSRF。设置页不回显内网地址和密钥片段。
  • asrservice.worker 与 recordings/bin/meeting-watch.py 抢同一把 consumer.lock。
  • ASR_GIT_SYNC、ASR_NOTIFY 缺省为关。
  • 修订失败会保留队列标记并重试;重新精修失败不会先删掉已回答的审核记录。
  • 时间在界面上按 Asia/Shanghai 显示。词库列表按页读取,不再一次只截断前 180 条却不说明总数。

后续安全切换

  1. 先确定模型路由与通知适配器,检查 vault SOP 与正式输出路径。
  2. 建独立 venv、冻结依赖,使用合成数据跑回归,再选真实录音单测。
  3. 停接新上传,确认没有转写/整理/审核发布在运行,再停相关 user units。
  4. 对 SQLite 使用 backup API 生成一致性备份,保留原件;迁移录音状态与 inbox 标记, 不能对运行中数据库只复制主文件。
  5. 路径变更还涉及数据库内草稿/转写绝对路径;要审计和映射,不能仅改 unit。
  6. 生成新 unit 并逐个启用,确认只存在一个消费者;保留旧代码和备份以便回滚。
  7. 验证上传 → 转写 → 确认链接 → 审核 → 正式纪要 → Git 同步完整链路后再移除旧目录。

本轮未执行上述生产切换,不承诺已独立上线。