From 76b3421b4eee810f6d3946c9bd714cf86ffc170f Mon Sep 17 00:00:00 2001 From: yibo Date: Thu, 4 Jun 2026 19:27:08 +0800 Subject: [PATCH] docs(lifelog): HANDOFF 写清「15min 自动 ≠ 10min 会话间隔」+ 同步纪要现状 --- lifelog-recorder/HANDOFF.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lifelog-recorder/HANDOFF.md b/lifelog-recorder/HANDOFF.md index dca67ed..81238dd 100644 --- a/lifelog-recorder/HANDOFF.md +++ b/lifelog-recorder/HANDOFF.md @@ -46,8 +46,9 @@ app/src/main/kotlin/com/lemon/lifelog/ │ ├── ChatConfig.kt — 聊天端点配置(本地 8080/2b/4b 存 SharedPreferences;Hermes 走 BuildConfig) │ └── ChatClient.kt — OpenAI 兼容流式客户端(本地目标传 enable_thinking=false) ├── summary/ -│ ├── SummaryWorker.kt — ★ 会话级纪要:按时间间隔切会话 → 本地 llama-swap 2B -│ └── SummaryScheduler.kt — WorkManager periodic + enqueueUniqueWork(KEEP) 去重 +│ ├── SummaryWorker.kt — ★ 会话级纪要:切会话 → 选定后端(ChatConfig) 出纪要;AtomicBoolean 并发互斥 + 7min 单轮预算 + 不 retry +│ ├── SummaryProgress.kt — worker→UI 实时进度 singleton(纪要 tab 的 console) +│ └── SummaryScheduler.kt — WorkManager periodic 每 15min(UPDATE 策略) + 手动 enqueueUniqueWork ├── service/ │ ├── RecorderService.kt — 前台服务,pipeline 主体 ←★ 改 ASR 流程改这里 │ ├── RecorderState.kt — StateFlow 把服务状态推到 UI @@ -243,7 +244,9 @@ skills: ~/start-llama.sh — launcher(起 llama-swap),被 Magisk service.d 调用 ``` -- **App 接线**:`ChatConfig` 本地默认 `8080`/`2b`/`4b`(SharedPreferences 可改);`keys.properties` = `8642`(对话的 Hermes 选项 → Kimi);`SummaryWorker.LLM_BASE_URL/LLM_MODEL` = `8080`/`2b`(纪要,已解耦 keys.properties)。 +- **App 接线**:`ChatConfig` 本地默认 `8080`/`2b`/`4b`(SharedPreferences 可改);`keys.properties` = `8642`(对话的 Hermes 选项 → Kimi)。纪要后端 UI 可选(2B/4B/Hermes),存 `prefs[summary_backend]`,worker 经 `ChatConfig.targetById` 解析端点(与对话共用配置)。 +- **⚠️「15min 自动」≠「10min 会话间隔」**(最易混):纪要由 WorkManager periodic **每 15min**(Android periodic 硬下限,做不到更短;改间隔必须用 `ExistingPeriodicWorkPolicy.UPDATE`,KEEP 不覆盖旧排程)自动跑一次,扫**已结束**的会话。UI 里「会话间隔 10min」是**切分规则**——多长静音算另一场,跟跑纪要频率毫无关系。要比 15min 更勤只能换 AlarmManager 精确闹钟。 +- **502 坑**:periodic + 手动 + retry 并发打同一个 llama-server 上游 → llama-swap `context canceled` → 502。已用 worker 内 `AtomicBoolean` 互斥 + 7min 单轮预算 + 不 `Result.retry()` 解决(见 SummaryWorker)。 - **Qwen3.5 默认开思考**:纪要 + 本地对话都要传 `chat_template_kwargs:{enable_thinking:false}` 否则 token 被 `` 吞、流式开头吐字面 `"null"`(org.json.optString 坑,ChatClient.parseDelta 已用 `isNull` 防)。 - **G3 实测**(Q4,热降频):2B ~12 t/s 生成 / 65 prefill(一篇纪要 ~48s);4B ~4 / 24(~2.6min)。 - 启动器手测:`su -G 3003 10302 -c 'bash ~/start-llama.sh'`,再 `curl 127.0.0.1:8080/v1/models`。 -- libgit2 0.21.4