随着大语言模型应用的普及,RAG(检索增强生成)已经成为搭建智能问答系统的主流方案。在技术选型上,开发者需要权衡稳定性、可控性和成本,而向量数据库的选择往往是关键一环。本文将介绍如何通过 LangChain 框架配合 pgvector 插件,利用 PostgreSQL 存储向量嵌入数据,从而快速搭建本地知识库或问答系统。

什么是 pgvector?
pgvector 是 PostgreSQL 的官方向量扩展插件,允许你在表中存储向量数据(如 vector(1536)),并通过 L2 距离、内积或余弦相似度进行向量搜索。相比 Pinecone、Weaviate 等 SaaS 向量服务,pgvector 不仅更易于部署,还能结合企业已有的 PostgreSQL 环境,提升数据安全性与可控性。
为什么用 LangChain + pgvector?
LangChain 是一个模块化的 LLM 应用框架,支持多种向量存储后端。通过其内建的 PGVector 模块,你可以轻松将 OpenAI 或 HuggingFace 生成的文本 embedding 向量写入 PostgreSQL,并进行向量检索。
相比其他方案,这种方式具有如下优势:
- 💡 无需外部 SaaS,全部数据本地存储
- 🛠 依托成熟的 PostgreSQL 数据库,便于维护与备份
- 💰 成本更低,尤其适合个人或中小企业
- 🔒 更强的数据隐私与合规性
系统准备与依赖
环境要求:
- Python 3.10+
- PostgreSQL(已安装
pgvector插件) - 安装依赖:
pip install langchain openai psycopg2-binary
数据库中需手动执行一次:
CREATE EXTENSION IF NOT EXISTS vector;
LangChain + pgvector 示例代码
1. 连接数据库
from langchain.vectorstores.pgvector import PGVector
from langchain.embeddings.openai import OpenAIEmbeddings
connection_string = "postgresql+psycopg2://user:password@localhost:5432/mydb"
vectorstore = PGVector(
collection_name="docs",
connection_string=connection_string,
embedding_function=OpenAIEmbeddings()
)
2. 写入文档与 embedding
from langchain.schema import Document
docs = [
Document(page_content="LangChain 是一个构建大模型应用的框架。"),
Document(page_content="pgvector 是 PostgreSQL 的向量插件。")
]
vectorstore.add_documents(docs)
3. 执行相似度检索
results = vectorstore.similarity_search("什么是向量数据库?", k=2)
for doc in results:
print(doc.page_content)
常见问题与排查建议
- 插件未启用:确保已在数据库中执行
CREATE EXTENSION vector; - 向量维度不匹配:需与 embedding 模型一致(如 OpenAI 为 1536 维)
- 权限或连接失败:确认 PostgreSQL 用户权限和网络连通性
- 数据表未自动创建:LangChain 会在首次写入时创建必要表结构
拓展方向
基于 pgvector + LangChain,你可以继续构建更完整的 LLM 应用,如:
- FastAPI 提供 RESTful 检索接口
- 构建 RetrievalChain 问答系统
- 使用 LangSmith 监控链路表现
- 支持向量更新 / 删除 / 持久化 ID 管理
通过 langchain pgvector 的组合,开发者可以低门槛地构建出支持上下文记忆、语义检索的本地 AI 应用,无需依赖任何第三方服务。这种方式非常适合中小团队或有数据合规要求的企业内部项目。
如果你正在构建 RAG 系统、文档问答或知识库,pgvector 是目前最稳定、最成本友好的向量数据库解决方案之一。


