在 Xinference 中部署 jina-embeddings-v3:一条命令启动 1024 维多语言 Embedding 服务
【免费下载链接】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
jina-embeddings-v3 是 Jina AI 推出的多功能文本嵌入模型,支持中英双语语义向量生成,输出维度 1024、上下文窗口 8192 token。在 Xinference 中,它被内置为 sentence-transformers 后端的 PyTorch 模型,你只需一条xinference launch命令即可将其以统一的生产级推理 API 暴露出来。读完本文,你将掌握该模型的完整规格、启动参数、OpenAI 兼容调用方式,以及 Xinference 底层如何通过task参数映射实现检索/匹配等任务专用嵌入的源码级原理。
模型规格总览
Xinference 将 jina-embeddings-v3 注册为内置 Embedding 模型,其完整注册信息同时维护在两处:模型规格文件 xinference/model/embedding/model_spec.json 与文档页 doc/source/models/builtin/embedding/jina-embeddings-v3.rst。核心规格如下:
| 项目 | 值 |
|---|---|
| 模型名称(Model Name) | jina-embeddings-v3 |
| 支持语言(Languages) | zh(中文)、en(英文) |
| 模型能力(Abilities) | embed(文本嵌入) |
| 输出维度(Dimensions) | 1024 |
| 最大上下文(Max Tokens) | 8192 |
| 模型 ID(Model ID) | jinaai/jina-embeddings-v3 |
| 模型来源(Model Hubs) | Hugging Face 与 ModelScope 双源 |
| 模型格式(Model Format) | pytorch |
| 可用量化(Quantizations) | none(不量化) |
在model_spec.json中,该模型以version: 2的结构注册,dimensions、max_tokens、language与文档完全一致,并由model_specs[0].model_src同时声明了huggingface与modelscope两个下载源(Model ID 均为jinaai/jina-embeddings-v3,量化类型仅none)。这意味着无论你的网络环境更偏好哪个模型源,都可以在启动时显式指定,Xinference 会从对应源拉取权重。
一条命令启动模型
根据官方文档,启动 jina-embeddings-v3 的命令非常简单:
xinference launch --model-name jina-embeddings-v3 --model-type embedding其中:
--model-type embedding指明该任务是文本嵌入类型,Xinference 会将请求路由到 embedding 推理通道;- 未指定
--model-format时,Xinference 会根据内置规格自动选择pytorch格式; - 未指定
--quantization时,因该模型仅注册了none量化,将按全精度加载。
启动成功后,Xinference 会返回一个model_uid,后续所有客户端调用都通过该 UID 定位模型。你可以用xinference list查看已加载的模型列表及其 UID。
运行时环境:内置虚拟环境的依赖锁定
从 model_spec.json 的virtualenv.packages字段可以看出,该模型运行时会自动构建一个独立的虚拟环境,依赖被精确锁定,避免与系统其他 Python 包相互污染:
sentence_transformers:推理后端,负责模型加载与编码;einops:张量重排工具库;accelerate>=0.28.0:多设备加速;transformers==4.52.0:严格锁定版本;flash-attn==2.8.3.post1:Flash Attention 加速注意力计算;- 系统级
torch与torchvision(条件性引入,由#engine# == "sentence_transformers"决定)。
这意味着首次启动时需要联网下载依赖并构建虚拟环境,之后的启动会复用已构建的环境,加载速度显著提升。有关虚拟环境的更多细节可参考 doc/source/models/virtualenv.rst。
客户端调用:OpenAI 兼容 Embedding API
模型启动后,即可通过 Xinference 统一的 RESTful API 进行调用。以model_uid为jina-embeddings-v3为例:
curl -X POST http://localhost:9997/v1/embeddings \ -H "Content-Type: application/json" \ -d '{ "model": "jina-embeddings-v3", "input": ["Xinference 是一个生产级推理框架", "Xinference is a production-ready inference framework"] }'响应中每个输入文本对应一个长度为 1024 的向量。Xinference 在 xinference/model/embedding/sentence_transformers/core.py 中默认设置normalize_embeddings=True,即返回的向量已做 L2 归一化,你可以直接使用内积(dot product)代替余弦相似度做相似度排序,获得更高的检索吞吐。
Python 客户端同样简洁:
from xinference.client import Client client = Client("http://localhost:9997") model = client.get_model("jina-embeddings-v3") vectors = model.create_embedding( ["Xinference 是一个生产级推理框架", "Xinference is a production-ready inference framework"] )任务感知嵌入:task参数的源码级解析
jina-embeddings-v3 的价值在于它支持任务感知(task-aware)嵌入——同一个模型可以根据下游任务切换提示词模板,从而在检索、文本匹配等场景获得更优效果。Xinference 在请求参数中支持传入task字段,并在 xinference/model/embedding/sentence_transformers/core.py 中定义了 v3 的任务到 prompt 名称的映射表:
JINA_V3_TASK_TO_PROMPT_NAME = { "retrieval.passage": "retrieval.passage", "retrieval.query": "retrieval.query", "retrieval": "retrieval.passage", "passage": "retrieval.passage", "query": "retrieval.query", "document": "document", }映射的核心逻辑由_resolve_jina_task()完成(core.py)。对于 v3 模型,它返回(prompt_name, None),即把解析出的 prompt 名称注入SentenceTransformer.encode()的prompt_name参数,由标准 SentenceTransformer prompt 机制选择对应的提示词模板(模型卡中以点分符号命名,如retrieval.passage、retrieval.query);若传入未知任务名,则抛出ValueError: Invalid task: ...,并列出全部合法取值。
在编码阶段(core.py),请求中的task会被弹出并解析,解析出的prompt_name经_build_encode_kwargs()合并进编码参数(core.py):
def _build_encode_kwargs(kwargs, prompt_name=None): encode_kwargs = dict(convert_to_numpy=False, **kwargs) if prompt_name is not None: encode_kwargs["prompt_name"] = prompt_name return encode_kwargs因此,做 RAG 检索时,正确的做法是对文档(passage)和查询(query)分别使用不同的 task,以激活各自的提示词模板:
doc_vectors = model.create_embedding( ["这是要被检索的文档内容"], task="retrieval.passage" ) query_vectors = model.create_embedding( ["这是用户查询"], task="retrieval.query" )这套映射行为在 xinference/model/embedding/sentence_transformers/tests/test_jina_task_mapping.py 中有完整覆盖,包括:点分任务名自映射、retrieval/passage别名统一到retrieval.passage、query别名统一到retrieval.query、document独立映射、非法任务抛错、模型名大小写不敏感、非 Jina 模型不受影响等用例,可作为你使用该功能时的行为参考。
使用注意事项
- 任务参数非必需:不带
task的调用同样有效,模型会使用默认提示词模板生成通用语义向量; - 维度与截断:模型输出固定为 1024 维,且对超过 8192 token 的输入会按模型自身
max_tokens上限截断处理(参见 xinference/model/embedding/core.py 中truncate_prompt_tokens的相关逻辑); - 返回稀疏向量不支持:如需
return_sparse稀疏嵌入能力,该能力属于flag后端,sentence-transformers 后端不支持(core.py 会直接抛出明确错误); - 资源占用:模型以 PyTorch 全精度加载并启用 Flash Attention,建议在有 GPU 的节点上运行以获得更优的推理性能。
结语
jina-embeddings-v3 凭借 1024 维输出、8192 token 上下文与中英双语能力,是一个适合作为 RAG 检索底座的多功能嵌入模型;而 Xinference 通过内置模型规格、自动虚拟环境、OpenAI 兼容 API 以及任务感知的task参数映射,把它的部署成本压缩到了一条xinference launch命令。理解底层task→prompt_name的映射机制,将帮助你在检索等真实场景中把模型能力用到极致。
【免费下载链接】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),仅供参考