习得贴纸:贴纸识别流水线 + search_stickers 检索 #75
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/70-learned-stickers"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #70
What
机器人记住群里常用贴纸的交际含义(不是画面描述),供它之后自己发贴纸时用得上。识别流水线独立于两级门控异步跑,per-chat 默认关(opt-in)。ADR-0024 落地。
实现要点
MediaKind新增"sticker";MediaRef新增file_id(平台稳定标识,既是精确去重键也是模型之后要发出去的引用)。传输层与图片同形,复用同一内容块构造器。_spawn_sticker_learning同步做完零成本过滤,只在真有候选时起后台任务;刻意不挂进_pending_flushes(那些会被下一条消息 cancel,而识别一旦开始就该跑完)。capabilities.sticker→ per-chat 开关 → 去重查询,任一不过零 VLM 调用。search_stickers向量语义检索(新 Qdrant collection),不整份常驻注入(ADR-0024 规避不可预测的库增长)。工具按capabilities.sticker门控,计入 run_limit。两处偏离 AC 字面的决定(已 grill 确认)
delta._resolve_sensitivity就是这条规则)。保住了「无工具」那句真正在争的东西:新鲜上下文、旁路调用、不与主推理链共享、单次调用(Spec 轴已逐项复核成立)。sensitive=True没有任何行为差别、会让这个字段成为摆设;不入库才真正兑现「不要复用别人的私人照片」。Review
/code-review两轴都抓到真问题:MediaKind新增 sticker 后,既有部署(arise_llm_multimodal_kinds只声明"image")一旦 host 开始上报kind="sticker",正常对话里的贴纸会退化成[贴纸]占位。已修:新增_TRANSPORT_ALIAS让声明 image 的模型同样覆盖 sticker(两者线格式本来完全一致),既消回归也免了部署方为纯语义区分再写一遍配置。别名刻意不对称。_pending_sticker_learning集合并补反向对照;② 「沉默轮识别照常」压根没跑门控,只是不调用run()——改为真跑一轮以沉默收场的对话,同时断言 egress 零发送与贴纸已落库。capabilities.sticker门控(此前只门控工具可见性),发不出贴纸的平台照付识别成本。已补。_sanitized_query_arg;_learn_stickers手工重建的兜底多模态路由与_build_runtime_loop重复 → 提取_build_fallback_multimodal_models(避免「声明顺序即优先级」有两个实现)。EgressPort.send_sticker的sticker_ref双来源契约(此前从未声明,host 照静态目录解析会发不出学到的贴纸)。Standards 轴判定为不改的两条(记录理由):
learn_sticker七个参数与run_delta_compression_cycle/run_reflection_cycle同形、全是依赖零调参,不是 Data Clump;render_sticker_hits与render_search_hits键集语义都不同,合并需引入字段映射抽象反而更糟。已知范围边界
per-chat 开关的 setter 已就位但尚无生产开启途径——
/settool那类管理命令属 ADR-0010 运营面,PRD 已明确排除在本片之外。运营面接上即可驱动。Tests
全仓库 1027 个测试通过(新增 50 个:纯函数 16、识别流水线 11、
search_stickers工具 8、e2e 12、传输层别名 3)。变异复核四处守卫,逐个都有测试挂:贴纸过滤、per-chat 开关闸、能力位闸、传输层别名。