LangChain向量数据库集成指南:面向RAG开发者

LangChain 向量数据库集成指南:面向 RAG 开发者

引言

向量数据库是构建 RAG(检索增强生成)应用的核心组件。本文将详细介绍主流向量数据库的特点、费用和接入方式。


一、主流向量数据库对比

数据库 类型 是否免费 免费额度 是否需要 API Key 官方地址
Chroma 开源本地 免费 完全免费 https://www.trychroma.com
FAISS 开源本地 免费 完全免费 https://faiss.ai
Weaviate 开源/云 部分免费 免费层限制 否(本地)/是(云) https://weaviate.io
Milvus 开源 免费 完全免费 https://milvus.io
Pinecone 云服务 有免费层 每月 100K 向量,单项目 https://pinecone.io
Qdrant 开源/云 部分免费 免费层限制 否(本地)/是(云) https://qdrant.tech
pgvector PostgreSQL 扩展 免费 完全免费 https://github.com/pgvector/pgvector

二、轻量级方案(免费,无需 API Key)

2.1 Chroma(推荐入门)

特点:零配置,轻量级,Python 原生支持,完全免费

安装

复制代码
pip install langchain-chroma

代码示例

python 复制代码
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

# 使用本地 Ollama 的嵌入模型(免费,无需 API Key)
embeddings = OpenAIEmbeddings(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
    model="nomic-embed-text"
)

# 创建向量数据库(本地保存到 ./chroma_db 目录)
db = Chroma(
    embedding_function=embeddings,
    persist_directory="./chroma_db"
)

# 添加文档
db.add_texts(
    texts=["RAG 是检索增强生成技术", "向量数据库用于存储文本嵌入"],
    metadatas=[{"source": "doc1"}, {"source": "doc2"}]
)

# 相似度搜索
results = db.similarity_search("什么是 RAG?", k=2)
for doc in results:
    print(doc.page_content)

2.2 FAISS(Meta 开源)

特点:高性能,纯 Python,完全免费

安装

复制代码
pip install faiss-cpu langchain-community

代码示例

python 复制代码
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
    model="nomic-embed-text"
)

# 创建 FAISS 索引
texts = ["RAG 技术", "向量检索", "大模型应用"]
db = FAISS.from_texts(texts, embeddings)

# 搜索
results = db.similarity_search("RAG", k=2)
for doc in results:
    print(doc.page_content)

# 保存到本地
db.save_local("./faiss_index")

# 从本地加载
db_loaded = FAISS.load_local("./faiss_index", embeddings)

三、企业级方案

3.1 Pinecone(云服务)

费用说明:免费层每月 100K 向量,超出按用量计费

获取 API Key

  1. 访问 https://pinecone.io 注册
  2. 进入控制台创建 API Key
  3. 复制 API Key

配置环境变量

复制代码
setx PINECONE_API_KEY "xxxxxxxxxxxxxxxxxxxxxxxx"

代码示例

python 复制代码
import os
from langchain_pinecone import PineconeVectorStore
from langchain_openai import OpenAIEmbeddings
from pinecone import Pinecone, ServerlessSpec

# 初始化 Pinecone 客户端
pc = Pinecone(api_key=os.environ.get("PINECONE_API_KEY"))

# 创建索引(如果不存在)
index_name = "my-rag-index"
if index_name not in pc.list_indexes().names():
    pc.create_index(
        name=index_name,
        dimension=1536,  # 匹配嵌入维度
        metric="cosine",
        spec=ServerlessSpec(cloud="aws", region="us-east-1")
    )

# 创建向量存储
embeddings = OpenAIEmbeddings()  # 需要 OPENAI_API_KEY
vector_store = PineconeVectorStore(
    index=pc.Index(index_name),
    embedding=embeddings,
    text_key="text"
)

# 添加文档
vector_store.add_texts(["文档内容1", "文档内容2"])

# 搜索
results = vector_store.similarity_search("查询内容", k=3)

3.2 Weaviate(开源 + 云)

费用说明:本地部署完全免费,云服务有免费层

本地部署(Docker)

bash 复制代码
docker run -d --name weaviate \
  -p 8080:8080 \
  semitechnologies/weaviate:latest

代码示例

python 复制代码
from langchain_weaviate import WeaviateVectorStore
import weaviate
from langchain_openai import OpenAIEmbeddings

# 连接本地 Weaviate(无需 API Key)
client = weaviate.connect_to_local(port=8080)

embeddings = OpenAIEmbeddings(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
    model="nomic-embed-text"
)

# 创建向量存储
db = WeaviateVectorStore(
    client=client,
    index_name="Document",
    text_key="content",
    embedding=embeddings
)

# 添加文档
db.add_texts(["RAG 技术详解", "向量检索原理"])

# 搜索
results = db.similarity_search("RAG", k=2)

四、完整 RAG 实战示例

python 复制代码
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 1. 准备文档(示例数据)
documents = [
    "RAG(检索增强生成)是一种结合检索系统和大模型的技术",
    "向量数据库用于存储和检索高维向量表示的文本",
    "LangChain 是一个用于构建大模型应用的框架",
    "Chroma 是一个轻量级向量数据库,完全开源免费",
]

# 2. 初始化嵌入模型(使用本地 Ollama,免费)
embeddings = OpenAIEmbeddings(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
    model="nomic-embed-text"
)

# 3. 创建向量数据库(本地 Chroma,免费)
db = Chroma.from_texts(
    texts=documents,
    embedding=embeddings,
    persist_directory="./rag_db"
)

# 4. 创建检索器
retriever = db.as_retriever(search_kwargs={"k": 2})

# 5. 定义 RAG 提示词
prompt = ChatPromptTemplate.from_template("""
你是一个专业的 AI 助手。请根据下面提供的上下文回答问题。
如果上下文中没有答案,请说"抱歉,我没有找到相关信息"。

上下文:{context}

问题:{question}

回答:
""")

# 6. 初始化大模型(本地 Ollama,免费)
llm = ChatOpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
    model="qwen3.5:4b"
)

# 7. 构建 RAG 链
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 8. 使用 RAG 查询
question = "什么是 RAG?"
answer = rag_chain.invoke(question)
print(f"问题:{question}")
print(f"回答:{answer}")

五、快速选择指南

场景 推荐方案 是否免费 复杂度
入门学习 / 原型开发 Chroma 免费
纯本地部署 FAISS / pgvector 免费
大规模生产 Milvus 免费(自托管)
云原生 / 无服务器 Pinecone 有免费层
语义搜索 + 知识图谱 Weaviate 有免费层

六、常见问题

Q: 为什么需要向量数据库?

A: 向量数据库能高效存储和检索文本嵌入向量,让大模型可以访问外部知识。

Q: Chroma 和 FAISS 哪个更好?

A: Chroma 更简单易用,FAISS 性能更优。入门推荐 Chroma,追求性能选 FAISS。

Q: 如何选择嵌入维度?

A: 取决于使用的嵌入模型,常见维度为 768、1024、1536。

Q: 免费方案能支持多大数据量?

A: Chroma/FAISS 本地可支持数万到数十万条文档,取决于硬盘大小。


LangChain 的向量数据库集成让 RAG 开发变得简单:

  1. 统一接口:所有数据库使用相似的 API
  2. 本地免费:Chroma/FAISS 完全免费,无需 API Key
  3. 灵活扩展:可从本地方案平滑迁移到云服务
  4. 生态丰富:支持主流的向量数据库

推荐入门路径:先用 Chroma 构建原型,根据需求再考虑升级到 Pinecone 或 Milvus。

相关推荐
小小工匠1 小时前
Redis - 实现分页 + 多条件模糊查询:一套完整可落地的组合方案
数据库·redis·缓存·分页·模糊查询
流星白龙2 小时前
【MySQL高阶】13.其他存储引擎
android·数据库·mysql
薛定谔的悦2 小时前
光伏-储能-负荷联合预测:给 EMS 装上“预知能力“
java·数据库·人工智能·python·储能
wuhen_n2 小时前
前端工程师进阶提示词工程实战
前端·langchain·ai编程
阿演2 小时前
DataDjinn v0.1.6 更新:增加在线更新功能,Redis 数据源支持,表格预览和连接体验继续增强
数据库·redis·缓存·数据库连接工具
数据库小学妹2 小时前
InnoDB内存架构解密:Buffer Pool与性能优化实战
数据库·经验分享·sql·性能优化·架构
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题 第89题】【Mysql篇】第19题:Hash 索引和 B+ 树索引的区别?它们在使用方面的区别?
java·数据库·mysql·面试·哈希算法
一只fish2 小时前
Oracle官方文档翻译《Database Concepts 26ai》第17章-内存架构
数据库·oracle
比企谷八幡2 小时前
一张表在磁盘上长什么样:Heap File 入门
数据库·oracle