Milvus Lite 怎么接入智能体?先用 Python 跑通本地向量检索

用 Milvus Lite 建本地演示集合,核对向量维度、公开范围过滤和来源编号,再把只读检索接口接到智能体。

给智能体接一个本地知识检索工具,可以先用 Milvus Lite 跑通“存向量 → 按条件检索 → 返回原文和编号”。这一步只负责取资料,生成回答仍由模型完成。本文先给出不需要 API 密钥的 Python 演示,验证数据库调用和过滤,再说明接入真实嵌入模型时要替换哪些部分。

示例中的文本和四维向量均为人工构造,不是实际嵌入模型输出,也不是语义检索效果测试。接口依据为 2026 年 10 月 1 日读取的官方项目资料;本文未在读者机器上运行 Milvus,不能据此承诺特定平台的安装或延迟表现。

Milvus Lite 怎么接入智能体?先用 Python 跑通本地向量检索

准备一个独立的本地演示环境

Milvus Lite 官方项目说明将它定位为本地开发、原型和小规模应用。当前项目要求 Python 3.10 或更新版本;macOS、Linux、Windows 的可安装性还取决于 faiss-cpu、pyarrow 等依赖是否有兼容包。不要把旧文章中的平台限制直接套到当前版本。

下面的示例固定使用 pymilvus 3.0.2、milvus-lite 3.2.1。演示代码在 Windows、Python 3.11.15 的独立环境验证了创建、关闭后重开和检索;这只验证小规模接口,不代表语义效果或性能测评。Windows 请使用仅含 ASCII 字符的目录路径,避免当前依赖写索引时遇到中文路径问题。Windows 激活命令与 Linux/macOS 不同,选适合自己系统的一条执行:

python -m venv .venv
# Windows PowerShell:.\.venv\Scripts\Activate.ps1
# Linux/macOS:source .venv/bin/activate
python -m pip install "pymilvus[milvus-lite]==3.0.2" "milvus-lite==3.2.1"
python -m pip show pymilvus milvus-lite

保存两项包版本及 Python 版本,后续排错时一并提供。官方说明提醒,新版纯 Python 存储引擎与原版 Milvus Lite 的数据库格式不兼容;旧数据库应在可打开它的环境中导出后重新导入。下面使用新建的 demo-agent.db,不连接已有业务库。

创建集合、插入片段并执行一次查询

把下面内容保存为 demo.py,再运行 python demo.py。代码只在集合不存在时插入初始数据,重复执行不会重新插入相同 ID。

import os
from pathlib import Path
from pymilvus import MilvusClient

db_path = Path("./demo-agent.db").resolve()
if os.name == "nt" and not str(db_path).isascii():
    raise ValueError("请在仅含 ASCII 字符的目录运行本演示")
client = MilvusClient(str(db_path))
name = "agent_demo_docs"

if not client.has_collection(collection_name=name):
    client.create_collection(
        collection_name=name, dimension=4, metric_type="COSINE"
    )
    client.insert(collection_name=name, data=[
        {"id": 1, "vector": [1.0, 0.0, 0.0, 0.0],
         "text": "示例手册:设备 A 保修期为 12 个月。", "scope": "public"},
        {"id": 2, "vector": [0.8, 0.2, 0.0, 0.0],
         "text": "示例手册:设备 A 的包装内有一条充电线。", "scope": "public"},
        {"id": 3, "vector": [1.0, 0.0, 0.0, 0.0],
         "text": "内部演示片段,不应出现在公开检索中。", "scope": "internal"},
    ])

client.load_collection(collection_name=name)

def retrieve_demo_snippets(query_vector):
    """返回公开演示资料;输入为同一向量空间中的四维查询向量。"""
    if len(query_vector) != 4:
        raise ValueError("演示集合只接受四维向量")
    batches = client.search(
        collection_name=name,
        data=[query_vector],
        filter='scope == "public"',
        limit=2,
        output_fields=["text", "scope"],
    )
    return [
        {"source_id": hit["id"], "text": hit["entity"]["text"],
         "scope": hit["entity"]["scope"], "score": hit["distance"]}
        for hit in batches[0]
    ]

snippets = retrieve_demo_snippets([1.0, 0.0, 0.0, 0.0])
print(snippets)
assert snippets and snippets[0]["source_id"] == 1
assert all(s["scope"] == "public" for s in snippets)
assert all(s["source_id"] != 3 for s in snippets)
client.close()

官方 MilvusClient 实现可核对 create_collection 的 dimension、metric_type,以及 search 的 filter、limit、output_fields 参数。这里显式选择 COSINE;返回键虽然叫 distance,不能只凭键名判断越小越好,必须结合所选度量解释。

怎样判断这一步跑通了

输出应包含原文、source_id 和 scope;在这组人工向量中,ID 1 与查询方向完全相同,ID 2 与其相近,ID 3 被公开范围条件排除。三个断言分别检查结果存在、来源排序和过滤。若断言失败,先检查是否复用了此前改动过的演示库、集合度量及输入数据,不能继续把错误结果交给回答模型。

重开本地库后,已有集合可能处于 released 状态,所以代码在创建条件之外显式调用 load_collection;每次执行先加载再检索。如果遇到“call load() before search/get/query”,先核对这一步,不重新插入同一份数据。

本演示证明的是接口数据流和限定范围的检索调用,不能证明它理解“保修多久”。把“设备 A 保修多久”输入 Python 函数也不会自动变成向量,必须加入嵌入步骤。

接入真实智能体时,保留接口,替换人工向量

  1. 选择一个可用的文本嵌入模型,用它为全部片段生成文档向量。记录模型名、输出维度及分段版本;新集合的 dimension 与输出长度一致。
  2. 检索工具接收自然语言 query,在应用内部生成查询向量,然后调用 search。不要让回答模型凭空填写向量数值,也不要混用另一模型生成的查询向量。
  3. 工具返回片段文本、来源 ID 和必要版本信息。回答提示词要求据这些片段作答,引用 source_id;没有足够依据时说明无法确认。
  4. 访问范围由经过认证的应用上下文决定。演示固定 public 只用于公开资料,不能让模型或用户自由修改过滤表达式来扩大权限。

先用一组已知答案的问题检查是否命中正确原文,再测没有依据的问题;数据库返回 top-k 只说明拿到了候选,不能证明答案有依据。调用日志需能对应 query、返回 source_id 和最终引用,才能分清检索失败与生成失败。

常见失败与部署边界

  • 安装依赖失败:核对 Python、系统架构和依赖包是否提供兼容 wheel;先在新环境安装,提供完整错误,不靠反复升级旧环境碰运气。
  • Windows 报 FAISS could not open … for writing:本地验证在含中文路径加载索引时遇到该错误,改用 ASCII 路径后通过。先检查完整数据库路径、目录权限和索引目录是否存在;不要把“路径无法写入”误当作集合数据丢失,也不要为排错删除原业务库。
  • 向量维度不一致:检查集合 dimension、文档向量和查询向量三者;改模型或维度时建立新集合并重新嵌入,不截断旧向量后混存。
  • 旧数据库打不开:先确认文件由哪代引擎生成,保留原文件,在对应旧环境导出;不要把格式不兼容误判为需要删除原始资料。
  • 多人并发写入:官方说明当前 Lite 单个 data_dir 由单进程占用,同集合写入应串行;它也没有完整认证、RBAC 或 TLS。需要网络服务、多租户和生产运维时,应评估 Standalone、Distributed 或托管服务。

这次可以先完成一个具体动作:在新目录运行演示,保存包版本、三个断言和返回原文。通过后才接入真实嵌入模型和回答模型,避免把安装、向量生成、检索和回答四类问题混在一起排查。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30264.html

赞 (0)
AI小管家的头像AI小管家
AI 数据实验怎么记录运行环境?保存依赖版本、输入文件和脚本哈希
上一篇 1天前
AI 训练文本怎么提取结构字段?用正则保留原文和解析失败原因
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部