连接 Milvus
Milvus 是用于大容量向量搜索的外部向量数据库。适用于组织已在运营 Milvus,或搜索数据非常多、需要用单独集群管理的情况。
即使使用 Milvus,原始文件和文档文本仍保留在 SpaceBuilder 中。Milvus 中只存储搜索所需的向量和最少量的信息。
开始之前
- 所需权限:Workspace 管理员,以及管理 Milvus 集合的权限
- SpaceBuilder 服务器必须能够访问 Milvus 端点。
- 确认要使用的嵌入模型的输出维度。
安装 Milvus
SpaceBuilder 使用 Milvus 2.4 及以上版本的 REST API(v2,默认端口 19530)。所有请求都发送到 /v2/vectordb/... 路径,因此在 Milvus 2.3 及以下版本中无法运行。需要一个 SpaceBuilder 服务器能够通过此端口访问的 Milvus。如果已有正在运行的 Milvus,请跳过本节,直接前往预先创建集合。
Milvus 有两种部署方式:面向单台服务器的 Standalone 和面向大规模集群的 Distributed。连接 SpaceBuilder 时,Standalone 已经足够。
准备
| 项目 | 内容 |
|---|---|
| 服务器 | Linux 服务器上必须已安装 Docker。Milvus 比 Qdrant 更重,建议与 SpaceBuilder 放在不同的服务器上。 |
| 内存 | 最少 8GB。向量超过 100 万个时,建议 16GB 以上。 |
| 磁盘 | 数据和日志会一起存储,请预留充足的空间。建议使用 SSD。 |
| 端口 | 19530(API)。SpaceBuilder 只使用此端口。9091 用于状态检查和管理页面。 |
运行
使用 Milvus 提供的安装脚本,可以用一个包含所需组件的容器来运行。
mkdir -p ~/milvus && cd ~/milvus
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh
bash standalone_embed.sh start
- 数据保存在运行脚本的文件夹下的
volumes/milvus中。删除此文件夹,数据将会丢失。 - 停止或重新启动时,在同一文件夹中执行
bash standalone_embed.sh stop/bash standalone_embed.sh start。 - 更改配置时,修改在同一文件夹中生成的
user.yaml,然后重新启动。
启用认证
如果与 SpaceBuilder 运行在不同的服务器上,或处于多人可以访问的网络中,请启用认证。在 user.yaml 中添加以下内容并重新启动。
common:
security:
authorizationEnabled: true
启用认证后,可以使用默认账户 root / 密码 Milvus 登录。请务必更改默认密码,并建议另外创建 SpaceBuilder 专用账户。在 SpaceBuilder 的连接设置中,可以输入 API 密钥(令牌,用户名:密码 格式)或用户名和密码。两者都输入时,使用 API 密钥。
验证安装
curl http://localhost:9091/healthz
如果返回 OK,则表示正常。在浏览器中打开 http://<Milvus 服务器地址>:9091/webui/,可以看到用于查看集合和状态的管理页面(Milvus 2.5 及以上版本)。
运维提示
- 防火墙:请限制为只有 SpaceBuilder 服务器可以访问
19530端口。请勿将9091开放到外部。 - 备份:向量是可以从原始文件重新生成的派生数据。即使没有单独备份,也可以通过 SpaceBuilder 的
同步已有嵌入重新填充向量数据库。 - 更新:升级 Milvus 版本时,请遵循 Milvus 官方升级指南。次版本不同时,可能需要进行数据迁移。
预先创建集合
与 Qdrant 不同,Milvus 集合不会自动创建。 在保存连接设置之前,必须先按以下结构创建集合。
| 字段 | 类型 | 说明 |
|---|---|---|
id | VARCHAR(64),主键 | 向量 ID |
instance_namespace | VARCHAR(64) | 实例隔离键。每个实例(单独安装并运行的一个 SpaceBuilder)的值各不相同。 |
generation_id | VARCHAR(64) | 索引世代 |
chunk_id | INT64 | 文档片段编号 |
space_flag | VARCHAR(16) | 团队空间(team)或个人空间(client) |
owner_id | VARCHAR(64) | 所有者 |
source_path | VARCHAR | 原始文件路径 |
text | VARCHAR | 在搜索结果中显示的文档片段 |
vector | FLOAT_VECTOR | 嵌入向量。维度必须与嵌入模型一致。 |
vector字段的维度(dim)必须与 SpaceBuilder 中设置的向量维度相同。(bge-m3为1024)vector字段的索引距离计算方式(metric)必须为COSINE。- SpaceBuilder 会将
text截断为 4,096 个字符后存储。在 UTF-8 中,韩文每个字符占 3 字节,表情符号占 4 字节,因此将max_length设为16384(4,096 字符 × 4 字节)以上,任何文档片段都不会触及长度限制。 source_path的文件路径可能较长且可能混有韩文,请预留充足的长度,设为4096左右。
以下是使用 Milvus REST API(v2)创建集合的命令。请根据环境修改 <Milvus 服务器地址>、认证信息、集合名称和 dim 值。
Authorization中填写<用户名>:<密码>,或在该位置填写 API 密钥(令牌)。- 如果未启用认证,请删除
Authorization这一行。
curl -X POST "http://<Milvus 服务器地址>:19530/v2/vectordb/collections/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <用户名>:<密码>" \
-d '{
"collectionName": "setfn_knowledge_example",
"schema": {
"autoId": false,
"enableDynamicField": false,
"fields": [
{ "fieldName": "id", "dataType": "VarChar", "isPrimary": true, "elementTypeParams": { "max_length": 64 } },
{ "fieldName": "instance_namespace", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
{ "fieldName": "generation_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
{ "fieldName": "chunk_id", "dataType": "Int64" },
{ "fieldName": "space_flag", "dataType": "VarChar", "elementTypeParams": { "max_length": 16 } },
{ "fieldName": "owner_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
{ "fieldName": "source_path", "dataType": "VarChar", "elementTypeParams": { "max_length": 4096 } },
{ "fieldName": "text", "dataType": "VarChar", "elementTypeParams": { "max_length": 16384 } },
{ "fieldName": "vector", "dataType": "FloatVector", "elementTypeParams": { "dim": 1024 } }
]
},
"indexParams": [
{ "fieldName": "vector", "indexName": "vector", "metricType": "COSINE", "params": { "index_type": "AUTOINDEX" } }
]
}'
如果返回包含 "code":0 的响应,则表示集合已创建。
连接设置
在知识存储页面的 向量数据库设置 中按如下方式输入并保存。
| 项目 | 输入值 | 说明 |
|---|---|---|
| 驱动程序 | Milvus | 使用外部 Milvus 服务器。 |
| 端点 | http://<Milvus 服务器地址>:19530 | 省略 http:// 时会自动补上。留空时使用 http://localhost:19530。 |
| 集合 | 预先创建的集合名称 | 建议每个实例使用不同的名称。页面上会显示此实例的建议名称(setfn_knowledge_...)。 |
| API 密钥 | Milvus 令牌 | 仅在使用令牌连接启用了认证的 Milvus 时输入。已保存的值以掩码显示,不更改则保持原样。清空后保存即删除。 |
| 用户名 / 密码 | Milvus 账户 | 使用账户认证时输入。密码仅在需要更改时输入,留空则保持已保存的值。 |
| 向量维度 | 与集合的 dim 相同的值 | 如果不同,虽然可以连接,但索引会在存储阶段失败。 |
Milvus 属于服务型存储,因此不会显示 数据路径 输入框。保存后,索引调度器会检查新设置,并在需要时自动开始对全部原始文件重新索引。
验证连接
在 向量数据库概览 中查看状态。
| 项目 | 正常时 |
|---|---|
| 连接状态 | 已连接 |
| 集合配置 | 正常(与当前设置兼容) |
| 已存储的向量数 | 随着索引的进行而增加。只统计此实例存储的向量。 |
| 集合数 | Milvus 服务器上的全部集合数。 |
状态不正常时,请检查以下内容。
| 显示 | 原因与处理 |
|---|---|
未找到集合 · 请先在 Milvus 中创建 | 尚未创建集合,或名称不一致。请按上述结构创建集合,或核对名称。 |
集合配置需要检查 + collection dimension is ..., expected ... | 集合维度与设置的向量维度不同。请创建维度一致的新集合并指定。 |
集合配置需要检查 + collection metric must be COSINE | vector 索引的 metric 不是 COSINE。请将索引重新创建为 COSINE。 |