本节将说明如何单独调用rerank模型,以计算两段文本间的相似度
rerank 用于重新批量计算输入文本与检索到的文本之间的 score 值,以对召回结果进行重排序。判断依据 chunk content 能回答 query 提问的概率,分数越高即模型认为该文本片能回答 query 提问的概率越大。
参数 | 类型 | 是否必选 | 默认值 | 参数说明 |
|---|---|---|---|---|
datas | List | 是 | -- | 待重排的数据列表
|
endpointId | String | 否 | -- | 推理接入点 ID |
rerankModel | String | 否 | "base-multilingual-rerank" | rerank 模型
|
rerankInstruction | String | 否 | -- | 重排指令 |
字段 | 类型 | 参数说明 |
|---|---|---|
code | Integer | 状态码 |
message | String | 错误信息 |
requestId | String | 请求的唯一标识符 |
data | RerankResult | RerankResult |
字段 | 类型 | 参数说明 |
|---|---|---|
scores | List | 与输入 datas 数组一一对应,表示每个文档与 query 的相关性得分 |
tokenUsage | Integer | 本次 rerank 调用消耗的总 token 数量 |
状态码 | http 状态码 | 返回信息 | 状态码说明 |
|---|---|---|---|
0 | 200 | success | 成功 |
1000001 | 403 | VolcanoErrUnauthorized | 鉴权失败 |
1000002 | 400 | VolcanoErrInvalidRequest | 请求参数无效(当 query 缺失,或 datas 中所有文档都未提供任一媒体/文本内容时触发) |
300004 | 429 | VolcanoErrQuotaLimiter | 账户的 rerank 调用已达到配额限制 |
1000028 | 500 | VolcanoErrInternal | 服务内部错误,rerank模型过载 |
首次使用知识库 SDK ,可参考 使用说明
本示例演示了知识库 Java SDK 中 Rerank 的基础使用方法,通过传入查询语句和待排序内容列表实现结果重排序,使用前需配置鉴权参数(VOLC_AK/VOLC_SK 或 VIKING_API_KEY)。
package com.volcengine.vikingdb.runtime.knowledge.examples.rerank; import com.fasterxml.jackson.databind.ObjectWriter; import com.volcengine.vikingdb.runtime.core.ApiClient; import com.volcengine.vikingdb.runtime.core.RequestAddition; import com.volcengine.vikingdb.runtime.core.auth.Auth; import com.volcengine.vikingdb.runtime.core.auth.AuthWithAkSk; import com.volcengine.vikingdb.runtime.core.auth.AuthWithApiKey; import com.volcengine.vikingdb.runtime.enums.Scheme; import com.volcengine.vikingdb.runtime.knowledge.model.request.RerankDataItem; import com.volcengine.vikingdb.runtime.knowledge.model.request.RerankRequest; import com.volcengine.vikingdb.runtime.knowledge.model.response.RerankResponse; import com.volcengine.vikingdb.runtime.knowledge.service.KnowledgeService; import java.util.Arrays; public class Main { private static final ObjectWriter PRETTY_JSON = ApiClient.objectMapper.writerWithDefaultPrettyPrinter(); private static final Scheme SCHEME = Scheme.HTTPS; private static final String HOST = "api-knowledgebase.mlp.cn-beijing.volces.com"; private static final String REGION = "cn-beijing"; public static void main(String[] args) throws Exception { Auth auth = preferAuth(); if (auth == null) { System.out.println("missing_auth: set VOLC_AK/VOLC_SK or VIKING_API_KEY"); return; } KnowledgeService service = newKnowledgeService(auth); String query = "Your Query"; RerankRequest req = RerankRequest.builder() .rerankModel("Doubao-pro-4k-rerank") .datas(Arrays.asList( RerankDataItem.builder().query(query).title("Revenue").content("Revenue grew 12% YoY to $3.4B.") .build(), RerankDataItem.builder().query(query).title("Margin") .content("Operating margin improved by 1.5pp to 17%.").build())) .build(); RerankResponse resp = service.rerank(req, new RequestAddition()); printJson("rerank", resp); } private static KnowledgeService newKnowledgeService(Auth auth) { return new KnowledgeService(SCHEME, HOST, REGION, auth); } private static Auth preferAuth() { String ak = getEnv("VOLC_AK"); String sk = getEnv("VOLC_SK"); if (!ak.isEmpty() && !sk.isEmpty()) { return new AuthWithAkSk(ak, sk); } String apiKey = getEnv("VIKING_API_KEY"); if (!apiKey.isEmpty()) { return new AuthWithApiKey(apiKey); } return null; } private static String getEnv(String name) { String v = System.getenv(name); if (v == null) { return ""; } v = v.trim(); return v.isEmpty() ? "" : v; } private static void printJson(String name, Object obj) throws Exception { if (obj == null) { System.out.println(name + ": null"); return; } System.out.println(name + ": " + PRETTY_JSON.writeValueAsString(obj)); } }