LangChain入门学习笔记(一)——Hello World

2024-06-14 20:20

本文主要是介绍LangChain入门学习笔记(一)——Hello World,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是LangChain

LangChain是一个开源(github repo)的大语言模型应用开发框架,提供了一整套的工具、方法和接口去帮助程序员构建基于大语言模型的端到端应用。LangChain是长链(long chain)的意思,它的一个核心思想就是将应用的各阶段处理连成一条长串进行。

LangChain技术架构

官网中给出的LangChain架构图如下:

从图中不难看出,整个框架由以下几个库组成:

  • langchain-core:提供基础的抽象能力和LangChain表达语言(LCEL),这一层定义了LangChain的“协议”。
  • LangChain-Community:提供三方集成能力。比如一些合作伙伴的包,譬如langchain-openai / langchain-anthropic,通过LangChain-Community的接口与第三方服务进行交互。
  • LangChain:这一层提供的接口形成LangChain框架的基本认知架构,比如链、代理及检索策略(retrieval strategies)。

上面3个部分都提供了Python和JavaScript两个版本。下面是提供的工具:

  • Templates:用于构建和管理prompts模板,提供指令和上下文信息给到大模型。
  • LangServe:将LangChain的链部署为REST API服务。
  • LangSmith:一个用于debug、测试、评估和监控大模型应用的开发者平台工具。

LangChain核心学习要素

LangChain是一个大语言模型应用的开发框架,它的设计是围绕大语言模型的应用开发进行。简单说,基于大语言模型的应用在逻辑上划分为输入、模型处理、输出三个大的模块:

  • 输入:包含prompt和retriever两大块内容。前者有Text、PromptTemplate、以及Example Selectors这些,后者主要是Document Loader、Text Splitter、Vector Store和Embedding等。
  • 大模型:这是处理模块,包括LLM和Chat Model两大块概念。围绕它们有集成三方大模型接口、流化和缓存,以及Message类型等概念。
  • 输出:大模型处理之后的输出,涉及到应用的结果展示,因此有各种数据的Parser类型。
  • 组合:在上述三个实体之外,还有一些组合的概念,包括代理、链和工具,旨在扩展大模型的能力范围,提供更优的结果。

此外还有用于“粘合”模块的LCEL语言,提供了链式和并行处理机制。

LangChain版Hello World

LangChain的安装

安装LangChain库非常容易,以python版为例,只需执行如下命令:

pip install langchain

上面命令包含安装了langchain-core,如果需要单独安装langchain-core,可以执行:

pip install langchain-core

类似的,为了集成三方库,需要的langchain-community如下安装:

pip install langchain-community

安装langserver:

# 安装全部
pip install "langserve[all]"
## 仅安装client端
#pip install "langserve[client]"
## 仅安装server端
#pip install "langserve[server]"

安装langsmith:

pip install langsmith

LangChain本地运行LLM

LangChain支持使用api_key调用类似OpenAI和Anthropic的三方LLM,这里为了实现的稳定性选择本地方式部署,通过Ollama封装调用本地LLM。

安装Ollama

Ollama之于LLM,就像Docker之于Image。从Ollama官网下载对应版本安装Ollama后,执行下面命令获取模型:

#请结合本地硬件资源选择合适的模型
#可以参考Ollama官网介绍的模型参数规模来确定具体部署哪些模型
#https://ollama.com/library
ollama pull llama2

使用ollama list命令查看LLM是否已经拉取到本地:

LangChain的“Hello World!”

一个LangChain版本的"Hello World"代码如下:

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser#加载llama3模型。
llm = Ollama(model="llama3")#生成prompt模板。
prompt = ChatPromptTemplate.from_template("Hello {name}!")#输出解析。
output_parser = StrOutputParser()#LCEL生成链。
chain = prompt | llm | output_parser#调用链,传入模板参数,注意传入的是字典对象。
response = chain.invoke({"name": "World"})#打印响应结果
print(response)

上面代码输入一个简单文本,经过llm处理后,输出经过解析后最终给出模型应用的结果:

llama3大模型回应了“Hello there, Human! It's great to see you! How can I assist or chat with you today?”

恭喜你!完成了第一个用LangChain编写的大模型程序!代码里的注释简单介绍了每句的作用,现在不理解其中的语法没关系,后面我们将陆续学习其中的概念。

这篇关于LangChain入门学习笔记(一)——Hello World的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061416

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

LangChain转换链:让数据处理更精准

1. 转换链的概念 在开发AI Agent(智能体)时,我们经常需要对输入数据进行预处理,这样可以更好地利用LLM。LangChain提供了一个强大的工具——转换链(TransformChain),它可以帮我们轻松实现这一任务。 转换链(TransformChain)主要是将 给定的数据 按照某个函数进行转换,再将 转换后的结果 输出给LLM。 所以转换链的核心是:根据业务逻辑编写合适的转换函

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口