# 重新排序函数

注意

此功能从版本1.2.1开始可用。

MyScale中的Rerank函数通过根据与查询的语义相似性对其进行重新排序,增强了搜索结果的相关性,进一步提高了检索增强生成(RAG)中的检索准确性并降低成本,通过删除不需要的结果。它支持像HuggingFaceAmazon SageMakerCohere这样的提供者,为选择最合适的提供者以满足特定需求提供了灵活性。

语法

Rerank(query, documents, top_k, provider, base_url, api_key, others)

参数

  • queryString):搜索查询,非空字符串。
  • documentsArray(String)):要重新排序的文档字符串列表。
  • top_kUInt32):要返回的最相关文档的数量。
  • providerString):必须是以下重新排序模型提供者之一,不区分大小写 - HuggingFaceSageMakerCohere
  • base_urlString):提供者的Rerank API URL,某些情况下可选。
  • api_keyString):非空的Rerank API密钥用于身份验证。
  • othersString):应提供为JSON映射的其他特定于提供者的参数。详细信息在各自的描述中提供。

返回值

  • Rerank函数的返回值是一个元组数组,每个元组由三个元素组成:索引、文档文本和分数。该数组根据分数按降序排序,确保与查询最相关的文档首先列出。每个元组的索引对应于输入数组中文档的原始位置,便于引用。
  • 类型Array(Tuple(UInt32, String, Float32))

# HuggingFace Rerank

Rerank中将provider参数设置为HuggingFace使用HuggingFace的Inference API (opens new window)Inference Endpoint (opens new window)进行重新排序。

注意:此功能专为具有特定输入和输出格式的API设计。预期的输入格式是一个带有"inputs"数组的JSON对象,其中每个元素包含一个"text"(查询)和"text_pair"(文档在documents中)。预期的API输出是一个对象列表,每个对象都有一个"score"键和可能的其他数据。这些输出按照与"inputs"数组中各自对应的配对的顺序排列,其中每个输出分数与相应的输入元素相关联。

例如,一个示例输入可以是:

{
  "inputs": [
    {"text": "what is a panda?", "text_pair": "hi."},
    {"text": "what is a panda?", "text_pair": "Giant panda is characterized by its bold black-and-white coat and rotund body."}
  ]
}

相应的输出将是:

[
    [
        {
            "score": 5.5232932936633006e-05
        }
    ],
    [
        {
            "score": 0.6181288361549377
        }
    ]
]

兼容的模型有BAAI/bge-reranker-base (opens new window)amberoad/bert-multilingual-passage-reranking-msmarco (opens new window)

提供者特定参数

  • base_url:HuggingFace Rerank API URL。必填。
  • api_key:HuggingFace API密钥。必填。
  • others
    • model_args:用于HuggingFace模型的可选参数。

示例

使用默认值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'HuggingFace', 'HUGGINGFACE_ENDPOINT', 'HUGGINGFACE_API_KEY', '')

使用自定义值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'HuggingFace', 'HUGGINGFACE_ENDPOINT', 'HUGGINGFACE_API_KEY', '{"model_args": {"parameters":{"truncation":true}}}')

使用自定义函数简化用法:

CREATE FUNCTION HuggingFaceRerank ON CLUSTER '{cluster}' AS (x,y,z) -> Rerank(x, y, z, 'HuggingFace', 'HUGGINGFACE_ENDPOINT', 'HUGGINGFACE_API_KEY', '')
SELECT HuggingFaceRerank('Query', ['doc', ...], TOP_K)

# Amazon SageMaker Rerank

Rerank中将provider参数设置为SageMaker使用Amazon SageMaker Endpoints (opens new window)进行重新排序。

注意:此提供者专为在Amazon SageMaker上部署的模型设计,需要与HuggingFace重新排序模型使用的输入和输出格式相同。

您可以在HuggingFace上找到符合这些规范的模型,例如BAAI/bge-reranker-base (opens new window)。此外,您可以访问SageMaker部署代码,如下图所示:

sagemaker-deploy

提供者特定参数

  • base_url:SageMaker Endpoint名称。必填。
  • api_key:AWS secret_access_key。必填。
  • others
    • access_key_id:AWS access_key_id。必填。
    • region_name:AWS区域名称。必填。
    • model_args:用于SageMaker端点的可选参数。

示例

使用默认值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'SageMaker', 'SAGEMAKER_ENDPOINT', 'AWS_ACCESS_KEY', '{"region_name":"us-east-1", "access_key_id":"ACCESS_KEY_ID"}')

使用自定义值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'SageMaker', 'SAGEMAKER_ENDPOINT', 'SAGEMAKER_API_KEY', '{"region_name":"us-east-1", "access_key_id":"ACCESS_KEY_ID", "model_args": {"parameters":{"truncation":true}}}')

使用自定义函数简化用法:

CREATE FUNCTION SageMakerRerank ON CLUSTER '{cluster}' AS (x,y,z) -> Rerank(x, y, z, 'SageMaker', 'SAGEMAKER_ENDPOINT', 'SAGEMAKER_API_KEY', '{"region_name":"us-east-1", "access_key_id":"ACCESS_KEY_ID"}')
SELECT SageMakerRerank('Query', ['doc', ...], TOP_K)

# Cohere Rerank

Rerank中将provider参数设置为Cohere使用Cohere Rerank API (opens new window)进行重新排序。

提供者特定参数

  • base_url:Cohere Rerank API URL。可选。默认值为https://api.cohere.ai/v1/rerank (opens new window)
  • api_key:Cohere API密钥。必填。
  • others
    • model:要使用的模型ID。可选。默认值为rerank-english-v2.0
    • max_chunks_per_doc:从文档内部生成的最大块数。可选。

示例

使用默认值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'Cohere', '', 'COHERE_API_KEY', '')

使用自定义值:

SELECT Rerank('Query', ['doc', ...], TOP_K, 'Cohere', 'YOUR_RERANK_API_URL', 'COHERE_API_KEY', '{"model":"MODEL_ID", "max_chunks_per_doc":CHUNK_NUMBER}')

使用自定义函数简化用法:

CREATE FUNCTION CohereRerank ON CLUSTER '{cluster}' AS (x,y,z) -> Rerank(x, y, z, 'Cohere', 'YOUR_RERANK_API_URL', 'COHERE_API_KEY', '')
SELECT CohereRerank('Query', ['doc', ...], TOP_K)