嵌入#

学习如何在 Xinference 中创建文本嵌入。

介绍#

文本嵌入用于量化不同文本之间的相关性。它们可以应用于各种应用程序,包括搜索、聚类、推荐、异常检测、多样性度量和分类。

嵌入是一组浮点数的向量。两个向量之间的接近程度可以作为它们相似性的指标。距离越小表示相关性越高,而距离越大则表示相关性降低。

通过 Embeddings API 在 Xinference 中嵌入模型可以被调用,以创建嵌入。Embeddings API 模仿了 OpenAI 的 create embeddings API

API 端点

OpenAI 兼容端点

Embeddings API

/v1/embeddings

支持的模型列表#

你可以查看所有 Xinference 内置中的嵌入模型

嵌入模型引擎#

启动嵌入模型时,可以通过 model_engine 参数(命令行中为 --model-engine)选择推理引擎:

  • sentence_transformers:默认引擎,适用于所有嵌入模型。

  • vllm: high-throughput serving for supported model families — currently models whose names start with bge, gte, text2vec, m3e, Qwen3, WeMM, or bce (e.g. bce-embedding-base_v1).

  • flag:基于 FlagEmbedding 的引擎;还支持混合(稀疏+稠密)输出,参见下方常见问题。

  • llama.cpp:用于部署 GGUF 格式的嵌入模型。

截断输入#

Embeddings API 接受可选的 truncate_prompt_tokens 参数,用于在编码前限制每条输入的 token 长度:

  • 不设置 / null:不截断。

  • 正整数 N:将每条输入截断到最多 N 个 token。

  • -1:截断到模型自身的最大输入长度。

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/embeddings' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "input": "A very long document ...",
    "truncate_prompt_tokens": 512
  }'

Multimodal WeMM-Embedding input#

The WeMM-Embedding family accepts text, image, video, visual-document, and interleaved multimodal input. Audio is not supported. Supported engines are sentence_transformers (default) and vllm.

A flat input dictionary can contain any ordered combination of text, image, and video. For precise interleaving, pass a role/content message. image_url and video_url content items are also accepted. Local media paths refer to files on the Xinference server.

xinference launch \
  --model-name WeMM-Embedding-2B \
  --model-type embedding \
  --model-engine sentence_transformers

curl -X POST \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/embeddings' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "input": {
      "role": "user",
      "content": [
        {"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}},
        {"type": "text", "text": "Find content related to this image."},
        {"type": "video_url", "video_url": {"url": "https://example.com/video.mp4"}}
      ]
    },
    "dimensions": 256
  }'

dimensions selects one of the model's Matryoshka dimensions. By default, Xinference truncates the vector and applies L2 normalization again.

快速入门#

我们可以通过 cURL、OpenAI Client 或 Xinference 的 Python 客户端来尝试 Embeddings API。

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/embeddings' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "input": "What is the capital of China?"
  }'

常见问题#

LLM 在 Xinference 中是否支持 Embeddings API?#

不支持,Xinference由于性能考虑,并没有提供 LLMs 嵌入 API。

Embeddings API 是否提供了与 LangChain 的集成方法?#

是的,你可以参考LangChain相关部分的官方Xinference文档。这里是链接:Text Embedding Models: Xinference

Embeddings API 是否支持混合(hybrid)模型?#

支持。可以使用 flag 引擎部署模型,并在调用 Embeddings API 时设置额外参数 return_parse=True,即可返回稀疏向量。