本节将说明如何单独调用 rerank 模型,以计算两段文本间的相似度。
rerank 用于重新批量计算输入文本与检索到的文本之间的 score 值,以对召回结果进行重排序。判断依据 chunk content 能回答 query 提问的概率,分数越高即模型认为该文本片段能回答 query 提问的概率越大。
| 参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
|---|---|---|---|---|
datas | List[RerankDataItem] | 是 | -- | 待重排的数据列表
|
| endpoint_id | Optional[str] | 否 | -- | 接入点 ID |
rerank_model | string | 否 | "base-multilingual-rerank" | rerank 模型
|
rerank_instruction | string | 否 | -- | 重排指令 |
| 字段 | 类型 | 参数说明 |
|---|---|---|
| code | Optional[int] | 状态码 |
| message | Optional[str] | 错误信息 |
| request_id | Optional[str] | 请求的唯一标识符 |
| data | Optional[RerankResult] | RerankResult |
| 字段 | 类型 | 参数说明 |
|---|---|---|
| scores | List[float] | float 数组,与输入 datas 数组一一对应,表示每个文档与 query 的相关性得分 |
| token_usage | Optional[int] | 本次 rerank 调用消耗的总 token 数量 |
| 状态码 | http 状态码 | 返回信息 | 状态码说明 |
|---|---|---|---|
| 0 | 200 | success | 成功 |
| 1000001 | 403 | VolcanoErrUnauthorized | 鉴权失败 |
| 1000002 | 400 | VolcanoErrInvalidRequest | 请求参数无效(当 query 缺失,或 datas 中所有文档都未提供任一媒体/文本内容时触发) |
| 300004 | 429 | VolcanoErrQuotaLimiter | 账户的 rerank 调用已达到配额限制 |
| 1000028 | 500 | VolcanoErrInternal | 服务内部错误,rerank 模型过载 |
首次使用知识库 SDK,可参考 使用说明
本示例演示了知识库 Python SDK 中 rerank 函数的基础使用方法,通过传入查询语句和待排序文本列表实现结果重排序。当前该接口不支持 APIKey 作为知识库 SDK 鉴权,请使用 AK/SK(IAM)鉴权方式。
将示例保存为 main.py,配置 VIKINGDB_AK 和 VIKINGDB_SK 环境变量后运行 python main.py;调用成功时会输出重排结果。
import os from vikingdb.knowledge import VikingKnowledge from vikingdb.auth import IAM from vikingdb.knowledge.models.rerank import RerankDataItem def main(): access_key = os.getenv("VIKINGDB_AK") secret_key = os.getenv("VIKINGDB_SK") endpoint = "api-knowledgebase.mlp.cn-beijing.volces.com" region = "cn-beijing" client = VikingKnowledge( host=endpoint, region=region, auth=IAM(ak=access_key, sk=secret_key), scheme="https" ) datas = [ RerankDataItem(query="What is VikingDB?", content="VikingDB is a vector database."), RerankDataItem(query="What is VikingDB?", content="The weather is good today.") ] try: resp = client.rerank(datas=datas) print(f"Response: {resp}") except Exception as e: print(f"Rerank failed, err: {e}") if __name__ == "__main__": main()