嵌入模型#

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 EmbeddingsMatryoshka Representation Learning (MRL) 是一种用于训练嵌入模型的技术。它允许用户在性能和成本之间进行权衡。

1. 启动支持 Matryoshka 的模型#

如果模型配置已包含 matryoshka_dimensionsis_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]}'
  1. 设置 "is_matryoshka": true 允许截断到任何维度。否则,服务器将验证请求中指定的维度是否属于 matryoshka_dimensions 之一。

  2. 在请求中省略 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)

intfloat/e5-mistral-7b-instruct

基于 Mistral/Llama 架构的高质量文本嵌入

GTE-Qwen2

Alibaba-NLP/gte-Qwen2-7B-instruct

支持多语言的阿里巴巴文本嵌入模型

Qwen3-Embedding

Qwen/Qwen3-Embedding-4B

最新的基于 Qwen3 的语义表示文本嵌入模型

BGE

BAAI/bge-large-en-v1.5

北京智源研究院(BAAI)的文本嵌入(需要 attention-backend triton/torch_native)

GME (多模态)

Alibaba-NLP/gme-Qwen2-VL-2B-Instruct

gme-qwen2-vl

用于文本和图像跨模态任务的多模态嵌入

CLIP

openai/clip-vit-large-patch14-336

OpenAI 出品的用于图像和文本嵌入的 CLIP