STEP_1
相同语义的 Embedding 向量在空间中聚集成簇余弦相似度、欧氏距离、点积 — PROCESSING
similarity.log
// 余弦相似度
function cosineSimilarity(a: number[], b: number[]): number {
const dotProduct = a.reduce((sum, ai, i) => sum + ai * b[i], 0)
const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0))
const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0))
return dotProduct / (normA * normB)
}
// 欧氏距离
function euclideanDistance(a: number[], b: number[]): number {
return Math.sqrt(a.reduce((sum, ai, i) => sum + (ai - b[i]) ** 2, 0))
}
// 点积
function dotProduct(a: number[], b: number[]): number {
return a.reduce((sum, ai, i) => sum + ai * b[i], 0)
}
// 选择建议
// - 文本语义搜索:余弦相似度(方向重要,模长已归一化)
// - 图像相似搜索:欧氏距离(像素级差异)
// - 推荐系统:点积(用户向量 · 物品向量 = 偏好分数)
// 归一化向量后,余弦相似度 = 点积
// 很多数据库用归一化 + 点积来加速计算相似度度量:向量相似度是语义搜索的基础。余弦相似度(Cosine Similarity)衡量向量方向的夹角,归一化后范围 [-1, 1],适合文本 Embedding;欧氏距离(L2 Distance)衡量空间中的绝对距离;点积(Inner Product / Dot Product)兼顾方向和模长,适合推荐系统。选择哪种度量取决于 Embedding 模型的训练方式——OpenAI 的 text-embedding-3 建议用余弦相似度。
实时沙盒SANDBOX
FAULT_INJECTED
快速场景
手动调节
索引类型
选择 ANN 算法
使用选定的索引算法
向量数量
数据库中的向量总数
1000k 条
数据量适中
搜索精度 (ef)
HNSW 的 efSearch 参数
100
精度/速度平衡
显示内存占用
隐藏内存信息