GuidesRAG
用 Vercel AI SDK 生成 Embeddings
按 AI SDK Core Embeddings:用 embed / embedMany 生成向量,再用 cosineSimilarity 比较相似度。
基于 Vercel AI SDK 整理 · 官方资料 ↗
Embeddings 把文本映射到向量空间,相近含义更靠近。AI SDK 提供 embed(单条)与 embedMany(批量),并可用 cosineSimilarity 算相似度。
这是自建 RAG 索引的常见前置步骤。
嵌入单条文本
官方 embed
typescript
import { embed } from 'ai';
const { embedding } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
});embedding 是 number[]。也可从结果里读 usage.tokens 观察计费相关用量。
批量嵌入多条文本
准备 RAG 语料时通常一次嵌很多 chunk。embedMany 返回的 embeddings 顺序与输入 values 一致。
官方 embedMany
typescript
import { embedMany } from 'ai';
const { embeddings } = await embedMany({
model: 'openai/text-embedding-3-small',
values: [
'sunny day at the beach',
'rainy afternoon in the city',
'snowy night in the mountains',
],
});计算相似度
官方 cosineSimilarity
typescript
import { cosineSimilarity, embedMany } from 'ai';
const { embeddings } = await embedMany({
model: 'openai/text-embedding-3-small',
values: ['sunny day at the beach', 'rainy afternoon in the city'],
});
console.log(
`cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`,
);Provider 选项与重试
可用 providerOptions 传厂商特定参数(如 OpenAI dimensions)。embedMany 支持 maxParallelCalls;两者都支持 maxRetries、abortSignal 与自定义 headers。
降低维度示例
typescript
import { embed } from 'ai';
const { embedding } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
providerOptions: {
openai: {
dimensions: 512,
},
},
});容易踩的坑
相似度结果反直觉
确认比较的是同一模型、同一维度设置下的向量;不要混用不同 embedding 模型。
批量顺序错乱
官方保证 embeddings 与 values 同序;检查你后处理时是否重排。
请求超时
使用 abortSignal / 调高超时,或降低 maxParallelCalls 避免打满限流。
官方资料
Vercel AI SDK
Embeddings ↗