## 现象 admin 租户(ff225058)兴趣图谱自 **2026-09-08 12:20** 起再无任何持久化: - `interests.json` 停在 09-04;`interest-history.jsonl` 最后快照 09-08 12:20 - 此后游荡 / 反思 / 日记每天照常运行(worker 日志、usage 账本均在) 图谱的两条进化路径在同一发布窗口(#236,2026-09-08 11:27 合并)先后断裂。 ## 根因 A1:游荡回灌被 #176 话题校验器 100% 拒绝(静默) - `reinforceInterestGraph`(`packages/agent/src/core/wander-agent.ts:303`)从游荡历史提取的候选话题只有两类:**搜索 query**(自然语言长句,实测 5–13 个英文词)与 **URL 主机名** - `isPlausibleTopic`(`packages/agent/src/memory/topic-validator.ts`,#176 引入)规则:≤4 个英文词、≤40 字符、拒绝域名形态 / 搜索算子 → **两类候选全部被拒** - `plausible.length === 0` → **无声 return,无日志无计数**。实测 10-14 当天:10 次「游荡后处理」、0 次「兴趣回灌」 - #176「宁枉勿纵」的前提(被拒话题下次以干净形态出现还能入图)对搜索 query 不成立——query 永远是长句,永远不会再以 ≤4 词形态出现 ## 根因 A2:反思稳定产出 0 洞察 - 反思每次真实执行(10-14 四次 tick,LLM 调用 15–17s),但 `insightsProduced=0 / discardedByValidation=0 / discardedByGrounding=0`——LLM 每次主动返回空数组(system prompt 明确允许「素材不够→返回空数组」) - 洞察为空 → `updateInterestGraph` 不可达 → `graph.persist()` 永不执行 → 无快照 - 素材侧:observation(`observe_user` 工具写)自 09-07 起断流,5 周仅 2 条;memory 中 `self:reflection` 洞察 **0 条** - 待深挖:① 反思为何稳定空产出(素材窗口 / 构成、prompt 的空数组分支);② `observe_user` 为何不再被模型调用 ## 影响(主轴级) - 兴趣不进化:游荡 focusTopics 整个 10 月仍在用 9 月兴趣(query 里还在搜 "September 2026") - 日记表情包步骤被「当天无兴趣快照」gate 饿死(另见表情包触发机制改造票) - 推送选题相关性随图谱陈旧持续退化 ## 验收标准 - [ ] 游荡回灌对搜索 query 不再全量静默拒绝(归一化 / 放宽准入),拒绝时留 warn 或计数 - [ ] 反思恢复非零洞察产出(生产观察 ≥1 条/天量级),图谱恢复 persist、`interest-history.jsonl` 出现新快照 - [ ] `observe_user` 断流根因有结论并处置 - [ ] 回归:`pnpm --filter agent test` / `lint` / `typecheck`
Activity
Zewang0217 commentedon Oct 14, 2026
深挖完成——根因链完整闭环(2026-10-14)
容器内探针(同一素材 + 同一 prompt + 生产模型 deepseek-v4-flash)复现结果 + 生产 usage 实锤:
A2 反思零产出的确切机制(三层叠加)
maxOutputTokens: 3000对推理模型不够——reasoning tokens 计入同一上限(实测单次 reasoning ~1.7k + 正文 ~1.5k)。生产 10-14 四次反思的 outputTokens 全部恰好 = 3000,JSON 全部截断、JSON.parse全部失败,被当「零洞察」静默吞掉(0/0/0 签名与 parse-fail 分支完全吻合)。name/interest/reason,Zod schema 要topic/reasoning——system prompt 从未规定字段名。即使不截断也会全量丢弃。run-one-wander不初始化文件 logger,consola 的 stdout/stderr 是 nullStream——「反思 LLM 输出不是合法 JSON」的 error 从未落盘。A1 游荡回灌(已在 issue 正文)
补充:
record_knowledge的title(模型自己概括的干净话题,如「蜜蜂螫针是一台双活塞微型泵」)天然通过 #176 准入——是关掉长 query/域名污染后一直在缺的干净喂料源。observe_user 断流定性
非代码 bug:工具已注册(9/9)、prompt 引导存在(react.ts:333 + 工具描述),但其「使用时机」全部锚定「主人互动之后」——worker 模式下主人反馈素材本身稀疏(当天 read_feedback 仅 2 次),模型自然少调。反思素材侧 knowledge 是新鲜且足够的(探针证明可产出洞察),故本票不强行改 prompt,观察修复后的反思产出再定。
修复
→ PR #425:输出上限 8000 + prompt 写死精确 JSON 结构 + 注入已有兴趣清单 + record_knowledge 标题喂料 + 拒绝留痕 + worker 文件日志。
refactor(agent): 吸收 review 建议——图谱加载防御、断粮 warn 区分零候选(#422)
fix(agent): 修复兴趣图谱进化链路断裂(#422)(#425)
release: 兴趣图谱进化修复 + 表情包心情概率触发(#422/#423)(#427)