我有一个json结构的标准问答对,想通过 BAAI/bge-large-zh-v1.5 将问答对转为向量存储在 milvus 中,然后 另一个系统会提问然后输出回答,这个系统的回答需要和我的
泛域名ssl证书 239元1年送1个月、单域名39元1年,Sectigo(原Comodo证书)全球可信证书,强大的兼容性,高度安全性,如有问题7天内可退、可开发票
加微信VX 18718058521 备注SSL证书
【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价
为了实现您的需求,我们需要分几个步骤来操作:
准备环境:确保安装了必要的库,如
transformers(用于加载模型),milvus(用于存储向量),以及json(用于处理JSON数据)。加载模型:使用
transformers库加载BAAI/bge-large-zh-v1.5模型,并准备将文本转换为向量。处理JSON数据:从JSON文件中读取问答对,并使用模型将每个问题转换为向量。
存储向量到Milvus:将转换后的向量存储到Milvus数据库中。
查询与匹配:当新查询到来时,将其转换为向量,然后在Milvus中搜索最相似的向量,并返回对应的答案。
以下是一个简化的代码示例,展示了如何实现上述步骤:
步骤 1: 安装必要的库
首先,确保安装了以下Python库:
pip install transformers milvus pymilvus
步骤 2-4: 加载模型、处理JSON并存储到Milvus
from transformers import AutoTokenizer, AutoModel
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
import json
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-large-zh-v1.5")
model = AutoModel.from_pretrained("BAAI/bge-large-zh-v1.5")
# 连接到Milvus
connections.connect(host='localhost', port='19530')
# 假设JSON文件结构如下:[{"question": "问题", "answer": "答案"}]
with open('qa_pairs.json', 'r', encoding='utf-8') as f:
qa_pairs = json.load(f)
# 创建Milvus集合
if not Collection.has_collection("qa_vectors"):
field_schemas = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768) # 假设向量维度为768
]
collection_schema = CollectionSchema(fields=field_schemas, description="Question Answer Vectors")
Collection.create_collection("qa_vectors", schema=collection_schema)
# 存储向量
collection = Collection("qa_vectors")
for idx, qa in enumerate(qa_pairs):
inputs = tokenizer(qa['question'], return_tensors="pt", padding=True, truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs)
vector = outputs.last_hidden_state[:, 0, :].numpy() # 取CLS token的向量
collection.insert([idx, vector.tolist()])
# 关闭Milvus连接
connections.disconnect()步骤 5: 查询与匹配
def find_answer(question):
# 连接到Milvus
connections.connect(host='localhost', port='19530')
collection = Collection("qa_vectors")
# 将新问题转换为向量
inputs = tokenizer(question, return_tensors="pt", padding=True, truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs)
query_vector = outputs.last_hidden_state[:, 0, :].numpy()
# 在Milvus中搜索最相似的向量
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search(query_vectors=[query_vector.tolist()], anns_field="vector", top_k=1, params=search_params)
# 提取答案
if results and results[0]:
answer = qa_pairs[results[0][0].id]['answer']
print(f"Answer: {answer}")
else:
print("No similar question found.")
# 关闭Milvus连接
connections.disconnect()
# 示例查询
find_answer("请问如何学习Python?")注意:
确保Milvus服务正在运行,并且您已经设置了正确的连接参数。
上述代码中的向量维度(768)和模型输出可能需要根据您实际使用的模型进行调整。
torch需要被导入,但在上面的代码示例中未显示导入语句。确保在代码顶部添加import torch。对于大型数据集,考虑使用批量处理和优化搜索参数以提高性能。



