好記 Hoki 資料處理流程

資料流向、儲存位置與刪除時機

tmpfs 暫存 (記憶體檔案系統)
RAM 記憶體
VRAM 顯存
Ollama 服務
加密資料庫
客戶端瀏覽器
0
客戶端上傳
使用者透過瀏覽器錄音上傳音檔(WAV / MP3 / M4A / WebM)
音檔以 AES-256-GCM 對稱加密,AES 金鑰再以 RSA-4096 公鑰包裝後上傳(Web Crypto API)
每次上傳產生新的隨機 AES 金鑰與 IV,具備前向安全性
客戶端 加密後傳送,瀏覽器端不保留原始音檔
1
解密 + 寫入 tmpfs 暫存
伺服器以 RSA 私鑰解密 AES 金鑰 → AES-GCM 解密音檔
tmpfs 音檔存至 /tmp/xxx/input.webm(記憶體檔案系統,非實體硬碟)
此為音檔在伺服器上唯一的存放位置,容器停止後自動清除
GPU 鎖定區間(排隊串行執行)
2
ASR 語音辨識
tmpfs 讀取音檔 → VRAM 載入 Whisper large-v3 模型推論 → RAM 產出文字片段 (segments)
釋放 推論完成後立即 del model + empty_cache()
3
強制對齊 (Forced Alignment)
RAM segments → VRAM 載入對齊模型 → RAM 詞級時間戳 (word-level timestamps)
釋放 完成後立即 del model_a + empty_cache()
4
說話者分離 (Diarization)
tmpfs 再次讀取音檔 → VRAM 載入 pyannote 模型 → RAM 說話者時間區段
依說話時長自動標記:最長 = 個案、次長 = 治療師
釋放 完成後立即 del diarize_model + empty_cache()
5
合併逐字稿 + 幻覺過濾 + 額度檢查
RAM 純 CPU 運算,合併說話者與文字 → 帶時間戳的完整逐字稿
過濾無效內容(如 YouTube 字幕殘留),並扣除使用額度
6
AI 生成諮商紀錄
RAM 逐字稿塞入 prompt 模板 → Ollama HTTP POST 至獨立 Ollama 服務 (localhost:11434)
Ollama 使用自己管理的 VRAM,非本程式直接佔用
Ollama keep_alive=0:處理完立即釋放模型記憶體
RAM 回傳諮商紀錄報告文字
7
去識別化 (De-identification)
RAM 純 CPU 運算,遮蔽個人資訊:
  • 身分證字號 → [身分證]
  • 電話號碼 → [電話]
  • 人名 → [人物A][人物B]
  • 機構名稱 → [機構A]
8
匯出 Word + 儲存紀錄
RAM 去識別化報告 → tmpfs 產生 .docx 暫存檔 → RAM 讀取為 base64 字串

加密 DB 若有提供個案代碼,去識別化的諮商紀錄存入 SQLCipher 加密資料庫
(保留 2 天後自動刪除,或由使用者手動刪除)
匯出之 .docx 內嵌隱藏浮水印(使用者 + 時間戳),並可設定文件密碼保護
9
清理暫存檔案
立即刪除 shutil.rmtree(temp_dir) — 整個暫存目錄刪除
  • 原始音檔 → 永久刪除
  • .docx 暫存檔 → 永久刪除
即使處理中途出錯,finally 區塊也確保暫存檔被清除
最晚 30 分鐘後強制清除(防止例外情況)
10
回傳客戶端
客戶端透過輪詢 /api/job/{id} 取得結果:
客戶端 收到以下內容:
  • transcript — 帶說話者標記的逐字稿
  • soap_raw — 諮商紀錄原文
  • soap_clean — 去識別化版本
  • docx_base64 — Word 檔案(可下載)
+
【可選】補充脈絡精煉
使用者可補充觀察脈絡(如:「個案談到家庭時迴避眼神接觸」)
透過 /api/refine 重新送入 Ollama 產生修訂版
流程:補充文字 → Ollama 重新生成 → 去識別化 → 新 .docx

VRAM 佔用時間軸(三個模型不會同時佔用)

Whisper 模型
佔用
已釋放
對齊模型
佔用
已釋放
Diarization 模型
佔用
已釋放
Ollama (獨立服務)
獨立管理

各儲存位置的資料保留時間

儲存位置 存放內容 刪除時機 最長保留
tmpfs 原始音檔(解密後)、.docx 暫存 處理完成後立即刪除 最多 30 分鐘
VRAM Whisper / 對齊 / Diarization 模型 每步完成後立即釋放 僅推論期間
RAM 逐字稿、諮商紀錄文字、base64 Job 過期時清除 最多 30 分鐘
加密 DB 去識別化諮商紀錄 自動過期清除 (purge_expired_data) 預設 2 天
加密 DB 使用紀錄 (usage_log) 自動過期清除 預設 90 天
加密 DB 稽核日誌 (audit_log) 自動過期清除 預設 365 天
客戶端 下載的 .docx、畫面顯示文字 使用者自行管理 關閉瀏覽器即消失

隱私保護重點摘要