aardio 文档

aardio 范例: 嵌入模型/文本向量化

//嵌入模型/文本向量化
import console;
console.showLoading("正在创建向量...");

// 1. 创建客户端
import web.rest.embeddings;
var embeddings = web.rest.embeddings(
    key = "密钥";
    url = "https://api.siliconflow.cn/v1/",//接口地址, "/v1" 后缀不能省略
    model = "BAAI/bge-large-zh-v1.5" //嵌入模型 ID,llama.cpp 运行的模型不用指定这个参数
    //dimensions = 1024;
    //format = "float"
);

// 2. 为第一段文本创建向量
var data, err = embeddings.create("今天天气真不错");
if(!#data) { //null 或空数组都会返回 0
    return console.errorPause(err||data); 
}

var vector1 = data[1].embedding;// 提取向量

// 3. 为第二段文本创建向量(用于比较)
var data2, err =  embeddings.create("今天天气真不好");
if(!#data2) {
    return console.errorPause(err||data2); 
}

var vector2 = data2[1].embedding;// 提取向量

// 4. 计算余弦相似度
var cos = function(vecA, vecB) {
    if ((#vecA != #vecB) || (#vecA == 0)) {
        return 0; // 维度不同或为空则无法比较
    }

    var dotProduct = 0;
    var normA = 0;
    var normB = 0;

    for (i = 1; #vecA) {
        var valA = vecA[i];
        var valB = vecB[i];
        dotProduct = dotProduct + (valA * valB);
        normA = normA + (valA * valA);
        normB = normB + (valB * valB);
    }

    if (normA == 0 || normB == 0) {
        return 0; // 避免除以零
    }

    return dotProduct / (math.sqrt(normA) * math.sqrt(normB));
}

// 5. 比较相似度
var similarity = cos(vector1, vector2);

if (similarity > 0.8) {
    console.log("结论: 两段文本语义非常相近。", similarity);
} else {
    console.log("结论: 两段文本语义不相近。", similarity);
}

console.pause();
Markdown 格式