//嵌入模型/文本向量化 import console; console.showLoading("正在创建向量..."); // 1. 创建 HTTP 客户端 import web.rest.jsonClient; var http = web.rest.jsonClient(); // 2. 设置 API Key http.setAuthToken(""); // 3. 声明 API 端点 var siliconFlowApi = http.api("https://api.siliconflow.cn/v1/"); // 4. 为第一段文本创建向量 var respData1, err = siliconFlowApi.embeddings({ model = "BAAI/bge-large-zh-v1.5"; input = "今天天气真不错"; }); // 提取向量 var vector1 = respData1[["data"]][[1]][["embedding"]]; if (!vector1) { return console.errorPause( respData1 || err ); } // 5. 为第二段文本创建向量(用于比较) var respData2, err = siliconFlowApi.embeddings({ model = "BAAI/bge-large-zh-v1.5"; input = "今天天气真不好"; }); var vector2 = respData2[["data"]][[1]][["embedding"]]; if (!vector2) { return console.errorPause( respData1 || err ); } // 6. 计算余弦相似度 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)); } // 6. 比较相似度 var similarity = cos(vector1, vector2); if (similarity > 0.8) { console.log("结论: 两段文本语义非常相近。", similarity); } else { console.log("结论: 两段文本语义不相近。", similarity); } console.pause();