[深入解析DingoDB:多模态向量数据库的强大应用]

124 阅读2分钟

引言

在当今信息爆炸的时代,数据的多样性和复杂性不断增加。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
from langchain_community.vectorstores import Dingo
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from dingodb import DingoDB

OPENAI_API_KEY = ""
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

embeddings = OpenAIEmbeddings()
index_name = "langchain_demo"
dingo_client = DingoDB(user="", password="", host=["172.30.14.221:13000"]) # 使用API代理服务提高访问稳定性

# 创建新的索引
if (
    index_name not in dingo_client.get_index()
    and index_name.upper() 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="科学家带回恐龙,混乱随之而来", metadata={"year": 1993, "rating": 7.7, "genre": '"action", "science fiction"'}),
    # 更多文档
]

vectorstore = Dingo.from_documents(docs, embeddings, index_name=index_name, client=dingo_client)

创建自查询检索器

设置检索器需要提供有关文档的元数据字段信息和简短的内容描述:

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="电影的类型", type="string or list[string]"),
    # 更多字段
]
document_content_description = "电影的简要总结"
llm = OpenAI(temperature=0)

retriever = SelfQueryRetriever.from_llm(
    llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)

测试检索器

可以使用以下代码进行测试:

retriever.invoke("有哪些关于恐龙的电影")

代码示例

完整示例

retriever = SelfQueryRetriever.from_llm(
    llm,
    vectorstore,
    document_content_description,
    metadata_field_info,
    enable_limit=True,
    verbose=True,
)

# 查询示例
result = retriever.invoke("找两部关于恐龙的电影")
print(result)

常见问题和解决方案

  • 网络限制:在某些地区,访问OpenAI API可能会受到限制。建议使用API代理服务。
  • 数据格式:确保数据格式与DingoDB所需格式一致。

总结和进一步学习资源

DingoDB作为一个强大的多模态数据库,为多种类型的数据分析和处理提供了高效的解决方案。读者可以进一步学习以下资源:

参考资料

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

---END---