
语义搜索的最后一刀,Rerank好用吗
被朋友安利了Rerank,试试看到底好不好用。他给我看录屏,问员工报销差旅时哪些票据要上传,关键词搜索把发票抬头和补贴标准混在一起,该点的文档挤到第四第五。他说这活儿交给重排模型,Rerank,直译是重新排序。做法是先粗召回一批候选,再拿问题逐条比对打分。它不生成答案,只把结果摆对位置。
我最近正好在折腾搜索agent,手边有飞书导出文档、Postgres里的工单说明,还有一小撮半结构化资料。之前向量检索召回几十条候选,交给LLM回答,效果时好时坏。我试着把 Cohere Rerank 接到检索流程里,拿到 key 后写小脚本,输入 query 和 documents,输出 relevance score。界面没太多花活,更多是 JSON。麻烦的是切块,chunk 太长吃成本,太短断上下文。第一次只传标题,发票抬头排到很后面,补回正文才顺。
卡点不少。我一开始按普通 API 习惯传 text,字段不对,报错也不友好,查文档花了小半天。后来换成 Elasticsearch 这类检索服务里常见的 rerank 参数,调用才稳。成本也麻烦,我看到的计价说明里,Cohere 按搜索次数每千次两美元,和常见按 token 计费不一样。这个口径适合一次塞几十条长文档,短文本高频查询未必划算。我这边测下来,不能拿 demo 的便宜推业务,最好先用真实日志估算。
第二次跑时有点意外。同一批工单召回几十条候选,让 Rerank 只返回前十条。之前排靠后的海外出差汇率与票据要求被提上来了,因为它同时覆盖地点、票据、时限。粗召回像撒网,Rerank 像把鱼按大小挑出来。我也试了几条中英文混问,模型没完全被关键词带偏。半结构化表格保留表头后,它更能理解字段和值的关系。
不能只看效果。我挑了几十条常见问题,人工标理想答案,看第一个相关文档排在哪,类似 MRR 这种排序指标。接重排前,几条答案被压到第二屏;接上后,多数问题前两条命中。但不是所有文档都变好。标题党、重复政策、过期通知,Rerank 会把它们排得更整齐,整齐地错。它不替你判断事实。之前我写过把算力新闻拆成事实清单,检索越自动化,越要人工核对口径与排除项。
已有向量库、企业搜索、客服知识库的人,值得接。它像推荐系统里的精排,粗排负责不漏,精排负责把最该点的放前面。文档没整理,查询没日志,延迟预算只给几十毫秒,或者只想拿漂亮 demo,大概率会被骂。我这边单次重排多在几百毫秒内完成,资料里也提过,即使候选很多,Cohere API 大约六百毫秒,能接受,但不能叠加太多调用。
Rerank 不万能,但能把搜索里排序最脏的一段理一理。下一步打算接到 WorkBuddy 和搜索 agent 之间,做 A/B,比较只召回和召回加重排,看点击和人工修正率。如果多语言、长文档、半结构化资料变多,光靠向量相似度可能不够。独立重排 API 能不能继续卖,也要看它比模型自带排序更便宜、更快、更可控。
物界前沿