什么是嵌入向量
嵌入向量是一串描述文本含义的数字(向量)。模型读取一个短语、段落或文档,返回一个由几百到几千个数字组成的向量。
含义相近的文本会得到相近的向量,即使它们没有共同的词。“怎么退货?”和“退换货政策”会靠得很近,而“怎么还贷款?”则离得更远。相近程度用余弦相似度衡量:越接近 1,含义越接近。
向量只需存入数据库一次(pgvector、Qdrant、Milvus、Elasticsearch、Redis),之后就能在几毫秒内找到与用户查询最接近的内容。
嵌入向量的用途
语义搜索
在知识库、商品目录或文档中搜索,理解换种说法的查询和错别字。
聊天机器人的 RAG
找到合适的文档片段并交给语言模型,让它根据你的数据回答。
推荐
根据描述的含义推荐相似的商品、文章和问题,无需人工标注。
聚类与分析
按主题对评价、客服工单和申请分组,发现反复出现的问题。
分类
根据与各类示例的相近程度,判断请求的主题、情感或所属部门。
查重
找出重复的广告、问题和文档,即使措辞不同。
如何接入
- 注册并充值余额:每次嵌入请求只需不到一戈比。
- 在个人资料中创建 API 密钥。密钥只显示一次,请妥善保存。
- 在 OpenAI SDK 或任何支持 OpenAI API 的程序中填写 base URL 和密钥,把文本发送到 /v1/embeddings。
Base URL: https://sujik.ru/v1
from openai import OpenAI
client = OpenAI(base_url="https://sujik.ru/v1", api_key="sk-sujik-...")
result = client.embeddings.create(
model="text-embedding-3-small",
input=["怎么退货?", "退换货政策"],
)
print(len(result.data[0].embedding), result.usage.total_tokens){
"object": "list",
"data": [
{ "object": "embedding", "index": 0, "embedding": [0.0123, -0.0456, 0.0789, …] },
{ "object": "embedding", "index": 1, "embedding": [0.0098, -0.0411, 0.0802, …] }
],
"model": "text-embedding-3-small",
"usage": { "prompt_tokens": 14, "total_tokens": 14 }
}一次请求最多可发送 2048 段文本。dimensions 参数可在支持的模型上缩短向量,encoding_format: base64 可减小响应体积。
15 行代码实现语义搜索
先一次性获取文档向量,再用查询向量与它们比较。
import numpy as np
from openai import OpenAI
client = OpenAI(base_url="https://sujik.ru/v1", api_key="sk-sujik-...")
docs = ["退换货政策", "...", "..."]
def embed(texts):
result = client.embeddings.create(model="text-embedding-3-small", input=texts)
return np.array([item.embedding for item in result.data])
doc_vectors = embed(docs)
query = embed(["怎么退货?"])[0]
scores = doc_vectors @ query # unit vectors: dot product = cosine
best = int(scores.argmax())
print(docs[best], round(float(scores[best]), 3))建议
- 只比较同一模型的向量:不同模型的向量空间不同。
- 把长文档切成 200–800 token 的片段并略有重叠,搜索会更准确。
- 在向量旁保存原文和模型 id,更换模型时可以重新计算索引。
- 较短的向量(dimensions 256–1024)几乎不损失质量,却能节省数据库空间。
常见问题
嵌入向量怎么收费?
只按模型价格为输入 token 付费。一千条短句通常不到一卢布。如果模型返回错误,费用会退回余额。
为 OpenAI 写的代码能用吗?
能。该接口兼容 OpenAI /v1/embeddings:替换 base URL 和密钥,其余代码和官方 SDK 无需修改。
该选哪个模型?
Text Embedding 3 Small 速度快、价格低,适合大多数任务。Text Embedding 3 Large 和 Gemini Embedding 在复杂文本和多语言场景下更准确。
支持中文吗?
支持,所有模型都是多语言的:同一个索引里可以混合中文、英文和其他语言。
会消耗免费额度吗?
不会。嵌入向量从余额扣费,不占用免费生成次数和订阅额度。