LangChain 构建向量数据库和检索器

LangChain 构建向量数据库和检索器实战

随着大语言模型(LLM)在各类 AI 应用中不断普及,RAG(Retrieval-Augmented Generation,检索增强生成)逐渐成为提升回答准确率与上下文关联性的重要技术路径。

一、什么是向量数据库?

在自然语言处理中,文本、图片、音频等非结构化数据需要转化为模型可理解的形式才能参与运算。向量化(Embedding)是把原始数据转化为定长高维向量的过程,用于计算相似度。比如,"猫" 和 "宠物" 的向量距离很近,而与 "飞机" 的距离较远。

向量数据库就是用于存储这类高维向量,并支持基于相似度的快速检索。常见的向量库包括:

  • FAISS(Facebook 开源)
  • Milvus(Zilliz 开源)
  • Weaviate(支持 GraphQL)
  • Chroma(轻量级本地数据库)

LangChain 默认支持这些库的适配封装,其中 Chroma 是最适合快速上手与本地调试的。

二、LangChain 是什么?

LangChain 是一个用来构建基于语言模型应用的 Python 框架,它提供了统一接口、模块封装、链式组合能力,方便开发者快速构建 LLM+Embedding+Retrieval 的复杂工作流。

LangChain 的重要模块包括:

  • LLM:大语言模型接口(如 OpenAI、ChatGLM、Tongyi)
  • Embeddings:文本向量化模型
  • VectorStore:向量数据库封装(Chroma、FAISS 等)
  • Retriever:检索器组件
  • Chains:链式调用(支持流水线组合)

三、构建一个简单的向量检索系统

1. 环境准备

bash 复制代码
pip install langchain langchain-community chromadb

确保你还安装了对应的 Embedding 模型(如通义 DashScope)和 LLM(如 Tongyi、OpenAI)。

本文使用的是阿里的通义千问模型

2. 加载依赖

python 复制代码
import os
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Tongyi
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document

3. 初始化模型和数据

python 复制代码
# 设置 API Key
os.environ["DASHSCOPE_API_KEY"] = "your-api-key"

# 初始化 LLM 和 Embedding
llm = Tongyi()
embedding = DashScopeEmbeddings(model="text-embedding-v1")

# 构造原始文档
documents = [
    Document(page_content="猫是非常独立的动物。", metadata={"source": "动物百科"}),
    Document(page_content="狗是忠诚的伙伴,经常陪伴人类。", metadata={"source": "动物百科"})
]

4. 构建向量数据库

python 复制代码
vector_store = Chroma.from_documents(documents, embedding=embedding)

这一步会自动把文本转换成向量,并存入内存中的 Chroma 数据库。

5. 相似度检索

python 复制代码
result = vector_store.similarity_search_with_score("宠物", k=1)

for doc, score in result:
    print(f"内容:{doc.page_content},相似度得分:{score}")

输出:

6. 封装为 Retriever(检索器)组件

python 复制代码
from langchain_core.runnables import RunnableLambda

retriever = RunnableLambda(vector_store.similarity_search_with_score).bind(k=1)

# 批量查询
print(retriever.batch(["猫", "忠诚的动物"]))

四、与 RAG 构建结合

当你有了检索器,就可以把它和 LLM 结合成 RetrievalQA 或 ConversationalRetrievalChain:

python 复制代码
from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vector_store.as_retriever())
response = qa_chain.invoke("猫有哪些特点?")
print(response)

这段代码背后自动做了:

  1. 语义检索最相关文档
  2. 把文档与问题一起发给 LLM
  3. 生成最终回答

五、持久化与加载

1. 向量库保存

python 复制代码
vector_store = Chroma.from_documents(documents, embedding=embedding, persist_directory="./chroma_db")
vector_store.persist()

2. 向量库读取

python 复制代码
vector_store = Chroma(persist_directory="./chroma_db", embedding_function=embedding)

六、非文本数据的处理

如果你需要处理图像、音频、视频等非文本数据,常见做法包括:

  • 图像 → OCR提取文字 或 图像caption生成
  • 音频 → ASR语音识别成文本
  • 视频 → 拆帧+图像识别 + 语音转写

一旦你将这些内容提取为结构化文本或描述,就可以用上述向量化 → 存储 → 检索 → 生成 的流程处理。

七、结语

LangChain + 向量数据库是一种非常高效的知识管理与智能问答解决方案。通过向量化原始信息、构建数据库、结合大模型检索与生成能力,可以快速实现如"智能客服"、"文档问答"、"知识库"等实战项目。

相关推荐
Ricky_Theseus21 分钟前
SQL Server 的五种约束类型
数据库·sql·oracle
zjshuster22 分钟前
数据库分库分表的方法论与实操
数据库·adb
一只努力的微服务29 分钟前
【Calcite 系列】深入理解 Calcite 的 AggregateValuesRule
大数据·数据库·calcite·优化规则
IT邦德41 分钟前
Oracle向量数据库实战
数据库·oracle
2401_873544921 小时前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python
路由侠内网穿透1 小时前
本地部署开源工作空间工具 AFFiNE 并实现外部访问
运维·服务器·数据库·物联网·开源
njidf1 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
F1FJJ1 小时前
什么是 Shield CLI?视频讲解:一条命令,可浏览器远程访问一切内部服务(RDP/VNC/SSH/数据库等)
运维·网络·数据库·网络协议·ssh
星辰_mya2 小时前
InnoDB的“身体结构”:页、Buffer Pool与Redo Log的底层奥秘
数据库·mysql·spring·面试·系统架构
Yilena2 小时前
带你轻松学习LangChain4j
java·学习·langchain