使用 Pinecone 和 SelfQueryRetriever 进行电影查询

在本篇文章中,我们将深入探索如何使用 Pinecone 作为向量数据库并结合 SelfQueryRetriever 进行电影数据查询。我们将通过实例代码演示如何创建一个 Pinecone 向量存储,并在其中存储包含电影摘要的小型数据集。

技术背景介绍

Pinecone 是一个功能全面的向量数据库,非常适合需要处理矢量数据的应用场景。SelfQueryRetriever 是一个强大的工具,可以通过自然语言和元数据条件来有效地检索相关文档。

核心原理解析

为了使用 Pinecone,我们需要创建一个向量存储,并使用电影描述的嵌入作为索引。这需要我们有 Pinecone 和 OpenAI 的 API key。通过 SelfQueryRetriever,我们可以根据查询语句和文档的元数据,获取最相关的结果。

代码实现演示

下面我们提供一段完整的代码,演示如何设置 Pinecone 向量存储并使用 SelfQueryRetriever 进行查询:

# 安装库
%pip install --upgrade --quiet lark pinecone-notebooks pinecone-client==3.2.2

# 导入必要库
import os
from pinecone import Pinecone, ServerlessSpec
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from langchain_pinecone import PineconeVectorStore
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI

# 连接到 Pinecone
api_key = os.getenv("PINECONE_API_KEY") # 确保此环境变量在运行环境中设置
index_name = "langchain-self-retriever-demo"
pc = Pinecone(api_key=api_key)

# 使用 OpenAI 的嵌入技术
embeddings = OpenAIEmbeddings()

# 创建新的 Pinecone 索引
if index_name not in pc.list_indexes().names():
    pc.create_index(
        name=index_name,
        dimension=1536,
        metric="cosine",
        spec=ServerlessSpec(cloud="aws", region="us-east-1"),
    )

# 文档样本
docs = [
    Document(page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose", 
             metadata={"year": 1993, "rating": 7.7, "genre": ["action", "science fiction"]}),
    # 其他文档省略...
]

# 创建向量存储
vectorstore = PineconeVectorStore.from_documents(docs, embeddings, index_name=index_name)

# 定义元数据字段信息
metadata_field_info = [
    AttributeInfo(name="genre", description="The genre of the movie", type="string or list[string]"),
    # 其他字段省略...
]

# 使用 SelfQueryRetriever 检索
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")
print(results)  # 打印结果

应用场景分析

这种技术可以用于电影推荐系统、电影数据库查询、自然语言问答等场景,能够提升用户体验和检索效率。

实践建议

  • 确保 API key 和环境变量设置正确。
  • 根据数据量调整索引参数(如维度、度量标准)以优化性能。
  • 尝试不同的查询和过滤组合,验证检索效果。

如果遇到问题欢迎在评论区交流。

—END—

你可能感兴趣的:(windows,python)