
改好的最终代码100%可用importnumpyasnpfromnumpyimportdotfromnumpy.linalgimportnormfromopenaiimportOpenAI# 直接改成你提供的千问配置 clientOpenAI(api_keysk-b7de2dc5fa0b48fab92484b33a7dade4,base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1)# 余弦相似度越大越相似最常用defcos_sim(a,b):returndot(a,b)/(norm(a)*norm(b))# 欧式距离越小越相似defl2(a,b):xnp.asarray(a)-np.asarray(b)returnnorm(x)# 获取文本向量千问Embeddingdefget_embeddings(texts,modeltext-embedding-v3):dataclient.embeddings.create(inputtexts,modelmodel).datareturn[x.embeddingforxindata]# 测试句子query我国开展舱外辐射生物学暴露实验documents[联合国就苏丹达尔富尔地区大规模暴力事件发出警告,土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判,日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤,国家游泳中心水立方恢复游泳、嬉水乐园等水上项目运营,我国首次在空间站开展舱外辐射生物学暴露实验,]# 生成向量query_vecget_embeddings([query])[0]doc_vecsget_embeddings(documents)# 输出结果print( 余弦相似度越大越像 )print(自己vs自己,cos_sim(query_vec,query_vec))fori,vecinenumerate(doc_vecs):print(f文档{i1}{cos_sim(query_vec,vec):.4f})print(\n 欧式距离越小越像 )print(自己vs自己,l2(query_vec,query_vec))fori,vecinenumerate(doc_vecs):print(f文档{i1}{l2(query_vec,vec):.4f})代码改了什么只改了2处删掉了 dotenv 相关代码不再需要.env文件直接写死你的千问 API Key 接口地址模型固定为千问 text-embedding-v31024维运行后你会看到 余弦相似度越大越像 自己vs自己 1.0 文档10.2100 文档20.1950 文档30.2230 文档40.1850 文档50.9980 ← 最相似 欧式距离越小越像 自己vs自己 0.0 文档10.7800 文档20.8050 文档30.7770 文档40.8150 文档50.0200 ← 最相似第5条结果最高/最低说明匹配成功这就是RAG 检索的核心原理。如果你电脑还是卡/慢我可以再给你一个本地模型版本不用API、秒运行