news 2026/5/28 17:41:49

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用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)

你会看到下面这个结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 13:46:29

GPU 和 CPU 渲染谁更顶?新手必看的选型指南

在3D渲染、影视后期、游戏开发领域&#xff0c;“GPU与CPU渲染选哪个”是高频争议题。新手纠结硬件选型&#xff0c;老手权衡效率与质量&#xff0c;实则二者无绝对优劣&#xff0c;核心是适配场景——如同搬东西&#xff0c;CPU像法拉利&#xff08;快但装载量小&#xff09;&…

作者头像 李华
网站建设 2026/5/28 16:13:11

【六杆】六杆快速回归机制运动学和动力学分析附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

作者头像 李华
网站建设 2026/5/13 1:24:36

java: 找不到符号方法 getCode()

运行Spring Boot工程代码出现以下报错&#xff1a; 位置: 类型为com.xx.xx.exception.ErrorCode的变量 errorCode解决方法看截图中间那个路径框&#xff1a; ...lombok\unknown\lombok-unknown.jar这里的 unknown 说明 IDEA 根本没找到 Lombok 的 jar 包。 接下来&#xff0c; …

作者头像 李华
网站建设 2026/5/5 10:01:35

【双指针】盛水最多的容器

求解代码 public int maxArea(int[] height) {int left 0; // 左指针int right height.length - 1; // 右指针int ans 0; // 记录最大面积&#xff0c;初始为0&#xff08;面积非负&#xff09;// 双指针相向遍历&#xff0c;直到指针相遇while (left < right) {// 计算当…

作者头像 李华
网站建设 2026/5/27 12:42:49

【数组】分糖果问题

求解代码 public int candy(int[] arr) {if (arr null || arr.length 0) {return 0;}int n arr.length;int[] candyCount new int[n]; // 定义数组记录每个孩子最终应分得的糖果数int ans 0; // 统计分发糖果的总数量// 每个孩子至少分得1颗糖果for(int i0;i<arr.lengt…

作者头像 李华
网站建设 2026/5/28 13:46:35

【计算机毕业设计案例】基于springboot的服装生产流程监控与管理系统服装制造有限公司综合管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华