Xinference 内置 jina-reranker-m0 重排模型:多模态 Rerank 的启动、调用与实现解析
【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference
本文以 Xinference 内置重排(Rerank)模型jina-reranker-m0为线索,完整讲解如何在 Xinference 中通过一行命令启动该模型、使用 Rerank API 对文本与图像文档进行相关性排序,并结合仓库源码剖析其模型规格定义、加载路径与运行前提。读完本文,你将掌握jina-reranker-m0的端到端使用方式,并理解其在 Rerank 能力文档 与内置模型体系中的定位。
一、模型概览与核心规格
jina-reranker-m0是 Xinference 内置模型清单中登记的多模态重排模型,其模型卡位于 doc/source/models/builtin/rerank/jina-reranker-m0.rst,关键信息如下:
- Model Name(模型名):
jina-reranker-m0 - Languages(语言):en、zh、multilingual,即支持英文、中文与多语言场景
- Abilities(能力):rerank(重排)
- Model ID(模型标识):
jinaai/jina-reranker-m0
在仓库内置模型规格文件 xinference/model/rerank/model_spec.json 中,可以找到该模型的完整结构化定义:
| 字段 | 值 | 说明 |
|---|---|---|
version | 2 | 模型规格版本 |
model_name | jina-reranker-m0 | 与启动命令使用的名称一致 |
type | normal | 常规重排模型类型 |
model_ability | ["vision"] | 具备视觉(图像)理解能力,这是其多模态重排的基础 |
language | ["en", "zh", "multilingual"] | 支持语言 |
max_tokens | 10240 | 最大上下文长度(token 数) |
model_format | pytorch | 仅支持 PyTorch 格式,不支持 GGUF 等量化格式 |
model_src.huggingface | jinaai/jina-reranker-m0,revisionmain | Hugging Face 模型源 |
model_src.modelscope | jinaai/jina-reranker-m0,revisionmaster | ModelScope 模型源 |
quantizations | ["none"] | 不提供量化版本 |
与同样内置的jina-reranker-v2、jina-reranker-v3等文本重排模型不同,jina-reranker-m0的独特之处在于其vision能力:它不仅能对文本段落打分,还能直接对图像文档进行相关性排序,这是本文后续要重点展开的部分。
二、一行命令启动模型
按照模型卡文档,启动jina-reranker-m0只需执行:
xinference launch --model-name jina-reranker-m0 --model-type rerank命令中各参数的语义为:
--model-name:指定要启动的内置模型名称,这里为jina-reranker-m0;--model-type:指定模型类型,重排模型统一使用rerank。
实际使用中,还可以叠加以下常用参数(与 xinference/deploy/cmdline.py 中launch子命令的参数体系一致):
--model-uid:自定义模型 UID;若不指定,Xinference 会自动生成。后续通过 API 调用时,请求体中的model字段需要填写该 UID;--model-engine:重排模型默认引擎为sentence_transformers(详见下文实现解析),除非是 GGUF 格式才回退到llama.cpp;当前模型仅支持pytorch格式,因此直接使用默认引擎即可;--download-hub:指定模型下载源,可选huggingface、modelscope、openmind_hub、csghub,仓库默认按可用性选择;--quantization:该模型规格仅声明none,无需也无法指定量化位。
启动成功后,jina-reranker-m0便作为一个标准的 Rerank 服务注册到 Xinference,可经由/v1/rerank端点被调用。
三、Rerank API 调用方式
Rerank 模型在 Xinference 中通过 Rerank 端点对文档列表按与查询(query)的语义相关度从高到低排序。官方能力文档 doc/source/models/model_abilities/rerank.rst 提供了三种调用方式:cURL、Xinference Python Client 与 JSON 输出示例。
3.1 通过 cURL 调用
curl -X 'POST' \ 'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/rerank' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "model": "<MODEL_UID>", "query": "A man is eating pasta.", "documents": [ "A man is eating food.", "A man is eating a piece of bread.", "The girl is carrying a baby.", "A man is riding a horse.", "A woman is playing violin." ] }'请求体中,model为启动时生成或指定的模型 UID,query为查询文本,documents为待排序的候选文档列表。
3.2 通过 Xinference Python Client 调用
from xinference.client import Client client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>") model = client.get_model(<MODEL_UID>) query = "A man is eating pasta." corpus = [ "A man is eating food.", "A man is eating a piece of bread.", "The girl is carrying a baby.", "A man is riding a horse.", "A woman is playing violin." ] print(model.rerank(corpus, query))3.3 响应结构
返回结果为按相关度降序排列的文档索引列表,示例:
{ "id": "480dca92-8910-11ee-b76a-c2c8e4cad3f5", "results": [{ "index": 0, "relevance_score": 0.9999247789382935, "document": "A man is eating food." }, { "index": 1, "relevance_score": 0.2564932405948639, "document": "A man is eating a piece of bread." }, { "index": 3, "relevance_score": 0.00003955026841140352, "document": "A man is riding a horse." }, { "index": 2, "relevance_score": 0.00003742107219295576, "document": "The girl is carrying a baby." }, { "index": 4, "relevance_score": 0.00003739788007806055, "document": "A woman is playing violin." }] }其中results[].index指向原始documents列表中的位置,relevance_score为语义相关度分数。从服务端实现看,排序逻辑在 xinference/model/rerank/sentence_transformers/core.py 中完成:模型先对每个(query, document)组合计算相似度分数,再用np.argsort取降序排列,并依据top_n截断、依据return_documents决定是否回传原文、依据return_len决定是否统计 token 消耗。
四、多模态重排:直接对图像打分
这是jina-reranker-m0相对其他文本重排模型的核心差异点。能力文档 doc/source/models/model_abilities/rerank.rst 中专门设有 "Multimodal reranking with jina-reranker-m0" 一节,说明如下要点:
jina-reranker-m0支持文本与图像的混合重排,最大上下文长度为10,240 tokens(与model_spec.json中的max_tokens完全一致);- 纯文本文档使用上文的标准 Rerank API;
- 对图像文档(URL 或本地路径)进行重排时,通过 Python Client 传入
doc_type="image":
model.rerank( [ "https://example.com/document-1.png", "https://example.com/document-2.png", ], "Which document describes a small language model?", doc_type="image", )- 若查询本身也是图像,则额外传入
query_type="image":
model.rerank( ["https://example.com/document-1.png"], "https://example.com/query-image.png", doc_type="image", query_type="image", )这一能力使 RAG(检索增强生成)流水线在召回阶段可以直接处理截图、扫描件、产品图等非文本内容,而不必先做 OCR 转文本。
五、源码级实现解析
5.1 引擎选择:默认 sentence_transformers
在 xinference/model/rerank/core.py 中,create_rerank_model_instance对引擎选择的逻辑是:除 GGUF 规格只能运行在llama.cpp上外,其余重排模型默认使用sentence_transformers引擎。jina-reranker-m0仅有pytorch格式,因此始终走 sentence_transformers 引擎路径。
5.2 加载路径与 trust_remote_code 要求
在 xinference/model/rerank/sentence_transformers/core.py 中,对jina-reranker-m0有专门的分支处理:
- 要求安装
transformers>=4.47.3,否则抛出带安装指引的ImportError; - 由于该模型仓库携带自定义建模代码(custom modeling code),加载前必须先通过
allow_trust_remote_code校验;若不满足,会抛出明确错误并提示设置环境变量XINFERENCE_TRUST_REMOTE_CODE=1以放行远端代码执行; - 使用
AutoModel.from_pretrained(..., trust_remote_code=True)加载并置于.eval()模式,加载参数包括device_map(默认auto)与torch_dtype(启用 FP16 时使用torch.float16); - 若开启了 Flash Attention,会向模型传入
attn_implementation="flash_attention_2"。
可见,jina-reranker-m0的本地化加载绕开了 sentence-transformers 的 CrossEncoder 封装,直接以 Hugging Face Transformers 方式加载,这与其视觉输入处理方式直接相关。
5.3 打分路径
在 xinference/model/rerank/sentence_transformers/core.py 中,打分时对jina-reranker-m0再次走专用分支:调用模型自带的compute_score方法,并以model_spec.json中的max_tokens(10,240)作为默认max_length,同时过滤掉已由预处理阶段拼接的instruction参数。打分结果会被统一规范化为序列,再进入上文的排序与响应组装流程。
5.4 依赖与格式约束
在 xinference/model/rerank/sentence_transformers/core.py 的match_json校验中:
- 非虚拟环境模式下,要求本机已安装
transformers与Pillow(后者是图像输入处理的依赖); - 明确校验
model_spec.model_format必须为pytorch,否则返回错误信息"jina-reranker-m0 supports pytorch format only"。
同时,model_spec.json中该模型的virtualenv依赖声明为:sentence_transformers 依赖、Pillow、system_torchvision与system_torch(仅当启用虚拟环境隔离时按需安装),这与core.py的检查逻辑互为印证。
5.5 测试佐证
仓库测试 xinference/model/rerank/sentence_transformers/tests/test_sentence_transformers.py 中将jina-reranker-m0映射为["vision"]能力,进一步印证了其多模态(视觉重排)定位。
六、注意事项
- 远端代码执行:加载
jina-reranker-m0会执行模型仓库随附的建模代码,需要显式设置XINFERENCE_TRUST_REMOTE_CODE=1(或在满足allow_trust_remote_code的条件下运行),否则加载会失败; - 仅支持 PyTorch 格式:该模型不支持 GGUF 或量化版本,指定其他
--model-format或--quantization不会被接受; - 图像输入形态:
doc_type="image"接受图像 URL 或本地路径,两种形态均无需预先 OCR; - 上下文长度:单次打分的最长上下文为 10,240 tokens,超长文档在预处理阶段会被截断,实际使用中建议对长文档做切块后分别重排;
- 模型源:默认从 Hugging Face(revision
main)或 ModelScope(revisionmaster)拉取,国内环境可通过--download-hub modelscope指定下载源以加速。
综合来看,jina-reranker-m0是 Xinference 内置模型中少有的"开箱即用"多模态重排选项:通过 jina-reranker-m0 模型卡 中的一行启动命令即可拉起服务,再配合 Rerank 能力文档 中的doc_type="image"参数即可直接对图像内容排序,是构建多模态 RAG 检索阶段的有效组件。若需查阅其他内置重排模型(如jina-reranker-v2、jina-reranker-v3、qwen3-reranker系列),可浏览 内置重排模型目录 下的对应模型卡。
【免费下载链接】inferenceSwap GPT for any LLM by changing a single line of code. Xinference lets you run open-source, speech, and multimodal models on cloud, on-prem, or your laptop — all through one unified, production-ready inference API.项目地址: https://gitcode.com/GitHub_Trending/in/inference
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考