LangChain + pgvector 实战:本地向量数据库的最佳实践

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

LangChain + pgvector

什么是 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 是目前最稳定、最成本友好的向量数据库解决方案之一。

Leave a Comment

Your email address will not be published. Required fields are marked *