实用指南:零基础学AI大模型之Milvus DML实战

news/2026/1/18 9:15:06/文章来源:https://www.cnblogs.com/yangykaifa/p/19497799
大家好,我是工藤学编程 一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型零基础学AI大模型之Milvus索引实战

前情摘要

1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的“幻觉”
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战

零基础学AI大模型之Milvus DML实战

一、DML核心概念:Milvus数据操作的基础认知

1. 什么是Milvus的DML操作?

DML(Data Manipulation Language)即数据操纵语言,在Milvus中核心包括数据插入(Insert)、删除(Delete)、更新(Update) 三类操作,是与数据直接交互的核心手段。

2. 关键前置概念

二、实战准备:环境搭建与连接验证

1. 环境要求

2. 环境搭建与连接

# 安装PyMilvus(若未安装)
pip install pymilvus==2.5.5
# Python连接Milvus服务(核心代码,后续操作均基于此连接)
from pymilvus import MilvusClient, DataType
# 实例化客户端,连接远程Milvus服务(替换为你的服务地址)
client = MilvusClient(uri="http://192.168.229.128:19530")
# 验证连接(列出所有数据库,无报错则连接成功)
databases = client.list_databases()
print("当前Milvus数据库列表:", databases)  # 输出:['default', ...]

三、DML全流程实战(Python+Attu双视角)

1. 前置步骤:创建集合(数据存储载体)

集合是DML操作的基础,需先定义Schema(字段结构)和索引,再创建集合。

Python实战代码
# 步骤1:定义Schema(字段结构)
schema = client.create_schema(
auto_id=False,  # 关闭自动主键,手动指定ID(也可设为True自动生成)
enable_dynamic_field=True  # 开启动态字段,支持灵活扩展
)
# 添加字段(主键字段+向量字段,动态字段无需预定义)
schema.add_field(
field_name="id",
datatype=DataType.INT64,
is_primary=True  # 主键字段(必须唯一,不可为向量类型)
)
schema.add_field(
field_name="vector",
datatype=DataType.FLOAT_VECTOR,
dim=128  # 向量维度(需与实际插入数据一致,如768维BERT向量)
)
# 验证Schema合法性(避免字段定义错误)
schema.verify()
# 步骤2:定义索引参数(向量字段需创建索引,否则查询低效)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="vector",  # 索引字段(向量字段)
index_type="IVF_FLAT",  # 索引类型(中大数据量首选,性价比高)
metric_type="L2",  # 距离度量方式(欧氏距离)
params={"nlist": 1024}  # 索引参数(聚类中心数,建议sqrt(数据量))
)
# 步骤3:创建集合(集合名自定义,需唯一)
client.create_collection(
collection_name="dml_demo_collection",  # 集合名
schema=schema,  # 字段结构
index_params=index_params  # 索引配置
)
print("集合创建成功!")
Attu可视化验证
  1. 启动Attu,连接Milvus服务;
  2. 在左侧导航栏找到“Collections”,即可看到新建的dml_demo_collection集合,状态为“Unloaded”(未加载)。
    在这里插入图片描述

2. 核心操作1:插入数据(Insert)

支持单条插入批量插入,批量插入更高效(推荐大数据量场景使用)。

(1)Python实战:单条/批量插入
# 场景1:单条数据插入
single_data = {
"id": 1,
"vector": [0.1]*128,  # 128维向量(简化为全0.1,实际需替换为真实向量)
"text": "这是第一条测试数据",  # 动态字段(未预定义,直接插入)
"category": "test"  # 动态字段(灵活扩展)
}
# 单条插入
single_insert_result = client.insert(
collection_name="dml_demo_collection",
data=single_data
)
print("单条插入成功,主键ID:", single_insert_result["ids"])  # 输出:[1]
# 场景2:批量数据插入(推荐,效率更高)
batch_data = [
{"id": 2, "vector": [0.2]*128, "text": "批量插入-测试数据2", "category": "test"},
{"id": 3, "vector": [0.3]*128, "text": "批量插入-测试数据3", "category": "formal"},
{"id": 4, "vector": [0.4]*128, "text": "批量插入-测试数据4", "category": "formal"}
]
# 批量插入
batch_insert_result = client.insert(
collection_name="dml_demo_collection",
data=batch_data
)
print("批量插入成功,主键ID列表:", batch_insert_result["ids"])  # 输出:[2,3,4]
(2)批量插入最佳实践
  • 批次大小:每批插入10万~100万条数据(平衡效率与内存占用);
  • 数据格式:确保向量维度与Schema中dim一致,主键唯一;
  • 动态字段:无需预定义,直接随数据插入,适用于非固定字段场景(如日志、多维度标签)。
(3)Attu可视化验证插入结果
  1. 选中dml_demo_collection集合,点击“Load”(加载到内存);
  2. 点击“Browse Data”,即可看到所有插入的数据(包括预定义字段和动态字段)。
    在这里插入图片描述

3. 核心操作2:删除数据(Delete)

支持按主键删除按条件删除两种方式,删除后数据不可恢复,需谨慎操作。

Python实战代码
# 场景1:按主键删除(精准删除,推荐优先使用)
delete_ids = [1, 2]  # 要删除的主键ID列表
client.delete(
collection_name="dml_demo_collection",
ids=delete_ids
)
print(f"主键ID为{delete_ids}的数据已删除")
# 场景2:按条件删除(灵活筛选,支持标量字段/动态字段过滤)
# 示例:删除category为"formal"且text包含"测试"的数据
client.delete(
collection_name="dml_demo_collection",
filter='category == "formal" and text like "%测试%"'  # 过滤条件(类似SQL语法)
)
print('category为"formal"且text包含"测试"的数据已删除')
关键说明
  • 条件语法:支持==!=><likein等运算符,仅支持标量字段(含动态标量字段)过滤;
  • 向量字段:不支持直接作为过滤条件删除;
  • 可视化验证:Attu中“Browse Data”刷新后,可看到删除后的数据残留(仅剩余未被删除的记录)。
    在这里插入图片描述

4. 核心操作3:更新数据(Update)

Milvus不支持直接更新数据(无update方法),需通过“删除旧数据+插入新数据”的组合方式实现更新。

Python实战代码
# 需求:更新主键ID=3的数据(vector和text字段)
old_id = 3  # 要更新的旧数据主键ID
# 步骤1:删除旧数据
client.delete(
collection_name="dml_demo_collection",
ids=[old_id]
)
print(f"主键ID={old_id}的旧数据已删除")
# 步骤2:插入新数据(复用旧主键ID,实现“更新”效果)
updated_data = {
"id": old_id,  # 保持主键ID不变
"vector": [0.35]*128,  # 新的向量值
"text": "更新后的测试数据3",  # 新的文本内容
"category": "formal",  # 保留原有的动态字段值
"update_time": "2024-01-01"  # 新增动态字段(更新时间)
}
client.insert(
collection_name="dml_demo_collection",
data=updated_data
)
print(f"主键ID={old_id}的数据已更新完成")
更新操作注意事项
  • 主键复用:更新时需使用原主键ID,确保数据唯一性;
  • 动态字段:可新增/修改动态字段值,无需额外配置;
  • 效率考量:大数据量更新场景(如批量更新10万条),建议分批次执行“删除+插入”,避免单次操作压力过大。

5. 补充操作:加载/释放集合(关键前提)

无论是Python查询、删除,还是Attu可视化操作,都需先将集合“加载到内存”,操作完成后可释放内存(优化资源占用)。

# 加载集合到内存(查询/删除前必须执行)
client.load_collection(collection_name="dml_demo_collection")
print("集合加载成功,可执行查询/删除操作")
# 释放集合内存(操作完成后执行,节省资源)
client.release_collection(collection_name="dml_demo_collection")
print("集合已释放内存")

四、关键注意事项与避坑指南

1. 必踩坑1:未加载集合导致操作失败

2. 必踩坑2:主键冲突

  • 现象:插入数据时提示“primary key duplicate”;
  • 原因:auto_id=False时,手动指定的主键ID已存在;
  • 解决方案:开启auto_id=True自动生成主键,或插入前校验ID唯一性。

3. 必踩坑3:向量维度不匹配

4. 批量插入最佳实践

  • 批次大小:每批10万~100万条,避免单次插入过多导致超时;
  • 数据格式:动态字段仅支持标量类型(字符串、数值等),不支持嵌套结构;
  • 错误处理:插入时若部分数据失败,可通过insert_result["insert_count"]查看成功条数,失败数据需单独处理。

5. 删除操作避坑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek V4架构深度解析:梁文锋团队开辟的「存算分离」新范式

扫描下载文档详情页: https://www.didaidea.com/wenku/16353.html

2026年量子计算:算力革命与安全新范式报告

扫描下载文档详情页: https://www.didaidea.com/wenku/16352.html

互联网大厂Java求职面试实战:从微服务到AI集成的全栈技术问答

互联网大厂Java求职面试实战&#xff1a;从微服务到AI集成的全栈技术问答 场景背景 互联网大厂Java岗位面试&#xff0c;面试官严肃专业&#xff0c;求职者谢飞机幽默搞笑。技术覆盖Java SE、Spring生态、数据库ORM、微服务、云原生、安全、消息队列、缓存、日志监控、大数据与…

Fun-ASR-MLT-Nano-2512语音餐饮:点餐语音识别系统

Fun-ASR-MLT-Nano-2512语音餐饮&#xff1a;点餐语音识别系统 1. 项目背景与技术价值 随着智能餐饮系统的快速发展&#xff0c;传统人工点餐模式在高峰时段面临效率低下、出错率高等问题。将语音识别技术应用于餐饮场景&#xff0c;能够显著提升服务效率和用户体验。Fun-ASR-…

详细介绍:Apache Flink SQL 入门与常见问题解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Qwen2.5-7B-Instruct部署教程:智能数据分析流水线

Qwen2.5-7B-Instruct部署教程&#xff1a;智能数据分析流水线 1. 技术背景与目标 随着大语言模型在自然语言理解、代码生成和结构化数据处理能力的持续提升&#xff0c;将高性能模型集成到实际业务流程中已成为构建智能化系统的关键环节。Qwen2.5-7B-Instruct 作为通义千问系…

基于Java ssm家庭财务管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架SSM前端框架vueSSM框架详细介绍系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;随着家庭经济活动的复杂化&#xff0c;传统手工记账方式已难以满足现代家庭对财务管理的需求。本…

PyTorch-2.x降本增效实战:纯净系统+阿里源部署省时50%

PyTorch-2.x降本增效实战&#xff1a;纯净系统阿里源部署省时50% 1. 引言 在深度学习项目开发中&#xff0c;环境配置往往是耗时且容易出错的第一道门槛。尤其是在使用PyTorch进行模型训练与微调时&#xff0c;依赖冲突、下载缓慢、CUDA版本不匹配等问题频繁出现&#xff0c;…

基于Java springboot医院低值耗材管理系统耗材出入库(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 摘要&#xff1a;医院低值耗材管理是医疗运营的重要环节&#xff0c;传统人工管理模式存在效率低、…

零基础理解TC3xx中AUTOSAR OS的保护机制核心要点

从零搞懂TC3xx上AUTOSAR OS的保护机制&#xff1a;MPU与任务隔离如何协同守护系统安全你有没有遇到过这样的问题&#xff1f;一个看似简单的指针越界&#xff0c;却让整个ECU突然“死机”&#xff1b;某个非关键任务因为数组访问错误&#xff0c;意外改写了刹车控制模块的关键变…

YOLOv9教育科研应用:高校计算机视觉课程实验设计

YOLOv9教育科研应用&#xff1a;高校计算机视觉课程实验设计 1. 背景与教学目标 随着人工智能技术的快速发展&#xff0c;计算机视觉已成为高校人工智能、自动化、电子信息等专业的重要教学内容。目标检测作为其中的核心任务之一&#xff0c;广泛应用于智能监控、自动驾驶、工…

如何用cv_unet_image-matting实现精准人像抠图?保姆级WebUI部署教程入门必看

如何用cv_unet_image-matting实现精准人像抠图&#xff1f;保姆级WebUI部署教程入门必看 1. 引言 随着AI图像处理技术的快速发展&#xff0c;自动人像抠图已成为设计、电商、摄影等领域的刚需功能。传统手动抠图耗时耗力&#xff0c;而基于深度学习的智能抠图方案则能实现“一…

Whisper语音识别优化:减少GPU显存占用的7个技巧

Whisper语音识别优化&#xff1a;减少GPU显存占用的7个技巧 1. 背景与挑战 1.1 Whisper模型的资源消耗现状 OpenAI发布的Whisper系列模型在多语言语音识别任务中表现出色&#xff0c;尤其是large-v3版本&#xff0c;在99种语言上的自动检测与转录能力使其成为跨语言ASR系统的…

一文说清USB接口的供电与充电规范

一文讲透USB供电与充电规范&#xff1a;从500mA到240W的演进之路你有没有遇到过这样的情况&#xff1f;明明手机支持“65W超级快充”&#xff0c;插上充电器却只能以18W慢悠悠地充&#xff1b;或者用着号称“PD快充”的线缆&#xff0c;结果笔记本压根无法唤醒高电压模式。问题…

挑战与应对:大数据报表生成时效性达标测试实战指南

在数据驱动的决策时代&#xff0c;大数据报表&#xff08;Dashboard、Report&#xff09;已成为企业运营和战略制定的关键依据。报表的价值不仅在于其内容的准确性&#xff0c;更在于其‌时效性‌——能否在业务需要时准时、可靠地生成并交付。对于软件测试从业者而言&#xff…

5个开源翻译模型推荐:HY-MT1.5-1.8B镜像免配置一键部署

5个开源翻译模型推荐&#xff1a;HY-MT1.5-1.8B镜像免配置一键部署 1. 引言&#xff1a;轻量高效多语翻译的工程需求 随着全球化内容消费的增长&#xff0c;高质量、低延迟的机器翻译能力已成为智能应用的基础组件。然而&#xff0c;主流商业API在隐私、成本和定制化方面存在…

视频会议系统弱网络适应性验收框架

本文所述测试方案经阿里云会议、腾讯会议等平台实战验证&#xff0c;适用于2026年主流WebRTC架构。 ‌一、测试目标维度矩阵‌ 指标类型核心参数验收阈值传输层丢包率&#xff08;Packet Loss&#xff09;≤15%仍可保持通话实时性端到端延迟&#xff08;E2E Latency&#xff…

python基于Vue3的足球迷球圈网站内容文章更新系统的设计与实现

目录摘要关键词开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着互联网技术的快速发展&#xff0c;足球迷对实时资讯和互动交流的需求日益增长。传统的足球资讯平台多以静态内容为主…

Supertonic大模型镜像深度解析|极速本地化TTS技术落地指南

Supertonic大模型镜像深度解析&#xff5c;极速本地化TTS技术落地指南 1. 引言&#xff1a;设备端TTS的演进与Supertonic的定位 近年来&#xff0c;文本转语音&#xff08;Text-to-Speech, TTS&#xff09;技术在AI领域取得了显著进展。从早期基于规则的拼接式合成&#xff0…

AI智能二维码工坊教程:安全加密二维码的生成与识别

AI智能二维码工坊教程&#xff1a;安全加密二维码的生成与识别 1. 引言 1.1 学习目标 本文将带你全面掌握如何使用“AI 智能二维码工坊”这一轻量级、高性能的二维码处理工具&#xff0c;完成从安全加密内容生成二维码到高精度图像识别解码的完整流程。学习完成后&#xff0…