LLM | 一文搞懂Langchain的概念,相关组件,以及大模型微调~

news2025/1/20 19:13:23

本文主要介绍了 Langchain的概念,相关组件,以及大模型微调代码实现~

1.什么是LangChain?

LangChain是一个平台,提供工具和API,用于构建由语言模型(LLM)驱动的应用程序。它简化了 LLM 与项目的集成,能够利用高级语言处理功能。

2.设置 LangChain

2.1.LangChain的安装

使用 pip 安装
pip install langchain
 使用 conda 安装
conda install langchain -c conda-forge

有关导入有效使用 LLM 所需的必要库和依赖项的说明,本文主要是结合openai的chatgpt的实例。

import langchain
import openai
import os
import IPython
from langchain.llms import OpenAI
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import LLMChain
from langchain.chains import RetrievalQA
from langchain import ConversationChain

load_dotenv()
# API configuration
openai.api_key = os.getenv("OPENAI_API_KEY")

 

2.2.使用LangChain与LLM交互

使用 LangChain 与 LLM 交互涉及一系列步骤,利用预训练语言模型的强大功能来生成文本理解任务。以下是每个部分的详细说明,以及代码实现。

初始化 LLM

要在LangChain中初始化LLM,首先需要导入必要的库和依赖。

from langchain import LangModel

# Specify the language model you want to use
model_name = 'gpt3'

# Initialize the LLM
llm = LangModel(model_name)
输入提示

初始化 LLM 后,可以输入提示以生成文本或获取响应。提示是语言模型生成文本的起点。可以根据需要提供单个提示或多个提示。下面是一个示例:

# Input a single prompt
prompt = "Once upon a time"

# Generate text based on the prompt
generated_text = llm.generate_text(prompt)
 检索生成的文本或响应

输入提示后,可以从 LLM 中检索生成的文本或响应。生成的文本或响应将基于提示提供的上下文和语言模型的功能。下面是一个示例:

# Print the generated text
print(generated_text)

# Print the responses
for response in responses:
    print(response)

2.3.Langchain可以做什么?

LangChain提供了多样化的功能,关键组件包括 模型、提示、链、索引和内存,代理,并发现每个组件可以完成什么。

  1. 模型Models:各种类型的模型和模型集成,比如OpenAI 的 ChatGPT。
  2. 提示Prompts:提示管理、提示优化和提示序列化,通过提示微调模型的语义理解。
  3. 内存Memory:用来保存和模型交互时的上下文状态。
  4. 索引Indexes:用来结构化文档,以便和模型交互。
  5. Chains:一系列对各种组件的调用。
  6. 代理Agents:决定模型采取哪些行动,执行并且观察流程,直到完成为止。
2.3.1.模型

目前出现了许多新的LLM。LangChain为各种模型提供了简化的界面和集成。

LangChain的核心是强大的语言模型(LLM),使应用程序能够理解和生成类似人类的文本。借助LangChain,开发人员可以访问广泛的LLM集合,每个LLM都经过大量数据的训练,以在各种与语言相关的任务中表现出色。无论是理解用户查询、生成响应,还是执行复杂的语言任务,LangChain的模型都是语言处理能力的支柱。

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")

# The LLM takes a prompt as an input and outputs a completion
prompt = "How many days are there in a month"
completion = llm(prompt)

聊天模型

这将使用 ChatOpenAI 类在用户和 AI 聊天机器人之间建立对话。聊天机器人的初始化temperature为 0,这使得其响应更加集中和确定。对话以系统消息开始,说明机器人的用途,然后是表达食物偏好的人类消息。聊天机器人将根据给定的输入生成响应。

chat = ChatOpenAI(temperature=0)

chat(
    [
        SystemMessage(content="You are a nice AI bot that helps a user figure out 
          what to eat in one short sentence"),
        HumanMessage(content="I like tomatoes, what should I eat?")
    ]
)

 

2.3.2.文本嵌入模型

文本输入由文本嵌入模型接收,然后输出以数字方式表示输入文本的嵌入列表。可以使用嵌入从文本中提取信息然后应用此信息,例如,确定两个文本的相似程度,例如电影摘要。

embeddings = OpenAIEmbeddings()

text = "Alice has a parrot. What animal is Alice's pet?"
text_embedding = embeddings.embed_query(text)

 

2.3.3.提示

尽管在自然语言中向 LLM 添加提示应该感觉很自然,但必须对提示进行重大更改,然后才能获得所需的结果。这称为提示工程

一旦有了好的提示,可能想把好提示用作其他事情的模板。因此,LangChain提供了PromptTemplates,它使能够从各种组件中构建提示。

template = "What is a good name for a company that makes {product}?"

prompt = PromptTemplate(
    input_variables=["product"],
    template=template,
)

prompt.format(product="colorful socks")
 2.3.4.链

将LLM与其他组件组合在一起以创建应用程序的过程在LangChain中称为链接。示例包括:

  • 结合提示模板和 LLM
  • 通过使用第一个 LLM 的输出作为第二个 LLM 的输入,可以按顺序组合多个 LLS。
  • 例如,将 LLM 与外部数据相结合来回答问题。
  • 将 LLM 与长期记忆(例如聊天记录)相结合。
chain = LLMChain(llm = llm, 
                  prompt = prompt)

chain.run("colorful socks")
 2.3.5.指标

缺乏上下文信息,例如访问特定文档或电子邮件是 LLM 的一个缺点。 授予 LLM 对特定外部数据的访问权限将帮助您避免这种情况。

准备好将外部数据存储为文档后,可以使用文本嵌入模型在名为 VectorStore 的矢量数据库中对其进行索引。

矢量存储现在将文档存储为嵌入。有了这些外部数据,可以执行许多操作。

将它用于基于信息检索器的问答任务

retriever = db.as_retriever()

qa = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=retriever, 
    return_source_documents=True)

query = "What am I never going to do?"
result = qa({"query": query})

print(result['result'])
 2.3.6.记忆

对于聊天机器人等程序来说,能够回忆起以前的对话至关重要。但是,除非输入聊天记录,否则默认情况下 LLM 缺乏任何长期记忆。

通过提供许多处理聊天记录的选项,LangChain通过保持所有对话,跟上最近的K对话,并总结所说的内容来解决这个问题。

conversation = ConversationChain(llm=llm, verbose=True)
conversation.predict(input="Alice has a parrot.")
conversation.predict(input="Bob has two cats.")
conversation.predict(input="How many pets do Alice and Bob have?")

 2.4.使用LangChain微调工作流程

数据集准备

要微调 LLM,请根据特定任务或领域定制数据集。首先收集或整理与目标应用程序一致的标记数据集。该数据集应包括输入输出对或适合微调过程的格式。

配置参数

在LangChain界面中,开发人员可以指定所需的LLM架构,例如层数、模型大小和其他相关参数。这些配置定义了要训练的模型的架构和容量,使开发人员能够在性能和计算资源之间取得适当的平衡。

培训流程

LangChain利用分布式计算资源来高效训练LLM。开发者发起训练流程,LangChain优化训练流水线,确保资源高效利用,收敛速度更快。在训练过程中,模型从提供的数据集中学习,调整其参数以捕获特定于目标任务或域的细微差别和模式。

一旦你准备好了数据集,你就可以开始使用LangChain进行微调过程。首先,导入必要的库和依赖项。然后,初始化预训练的 LLM 并在自定义数据集上对其进行微调。下面是一个示例:

from langchain import LangModel

# Initialize the pre-trained LLM
pre_trained_model = LangModel('gpt3')

# Load and preprocess your dataset
dataset = load_dataset('your_dataset.txt')
preprocessed_dataset = preprocess(dataset)

# Fine-tune the LLM on your dataset
fine_tuned_model = pre_trained_model.fine_tune(preprocessed_dataset, 
  num_epochs=5, batch_size=16)

 

3.使用LangChain的好处

  • 使用 LangChain 微调 LLM 可以提高模型的准确性和与特定任务或领域的上下文相关性,从而产生更高质量的输出。
  • LangChain允许开发人员自定义LLM来处理独特的任务、行业特定的术语和特定的领域上下文,以满足特定的用户需求。
  • 微调的 LLM 支持开发功能强大的应用程序,同时更深入地了解特定领域的语言,从而获得更准确和上下文感知的响应。
  • 使用LangChain进行微调减少了对大量训练数据和计算资源的需求,节省了时间和精力,同时实现了显著的性能改进。

参考文献

【1】Building LLM-Powered Applications with LangChain (analyticsvidhya.com)

【2】Generative AI Applications with LangChain and OpenAI API (analyticsvidhya.com) 

【3】Revamp Data Analysis Using OpenAI, LangChain & LlamaIndex (analyticsvidhya.com)

【4】Mastering Prompt Engineering for LLM Applications with LangChain (analyticsvidhya.com) 

【5】 (万字长文)手把手教你认识学会LangChain - 知乎 (zhihu.com)

【6】LangChain 介绍及相关组件使用总结-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1280174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶学习笔记(十三)——感知基础

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 传感器 测距原理 坐标系 标定 同…

一个用c#瞎写的sftp工具

0.下载地址 https://wwus.lanzouj.com/iOZUv1gkgpze 密码:123456 1.能进行单个和批量下载, 没有弄上传 2.速度奇差,可能是某些地方没弄好.有一定的进度显示,但是不太准. 3.很多地方没弄好,有能力的自己弄一下 4.在app.config文件配置sftp

大小堆的实现(C语言)

目录 前言 一种完全二叉树:堆 堆的概念 堆的性质 建堆的时间复杂度 建堆的空间复杂度: 小堆的实现 必要补充 堆的初始化 堆的销毁 向上调整算法 堆的插入 向下调整算法 堆的删除 获取堆顶元素 获取堆中元素个数 堆的判空 最终代码 He…

SpringSecurity 三更草堂 学习笔记

SpringSecurity从入门到精通 0. 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的…

数据结构奇妙旅程之顺序表和链表

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

第一百八十六回 DropdownMenu组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容,本章回中将介 绍DropdownMenu组件.闲话休提,让我们一起Talk Flutter吧。 …

TeXworks 初次使用 debug方法

下载Texlive,打开TeXworks editor 编译排版,可能会报很多错: 1. ! Fatal Package fontspec Error: The fontspec package requires either XeTeX or (fontspec) LuaTeX. (fontspec) (fontspec) …

【前沿技术】扩散模型是什么

0. 前言 扩散模型的灵感来自非平衡热力学。他们定义了一个马尔可夫扩散步骤链,以缓慢地将随机噪声添加到数据中,然后学习逆转扩散过程以从噪声中构建所需的数据样本。与VAE或流动模型不同,扩散模型是通过固定程序学习的,并且潜在变…

【学术精选】地球系统科学顶级国际会议 IGARSS 2024

顶级会议推荐 英文名称:International Symposium of Geoscience and RemoteSensing, IGARSS 2024 英文简称:IGARSS 2024 中文名称:国际地球科学与遥感研讨会 ​会议信息 重要日期: Community Contributed Session Proposal Dea…

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…

基于springboot 学生学情预警系统-计算机毕设 附源码57567

springboot 学生学情预警系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运…

Python如何使用pip安装模块和包与绘图时如何显示中文

Python如何使用pip安装模块和包 使用pip安装python模块和包 方式一:1.进入命令行2.敲入pip命令:pip install 包名 。由于python官网下载速度太慢,可以通过添加参数从清华镜像下载包(-i https://pypi.tuna.tsinghua.edu.cn/simpl…

Web漏洞分析-SQL注入XXE注入(上)

随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原…

curl --compressed报错,此版本不支持此命令

出现这个问题是因为微软windows自带的curl不支持这个选项,验证如下 执行where curl 时,可以看到输出为 C:\Windows\System32\curl.ee 解决方法是使用其它curl,下载地址如下 curl for Windows https://curl.se/windows/ 然后把安装目录的bin目录放到path环境变量里最开始, 让…

十大经典系统架构设计面试题

十大经典系统架构设计面试题_架构_程序员石磊_InfoQ写作社区翻译自:https://medium.com/geekculture/top-10-system-design-interview-questions-10f7b5ea123d在我作为微软和Facebhttps://xie.infoq.cn/article/4c0c9328a725a76922f6547ad 任何 SDI 问题的提示 通过…

能源企业管理ERP系统都有哪些?可以帮助企业解决哪些难点

能源企业在不同的发展阶段面对的经营压力以及遇到的管理问题各异,随着部分产品结构的复杂化,日常经营管理工作也愈加繁琐。 有些能源企业内部存在信息传递不畅、经营数据统计不及时、部门协作效率低、多仓库和多平台数据不统一等情况,而这些…

web:very_easy_sql(sql、ssrf、gopher协议sql注入)

题目 页面显示如下 显示不是内部用户,无法识别信息 查看源码,找到一个use.php 访问之后显示如下 随便输入了一个,发现url有参数显示 试一下靶机的网址,返回nonono 联系之前原始页面写的“不是内网用户,无法别识身份”…

简单句子成分、阅读技巧

四、段落的主旨题:问这一段讲了什么(一般都在段落的第一句话或最后一句话) 词汇题的答案一般都在生词的上一句或者下一句 做题步骤: 1、先标段落 2、看题,划出关键词 3、去原文定位,标注中文意思 4、第一遍…

半导体工艺发展概述

集成电路发展到今天,经历从1940年的PN结发现,到1950年BJT三极管发明,再到1963年CMOS电路发明。从单纯基于Si的半导体电路,再到GaAs, GaN,SiGe, InP等化合物半导体集成电路。不断的通过化学材料配比,基本单元…

vs 安装 qt qt扩展

1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2