现场是这样的。cohere SDK 5.2 调 client.rerank(model=rerank-multilingual-v3.0, query=q, documents=docs),代码里写 resp[0]['relevance_score'] 直接报 TypeError,返回对象不是列表。

中间走过弯路,把「老代码按 v2 的字典结构取值」当成主因,改完现象没变。

原因不止一个,得分开看。5.x 返回 RerankResponse 对象,结果在 results 字段里;字段名在不同大版本间从 relevance_score 改过;文档以字符串传入时索引与原文对不上。

先打印返回对象的类型与首条结果

python -c "import cohere;c=cohere.Client('k');print(type(c.rerank(query='q',documents=['a','b'],model='rerank-multilingual-v3.0')))"

再往下按新结构取分数与下标

python rerank_read.py --field results

随后按分数排序后再截断

python rerank_sort.py --top 5

末了用两条明显相关的文档验证顺序

python rerank_check.py --query 退款政策

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

这台环境是别人交接的,不少默认值被动过,只能一项项核。

恢复的判定其实很直接。取分不再抛异常,排序结果第一条是明显最相关的文档,索引能正确映射回原文。

容易忽略的是,各家 rerank 的返回结构差异很大,升级 SDK 后先打印一次完整对象,比对着旧文档改代码省事。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189