当前位置: 首页 > news >正文

使用VLLM+Deepseek+Milvus构建本地向量库

Milvus是一个开源、专门构建的分布式向量数据库,用于为生成式人工智能(GenAI)工作负载存储、索引和搜索向量。它能够执行混合搜索、 元数据过滤、重排序并高效处理数万亿向量,这使得 Milvus 成为人工智能和机器学习工作负载的首选。Milvus可在本地、集群上运行

pip install --upgrade pymilvus openai requests tqdm

下载官方示例文档,这里可以替换为自己的word文档.

wget https://github.com/milvus-io/milvus-docs/releases/download/v2.4.6-preview/milvus_docs_2.4.x_en.zip unzip -q milvus_docs_2.4.x_en.zip -d milvus_docs

我们从milvus_docs/en/faq 文件夹中加载所有标记文件。对于每个文档,我们只需简单地使用 "#"来分隔文件中的内容,这样就能大致分隔出 markdown 文件中每个主要部分的内容。

from glob import glob text_lines = [] for file_path in glob("milvus_docs/en/faq/*.md", recursive=True): with open(file_path, "r") as file: file_text = file.read() text_lines += file_text.split("# ")

准备 LLM 和 Embeddings 模型 Ollama 支持基于 LLM 任务和嵌入生成的多种模型,这使得开发检索增强生成(RAG)应用变得非常容易。在此设置中

我们将使用Llama 3.2 (3B)作为文本生成任务的 LLM。 对于嵌入生成,我们将使用mxbai-embed-large,这是一个针对语义相似性优化的 334M 参数模型。 在开始之前,请确保这两个模型都已拉到本地:

生成一个测试嵌入并打印其维度和前几个元素。

from pymilvus import MilvusClient milvus_client = MilvusClient(uri="./milvus_demo.db") collection_name = "my_rag_collection"

插入数据 遍历文本行,创建 Embeddings,然后将数据插入 Milvus。

这里有一个新字段text ,它是 Collections Schema 中的一个非定义字段。它将自动添加到保留的 JSON 动态字段中,在高层次上可将其视为普通字段。

from tqdm import tqdm data = [] for i, line in enumerate(tqdm(text_lines, desc="Creating embeddings")): data.append({"id": i, "vector": emb_text(line), "text": line}) milvus_client.insert(collection_name=collection_name, data=data)

为查询检索数据 让我们指定一个关于 Milvus 的常见问题。

question = "How is data stored in milvus?"

search_res = milvus_client.search( collection_name=collection_name, data=[ emb_text(question) ], # Use the `emb_text` function to convert the question to an embedding vector limit=3, # Return top 3 results search_params={"metric_type": "IP", "params": {}}, # Inner product distance output_fields=["text"], # Return the text field ) import json retrieved_lines_with_distances = [ (res["entity"]["text"], res["distance"]) for res in search_res[0] ] print(json.dumps(retrieved_lines_with_distances, indent=4)) context = "\n".join( [] for line_with_distance in retrieved_lines_with_distances] ) SYSTEM_PROMPT = """ Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided. """ USER_PROMPT = f""" Use the following pieces of information enclosed in <context> tags to provide an answer to the question enclosed in <question> tags. <context> {context} </context> <question> {question} </question> """

接下来我们开始配置vllm服务,注意国内不能直接连接,需要从modelscope上面下载好,模型之后本地加载,我这里使用了deepseek-r1-qwen-7b,你可以换成其他的模型。 然后下面的代码,你把模型的路径换成你自己的模型文件路径 注意,windows不支持vllm

export VLLM_USE_MODELSCOPE=True vllm serve ~/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --enable-reasoning --reasoning-parser deepseek_r1 --dtype float16 --max-model-len 16380

下面是调用openai启动会话的程序,

from openai import OpenAI # Set OpenAI's API key and API base to use vLLM's API server. # 设置 OpenAI 的 API 密钥和 API 基础 URL 以使用 vLLM 的 API 服务器。 openai_api_key = "EMPTY" openai_api_base = "http://localhost:8000/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) chat_response = client.chat.completions.create( model="~/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": USER_PROMPT}, ] ) print("Chat response:", chat_response)

你会看到下面这个结果。

http://www.jsqmd.com/news/310138/

相关文章:

  • wqs二分
  • 【路径规划】基于快速扩展随机树RRT规划器实现机器人在在网格内找到从指定起始区域到目标区域的路径,同时避开沿途障碍物附matlab代码
  • 【图像增强】水下图像一致性增强评价系统Matlab实现
  • 【免费代码分享】10种卷积神经网络融合BiLSTM的多变量时间序列预测
  • 时序数据库 Apache IoTDB 入选国家重点研发计划高新技术成果产业化试点
  • 2026年回望:Sealos DevBox如何重新定义了云端开发的标准
  • Mac启动Redis并连接
  • 渲染慢到通宵,如何提高渲染速度? 这套技巧3 步搞定!
  • GPU 和 CPU 渲染谁更顶?新手必看的选型指南
  • 如何高效查询海量IP归属地?大数据分析中的IP查询应用
  • Github开源插件!最新豆包AI无水印图批量下载,免费无广告使用,支持高清无损图片下载 (1)
  • 私藏视频不想被看到?1招伪装教你一秒钟伪装
  • 《P2151 [SDOI2009] HH 去散步》
  • 基于Springboot学生交流培养管理平台【附源码+文档】
  • 基于Springboot流浪动物救助平台【附源码+文档】
  • 高驰运动手表二手回收价格怎么定价,上门回收
  • 主循环SYS_TICK无阻塞延迟
  • Java毕设项目:基于springboot的小区公共收益管理系统(源码+文档,讲解、调试运行,定制等)
  • 【毕业设计】基于springboot的小区公共收益管理系统(源码+文档+远程调试,全bao定制等)
  • 计算机等级考试—CMMI CL讲解KTV收银系统—东方仙盟练气期
  • 【课程设计/毕业设计】基于springboot的小区物业费公共收益管理系统【附源码、数据库、万字文档】
  • 高驰二手运动手表回收价格全解析:看懂这几点,闲置变现不亏
  • 勇闯博客世界之我的Java大冒险之善良的小动态sql
  • 成果展示
  • 2026高驰二手运动手表回收价格,支持全国上门回收
  • java: 找不到符号方法 getCode()
  • 【双指针】盛水最多的容器
  • 【双指针】接雨水
  • 告别同质化竞争,先知AI赋予男装品牌独特智慧基因
  • 【数组】分糖果问题