嵌入模型#
SGLang 通过将高效的服务机制与其灵活的编程接口相结合,为嵌入模型提供强大的支持。这种集成允许流式处理嵌入任务,从而实现更快、更准确的检索和语义搜索操作。SGLang 的架构在嵌入模型部署中实现了更好的资源利用率并降低了延迟。
重要提示
执行嵌入模型时需带有 --is-embedding 标志,某些模型可能还需要 --trust-remote-code
快速入门#
启动服务器#
python3 -m sglang.launch_server \
--model-path Qwen/Qwen3-Embedding-4B \
--is-embedding \
--host 0.0.0.0 \
--port 30000
客户端请求#
import requests
url = "http://127.0.0.1:30000"
payload = {
"model": "Qwen/Qwen3-Embedding-4B",
"input": "What is the capital of France?",
"encoding_format": "float"
}
response = requests.post(url + "/v1/embeddings", json=payload).json()
print("Embedding:", response["data"][0]["embedding"])
多模态嵌入示例#
适用于像 GME 这样同时支持文本和图像的多模态模型
python3 -m sglang.launch_server \
--model-path Alibaba-NLP/gme-Qwen2-VL-2B-Instruct \
--is-embedding \
--chat-template gme-qwen2-vl \
--host 0.0.0.0 \
--port 30000
import requests
url = "http://127.0.0.1:30000"
text_input = "Represent this image in embedding space."
image_path = "https://hugging-face.cn/datasets/liuhaotian/llava-bench-in-the-wild/resolve/main/images/023.jpg"
payload = {
"model": "gme-qwen2-vl",
"input": [
{
"text": text_input
},
{
"image": image_path
}
],
}
response = requests.post(url + "/v1/embeddings", json=payload).json()
print("Embeddings:", [x.get("embedding") for x in response.get("data", [])])
Matryoshka(俄罗斯套娃)嵌入示例#
Matryoshka Embeddings 或 Matryoshka Representation Learning (MRL) 是一种用于训练嵌入模型的技术。它允许用户在性能和成本之间进行权衡。
1. 启动支持 Matryoshka 的模型#
如果模型配置已包含 matryoshka_dimensions 或 is_matryoshka,则无需覆盖。否则,您可以按照下方所示使用 --json-model-override-args
python3 -m sglang.launch_server \
--model-path Qwen/Qwen3-Embedding-0.6B \
--is-embedding \
--host 0.0.0.0 \
--port 30000 \
--json-model-override-args '{"matryoshka_dimensions": [128, 256, 512, 1024, 1536]}'
设置
"is_matryoshka": true允许截断到任何维度。否则,服务器将验证请求中指定的维度是否属于matryoshka_dimensions之一。在请求中省略
dimensions将返回完整的向量。
2. 发起不同输出维度的请求#
import requests
url = "http://127.0.0.1:30000"
# Request a truncated (Matryoshka) embedding by specifying a supported dimension.
payload = {
"model": "Qwen/Qwen3-Embedding-0.6B",
"input": "Explain diffusion models simply.",
"dimensions": 512 # change to 128 / 1024 / omit for full size
}
response = requests.post(url + "/v1/embeddings", json=payload).json()
print("Embedding:", response["data"][0]["embedding"])
支持的模型#
模型家族 |
示例模型 |
对话模板 (Chat Template) |
描述 |
|---|---|---|---|
E5 (基于 Llama/Mistral) |
|
无 |
基于 Mistral/Llama 架构的高质量文本嵌入 |
GTE-Qwen2 |
|
无 |
支持多语言的阿里巴巴文本嵌入模型 |
Qwen3-Embedding |
|
无 |
最新的基于 Qwen3 的语义表示文本嵌入模型 |
BGE |
|
无 |
北京智源研究院(BAAI)的文本嵌入(需要 |
GME (多模态) |
|
|
用于文本和图像跨模态任务的多模态嵌入 |
CLIP |
|
无 |
OpenAI 出品的用于图像和文本嵌入的 CLIP |