Half-Day Learning Pack · Strategy PM Friendly

Story Agent 半天学习资料:Embedding、Reranker、Evaluator 与训练决策

这份资料面向不需要懂算法细节的策略 PM。目标是在半天内建立判断力:什么时候靠工程,什么时候训模型,怎样让 photo story agent 更稳定地找到“有证据、有关系、有转折、可写成好故事”的照片组合。

阅读时长约 4 小时
目标读者策略 PM / 产品负责人
核心问题故事上限该靠谁拉高
更新时间2026-06-14

1. 先读结论

如果目标是“最大化故事上限”,优先级不是训练 VLM,也不是一上来 fine-tune LLM,而是先把系统拆成观察、召回、评估、决策、写作五层,再训练最贴近“故事好不好”的那一层。

一句话结论:VLM 负责看见事实,embedding 负责快速捞候选,reranker/scorer 负责判断故事价值,evaluator/controller 负责诊断缺口和决定下一步,LLM writer 负责把已批准的故事写好。

模块 它解决什么 是否优先训练 PM 判断口径
VLM / PhotoCard 把照片里的可见事实、人物、物品、场景、时间、互动写出来。 暂时不训。 靠 prompt、字段 schema、规则补特征更划算。VLM 没看见的事实,后面很难凭空补回来。
Embedding 把 PhotoCard 变成可快速搜索的表示,从全相册召回可能相关的照片。 后置训练。 先用强开源模型和多向量工程跑起来。等有 story-positive 数据后,再蒸馏成“故事证据召回”。
Reranker / Story Scorer 在候选里判断哪张图、哪组图更能支撑好故事。 最值得先训。 它离业务目标最近:相关不等于有故事,reranker 要学会“这组图有没有梗和证据”。
Evaluator / Controller 判断候选池够不够、缺什么证据、要不要补召回或重写。 先工程化,后训练局部 scorer。 它是决策器,不只是打分器。可以先用规则 + LLM judge + rubric。
LLM Writer 把已批准的 cover+pins 改写成好 caption,不重选图、不编关系。 不急。 优先 prompt / few-shot / guardrail。只有风格稳定性成为瓶颈时再训 LoRA。

2. 一张图理解系统

不要把 embedding 理解成“快速 VLM”。更准确地说,embedding 是 VLM 结果的快速索引器。它不会重新看图,也不会自动理解完整故事;它只是把已经写出来的 PhotoCard 压缩成便于搜索的信号。

VLM 观察层 把每张照片变成结构化 PhotoCard:人、物、场景、互动、OCR、时间地点。
Embedding 召回层 从上千张照片里快速捞出 topK 候选,追求不要漏掉可能有故事的图。
Reranker 打分层 判断候选是否真的支持 query 和故事,不只是词面相似。
Evaluator 决策层 诊断缺同人、缺事件链、缺关系、缺时间邻近,决定是否补召回。
LLM 写作层 在事实已批准后,写出短、准、有口吻的 cover caption 和 pin captions。

PM 记法:VLM 决定“系统看见什么”,embedding 决定“能不能快速找到证据”,reranker 决定“这是不是故事证据”,evaluator 决定“下一步怎么补救”,LLM 决定“表达是否好看”。

3. 半天学习路线

这不是论文精读路线,而是 PM 建立判断力的路线。每一段都对应一个你之后会和算法、后端、数据同学讨论的问题。

00:00-00:25
先建立系统图

读本文件第 1-4 节。目标是能用自己的话解释 VLM、embedding、reranker、evaluator、LLM writer 的分工。

00:25-01:05
理解 embedding 为什么不等于故事理解

读 BGE-M3、Qwen3-Embedding、ColBERT 的说明。只看它们解决什么,不看公式。重点理解 dense、sparse、multi-vector 的差异。

01:05-01:45
理解 reranker 为什么是“可训练评估器核心”

读 bge-reranker、Qwen3-Reranker。重点是 cross-encoder/reranker 为什么比 embedding 慢但更准,以及为什么适合判断故事价值。

01:45-02:25
理解 evaluator/controller

读 CRAG 和 Self-RAG。重点是“评估召回质量后决定下一步”,这正好对应你的 planner/controller 回环。

02:25-03:00
理解 agent 过程评估

读 Agent-as-a-Judge 摘要。重点是为什么只评最终 caption 不够,要评 recall、synthesis、scoring、writer 每一步。

03:00-03:40
回到你的业务:决定训练优先级

读第 9-12 节,形成自己的判断:先做 benchmark 和 label,再训 reranker,最后蒸馏 embedding。

03:40-04:00
写下三个决策

写清楚:本周验证什么、需要哪些标注、成功指标是什么。不要直接跳到“训练大模型”。

4. PM 词汇表

VLM

Vision Language Model。它看图并输出文字或结构化 JSON。在你的系统里,它把照片变成 PhotoCard。PM 关注字段质量,不必关心视觉 encoder 细节。

PhotoCard

每张照片的结构化档案。好的 PhotoCard 应该保留故事相关线索:人物、互动、物品、场景、时间、地点、OCR、拍摄视角、社交形态。

Embedding

把文本或图片变成向量,方便快速搜索相似内容。它适合“先捞一批可能相关的候选”,不适合独立判断故事好坏。

Dense / Sparse / Multi-vector

Dense 是一个整体语义向量;sparse 更像关键词和稀疏词权重;multi-vector 保留多个局部向量,适合长文本、多字段、细粒度匹配。

Reranker

对 embedding 捞出来的候选重新排序。它通常看 query 和候选全文,速度慢一些,但判断更细。你可以把它理解成“排序型评估器”。

Evaluator

更大的诊断模块。它不只排序,还要判断候选池是否足够、缺什么证据、下一步该补哪条 recall lane、writer 有没有越界。

Hard Negative

看起来很像正例但其实不是好答案的负样本。例如同一个餐厅、同一个人、同一晚上,但不能组成故事。这是训练 story-aware reranker 的关键。

Grounded Story

有证据支撑的故事。它可以有表达上的幽默和角度,但不能编身份、关系、动机、因果、地点或时间。

5. VLM 与工程特征:为什么暂时不训

你对 VLM 的判断是对的:在当前阶段,VLM 更像“观察和特征生成”的基础设施。它的问题通常不是模型不会看,而是输出字段不够适合后续故事检索。

VLM 应该靠工程补什么

特征 为什么对故事重要 工程补法
人物连续性 故事经常来自同一个人或同一群人的多帧变化。 face_id、nickname、共同出现频次、同组出游窗口。
互动关系 好故事常来自“人和人/宠物之间发生了什么”。 强制 VLM 区分个人动作和互动动作;单独抽 relations。
事件链 cover+pins 需要 setup、升级、揭示、结果。 按时间、地点、人物、活动聚合,生成 event cluster。
故事物件 饮料、票据、屏幕、菜单、证件、服装常是梗点。 OCR、object_presented、品牌/文字最细粒度保留。
拍摄视角 自拍、他拍、第一视角会影响故事主语和 caption。 capture.mode 枚举;低置信度时标 ambiguous。

不要急着训 VLM:如果 VLM 输出缺字段,先改 prompt/schema 和后处理。训练 VLM 成本高、回归风险大,而且不一定提升“故事选择”。

6. Embedding 学什么:从“相关图召回”到“故事证据召回”

普通 embedding 学的是 query 和文档是否语义相关。你的目标更难:一张照片可能和 query 相关,但不一定能成为故事证据;另一张照片单看一般,和 cover 放在一起却很有叙事价值。

三个层级

Level 1

单向量召回

把整张 PhotoCard 压成一个向量。简单、快、便宜,但长文本和多线索容易被平均掉。

Level 2

字段化多向量

people、relations、scene、time、ocr 分别建向量,再按 query 意图融合。更适合 story agent。

Level 3

故事监督蒸馏

用 reranker/人工偏好告诉 embedding:哪些候选能组成好故事,哪些只是相似噪声。

模型短名单

模型 / 项目 适合你的原因 PM 关注点
Qwen3-Embedding / Reranker 中文/英文、多语言、长上下文、instruction-aware,有配套 reranker。 适合作为下一代主线 baseline。重点验证 story query 下的召回和 rerank。
BAAI/bge-m3 支持 dense、sparse、multi-vector,已经和你的实验环境贴近。 不要只用 dense,应该验证 sparse + colbert/multi-vector。
Tevatron 训练 dense retriever 的工具箱,适合后续系统性训练。 先看数据格式和 hard negative 训练流程,不必先上大规模训练。
ColBERT late interaction 的经典项目,解释为什么多向量能保留细节。 适合启发 PhotoCard 字段/短语级检索,不一定直接照搬。

7. Reranker / Evaluator:最该训练的核心层

Reranker 是 evaluator 里最容易训练、最稳定落地的一块。它的输入通常是 query 和候选,输出一个相关分或排序。对你来说,它不应只判断“像不像”,而要判断“能不能支撑好故事”。

普通 reranker 和 story-aware reranker 的差别

维度 普通 reranker Story-aware reranker
目标 这个文档是否回答 query。 这张图/这组图是否能支撑一个 grounded cover+pin 故事。
输入 query + passage。 query + cover card + candidate pin cards + 时间/人物/地点/关系特征。
负样本 不相关文档。 看似相关但没故事的照片:同人无事件、同地点无关系、同物品无转折。
输出 相关分。 证据分、关系分、故事潜力分、越界风险、缺口类型。

建议的第一版训练目标:先不要训练一个会写故事的 LLM,先训练一个会判断候选组合好坏的 scorer。它能服务召回排序、controller 决策、最终质检三处,收益更集中。

可参考项目

  • bge-reranker-v2-m3:多语言 reranker,FlagEmbedding 提供 fine-tune 路线。
  • Qwen3-Reranker-0.6B:支持自定义 instruction,适合把任务定义成 story evidence ranking。
  • Prometheus-Eval:不是 reranker,但可参考 rubric judge 的结构化打分方式。

8. Agent 自修正:Evaluator 不只是裁判

在 story agent 里,evaluator 的最大价值不是给最终故事打一个分,而是在过程中告诉 controller:现在缺什么,下一步该做什么。

CRAG 给你的启发

CRAG 的核心是先评估检索结果质量,再决定是否修正或扩展检索。迁移到你的系统,就是先判断候选池够不够,再决定补同人、补事件链、补时间邻近或放弃。

Self-RAG 给你的启发

Self-RAG 把 retrieve、generate、critique 放在一个循环里。迁移到你的系统,就是让 agent 在不同阶段自问:还需要证据吗?当前证据支持这个故事吗?caption 忠实吗?

Agent-as-a-Judge 给你的启发

复杂 agent 不能只看最终答案,要评估轨迹。迁移到你的系统,就是分别评 recall、hypothesis、synthesis、scoring、writer,每一步都有诊断指标。

Reflexion / Self-Refine 给你的启发

反馈要能变成下一步动作。比如“caption 编了关系”不只是扣分,还要转成“只 rewrite,不重选图,不新增因果”的操作。

你的 evaluator 可以拆成三类

阶段 问题 输出给 controller 的动作
召回后 候选池够不够支撑故事? 补同人、补时间、补事件、补地点、补 OCR、停止。
组合后 cover+pins 是否有关系、事件、信息增益? 重排、换 pin、降低故事强度、放弃该组合。
写作后 caption 是否改变事实、编因果、改关系、超长度? 只 rewrite、收紧 subject reference、删除越界梗。

9. 到底要不要训练

训练不是目标,训练是当工程和 prompt 到达瓶颈后,把已知偏好固化到模型里的手段。先问三个问题。

1. LLM 全扫能找到好故事吗?

如果能,说明上限存在,问题在召回/排序效率。优先做 embedding + reranker。

2. 候选已经对但故事不好吗?

如果是,问题在 synthesis/scoring/writer。优先做 story scorer 和 writer guardrail。

3. LLM 看完也找不到吗?

如果是,问题可能在 VLM 特征、故事定义或相册本身,不要先训 embedding。

训练优先级

优先级 训练对象 何时开始 需要的数据
1 Story-aware reranker / scorer 有 500-2,000 组候选组合偏好样本时。 query、cover、pins、好/坏标签、失败原因、人工或高质量 judge 分。
2 Embedding 蒸馏 reranker 能稳定区分好坏后。 reranker 高分正例、hard negatives、同一 query 下排序列表。
3 Caption writer LoRA 选图已稳定,但文风/长度/subject reference 不稳定时。 批准故事到高质量 caption 的成对样本。
4 完整 LLM policy / agent 已有大量 trajectory 数据和稳定 reward 后。 完整 trace、每步动作、reward、人工偏好、失败诊断。

10. 必读资料

下面按“半天读完”的优先级排序。每个资料只要求你读能支持 PM 决策的部分。

1. CRAG: Corrective Retrieval Augmented Generation

GitHub · 论文

读什么:读 abstract 和方法图,理解“先评估召回,再决定补救”的思想。

跳过什么:具体 benchmark 和公式可以先跳过。

2. FlagEmbedding / BGE-M3 / bge-reranker

FlagEmbedding · BGE-M3 · Reranker

读什么:读模型列表、dense/sparse/multi-vector、reranker fine-tune 的说明。

PM takeaway:这套最接近你当前实验,可以先验证“多向量 + reranker”。

3. Qwen3-Embedding / Qwen3-Reranker

GitHub · 论文 · 0.6B Reranker

读什么:读 model list、instruction-aware、embedding + reranker 组合方式。

PM takeaway:适合把你的任务写成 instruction:retrieve/rerank photo evidence for grounded cover+pin stories。

4. ColBERT / ColBERTv2

GitHub · ColBERTv2 PDF

读什么:只理解 late interaction:不要把长文档压成一个向量,而是保留局部匹配。

PM takeaway:你的 PhotoCard 很像长文档,多字段、多人物、多物品,适合 late interaction 思路。

5. Self-RAG

GitHub · 项目页

读什么:读“retrieve, generate, critique”的循环,不必看训练细节。

PM takeaway:agent 可以学会判断何时需要检索、检索是否有用、生成是否被证据支持。

6. Agent-as-a-Judge

GitHub · 论文

读什么:读为什么 agent 不能只评最终输出,要评估完整轨迹。

PM takeaway:你的 story agent 应该评 recall、synthesis、score、writer 每一步,而不是只评最终 caption。

7. ColPali / ViDoRe / Jina Embeddings v4

ColPali · ColPali paper · Jina v4 paper

读什么:理解 VLM/multimodal embedding + late interaction 如何用于视觉文档检索。

PM takeaway:不是当前第一优先级,但能启发未来“直接图像 embedding + PhotoCard text”的混合路线。

11. PM 检查清单

每次讨论“要不要训练”“为什么故事不好”时,用这张清单把问题定位到具体层,而不是泛泛说模型不行。

VLM 是否输出了足够的可见事实,而不是泛泛 caption?
PhotoCard 是否单独保留 people、relations、scene、activity、ocr、capture、time/location?
embedding 是否只做 dense,导致长 PhotoCard 的人物/物件/关系被平均掉?
召回 top100 里是否有人工看起来能成故事的候选?
reranker 是否区分“相关照片”和“故事证据照片”?
hard negatives 是否足够难,比如同人但无事件、同地点但无关系?
evaluator 是否能输出缺口类型,而不是只给一个低分?
controller 是否会根据缺口补 recall lane,而不是盲目进入 writer?
writer 是否只改写 approved story,不重选照片、不编关系、不改因果?
最终指标是否包含 human story quality,而不只是 Recall@K?

故事质量 rubric

维度 好故事标准 常见失败
事实忠实 故事只使用 PhotoCard 和 metadata 支持的信息。 编身份、编关系、编动机、编精确地点。
关系/互动 cover 和 pins 之间有可见的人物、物品、场景或事件连接。 只是同类图拼在一起,没有关系。
信息增益 pin 让 cover 的故事更完整,提供 setup、升级、反差或结果。 pin 只是重复 cover。
故事吸引力 普通但具体,有可分享的角度,不靠夸张编造。 文案流畅但证据弱,像泛泛鸡汤或泛 meme。
caption 安全 短、准、有口吻,保留主体和逻辑。 为了好笑改变事实,或让 subject reference 混乱。

12. 建议路线图

这里按“最大化故事上限,同时控制训练风险”的顺序排。

阶段 目标 动作 成功标准
第 1 阶段:不训练 确认上限和瓶颈。 跑 LLM full-scan ceiling、BGE-M3 dense/sparse/multi-vector、Qwen3 rerank baseline。 知道是“召回漏了”“排序错了”“组合差了”还是“writer 越界”。
第 2 阶段:标注偏好 沉淀 story quality 数据。 对每个 query 保存 top candidates,标好/坏、失败原因、是否可作为 cover/pin。 至少有 500 组高质量偏好样本,hard negative 覆盖主要失败类型。
第 3 阶段:训 reranker/scorer 让系统学会“故事证据排序”。 用 Qwen3-Reranker 或 bge-reranker 做 LoRA/fine-tune,输出故事支持分。 topK 的故事可用率、人评故事分、越界率明显改善。
第 4 阶段:蒸馏 embedding 让召回层更早捞到好故事候选。 用 reranker 高分样本做正例,误召回做 hard negative,训练 embedding。 Recall@50/100 和 story-positive candidate rate 上升,latency/cost 下降。
第 5 阶段:训练 writer 或 agent 只在表达或完整轨迹成为瓶颈时做。 caption writer LoRA、reward model、process reward,逐步做。 caption 风格稳定、事实越界率下降、人工偏好提升。

关键提醒:不要先训完整 LLM agent。先把 story-aware scorer 做准,它会反过来让召回、组合、写作、评估都有可复用的信号。

13. 来源链接

以下是本资料使用和建议阅读的主要项目/论文。阅读时优先看 README、model card、abstract 和 architecture 图。

注:外部项目状态会随时间变化。真正用于生产或训练前,需要再核对模型许可证、商用限制、依赖版本、硬件成本和最新 benchmark。