嵌入模型#

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": "法国的首都是什么?",
    "encoding_format": "float"
}

response = requests.post(url + "/v1/embeddings", json=payload).json()
print("嵌入向量:", 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 = "在嵌入空间中表示此图像。"
image_path = "https://huggingface.co/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("嵌入向量:", [x.get("embedding") for x in response.get("data", [])])

套娃嵌入示例#

套娃嵌入套娃表示学习 (MRL) 是一种用于训练嵌入模型的技术。它允许用户在性能和成本之间进行权衡。

1. 启动支持套娃的模型#

如果模型配置已经包含了 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"

# 通过指定支持的维度请求一个截断的(套娃)嵌入向量。
payload = {
    "model": "Qwen/Qwen3-Embedding-0.6B",
    "input": "简单解释一下扩散模型。",
    "dimensions": 512  # 更改为 128 / 1024 / 省略以获得完整尺寸
}

response = requests.post(url + "/v1/embeddings", json=payload).json()
print("嵌入向量:", response["data"][0]["embedding"])

支持的模型#

模型家族

示例模型

聊天模板

描述

E5 (基于 Llama/Mistral)

intfloat/e5-mistral-7b-instruct

N/A

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

GTE-Qwen2

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

N/A

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

Qwen3-Embedding

Qwen/Qwen3-Embedding-4B

N/A

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

BGE

BAAI/bge-large-en-v1.5

N/A

BAAI 的文本嵌入模型(需要 attention-backend triton/torch_native)

GME (多模态)

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

gme-qwen2-vl

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

CLIP

openai/clip-vit-large-patch14-336

N/A

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