LangChain实战(七):Text Embedding Models与Vector Stores
本文是《LangChain实战课》系列的第七篇,将深入探讨LangChain中的两个核心概念:文本嵌入模型(Embedding Models)和向量数据库(Vector Stores)。你将学习如何将文本转换为数值向量,并利用向量数据库进行高效的相似性搜索,这是构建检索增强生成(RAG)应用的基石。
前言
在前一篇文章中,我们学习了如何加载和分割文档,得到了结构化的文本块。然而,计算机无法直接理解文本的含义。为了让机器能够“理解”和“比较”文本,我们需要将文本转换为数值表示——即嵌入向量(Embeddings),并将其存储在专门的数据库中进行高效检索。今天,我们将深入这个核心环节。
文本嵌入(Text Embedding)模型介绍
什么是文本嵌入?
文本嵌入是一种将单词、句子或整个文档转换为数值向量(一组数字)的技术。这些向量在高维空间中的位置和距离能够捕捉文本的语义信息。
核心思想:语义相似的文本,其对应的向量在向量空间中的距离也更近。
为什么需要嵌入?
- 机器可读:将人类语言转换为计算机可以处理和计算的数值形式。
- 语义捕捉:好的嵌入模型能够理解 synonyms(同义词)、context(上下文)和 semantic
relationships(语义关系)。 - 高效检索:基于向量相似性的搜索比基于关键词的搜索更加智能和灵活。
常见的嵌入模型
- OpenAI:
text-embedding-ada-002
(广泛使用,性能强劲) - Hugging Face:
sentence-transformers
系列(如all-MiniLM-L6-v2
,可本地部署) - Cohere:提供多语言和专门优化的嵌入模型
- 本地模型:如
BGE
、M3E
等,支持私有化部署
环境准备与安装
在开始之前,我们需要安装必要的库。根据你选择的嵌入模型和向量数据库,安装对应的依赖。
# 安装 LangChain 核心库
pip install langchain# 安装 OpenAI 嵌入模型(如果使用 OpenAI)
pip install openai# 安装 HuggingFace 嵌入模型(如果使用 HuggingFace)
pip install sentence-transformers# 安装向量数据库
# 为了演示,我们安装 Chroma(轻量级)和 FAISS(Facebook 开发)
pip install chromadb
pip install faiss-cpu # 如果是 CPU 环境
# pip install faiss-gpu # 如果是 GPU 环境# 安装其他依赖
pip install python-dotenv tiktoken
请确保你的环境变量(如 OPENAI_API_KEY
)已正确设置。
使用Embedding模型将文本转换为向量
LangChain 提供了统一的接口来使用各种嵌入模型。
1. 使用 OpenAI 嵌入模型
import os
from dotenv import load_dotenv
from langchain.embeddings.openai import OpenAIEmbeddings# 加载环境变量
load_dotenv()# 初始化 OpenAI 嵌入模型
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002",openai_api_key=os.getenv("OPENAI_API_KEY")
)# 将文本转换为向量
text = "机器学习是人工智能的一个分支"
vector = embeddings.embed_query(text)
print(f"向量维度: {len(vector)}")
print(f"向量前10维: {vector[:10]}...")
2. 使用 Hugging Face 嵌入模型(本地免费)
from langchain.embeddings import HuggingFaceEmbeddings# 初始化 Hugging Face 嵌入模型
# 使用 all-MiniLM-L6-v2 模型,它是一个轻量且高效的句子转换模型
embeddings_hf = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2",model_kwargs={'device': 'cpu'}, # 使用 CPUencode_kwargs=