
LangChain 是一个用于构建大语言模型(LLM)应用程序的框架。它提供了一套工具和组件,使得开发者可以轻松地将LLM与其他数据源和工具连接起来,构建复杂的应用程序。
在LangChain中,两个核心组件是llms和embeddings:
LLMs与Embeddings的区别:
我们构建的文档问答系统架构如下:

步骤说明:
处理过程:

这个流程图展示了从用户输入到输出结果的整个过程,其中包含两个子流程:Embeddings处理流程和LLM处理流程:
简单解释:
通过流程图,我们可以理解为:用户输入经过文本处理和向量化后,被用来在向量存储中进行检索,然后检索结果和用户输入一起送给LLM生成回答。
因此,重点在于:
在LangChain中,LLMs组件是核心之一,它是对各种大语言模型的抽象。通过LLMs组件,我们可以以统一的方式调用不同的模型。
主要功能:
工作原理:
重要参数:
在LangChain中的使用流程:

步骤说明:
在LangChain中,llms模块负责与生成文本的模型交互。我们以HuggingFacePipeline为例,它是对Hugging Face的pipeline的封装。
Hugging Face的pipeline函数提供了一个简单的API,用于使用预训练模型进行各种自然语言处理任务,如文本生成、文本分类等。HuggingFacePipeline将这个pipeline包装成LangChain的LLM接口。
执行步骤:
from langchain.llms import HuggingFacePipeline
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import torch
model_name = "qwen/Qwen1.5-1.8B-Chat"
model_dir = "D:\\modelscope\\hub\\qwen\\Qwen1.5-1.8B-Chat" # 使用snapshot_download下载的路径
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
torch_dtype=torch.float16, # 根据硬件调整
device_map="auto",
trust_remote_code=True
)
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1
)
llm = HuggingFacePipeline(pipeline=pipe)
response = llm("请介绍一下人工智能。")
print(response)Embeddings组件用于将文本转换为向量表示。这些向量可以捕捉文本的语义信息,常用于文本相似度计算、语义搜索、聚类等任务。
主要功能:
工作原理:
Embeddings组件通过Embeddings基类定义,主要包含两个方法:
常用的嵌入模型有:
在LangChain中的使用流程:

步骤说明:
嵌入模型将文本转换为向量。在LangChain中,我们可以使用Hugging Face的嵌入模型,通过HuggingFaceEmbeddings类。
HuggingFaceEmbeddings使用Hugging Face的模型来生成文本嵌入。它支持两种类型的模型:
执行步骤:
from langchain.embeddings import HuggingFaceEmbeddings
embedding_model_name = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
embeddings = HuggingFaceEmbeddings(
model_name=embedding_model_name,
model_kwargs={'device': 'cuda' if torch.cuda.is_available() else 'cpu'},
encode_kwargs={'normalize_embeddings': True} # 是否归一化向量
)
# 单个文档,可以使用embeddings来生成文本的向量表示
text = "这是一个示例文本。"
vector = embeddings.embed_query(text)
print(vector)
#多个文档,我们可以使用embed_documents方法
documents = ["文档1", "文档2", "文档3"]
vectors = embeddings.embed_documents(documents)这个序列图描述了用户与一个基于检索增强生成(RAG)的对话系统的交互过程。这个系统包括客户端、嵌入模型(Embeddings)、向量库(Vector Store)、大语言模型(LLM)和记忆模块(Memory)。让我们一步步解释这个交互过程,并提取重点。

步骤解释:
重点说明:
这个序列图展示了一个典型的基于RAG的对话系统的工作流程,它结合了检索和生成两种技术,以提供更准确的回答。
在文档问答系统中,我们使用嵌入模型将文档切块后转换成向量,并存入向量数据库。当用户提问时,我们使用同样的嵌入模型将问题转换成向量,然后在向量数据库中搜索最相关的文档块,最后将这些文档块和问题一起发送给LLM生成答案。
执行步骤:
完整示例:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import TextLoader
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
# 加载文档
loader = TextLoader("example.txt")
documents = loader.load()
# 文档切块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
texts = text_splitter.split_documents(documents)
# 创建向量存储
vector_store = FAISS.from_documents(texts, embeddings)
# 创建检索器
retriever = vector_store.as_retriever()
# 创建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
# 提问
question = "文档中提到了什么?"
result = qa_chain({"query": question})
print(result["result"])example.txt 示例内容:
人工智能发展历程 人工智能(Artificial Intelligence, AI)是计算机科学的一个分支,旨在创造能够执行通常需要人类智能的任务的机器和系统。AI的发展经历了多个重要阶段: 1. 诞生期(1950s-1960s) - 1950年:图灵发表《计算机器与智能》,提出图灵测试 - 1956年:达特茅斯会议正式提出"人工智能"术语 - 早期成就:逻辑理论家、通用问题求解器 2. 知识工程与专家系统(1970s-1980s) - 专家系统兴起,如MYCIN医疗诊断系统 - 知识表示和推理成为研究重点 - 面临知识获取瓶颈 3. 机器学习崛起(1990s-2000s) - 统计学习方法取代符号主义 - 支持向量机、决策树等算法广泛应用 - 互联网发展为AI提供大量数据 4. 深度学习革命(2010s至今) - 神经网络深度增加,出现深度学习 - 2012年:AlexNet在ImageNet竞赛中突破性表现 - 2016年:AlphaGo击败围棋世界冠军 - 大语言模型如GPT系列快速发展 当前AI技术主要分支: - 机器学习:让计算机从数据中学习模式 - 自然语言处理:使计算机理解和使用人类语言 - 计算机视觉:让计算机"看懂"图像和视频 - 机器人技术:结合感知、决策和执行 未来发展趋势: - 通用人工智能(AGI)的探索 - AI与各行业的深度融合 - 可解释AI和AI伦理的重要性日益凸显 - 边缘计算与AI的结合 人工智能正在深刻改变我们的生活和工作方式,从智能助手到自动驾驶,从医疗诊断到金融风控,其应用范围不断扩大。
通过LangChain,我们可以方便地集成LLMs和Embeddings组件,构建强大的应用程序。一如既往使用ModelScope可以方便地管理中文模型,统一缓存目录有助于模型的管理和共享。同时我们可以选择其他的、适合自己的模型选择和管理方式。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。