嵌入
嵌入把文本变成向量,router 就能比语义。一个嵌入模型供所 有需要它的功能用:
默认模型是 Vela 1.0 Embedding,读得了 32,768 个 token;要快的话还能从更早的层取小向量:3、6、11、22 层,64、128、256、512 或 768 维。
打开它
启用一个需要嵌入的功能就够了,Vela Embedding 由 router 跑在 CPU 上。要定路由用的向量大小:
global:
model_catalog:
embeddings:
semantic:
embedding_config:
model_type: mmbert
target_layer: 22
target_dimension: 768
mmbert 指的是 Vela Embedding 这个槽位。Qwen3-Embedding-0.6B(1,024 维)用 qwen3,Vela Omni 用 multimodal(见图 像和音频)。
选它跑在哪
绑定名叫 embedding,读的是向量(embedding.v1)。所有需要嵌入的服务(缓存、记忆、向量库、工具)都用这个全局绑定,声明一次就够:
global:
model_catalog:
deployments:
vela-embedding:
provider: model_runtime
artifact: vllm-sr/Vela-1.0-Encoder-307M-Embedding
device: cpu
input:
max_tokens: 8192
overflow: truncate
bindings:
embedding:
deployment: vela-embedding
contract: embedding.v1
不同功能可以读同一个模型的不同视图,比如语义缓存用第 6 层的 256 维向量、路由用第 22 层的 768 维向量。它们共用一个部署;每个视图自成一个向量空间,分开存。
用外部嵌入服务
任何 OpenAI 兼容的 /embeddings 端点(比如挂了嵌入模型的 vllm serve)都能换掉本地模型处理文本。它换掉的是上面那个 embedding 绑定,所以那个绑定就别写了:
global:
model_catalog:
embeddings:
semantic:
embedding_config:
backend: openai_compatible
model_type: remote
target_dimension: 1024
endpoint:
base_url: https://embedding.example.com/v1
model: BAAI/bge-m3
api_key_env: EMBEDDING_API_KEY
dimensions: 1024
服务方会收到待嵌入的文本。要图像、音频、层视图或长文本开窗的功能,还是得用本地模型。
验一下
这些 worker 级示例在含有 vllm-srun 的环境里运行(例如 Router 镜像)。Classify、embeddings、rerank 和 bundle 是 worker API;实例前端发布的是 System One 和 decision 请求。
vllm-srun serve vllm-sr/Vela-1.0-Encoder-307M-Embedding --device cpu --port 8100
curl -s localhost:8100/v1/embeddings -H 'content-type: application/json' \
-d '{"input": ["How do I reset my password?", "I forgot my login password."], "dimensions": 256}'
响应是 OpenAI embeddings 格式。加 "options": {"return_meta": true} 还能拿到 meta.representation:标明这个向量空间的模型、层和维度。
换模型别混向量
不同模型、不同层、不同大小的向量,从来不互相比。改其中任何一样之后,向量库要重建索引,需要的记忆要重新加,语义缓存也得等着重新攒。见嵌入模型换了要重新嵌入。