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

如何在LangChain中正确配置PolarDB/MySQL作为VectorStore?

配置PolarDB/MySQL作为LangChain RAG向量存储的详细指南

1. 前置准备

  • 确保PolarDB/MySQL实例已启动,且应用服务器可通过网络访问(开放3306端口、配置安全组/防火墙规则)
  • 安装依赖包:
    pip install langchain langchain_community langchain_openai mysql-connector-python python-dotenv
    
    若使用本地嵌入模型(如HuggingFace模型),需额外安装:
    pip install transformers torch langchain_huggingface
    
  • 准备嵌入模型(如OpenAI Embeddings、HuggingFace开源模型)

2. 创建向量存储表结构

PolarDB兼容MySQL的VECTOR类型(MySQL 8.0.34+也支持),可手动创建表或让LangChain自动生成。手动创建执行以下SQL:

CREATE TABLE IF NOT EXISTS langchain_vector_store (
    id VARCHAR(36) NOT NULL PRIMARY KEY,
    embedding VECTOR(1536) NOT NULL, -- 维度需与嵌入模型输出一致,如OpenAI是1536
    document TEXT NOT NULL,
    metadata JSON,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

若使用自动创建,初始化向量存储时指定table_name即可。

3. 初始化向量存储连接

创建Python脚本,配置数据库连接与向量存储:

from dotenv import load_dotenv
import os
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import MySQL

# 加载环境变量(建议用.env文件管理敏感信息)
load_dotenv()

# 数据库连接参数
db_config = {
    "host": os.getenv("POLARDB_HOST"),
    "port": int(os.getenv("POLARDB_PORT", 3306)),
    "user": os.getenv("POLARDB_USER"),
    "password": os.getenv("POLARDB_PASSWORD"),
    "database": os.getenv("POLARDB_DB_NAME")
}

# 初始化OpenAI嵌入模型(替换为你的模型)
embeddings = OpenAIEmbeddings(api_key=os.getenv("OPENAI_API_KEY"))

# 连接PolarDB并初始化向量存储
vector_store = MySQL.from_connection_string(
    connection_string=f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}",
    embedding=embeddings,
    table_name="langchain_vector_store",
    vector_dimension=1536
)

若使用HuggingFace本地模型,替换嵌入模型初始化代码:

from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vector_store = MySQL.from_connection_string(
    # 同上连接字符串
    embedding=embeddings,
    table_name="langchain_vector_store",
    vector_dimension=384  # all-MiniLM-L6-v2的输出维度为384
)

4. 向向量存储添加文档

加载并拆分文档后存入PolarDB:

from langchain_text_splitters import RecursiveCharacterTextSplitter

# 示例文档(实际可替换为本地文件、网页内容等)
raw_documents = [
    "PolarDB是阿里云推出的云原生关系型数据库,兼容MySQL、PostgreSQL和Oracle协议。",
    "RAG即检索增强生成,通过检索外部知识库提升大模型回答的准确性与时效性。",
    "LangChain是构建LLM应用的框架,提供了多种向量存储的原生集成能力。"
]

# 拆分长文档(避免向量嵌入丢失信息)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
split_docs = text_splitter.create_documents(raw_documents)

# 批量添加到向量存储
vector_store.add_documents(split_docs)

5. 检索文档用于RAG流程

在RAG中检索与查询相关的文档:

# 初始化检索器(k为返回的相似文档数量)
retriever = vector_store.as_retriever(search_kwargs={"k": 3})

# 执行检索
query = "PolarDB可以作为LangChain的向量存储吗?"
relevant_docs = retriever.get_relevant_documents(query)

# 打印检索结果
for doc in relevant_docs:
    print(f"相关内容:{doc.page_content}")

6. 构建完整RAG应用

结合大模型实现端到端的问答功能:

from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA

# 初始化大模型
llm = ChatOpenAI(api_key=os.getenv("OPENAI_API_KEY"), model_name="gpt-3.5-turbo")

# 构建QA链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",  # 可选stuff/map_reduce/refine等链类型
    retriever=retriever,
    return_source_documents=True  # 返回检索到的源文档
)

# 执行问答
result = qa_chain.invoke({"query": "如何用PolarDB搭建LangChain的RAG应用?"})
print(f"回答:{result['result']}")
print("\n参考文档:")
for doc in result["source_documents"]:
    print(doc.page_content)

7. 性能与安全优化

  • 向量索引优化:为embedding字段创建HNSW近似索引,提升检索速度:
    CREATE INDEX idx_embedding ON langchain_vector_store USING HNSW (embedding vector_l2_ops);
    
  • 权限控制:创建专用数据库用户,最小化权限:
    CREATE USER 'langchain_user'@'%' IDENTIFIED BY 'your_secure_password';
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON your_database.* TO 'langchain_user'@'%';
    FLUSH PRIVILEGES;
    
  • 维度匹配:确保表中VECTOR字段维度与嵌入模型输出维度完全一致,否则会导致插入失败
  • 敏感信息管理:禁止硬编码数据库密码、API密钥,使用.env文件或环境变量管理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:46:02