💻 源码
# encoding: utf-8
import sys

import faiss
import numpy as np
from sentence_transformers import SentenceTransformer

# 1. 构造样本文本(假设是中医症状)
texts = [
    "腹泻",
    "夜间盗汗",
    "手足心热",
    "腰膝酸软",
    "头晕耳鸣",
    "胃脘不适",
    "咳嗽有痰",
    "气短乏力",
    "心烦易怒",
    "失眠多梦"
]

# 2. 加载一个中文向量模型(可换为 bge 或其他模型)
model = SentenceTransformer(r'D:\bge-large-zh-v1.5')

# 3. 向量化处理 AISS 只认 numpy 数组 所以要 convert_to_numpy=True
embeddings = model.encode(texts, convert_to_numpy=True)
# print(embeddings.shape)  #(10, 1024)  一共10条症状,每个embedding后的维度是1024
# sys.exit(-1)
# 4. 构建 Faiss 索引(L2 距离)
dimension = embeddings.shape[1] #生成的向量的维度
index = faiss.IndexFlatL2(dimension)   # 也可以用 IndexFlatIP 做余弦相似度
index.add(embeddings)                  # 添加向量到索引中

# 5. 输入查询语句
query = "拉肚子"

# 6. 向量化查询文本
query_vec = model.encode([query], convert_to_numpy=True)

# 7. Faiss 查询最相近的5条
top_k = 5
#返回的是 欧式距离 和索引id
distances, indices = index.search(query_vec, top_k)

# 8. 打印结果
print("🔍 查询文本:", query)
print("\n📋 最相似的结果:")
for i, idx in enumerate(indices[0]):
    print(f"{i+1}. {texts[idx]} (欧式距离: {distances[0][i]:.4f})")