目录
LangChain简介
LangChain作为当前最热门的开源RAG(Retrieval-Augmented Generation,检索增强生成)框架,正在重塑我们处理非结构化数据的方式。在RAG框架中,检索环节至关重要,而Embeddings技术则是实现高效检索的核心组件之一。
RAG框架的工作流程通常包括:
- 文本预处理与分块
- 通过Embedding模型转换为向量表示
- 存储到向量数据库
- 查询时进行相似性检索
- 将检索结果输入生成模型
LangChain的独特价值在于它提供了标准化的接口,使开发者能够灵活组合不同的嵌入模型、向量数据库和LLM,构建端到端的智能应用。
Embeddings技术概述
Embedding技术通过将离散的符号(如单词、句子)映射到连续的向量空间,使计算机能够理解和处理语义信息。这种表示方法具有几个关键优势:
- 语义保留:语义相似的项在向量空间中距离相近
- 维度压缩:将高维稀疏表示转换为低维稠密向量
- 跨模态能力:同一空间可嵌入文本、图像、音频等多种数据类型
现代Embedding模型通常基于深度神经网络,特别是Transformer架构,能够捕捉复杂的上下文关系。
主流Embedding模型比较
模型名称 | 发布时间 | 核心特点 | 典型应用场景 |
---|---|---|---|
Word2Vec | 2013 | 基于浅层神经网络,CBOW/Skip-Gram架构 | 词语相似度计算,简单语义分析 |
GloVe | 2014 | 基于全局词共现统计,结合矩阵分解 | 需要全局语义信息的任务 |
FastText | 2016 | 引入子词(subword)概念,处理未登录词 | 多语言应用,拼写错误容忍 |
BERT | 2018 | 双向Transformer,上下文相关表示 | 需要深层语义理解的任务 |
Sentence-BERT | 2019 | 针对句子级语义优化的BERT变体 | 语义检索,文本匹配 |
LangChain中的Embedding集成
LangChain提供了统一的Embedding接口,支持多种后端实现:
from langchain_community.embeddings import (
HuggingFaceEmbeddings,
OpenAIEmbeddings,
CohereEmbeddings
)
# HuggingFace嵌入
hf_embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2",
model_kwargs={
'device': 'cpu'},
encode_kwargs={
'normalize_embeddings': False}
)
# OpenAI嵌入
openai_embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
# Cohere嵌入
cohere_embeddings = CohereEmbeddings(model="embed-english-v2.0")
关键配置参数:
model_name
:指定预训练模型model_kwargs
:模型推理参数(如设备选择)encode_kwargs
:编码过程参数(如归一化)
实践案例:构建本地知识问答系统
系统架构
- 数据层:本地文本文件存储知识库
- 嵌入层:Sentence-Transformers处理文本
- 存储层:Chroma向量数据库
- 应用层:LangChain编排处理流程
# -*- coding: utf-8 -*-
"""
LangChain RAG完整实现
基于本地文档构建问答系统
使用sentence-transformers/all-MiniLM-L6-v2嵌入模型
Chroma向量数据库存储
"""
import os
from dotenv import load_dotenv
from typing import List, Dict, Any
# 加载环境变量
load_dotenv()
# 设置国内镜像源(加速下载)
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
# 1. 导入所需库
from langchain_core.prompts import ChatPromptTemplate
from langchain_core