嵌入#

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

介绍#

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

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

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

API 端点

OpenAI 兼容端点

Embeddings API

/v1/embeddings

支持的模型列表#

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

嵌入模型引擎#

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

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

  • vllm:为受支持的模型系列提供高吞吐推理——目前支持名称以 bgegtetext2vecm3eQwen3bce 开头的模型(例如 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
  }'

快速入门#

我们可以通过 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,即可返回稀疏向量。