实现 Excel 文件导入到向量数据库(Milvus),并支持 先查询知识库(Milvus ...

打印 上一主题 下一主题

主题 1725|帖子 1725|积分 5175

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为了实现 Excel 文件导入到向量数据库(Milvus),并支持 先查询知识库(Milvus),然后再查询大模型(Ollama) 的功能,以下是具体的实现步调:
1. 导入 Excel 数据到向量数据库(Milvus)

首先,您必要将 Excel 文件中的数据向量化,并将这些向量导入到 Milvus 数据库中。可以使用 pandas 读取 Excel 文件,使用 sentence-transformers 将数据转为向量,再将这些向量存入 Milvus。
安装必要依靠:

  1. pip install pandas openpyxl sentence-transformers pymilvus
复制代码
代码示例:

  1. import pandas as pd
  2. from sentence_transformers import SentenceTransformer
  3. from pymilvus import connections, CollectionSchema, FieldSchema, DataType, Collection
  4. # 连接 Milvus
  5. connections.connect(host="localhost", port="19530")
  6. # 定义 Milvus 中的 Collection Schema
  7. fields = [
  8.     FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
  9.     FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=500),
  10.     FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768)  # 根据模型的输出维度调整
  11. ]
  12. schema = CollectionSchema(fields, "Excel Data Collection")
  13. # 创建 Collection
  14. collection = Collection(name="excel_data", schema=schema)
  15. # 载入 Excel 文件并向量化
  16. def load_excel_to_milvus(excel_file):
  17.     # 读取 Excel 数据
  18.     df = pd.read_excel(excel_file)
  19.    
  20.     # 加载句子向量化模型
  21.     model = SentenceTransformer('all-MiniLM-L6-v2')  # 或根据需要选择合适的模型
  22.    
  23.     # 向量化 Excel 数据中的文本列
  24.     vectors = model.encode(df['text_column'].tolist())  # 假设有一列 'text_column'
  25.    
  26.     # 插入向量和文本到 Milvus
  27.     collection.insert([df['text_column'].tolist(), vectors])
  28.     # 创建索引
  29.     collection.create_index(field_name="vector", index_params={"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 100}})
  30.     collection.load()
  31. # 示例:导入 Excel 文件
  32. load_excel_to_milvus('data.xlsx')
复制代码
2. 通过 Milvus 查询知识库

当数据导入 Milvus 后,您可以通过向量化的方式查询知识库。在此,用户输入会被转为向量,并与 Milvus 中的向量举行匹配。
  1. def query_knowledge_base(user_query):
  2.     # 使用相同的向量化模型将用户查询向量化
  3.     model = SentenceTransformer('all-MiniLM-L6-v2')
  4.     query_vector = model.encode([user_query])
  5.     # 在 Milvus 中查询最相似的向量
  6.     search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
  7.     results = collection.search(
  8.         data=query_vector,
  9.         anns_field="vector",
  10.         param=search_params,
  11.         limit=5,
  12.         output_fields=["text"]
  13.     )
  14.    
  15.     # 返回查询到的文本结果
  16.     return [result.entity.get("text") for result in results[0]]
复制代码
3. 调用 Ollama 模型举行增强

知识库返回的结果可以作为输入通报给大模型(Ollama),以增强大模型的天生能力。这种方法叫做 知识增强推理,它先使用知识库对查询举行开端过滤,再用大模型举行推理。
  1. def call_ollama_model_with_knowledge(knowledge_context, user_query):
  2.     # 将知识库的结果作为上下文传递给 Ollama 模型
  3.     prompt = f"Here is some relevant information from the knowledge base: {knowledge_context}\nNow answer the user's question: {user_query}"
  4.    
  5.     url = "http://localhost:port/ollama_model"  # 根据您的 Ollama 服务配置调整
  6.     headers = {
  7.         "Content-Type": "application/json"
  8.     }
  9.     data = {
  10.         "prompt": prompt
  11.     }
  12.    
  13.     response = requests.post(url, json=data, headers=headers)
  14.     return response.json()
复制代码
4. 使用 FastAPI 实现完整流程

可以使用 FastAPI 来实现整个流程:Excel 文件导入 -> 知识库查询 -> Ollama 模型增强。
FastAPI 代码示例:

  1. from fastapi import FastAPI, UploadFile, File
  2. import pandas as pd
  3. app = FastAPI()
  4. # 导入Excel到 Milvus 向量数据库
  5. @app.post("/upload_excel/")
  6. async def upload_excel(file: UploadFile = File(...)):
  7.     df = pd.read_excel(file.file)
  8.     load_excel_to_milvus(df)
  9.     return {"message": "Excel file has been uploaded and processed"}
  10. # 查询知识库,然后调用 Ollama 模型
  11. @app.post("/query/")
  12. async def query_knowledge_and_model(user_input: str):
  13.     # 1. 查询 Milvus 知识库
  14.     knowledge_results = query_knowledge_base(user_input)
  15.    
  16.     # 2. 将知识库结果作为上下文传递给 Ollama 模型
  17.     knowledge_context = " ".join(knowledge_results)
  18.     ollama_response = call_ollama_model_with_knowledge(knowledge_context, user_input)
  19.    
  20.     return {"knowledge_response": knowledge_results, "ollama_response": ollama_response}
复制代码
5. 运行 FastAPI 应用

启动 FastAPI 服务器:
  1. uvicorn main:app --reload
复制代码
6. 使用 API 流程


  • 导入 Excel 文件到 Milvus
    1. curl -X POST "http://127.0.0.1:8000/upload_excel/" -F "file=@data.xlsx"
    复制代码
  • 查询知识库并调用 Ollama 模型
    1. curl -X POST "http://127.0.0.1:8000/query/" -H "Content-Type: application/json" -d '{"user_input": "关于人工智能的最新进展"}'
    复制代码
7. 总结



  • Excel 导入:通过 pandas 读取 Excel 数据,并使用 sentence-transformers 模型将文本转为向量,存入 Milvus。
  • 知识库查询:通过向量化方式在 Milvus 中举行查询,并返回最相似的结果。
  • 增强推理:使用查询到的知识库上下文作为 Ollama 模型的输入,增强大模型的答复能力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表