当前位置: 首页 > news >正文

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

什么是LangChain LangChain是一个开源(github repo)的大语言模型应用开发框架,提供了一整套的工具、方法和接口去帮助程序员构建基于大语言模型的端到端应用。LangChain是长链(long chain)的意思,它的一个…...

[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

ROS 系列学习教程(总目录) 本文目录 一、Arbotix 简介二、安装Arbotix三、配置Arbotix控制器四、配置launch启动文件五、数据交互接口六、在rviz中仿真控制机器人6.1 直接发topic控制6.2 使用键盘控制6.3 编写代码控制机器人移动 前面讲了机器人的建模,是静态的&…...

java:使用JSqlParser给sql语句增加tenant_id和deleted条件

# 示例代码 【pom.xml】 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.4.3.1</version> </dependency>【MyJSqlParserTest.java】 package com.chz.myJSqlParser;pu…...

华三HCL模拟器安装及华三防火墙配置

0、前言 最近跟模拟器杠上了&#xff0c;主要是需要运行防火墙&#xff0c;目前已经成功模拟出华为、山石防火墙&#xff0c;而且模拟出来的设备能与物理网络环境进行互联。现在我又盯上华三防火墙了。 首先下载模拟器&#xff1a; 下载地址&#xff1a;H3C网络设备模拟器官方免…...

MySQL基础---库的操作和表的操作(配着自己的实操图,简单易上手)

绪论​ 勿问成功的秘诀为何&#xff0c;且尽全力做您应该做的事吧。–美华纳&#xff1b;本章是MySQL的第二章&#xff0c;本章主要写道MySQL中库和表的增删查改以及对库和表的备份处理&#xff0c;本章是基于上一章所写若没安装mysql可以查看Linux下搭建mysql软件及登录和基本…...

【6】第一个Java程序:Hello World

一、引言 Java&#xff0c;作为一种广泛使用的编程语言&#xff0c;其强大的跨平台能力和丰富的库函数使其成为开发者的首选。对于初学者来说&#xff0c;编写并运行第一个Java程序是一个令人兴奋的时刻。本文将指导你使用Eclipse这一流行的集成开发环境&#xff08;IDE&#…...

pytorch神经网络训练(AlexNet)

导包 import osimport torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import Dataset, DataLoaderfrom PIL import Imagefrom torchvision import models, transforms 定义自定义图像数据集 class CustomImageDataset(Dataset): 定义一个自…...

构建大语言模型友好型网站

以大语言模型为代表的AI 技术迅速发展&#xff0c;将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代&#xff0c;主要是通过网站&#xff08;website&#xff09;提供信息。网站主要为人类阅读的方式构建的。主要…...

Git代码冲突原理与三路合并算法

Git代码冲突原理 Git合并文件是以行为单位进行一行一行合并的&#xff0c;但是有些时候并不是两行内容不一样Git就会报冲突&#xff0c;这是因为Git会帮助我们进行分析得出哪个结果是我们所期望的最终结果。而这个分析依据就是三路合并算法。当然&#xff0c;三路合并算法并不…...

聆思CSK6大模型开发板英语评测类开源SDK详解

离线英文评测算法SDK 能力简介 CSK6 大模型开发套件可以对用户通过语音输入的英文单词进行精准识别&#xff0c;并对单词的发音、错读、漏读、多读等方面进行评估&#xff0c;进行音素级的识别&#xff0c;根据用户的发音给出相应的建议和纠正&#xff0c;帮助用户更好地掌握单…...

通用大模型VS垂直大模型,你更青睐哪一方?

这里写目录标题 一、通用大模型简介二、垂直大模型简介三、通用大模型与垂直大模型的比较四、如何选择适合的模型五、通用大模型和垂直大模型的应用场景六、总结 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;大模型的应用越来越广泛。无论是自然语言处理、计算机…...

Python第二语言(十四、高阶基础)

目录 1. 闭包 1.1 使用闭包注意事项 1.2 小结 2. 装饰器&#xff1a;实际上也是一种闭包&#xff1b; 2.1 装饰器的写法&#xff08;闭包写法&#xff09; &#xff1a;基础写法&#xff0c;只是解释装饰器是怎么写的&#xff1b; 2.2 装饰器的语法糖写法&#xff1a;函数…...

python脚本之调用其他目录脚本

import sys# 添加新路径到搜索路径中 sys.path.append(/脚本父级)# 现在可以导入该路径下的模块了 from 脚本 import 方法方法()...

C# 事件(Event)定义及其使用

1.定义个委托和类 //委托 public delegate void ProductEventHandler(Product product);/// <summary> /// 产品 /// </summary> public class Product {public int Id { get; set; }public string Code { get; set; }public string Name { get; set; }private de…...

2.负载压力测试

负载压力测试是一种重要的系统测试方法&#xff0c;旨在评估系统在正常和峰值负载情况下的性能表现。 一、基本概念&#xff1a; 负载压力测试是在一定约束条件下&#xff0c;通过模拟实际用户访问系统的行为&#xff0c;来测试系统所能承受的并发用户数、运行时间、数据量等&…...

【AI工具】jupyter notebook和jupyterlab对比和安装

简单说&#xff0c;jupyterlab是jupyter notebook的下一代。 选择安装一个即可。 一、这里是AI对比介绍 Jupyter Notebook和JupyterLab都是基于Jupyter内核的交互式计算环境&#xff0c;但它们在设计和功能上有一些关键的区别&#xff1a; 用户界面&#xff1a; Jupyter Not…...

Linux 基本指令3

date指令 date[选项][格式] %Y--年 %m--月 %d--日 %H--小时 %M--分 %S--秒 中间可用其他符号分割&#xff0c;不能使用空格。 -s 设置时间&#xff0c;会返回设置时间的信息并不是改变当前时间 设置全部时间年可用-或者&#xff1a;分割日期和时间用空格分隔&#xff…...

在Linux系统中,可以使用OpenSSL来生成CSR(Certificate Signing Request)、PEM格式的公钥和PEM格式的私钥。

在Linux系统中&#xff0c;可以使用OpenSSL来生成CSR&#xff08;Certificate Signing Request&#xff09;、PEM格式的公钥和PEM格式的私钥。以下是生成这些文件的命令&#xff1a; 首先&#xff0c;生成私钥&#xff08;通常是以.key结尾&#xff0c;但可以转换成PEM格式&am…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 团队派遣(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍓OJ题目截图 📎在线评测链接 团队派遣(100分) 🌍 评测功能需要订阅专栏…...

Python数据分析与机器学习在医疗诊断中的应用

文章目录 &#x1f4d1;引言一、数据收集与预处理1.1 数据收集1.2 数据预处理 二、特征选择与构建2.1 特征选择2.2 特征构建 三、模型选择与训练3.1 逻辑回归3.2 随机森林3.3 深度学习 四、模型评估与调优4.1 交叉验证4.2 超参数调优 五、模型部署与应用5.1 模型保存与加载5.2 …...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...