嵌入#
学习如何在 Xinference 中创建文本嵌入。
介绍#
文本嵌入用于量化不同文本之间的相关性。它们可以应用于各种应用程序,包括搜索、聚类、推荐、异常检测、多样性度量和分类。
嵌入是一组浮点数的向量。两个向量之间的接近程度可以作为它们相似性的指标。距离越小表示相关性越高,而距离越大则表示相关性降低。
通过 Embeddings API 在 Xinference 中嵌入模型可以被调用,以创建嵌入。Embeddings API 模仿了 OpenAI 的 create embeddings API。
API 端点 |
OpenAI 兼容端点 |
|---|---|
Embeddings API |
/v1/embeddings |
支持的模型列表#
你可以查看所有 Xinference 内置中的嵌入模型。
嵌入模型引擎#
启动嵌入模型时,可以通过 model_engine 参数(命令行中为 --model-engine)选择推理引擎:
sentence_transformers:默认引擎,适用于所有嵌入模型。vllm:为受支持的模型系列提供高吞吐推理——目前支持名称以bge、gte、text2vec、m3e、Qwen3或bce开头的模型(例如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?"
}'
import openai
client = openai.Client(
api_key="cannot be empty",
base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
client.embeddings.create(
model=model_uid,
input=["What is the capital of China?"]
)
from xinference.client import Client
client = Client("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
input = "What is the capital of China?"
model.create_embedding(input)
{
"object": "list",
"model": "<MODEL_UID>",
"data": [{
"index": 0,
"object": "embedding",
"embedding": [
-0.014207549393177032,
-0.01832585781812668,
...
-0.03009396605193615,
0.05420297756791115]
}],
"usage": {
"prompt_tokens": 37,
"total_tokens": 37
}
}
常见问题#
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,即可返回稀疏向量。