DingoDB 是一种分布式多模向量数据库,它结合了数据湖和向量数据库的特点,能够存储任何类型和大小的数据(如 Key-Value、PDF、音频、视频等)。它具有实时低延迟处理能力,可以快速获取洞察并响应,还能高效进行即时分析和处理多模数据。在本教程中,我们将演示如何使用 DingoDB 向量存储来创建一个自查询检索器。
DingoDB 的设计结合了数据湖的灵活性和向量数据库的高效性,旨在为现代数据强度应用提供支持。通过向量化数据,它使复杂的查询和分析变得简单高效,尤其适用于多模态数据的处理。
DingoDB 作为分布式系统,支持大规模存储和检索。其核心功能包括:
接下来,我们将使用 DingoDB 来创建一个向量存储,并在其上实现一个自查询检索器。我们首先需要一个运行中的 DingoDB 实例。
安装必要的包:
%pip install --upgrade --quiet dingodb
%pip install --upgrade --quiet git+https://[email protected]/dingodb/pydingo.git
为了使用 OpenAI 的嵌入功能,我们需要获取 OpenAI API Key,并进行如下设置:
import os
OPENAI_API_KEY = "your-api-key"
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
# 定义电影的嵌入
embeddings = OpenAIEmbeddings()
# 创建新的索引
from dingodb import DingoDB
index_name = "langchain_demo"
dingo_client = DingoDB(user="", password="", host=["172.30.14.221:13000"])
# 检查索引是否存在,如果不存在则创建
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="A bunch of scientists bring back dinosaurs and mayhem breaks loose", metadata={"year": 1993, "rating": 7.7, "genre": '"action", "science fiction"'}),
Document(page_content="Leo DiCaprio gets lost in a dream within a dream within a dream within a ...", metadata={"year": 2010, "director": "Christopher Nolan", "rating": 8.2}),
Document(page_content="A psychologist / detective gets lost in a series of dreams within dreams within dreams and Inception reused the idea", metadata={"year": 2006, "director": "Satoshi Kon", "rating": 8.6}),
Document(page_content="A bunch of normal-sized women are supremely wholesome and some men pine after them", metadata={"year": 2019, "director": "Greta Gerwig", "rating": 8.3}),
Document(page_content="Toys come alive and have a blast doing so", metadata={"year": 1995, "genre": "animated"}),
Document(page_content="Three men walk into the Zone, three men walk out of the Zone", metadata={"year": 1979, "director": "Andrei Tarkovsky", "genre": '"science fiction", "thriller"', "rating": 9.9}),
]
# 创建向量存储
vectorstore = Dingo.from_documents(docs, embeddings, index_name=index_name, client=dingo_client)
DingoDB 可用于任何需要处理多模态数据且要求实时响应和分析的场景,如推荐系统、文本检索、图像搜索、音频分析等。
在实际应用中,建议根据具体业务需求选择适合的维度和度量类型来创建索引。同时,注意保护 API Key 的安全性,避免在代码中直接暴露。
如果遇到问题欢迎在评论区交流。
—END—