十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Milvus 可视化新利器:Attu 图形化管理向量数据库实战指南

Milvus 可视化新利器:Attu 图形化管理向量数据库实战指南 平时维护 Milvus 向量数据库的时候总是离不开命令行和 Python SDK。尤其在快速查看数据分布、验证检索效果、排查索引问题时命令行操作不仅效率低而且对不熟悉 PyMilvus 的同事并不友好。直到我接触到 zilliztech/attu 这个开源可视化工具才发现原来 Milvus 也可以像用 Navicat 一样通过图形界面完成大部分日常操作。本文会围绕 Attu 做一次完整的实操讲解内容包含 Attu 是什么、环境准备、三种安装方式、连接本地 Milvus 的常见坑、界面功能拆解、从零开始的实战演示以及生产环境使用建议。如果你正在学习 Milvus或者在维护基于 Milvus 的线上检索服务这篇文章值得收藏备用。1. 背景与核心概念1.1 Attu 是什么Attu 是 zilliztech 开源的一款 Milvus 向量数据库管理工具。它的目标很直接给 Milvus 提供一个可视化的操作界面让开发者可以通过网页或桌面应用完成 Collection 管理、向量检索、索引管理、数据查询等操作而不需要每次都写代码。可以把它理解成“向量数据库中的 Navicat”或者“MongoDB Compass”。它的安装和操作方式与传统数据库客户端类似但内部面向的是 Milvus 的 API 和数据模型。由于 Milvus 是一个分布式向量数据库使用门槛比传统关系型数据库要高一些尤其是在 Schema 设计、索引选择、检索参数调优等环节缺乏可视化手段会让排错变得非常吃力。Attu 正好补上了这个短板。1.2 Attu 解决了什么问题在实际开发中使用 Milvus 经常会遇到以下痛点想确认一个 Collection 的 Schema 结构是主键、向量维度、标量字段定义都得靠代码查看。数据写入后想快速预览一部分向量和标量数据命令行操作非常繁琐。索引创建后想知道索引状态是否 ready只能查询任务状态。检索结果不符合预期时需要反复调试搜索参数和过滤条件。Attu 用图形化方式解决了这些问题。打开网页就能看到 Collection 列表、Schema 结构、数据条目、索引状态并且可以直接在界面上执行向量检索所见即所得。1.3 常见应用场景Attu 适用于以下场景本地开发调试写完 Milvus 相关代码后用 Attu 快速确认数据写入结果。线上问题排查当检索结果异常时通过 Attu 查询原始数据、检查索引配置。团队协作让非核心开发人员例如算法工程师、测试、运维不需要学习 PyMilvus 也能操作 Milvus。教学演示给新人讲解向量数据库概念时通过可视化界面比纯代码更容易理解。所以无论是 Milvus 新手还是已经有生产环境经验的开发者都能从中获得实际价值。1.4 Attu 与数据库可视化工具的关系为了更清晰地理解可以把 Attu 与传统关系型数据库客户端做对比。对比维度Attu传统数据库客户端面向对象Milvus / Zilliz CloudMySQL、PostgreSQL 等核心数据结构Collection、向量、Schema、索引表、行、字段核心操作向量检索、索引管理、分区管理SQL 查询、事务管理操作方式图形界面SQL 命令行或图形界面特有功能向量搜索、索引参数可视化复杂 SQL、存储过程调试从这个表中可以看到Attu 不是通用数据库客户端而是面向向量数据库场景的专属工具。理解这一点后面使用它的各种功能时就不会迷失方向。2. 环境准备与版本说明2.1 环境要求在开始安装和使用 Attu 之前先要确认运行环境。Attu 本身是一个前后端分离的项目官方提供了多种安装方式整体对运行环境的要求并不高。我平时测试使用的环境是这样的操作系统macOS 13、Ubuntu 20.04、Windows 10浏览器Chrome、Edge、FirefoxMilvus 版本2.2.x、2.3.x、2.4.xAttu 版本2.3.x、2.4.x需要注意的是Milvus 和 Attu 的版本迭代都比较快不同版本组合的功能入口可能略有差异。具体使用哪个版本建议以官方 Release 页面为准。2.2 Attu 与 Milvus 版本对应关系经常有人在社区问“Attu 支持哪个 Milvus 版本”。这里先给一个大概的对应关系注意它不是绝对的需要结合实际版本验证。Attu 版本适配的 Milvus 示例版本Attu 2.3.xMilvus 2.2.x、2.3.xAttu 2.4.xMilvus 2.3.x、2.4.x由于 Milvus 2.x 系列在 API 层面保持了一定的兼容性较新版本的 Attu 通常也能连接旧版本的 Milvus。不过某些新功能在旧版本上可能不可用例如新版 Attu 新增的索引参数提示如果 Milvus 后端不支持界面可能仅展示基础参数。建议在下载 Attu 之前查看对应版本的 GitHub Release 说明确认是否有兼容性注意事项。2.3 准备一个可访问的 Milvus 实例Attu 是客户端工具使用前必须有一个可访问的 Milvus 服务实例。常见来源如下本地通过 Docker 启动的 Milvus Standalone。服务器上通过 Docker Compose 部署的 Milvus 集群。Zilliz Cloud 提供的托管 Milvus 服务。Milvus Lite适合本地快速实验。下面是一个用于测试的极简 docker-compose 示例。生产环境请参考官方完整部署文档这里只做演示。# 文件路径docker-compose.yml version: 3.5 services: etcd: image: quay.io/coreos/etcd:v3.5.5 environment: - ETCD_AUTO_COMPACTION_MODErevision - ETCD_AUTO_COMPACTION_RETENTION1000 - ETCD_QUOTA_BACKEND_BYTES4294967296 command: etcd -advertise-client-urlshttp://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd minio: image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin command: minio server /minio_data healthcheck: test: [CMD, curl, -f, http://localhost:9000/minio/health/live] interval: 30s timeout: 20s retries: 3 standalone: image: milvusdb/milvus:v2.4.0 command: [milvus, run, standalone] ports: - 19530:19530 - 9091:9091 depends_on: - etcd - minio启动完成后可以用下面的命令检查 Milvus 是否就绪curl -X GET http://localhost:9091/healthz -v如果返回 HTTP 200说明 Milvus 服务正常启动。如果你的网络环境拉取镜像较慢可以给 Docker 配置国内镜像源但这属于 Docker 层面的话题本文先不展开。2.4 下载 Attu 的几种方式Attu 的安装方式主要有三种桌面客户端、Docker 镜像、源码运行。方式一桌面客户端在 Attu 的 GitHub Releases 页面中官方提供了 Windows、macOS、Linux 安装包。macOS下载 dmg 文件打开后拖入 Applications 目录。Windows下载 exe 文件双击安装。Linux下载 AppImage 文件赋予执行权限后运行。# Linux 下运行 AppImage chmod x Attu-*.AppImage ./Attu-*.AppImage桌面客户端适合个人开发使用启动快不占用服务器资源。缺点是每个团队成员都要各自安装升级时需要重新下载安装包。方式二Docker 运行团队使用场景下我更推荐用 Docker 运行 Attu。这样团队所有成员通过同一个地址访问升级维护都集中在服务器上。# 拉取 Attu 镜像 docker pull zilliz/attu:latest # 启动 Attu docker run -d --name attu -p 8000:3000 zilliz/attu:latest启动完成后浏览器访问http://localhost:8000Docker 方式的优点是部署简单、环境隔离、团队共享方便。如果你的机器上不止一个 Milvus 环境还可以启动多个 Attu 容器分别对应不同环境端口错开即可。方式三源码运行如果你需要研究 Attu 源码或者想给它贡献代码可以 clone 仓库后本地运行。Attu 项目包含前端和后端两部分。git clone https://github.com/zilliztech/attu.git cd attu npm install -g pnpm pnpm install pnpm dev源码运行适合有前端开发经验的开发者。如果只是为了日常管理 Milvus不建议直接源码运行Docker 方式更省心。3. Attu 连接 Milvus 的完整流程3.1 首次打开和连接配置打开 Attu 后首先看到的是连接配置页面。主要参数包括HostMilvus 服务地址本地为 127.0.0.1。PortMilvus gRPC 端口默认 19530。Username / PasswordMilvus 开启认证后填写。TLS 开关使用 TLS 加密连接时开启。本地测试环境最简单的配置如下Host: 127.0.0.1 Port: 19530 Username: 留空 Password: 留空点击 Connect 按钮后如果连接成功会直接进入主界面。如果失败界面下方会显示具体错误信息例如连接超时、端口不通等。3.2 Docker 版 Attu 连接本地 Milvus 的坑很多同学第一次使用“Docker 版 Attu 本地 Milvus”时都会遇到连接失败问题。这里我从原理上解释一下。假设我们用 Docker 启动了 Attu并通过 8000 端口访问界面然后在连接页面填写Host: 127.0.0.1 Port: 19530此时大概率会报错。原因是Docker 容器内部的 127.0.0.1 指向容器自身而不是宿主机。虽然我们把 Attu 的 3000 端口映射到了宿主机的 8000 端口但容器内部访问宿主机时不能直接使用 127.0.0.1。正确的做法是使用宿主机在 Docker 网络中的网关地址。在大多数 Linux 环境下这个地址是 172.17.0.1。在 macOS 和 Windows Docker Desktop 中还可以使用特殊域名 host.docker.internal。# macOS / Windows Docker Desktop Host: host.docker.internal Port: 19530 # Linux 下使用 docker0 网桥地址 Host: 172.17.0.1 Port: 19530另外如果本机 Milvus 没有监听 19530也会导致连接失败。先验证 Milvus 是否正常pip install pymilvus python -c from pymilvus import connections; connections.connect(host127.0.0.1, port19530); print(connected)如果上面命令输出 connected说明 Milvus 正常剩下就是调整 Attu 的 Host 配置。3.3 连接 Zilliz Cloud 托管实例如果使用 Zilliz Cloud 托管服务连接信息在云控制台可以查到一般包括 Public Endpoint、端口、用户名和 Token。在 Attu 中填写时需要把 Endpoint 中的 https:// 去掉并使用对应端口连接。如果开启了 TLS需要在连接配置中打开 TLS 开关。云数据库的连接凭据是敏感信息不应该在团队聊天工具里明文粘贴。建议使用内部密码管理工具统一维护。4. Attu 界面与核心功能拆解4.1 主界面总览Attu 的主界面由几个核心区域组成左侧导航包含 Collections、Search、Query、Users 等功能入口。中间内容区展示集合列表、Schema 详情、数据预览等。顶部筛选可以切换当前可见的集合。整体布局和常见数据库管理工具类似熟悉 Navicat 或 MongoDB Compass 的同学上手会很快。4.2 Collection 管理Collection 可以理解为向量数据库中的“表”。在左侧导航点击 Collections即可看到当前 Milvus 实例中的所有集合列表。点击集合名称后可以查看 Schema 详情包括主键字段例如 id。向量字段例如 vector以及维度。标量字段例如 title、tag。分区名称和数量。理解 Schema 结构非常重要因为向量检索的效果主要取决于字段设计和索引配置。4.3 向量检索与搜索参数Attu 的 Search 功能封装了 Milvus 的向量检索接口。在 Collection 详情页点击 Search 标签可以进入搜索页面。需要配置的内容包括向量值手工输入查询向量或从已有数据中选择一条。搜索参数Top K、Metric Type、Index Params。过滤条件对标量字段进行过滤。输出字段选择返回哪些字段。下面是一个实际场景。假设我们有一个图书推荐系统向量字段存储的是图书文本的 Embedding。我们想找与“Python 编程”语义最接近的 5 本书输入对应的向量后设置 Top K 为 5点击 Search。结果会按向量距离从小到大展示同时显示对应的标量字段例如书名、分类。通过这个页面可以非常直观地判断当前索引和 Embedding 模型是否符合预期。4.4 数据查询与预览Query 模块支持通过 JSON 格式的表达式过滤数据。例如{ title: { like: Python% } }这个表达式表示查询 title 字段以 Python 开头的所有记录。Query 模块适合在写业务代码前验证数据分布比如确认某个分区下的数据量是否正常。4.5 索引管理索引是向量数据库性能的核心。Attu 的 Index 页面可以直接创建或删除索引。常见索引类型包括FLAT暴力检索结果最精确适合小数据量验证。IVF_FLAT / IVF_SQ8 / IVF_PQ倒排索引适合中等数据量。HNSW基于图的索引检索性能和召回率均衡适合较大规模数据。DISKANN磁盘索引适合极大规模向量。不同索引类型需要配置的参数也不同。以 HNSW 为例需要设置 M 和 efConstruction。M 控制每个节点的最大连接数efConstruction 控制建图阶段的搜索范围。检索时还需要设置 ef 参数控制检索深度。提示一点索引构建会消耗 CPU 和内存资源生产环境创建索引时尽量避开业务高峰期。5. 从零开始的完整实战演示5.1 准备测试数据和 Python 脚本虽然 Attu 可以完成集合管理但演示前最好准备一批测试数据。我们先通过 Python 脚本写入数据后续在 Attu 中会看到真实效果。创建项目目录mkdir attu-demo cd attu-demo创建虚拟环境并安装依赖python3 -m venv venv source venv/bin/activate pip install pymilvus编写数据写入脚本# 文件路径attu-demo/write_data.py from pymilvus import ( connections, FieldSchema, CollectionSchema, DataType, Collection, ) connections.connect(host127.0.0.1, port19530) fields [ FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue, auto_idFalse), FieldSchema(nametitle, dtypeDataType.VARCHAR, max_length200), FieldSchema(nametag, dtypeDataType.VARCHAR, max_length50), FieldSchema(namevector, dtypeDataType.FLOAT_VECTOR, dim8), ] schema CollectionSchema(fieldsfields, descriptionattu demo collection) collection Collection(namebook_demo, schemaschema) import random rows [] titles [Python Programming, Java Basics, Rust in Action, Go Web Development] tags [tech, tech, tech, tech] for i in range(20): rows.append({ id: i, title: titles[i % len(titles)] str(i), tag: tags[i % len(tags)], vector: [random.random() for _ in range(8)], }) collection.insert(rows) collection.flush() print(insert done, num_entities:, collection.num_entities)这段代码会往 Milvus 中写入 20 条数据。为了演示方便向量维度设置成了 8。实际业务中一般使用 768 或 1024 维的 Embedding。5.2 在 Attu 中创建 Collection如果 Milvus 中还没有集合可以在 Attu 主界面点击 Create Collection 手工创建。对照 Python 脚本中的 Schema需要添加以下字段主键字段 id类型 Int64。标量字段 title类型 VarChar最大长度 200。标量字段 tag类型 VarChar最大长度 50。向量字段 vector类型 Float Vector维度 8。创建成功后左侧集合列表会出现 book_demo。5.3 在 Attu 中创建索引点击 book_demo 集合进入 Index 标签页点击 Create Index。选择向量字段 vector索引类型选择 HNSW参数配置为M: 8 efConstruction: 64如果集合中还没有数据部分索引类型也可以先创建但真正构建会等数据写入后触发。为了演示流程完整性可以先写数据再创建索引。5.4 在 Attu 中执行向量检索数据写入和索引创建完成后切换到 Search 标签页。在向量输入框中填入一个 8 维向量例如[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]设置输出字段为 id、title、tag点击 Search。结果中会显示按距离从小到大排序的向量数据。由于示例数据是随机生成的搜索结果并不具备语义意义但它能验证整个检索流程是否正常。5.5 带标量过滤的向量检索实际业务中的向量检索经常需要配合标量过滤。假设我们只想搜索 tag 为 tech 的记录可以把过滤条件设置为{tag: {eq: tech}}这样 Attu 在执行向量检索时会先按过滤条件缩小候选范围再计算向量距离。带过滤条件的检索可以显著减少不必要的向量计算在生产环境中很实用。6. 常见问题与排查思路6.1 高频问题汇总问题现象常见原因解决思路Attu 页面打不开Docker 端口映射错误或服务未启动检查 docker ps确认端口映射连接 Milvus 超时网络不通或防火墙拦截 19530用 telnet 检查端口连通性Docker 版 Attu 连不上本地 Milvus错误使用容器内的 127.0.0.1改用 host.docker.internal 或 172.17.0.1用户名密码认证失败账号未正确创建或启用了 TLS检查 Milvus 用户权限和 TLS 配置搜索返回结果为空Collection 无数据或过滤条件过严到 Query 模块确认数据量放宽过滤条件索引一直构建中数据量较大或资源不足查看 Milvus 日志确认索引节点状态Attu 版本与 Milvus 版本不兼容API 差异检查官方 Release 说明调整版本6.2 Docker 版 Attu 连接本地 Milvus 失败排查流程如果遇到这个问题可以按以下顺序排查确认 Milvus 端口在宿主机正常监听lsof -i :19530进入 Attu 容器测试网络连通性docker exec -it attu bash apt-get update apt-get install -y telnet telnet 172.17.0.1 19530如果 telnet 不通确认 Docker 网络模式。使用 host 网络模式可以简化访问问题docker run -d --nethost --name attu zilliz/attu:latest提示host 网络模式在 macOS 和 Windows Docker Desktop 上支持有限Linux 环境使用比较方便。6.3 连接信息填对了但依然无法连接可能原因包括Milvus 开启了 TLS但 Attu 未勾选 TLS。Milvus 服务端绑定地址不是 0.0.0.0导致外部容器无法访问。防火墙拦截了 19530 端口。逐一排查后一般都能定位。如果依然无法解决可以查看 Milvus 日志docker logs standalone --tail 2006.4 搜索结果不符合预期搜索结果有问题大概率不是 Attu 的问题而是索引和向量数据的问题。检查思路如下查询向量维度是否和 Schema 定义一致。距离度量方式是否和 Embedding 模型训练时一致常见有 L2、IP、COSINE。HNSW 的 ef 参数太小会导致召回不完整。标量过滤条件过严导致候选集太小。7. 生产环境使用建议7.1 版本管理在团队中统一 Attu 和 Milvus 的版本非常重要。可以建立一张版本对应表记录生产环境当前使用的 Milvus 版本和 Attu 版本。升级建议先升级 Attu验证新版本连接旧版 Milvus 正常再升级 Milvus。这样可以缩小问题排查范围。7.2 连接信息安全如果 Milvus 开启了用户名密码认证连接信息不要写在公开文档里。推荐使用内部密码管理服务。Docker 版 Attu 也可以通过环境变量传入连接参数减少页面明文留存降低泄露风险。生产环境的 Attu 服务建议只监听内网地址不要直接暴露公网。如果确实需要远程访问应通过内部跳板或安全通道进入内网后再访问。7.3 数据操作规范Attu 支持删除 Collection、删除 Partition 等高风险操作。生产环境使用要格外谨慎删除 Collection 前必须确认数据已经备份。删除 Partition 前要明确影响范围。批量写操作前先在测试环境验证效果。对生产环境执行写操作前建议先保存当前 Schema 和索引配置截图。如果团队多人使用 Attu可以在服务器上部署共享实例配合网络访问控制和最小权限原则防止误操作影响生产数据。7.4 与自动化流程的配合Attu 适合作为人工管理工具但生产环境的数据写入、批量检索、定时任务不应该依赖人工点击界面。数据 pipeline 和检索服务应该通过 PyMilvus、Java SDK 等程序化方式实现。Attu 更适合执行以下工作日常巡检数据分布。排查线上检索结果异常。快速验证新索引配置。临时处理少量数据问题。这样既保留了可视化操作的便捷性又能保证生产环境流程的稳定和可重复。8. 总结与下一步学习建议本文围绕 zilliztech/attu 开源项目介绍了 Attu 的作用、安装方式、连接方法、界面功能和完整实战流程重点分析了“Attu 支持哪个 Milvus 版本”和“Docker 版 Attu 如何连接本地 Milvus”这两个高频问题。通过本文你应该已经掌握三种安装方式及适用场景。Docker 版 Attu 连接本地 Milvus 的关键配置。Collection、Index、Search 等核心功能操作。常见连接问题和搜索问题的排查方法。如果想进一步深入向量数据库领域建议接下来学习这几个方向Milvus 索引原理尤其是 HNSW 和 IVF 的适用场景。Embedding 模型选型和文本向量化实践。使用 PyMilvus 构建完整的向量检索服务。向量数据库与 LLM 应用结合的最佳实践。实际项目中优先掌握“数据建模 → 索引设计 → 检索调参”这条主线。它比单纯会点击几个按钮更能提升解决实际问题的能力。如果在使用 Attu 时遇到其他问题多翻翻官方 GitHub Issues很多问题社区已经有了成熟的解决方案。
返回列表