使用OpenAI嵌入和Pgvector在PostgreSQL上进行相似性搜索

使用OpenAI嵌入和Pgvector在PostgreSQL上进行相似性搜索

💡 原文英文,约2900词,阅读约需11分钟。
📝

内容提要

嵌入是数据的数值表示,用于捕捉语义或上下文关系。预训练的AI模型如BGE、Sentence Transformers、CLIP和Wav2Vec可生成嵌入。嵌入模型有助于构建RAG应用程序,通过相似性搜索提供准确和有上下文的响应。使用OpenAI Embeddings API和PostgreSQL进行嵌入生成和相似性搜索。

🔎

延伸解读

嵌入模型选择与成本权衡

OpenAI提供text-embedding-3-large、text-embedding-3-small和text-embedding-ada-002等模型。其中text-embedding-3-small价格仅为每千token 0.00002美元,比ada-002低5倍,且性能更优。text-embedding-3-large表现最佳,但成本更高。选择时需权衡性能与预算,对于多数场景,text-embedding-3-small已足够。

维度缩短与Matryoshka表示学习

text-embedding-3系列支持通过dimensions参数缩短输出维度,且性能损失极小。这得益于Matryoshka表示学习(MRL),模型训练时从粗到细逐步学习,使子向量具有独立意义。因此,可安全地将维度缩短为2的倍数(如256),以降低内存占用。但其他模型直接截断维度会丢失语义信息。

PostgreSQL向量扩展组合的优势

pgvector为PostgreSQL提供向量存储与检索能力;pgvectorscale增加StreamingDiskANN索引和统计二值量化,优化搜索与存储;pgai将AI工作流(如嵌入生成、重排序)直接集成到数据库中。三者结合,使PostgreSQL成为高性能向量数据库。相比Pinecone的存储优化索引,该方案实现28倍更低的p95延迟和16倍更高的查询吞吐量。

RAG应用中的相似性搜索实践

在RAG系统中,文档被分块并转换为嵌入存储于向量数据库。用户查询同样被嵌入,通过相似性搜索检索相关文档,然后与原始查询结合形成增强提示,供LLM生成更准确的响应。使用OpenAI嵌入模型和pgvector,可通过SQL直接执行相似性搜索,返回语义相似的结果,即使关键词不匹配。

❓

Q&A

什么是嵌入,它有什么用?

嵌入是数据的数值表示,用于捕捉语义或上下文关系,帮助进行相似性搜索。

如何使用OpenAI的嵌入模型生成向量嵌入?

可以通过OpenAI Embeddings API调用嵌入模型生成向量嵌入,使用Python代码进行API请求。

RAG应用程序的工作原理是什么?

RAG应用程序通过检索相关文档增强LLM的生成能力,步骤包括文档摄取、查询嵌入、文档检索、输入增强和响应生成。

PostgreSQL如何与pgvector结合进行相似性搜索?

PostgreSQL结合pgvector、pgai和pgvectorscale扩展,可以高效地存储和检索向量,实现相似性搜索。

OpenAI提供了哪些嵌入模型?

OpenAI提供了text-embedding-3-large、text-embedding-3-small和text-embedding-ada-002等嵌入模型。

如何加速大数据集的相似性搜索?

可以使用StreamingDiskANN索引来加速大数据集的相似性搜索,提升查询效率。

🏷️

标签

➡️

继续阅读