You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LangChain PGVector()添加索引并在RAG链中通过索引检索

使用LangChain的PGVector构建索引并用于RAG检索

一、前置准备

  • 安装依赖包:pip install langchain langchain-community psycopg2-binary pgvector
  • 配置PostgreSQL数据库并启用pgvector扩展(需在数据库中执行SQL:CREATE EXTENSION IF NOT EXISTS vector;)
  • 准备嵌入模型(如OpenAIEmbeddings、HuggingFaceEmbeddings等)

二、初始化PGVector实例

先创建PGVector连接实例,对应你提供的代码示例:

from langchain_community.vectorstores import PGVector
from langchain_openai import OpenAIEmbeddings

# 初始化嵌入模型,可替换为其他类型
embeddings = OpenAIEmbeddings(api_key="你的API密钥")
CONNECTION_STRING = "postgresql+psycopg2://用户名:密码@主机地址:端口/数据库名"
case_id = "你的案例集合名称"

# 建立PGVector连接
db = PGVector(embedding_function=embeddings, collection_name=case_id, connection_string=CONNECTION_STRING)

三、添加数据并构建索引

方式1:直接添加文本列表

texts = [
    "RAG是检索增强生成的缩写,用于提升大模型生成内容的准确性",
    "PGVector是PostgreSQL的向量扩展,用于存储和检索向量数据",
    "LangChain提供PGVector集成,简化向量数据库操作流程"
]

# 自动生成向量并构建索引
db.add_texts(texts)

方式2:添加带元数据的文档

from langchain_core.documents import Document

docs = [
    Document(
        page_content="RAG是检索增强生成的缩写,用于提升大模型生成内容的准确性",
        metadata={"source": "rag_guide.md", "category": "概念"}
    ),
    Document(
        page_content="PGVector是PostgreSQL的向量扩展,用于存储和检索向量数据",
        metadata={"source": "pgvector_docs.md", "category": "工具"}
    )
]

# 添加文档并生成索引
db.add_documents(docs)

四、通过索引进行检索

基础相似性检索

query = "什么是RAG?"
# 检索最相似的3条文档
retrieved_docs = db.similarity_search(query, k=3)

# 输出结果
for doc in retrieved_docs:
    print(f"内容: {doc.page_content}\n元数据: {doc.metadata}\n")

带相似度分数的检索

retrieved_docs_with_score = db.similarity_search_with_score(query, k=3)
for doc, score in retrieved_docs_with_score:
    print(f"内容: {doc.page_content}\n相似度分数: {score}\n元数据: {doc.metadata}\n")

带元数据过滤的检索

# 仅检索category为"概念"的文档
retrieved_docs_filtered = db.similarity_search(
    query,
    k=2,
    filter={"category": "概念"}
)

五、整合到RAG链中

将PGVector检索器与大模型结合构建完整RAG链:

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 定义RAG提示模板
template = """基于以下上下文信息回答用户问题:
{context}

用户问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)

# 初始化大模型
llm = ChatOpenAI(api_key="你的API密钥", model="gpt-3.5-turbo")

# 构建RAG链
rag_chain = (
    {"context": db.as_retriever(k=3), "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 执行RAG查询
response = rag_chain.invoke("RAG如何提升大模型性能?")
print(response)

内容的提问来源于stack exchange,提问作者kenny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:52:47