LangChain入门和应用#1
LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用
LangChain 的预构建链功能,就像乐高积木一样,无论你是新手还是经验丰富的开发者,都可以选择适合自己的部分快速构建项目。对于希望进行更深入工作的开发者,LangChain 提供的模块化组件则允许你根据自己的需求定制和创建应用中的功能链条。
LangChain支持Python和JavaScript两个开发版本,我们这个教程中全部使用Python版本进行讲解。
安装和配置LangChain
LangChain的基本安装特别简单。
pip install langchain
这是安装 LangChain 的最低要求。LangChain 要与各种模型、数据存储库集成,比如说最重要的OpenAI的API接口,比如说开源大模型库HuggingFace Hub,再比如说对各种向量数据库的支持。默认情况下,是没有同时安装所需的依赖项。
也就是说,当你 pip install langchain
之后,可能还需要 pip install openai
、pip install chroma
(一种向量数据库)……
用下面两种方法,我们就可以在安装 LangChain 的方法时,引入大多数的依赖项。
安装LangChain时包括常用的开源LLM(大语言模型) 库:
pip install langchain[llms]
不懂的小伙伴我们也会在以后单独配置模型
OpenAI API
下面说一说OpenAI的API。
LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。
因此,要了解LangChain的底层逻辑,需要了解大模型的API的基本设计思路。而目前接口最完备的、同时也是最强大的大语言模型,当然是OpenAI提供的GPT家族模型。
当然,要使用OpenAI API,你需要先用科学的方法进行注册,并得到一个API Key。
但是,考虑到国内的便利性和学习的需求,我们还是使用国内的大模型去实践
智谱 AI
如何在 LangChain 中使用 ZHIPU AI API,使用 langchain.chat_models.ChatZhipuAI。
GLM-4 是一种与人类意图一致的多语言大型语言模型,具有问答、多轮对话和代码生成等功能。与上一代相比,新一代基模型 GLM-4 的整体性能得到了显着提升,支持更长的上下文;更强大的多模态;支持更快的推理速度,更高的并发性,大幅降低推理成本;同时,GLM-4 增强了智能代理的能力。
安装
首先,在 Python 环境中安装 zhipuai 包。运行以下命令
#!pip install --upgrade httpx httpx-sse PyJWT
导入所需模块
安装后,将必要的模块导入 Python 脚本
pip install langchain_community
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
API 参考:ChatZhipuAI | AIMessage | HumanMessage | SystemMessage
设置API 密钥
登录 ZHIPU AI 获取 API 密钥以访问模型。
import osos.environ["ZHIPUAI_API_KEY"] = "zhipuai_api_key"
初始化 ZHIPU AI 聊天模型
以下是初始化聊天模型的方法
chat = ChatZhipuAI(model="glm-4", // 模型选择,参考控制台,有些模型是付费的。temperature=0.5, // 采样温度,一般默认0.5
)
基本用法
使用系统和人类消息调用模型,如下所示
messages = [AIMessage(content="Hi."),SystemMessage(content="Your role is a poet."),HumanMessage(content="Write a short poem about AI in four lines."),
]
这段代码是使用 Langchain 库来处理聊天模型的请求。
在代码中,具体使用的 Langchain 模块包括:
langchain_community.chat_models
中的ChatZhipuAI
类:用于创建与 ZhipuAI 进行交互的实例。langchain_core.messages
中的消息类(AIMessage
、HumanMessage
和SystemMessage
):用于构建聊天上下文中的消息格式。
response = chat.invoke(messages)
print(response.content) # Displays the AI-generated poem
完整代码
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessageimport osos.environ["ZHIPUAI_API_KEY"] = "你的key"
chat = ChatZhipuAI(model="glm-4",temperature=0.5,
)
messages = [AIMessage(content="你好,有什么可以帮你的吗"),SystemMessage(content="你现在是一个诗人"),HumanMessage(content="写一首四行小诗"),
]
response = chat.invoke(messages)
print(response.content) # Displays the AI-generated poem
注意,初次使用可能会报这个错误,只需按提示安装相应的包即可
*ImportError: jwt package not found, please install it with`pip install pyjwt`*
// pyjwt 是一个用于处理 JSON Web Tokens (JWT) 的 Python 库。
安装pyjwt:
pip install pyjwt
模型将会输出一个四行小诗
现在,你已经完成了LangChain调用国产模型的基本使用。
下一节,我们来做一个快速实战项目,简单的体会下langchain的优势
选择更多的AI
如果智谱AI无法使用或你有更想要的ai,查询官方文档的ai支持
聊天模型 | 🦜️🔗 LangChain 中文
LangChain Python API Reference — 🦜🔗 LangChain documentation
end
下一节:内部员工知识库问答系统
相关文章:
LangChain入门和应用#1
LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具,它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地,都能利用它流畅地调用语言模型,并基于语言模型的“预测”或者说“推理”能力开发新的应用 La…...
[每日一题] 3356. 零数组变换ii
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 3356. 零数组变换 II - 力扣(LeetCode) 2. 题目描述 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri, va…...
Docker网关冲突导致容器启动网络异常解决方案
一、故障现象 执行docker-compose up命令时服务器网络中断控制台显示"Creating network xxxxxxx with the default driver"通过ifconfig可见docker0网卡docker network ls显示新创建的网络接口 二、根本原因 Docker服务默认创建docker0虚拟网卡(默认地…...
基于stm32的空气质量监测系统
目录 摘 要 Abstract 目 录 第 1 章 绪论 第 2 章 空气质量监测系统总体方案设计 第3章 硬件的部分介绍 3.1 硬件系统的的原理方框图 3.2 硬件系统的的原理图 3.3 温湿度传感器 3.4 甲醛传感器 3.5 报警提醒模块及其他 3.6 系统工作原理 3.7 本章小结 第四章 方案…...
Leetcode-3 判断根结点是否等于子结点之和
Leetcode-3 判断根结点是否等于子结点之和(简单) 题目描述思路分析通过代码(python) 题目描述 **给你一个 二叉树 的根结点 root,该二叉树由恰好 3 个结点组成:根结点、左子结点和右子结点。 如果根结点值…...
《算法笔记》12.1小节——字符串专题->字符串hash进阶 问题 A: 求最长公共子串(串)
题目描述 求采用顺序结构存储的串s和串t的一个最长公共子串,若没有则输出false,若最长的有多个则输出最先出现的那一串。 输入 输入两个字符串 输出 输出公共子串 样例输入 abcdef adbcef 样例输出 bc 分析:用字符串哈希解决。检查…...
为何天线的长度设计为频率波长的四分之一?
目录 1. 电磁波的波长与频率关系 2. 四分之一波长天线的工作原理 3. 为什么选择 λ/4 而不是其他长度? 4. 实际应用中的例子 5. 总结 为何天线的长度设计为频率波长的四分之一? 天线的长度设置为频率波长的四分之一主要是基于电磁波的传播特性以及天线的…...
端口号详解(技术向)
端口号详解(技术向) 一、核心定义 **端口号(Port Number)**是 传输层协议(TCP/UDP) 的逻辑标识,用于在同一设备上区分不同应用程序的网络通信入口。端口号是用两个字节(无符号&…...
git合并多次commit提交
首先查看历史记录 git log 查看你想要合并的commit是哪些(注意:这里是逆序,最上的是最新提交) 找到当前想要合并的最后一个记录,复制该记录的下一个记录的 id(黄色部分commit id),…...
深入浅出Java-Lambda表达式
深入浅出Java-Lambda表达式 一、Lambda 表达式特征二、Lambda 表达式的基础语法与结构2.1 基本语法格式2.2 语法简化规则2.3 与匿名内部类的对比 三、函数式接口:Lambda 表达式的载体3.1 函数式接口的定义3.2 常用函数式接口分类3.2.1 消费型接口(Consum…...
FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现
起因:因为要设计一个波珠螺丝固定器,为了不跑偏,需要在螺柱上加工一个直径6mm,深度1.2mm的圆弧凹槽所以想用泉州制造的6.8车铣加工。 但是该加工目前不支持轴向的钻孔,所以想着干脆在两端加上M8的螺栓,也起…...
java并发-线程池
文章目录 线程池定义组成工作参数设置种类关闭 线程池 定义 线程池就是提前创建好一批线程,反复复用处理任务,避免频繁创建销毁线程,同时控制线程数量,让系统更高效、稳定。 举个例子: 场景假设: 你开了…...
openlayer:06点击按钮实现地图动画移动
如何实现点击去辽宁按钮实现用动画效果将地图顺滑的切换到辽宁区域,点击回北京按钮后同样将地图使用动画效果移动回到辽宁。 本文介绍了如何通过OpenLayers库实现地图在北京市和辽宁省之间的平滑切换动画。首先,使用View类设置地图的初始中心点为北京市…...
使用 Matter.js 创建封闭箱体与里面的小球
下面是一个使用 Matter.js 创建的示例,包含一个地面、由4个长方形组成的封闭箱体,箱体内有10个不同颜色的小球。箱体可以被拖动,而小球被限制在箱体内部。 <!DOCTYPE html> <html> <head><title>Matter.js 可拖动箱体与小球</title><styl…...
自动化软件如何确保高可用性和容错性?
在数字化转型的浪潮中,RPA(机器人流程自动化)技术成为众多企业和机构实现业务流程优化的得力助手。以金智维为例,作为 RPA 领域的佼佼者,其技术在金融、政务等行业广泛应用,承担着大量关键业务流程的自动化…...
变电站综合自动化系统
系统介绍 a安科瑞 18702112163 变电站综合自动化系统为企业变电站提供了完整的SCADA功能,包括主接线图、设备工况、实时数据显示、定值管理、SOE报警/记录/查询/打印、棒图、实时/历史曲线、语音报警、历史信息查询、用户权限管理、各种运行数据统计分析报表等。系…...
【2025.05】Anaconda新手安装+配置+环境创建教程
本文目录 一、安装前述二、下载与安装1、下载2、选择安装类型3、选择安装路径: 三、设置环境1、添加conda目录到path2、修改envs\pgks默认目录第一种:修改.condarc文件第二种:使用conda config命令 四、修改镜像源五、常用命令(27…...
React-改变当前页class默认的样式
比如antd for mobile,已经定义了默认的ui的class样式,如果想在当前页面的控件显示特殊的样式,除了指定style外,还可以强制改变默认class的样式,比如我想改变list.item的字体。 在返回渲染布局里面加上 return (<&…...
腾讯游戏安全与高通合作构建PC端游安全新格局
导语:5月16日,2025游戏安全行业峰会在深圳举行,腾讯游戏安全ACE与高通(中国)在峰会上就腾讯游戏安全方案正式宣布达成行业生态合作。双方将依托高通技术公司专门面向AI PC打造的骁龙X系列平台,共同为《无畏…...
Token类型与用途详解:数字身份的安全载体图谱
在现代数字身份体系中,Token如同"数字DNA",以不同形态流转于各类应用场景。根据Okta的最新研究报告,平均每个企业应用使用2.7种不同类型的Token实现身份验证和授权。本文将系统梳理主流Token类型及其应用场景,通过行业典…...
【Linux基础I/O】文件调用接口、文件描述符、重定向和缓冲区
【Linux基础I/O一】文件描述符和重定向 1.C语言的文件调用接口2.操作系统的文件调用接口2.1open接口2.2close接口2.3write接口2.4read接口 3.文件描述符fd的本质4.标准输入、输出、错误5.重定向5.1什么是重定向5.2输入重定向和输出重定向5.3系统调用的重定向dup2 6.缓冲区 1.C语…...
软考中级软件设计师——操作系统考试题型
一、PV操作与进程同步(必考大题) 1. 真题示例(2020年真题) 题目: 三个进程P1、P2、P3共享一个缓冲区,P1生产数据放入缓冲区,P2和P3消费数据。要求: 缓冲区大小为10,满时…...
transformer归一化层优化:深度解读 RMSNorm (Root Mean Square Layer Normalization,均方根层归一化)
导读:RMSNorm 把传统 LayerNorm 的“减均值(centering) 除标准差(scaling)”简化为“直接除以向量均方根 (Root Mean Square, RMS,均方根)”。这一改动让归一化既 更省算 又 同样稳定,因而成为 …...
java基础 之 Hash家族(一)
文章目录 HashCode定义代码使用使用场景 HashMap定义常用方法使用场景 ConcurrentHashMap定义常用方法使用场景 HashTable定义常用方法使用场景 HashSet定义常用方法使用场景你想到过吗? HashMap、ConcurrentHashMap、HashTable的对比总结 HashCode 定义 hashcode是…...
windows服务器部署jenkins工具(二)
jenkins的大致流程:新增任务->配置任务->构建(打包)项目->部署(发布) 具体如何使用,我这里就不多讲了。这次就给大家讲讲,jenkins安装之后使用过程中存在的一些问题。 1.maven项目如…...
机器学习第二十讲:网格搜索 → 像尝试所有密码组合找最佳解锁方式
机器学习第二十讲:网格搜索 → 像尝试所有密码组合找最佳解锁方式 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 网…...
【人工智能发展史】从黎明到曙光01
人工智能的史诗:从黎明到曙光 序曲:晨曦微露 故事的序幕拉开于一个思想激荡的年代,1956年,达特茅斯会议的钟声,如同第一缕晨曦,宣告了"人工智能"纪元的到来。那个夏天,在新罕布什尔…...
ollama使用gpu运行大模型
罗列ollma镜像 ollama list拉取ollama镜像源里面的模型: ollama pull qwen2:1.5b下载CudaToolkit https://developer.nvidia.com/cuda-toolkit-archive 我这里选择11.7的万金油版本,从来没出过bug Ollama安装好后,为了让推理跑在GPU上&am…...
Linux电源管理——PSCI初始化流程和多核启动流程
目录 一、PSCI 初始化流程 1、PSCI设备树节点 2、PSCI kernel初始化流程 get_set_conduit_method set_conduit psci_probe 二、CPU PSCI 操作初始化流程 1、CPU 设备树节点 2、 struct cpu_operations 3、kernel 流程 cpu_read_bootcpu_ops smp_init_cpus 三、CPU…...
Linux问题排查-引起服务器带宽使用率高的内鬼
Linux网络流量监控与瓶颈分析全攻略:从基础命令到进程级方案 一、网络带宽查询与实时流量监控 1. 查询主机网络带宽 网卡理论带宽 通过ethtool命令查看网卡最大支持速率,例如: ethtool eth0 # 替换为实际网卡名(如ens33&#x…...
《微服务架构设计模式》笔记
思维导图 1-3章 4-6 章 5-13 章 资料 配套代码仓库:https://github.com/microservices-patterns/ftgo-application 作者网站:https://microservices.io/...
基于JDBC的信息管理系统,那么什么是JDBC呢?
JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功能 建立…...
百度地图的地铁图API所有城市的城市名和citycode的对照关系列表
百度地图的地铁图API所有城市的城市名和citycode的对照关系列表 城市keywordcitycode北京beijing131上海shanghai289广州guangzhou257深圳shenzhen340重庆chongqing132天津tianjin332石家庄shijiazhuang150南京nanjing315成都chengdu75沈阳shenyang58杭州hangzhou179武汉wuhan2…...
信息学奥赛一本通 1853:【08NOIP提高组】传纸条 | 洛谷 P1006 [NOIP 2008 提高组] 传纸条
【题目链接】 ybt 1853:【08NOIP提高组】传纸条 洛谷 P1006 [NOIP 2008 提高组] 传纸条 【题目考点】 1. 动态规划:坐标型动态规划 【解题思路】 抽象问题,存在m乘n的网格,每个格子中有一个数值,即同学愿意帮忙的…...
APM32小系统键盘PCB原理图设计详解
APM32小系统键盘PCB原理图设计详解 一、APM32小系统简介 APM32微控制器是国内半导体厂商推出的一款高性能ARM Cortex-M3内核微控制器,与STM32高度兼容,非常适合DIY爱好者用于自制键盘、开发板等电子项目。本文将详细讲解如何基于APM32 CBT6芯片设计一款…...
【Linux我做主】探秘进程与fork
进程和fork 父子进程和forkgithub地址前言1. 进程的标识符PID1.1 查看系统内所有的进程1.2 kill杀掉进程1.3 获取进程的PID1.4 bash与父子进程 2. 创建进程与fork2.1 fork创建子进程2.2 fork困惑的解释0. fork的工作原理1. 为什么给子进程返回0,给父进程返回子进程P…...
学习python day4
1.顺序语句结构 #赋值语句 name张三 age20 a,b,c,droom#字符串分解赋值 print(a,b,c,d) #输入输出也是典型的顺序结构 nameinput(请输入您的姓名:) ageeval(input(请输入您的年龄:)) #使用eval进行转换 print(姓名:,name) print(年龄&#x…...
如何通过外链建设提升Shopify独立站的权重和排名
一、外链质量评估与筛选原则 相关性优先 选择与自身行业、产品或目标用户群体高度相关的网站(如行业论坛、垂直媒体、评测博客)交换外链,避免低相关性垃圾链接导致搜索引擎惩罚。 权威性指标 关注外链来源网站的域名权威(DA…...
高并发内存池|六、page cache的设计
六、page cache的设计 1. page cache的结构 page cache 也是一个哈希桶结构,但它的映射结构与前两个 cache 不同。它的每一个桶是容量从 1 到 128 页大小的内存块,桶中的每个内存块由 SpanList 管理。page cache 的内存由其向系统申请所得,…...
C++线程池实现
C线程池实现 知识点补充为什么要实现线程池线程池的实现过程 知识点补充 在C11中引入了对线程库的支持,接下来我们介绍一下跟线程相关的一些知识点: 线程对象的构造方式 在C11中主要提供的三种线程的构造方式:无参构造、带参构造和调用移动构…...
#Redis缓存篇#(七)分布式缓存
目录 一 单节点Redis 1 单节点的问题 二 分布式缓存 1 Redis持久化 (1 RDB持久化 (2 AOF持久化 2 Redis主从集群 (1 搭建主从架构 (2 主从数据同步原理 3 Redis哨兵 (1 哨兵的作用和原理 (2 搭…...
【VSCode】安装与 ssh 免密登录
【VSCode】安装与 ssh 免密登录 下载SSH 登录设置免密登录关闭远程连接删除ssh连接(慎用!!!删除了建立的连接就没有了!!) 下载 https://code.visualstudio.com/docs/?dvwin64user 选择安装路径…...
【Python解决八皇后问题】回溯算法与优化策略全解析
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现基础回溯实现位运算优化…...
判断一个元素是否在可视区域
判断元素是否在可视区域的方法 方法一:offsetTop 和 scrollTop 通过计算元素的 offsetTop 和容器的 scrollTop 来判断元素是否位于视口内。这种方法适用于简单的垂直滚动场景。 优点: 实现简单,性能较好。缺点: 不支持复杂的布局结构(如嵌套滚动),无法处理水平方向上的可…...
作物遗传与种质创新利用全国重点实验室-随笔10
作物遗传与种质创新利用全国重点实验室依托于南京农业大学,2022年11月完成国家重点实验室重组工作,由原名称“作物遗传与种质创新国家重点实验室”正式更名为“作物遗传与种质创新利用全国重点实验室”。 实验室面向国家粮食安全和农业高质量发展的重大战…...
分布式电源的配电网无功优化
分布式电源(Distributed Generation, DG)的大规模接入配电网,改变了传统单向潮流模式,导致电压波动、功率因数降低、网损增加等问题,无功优化成为保障配电网安全、经济、高效运行的关键技术。 1. 核心目标 电压稳定性:抑制DG并网点(PCC)及敏感节点的电压越限(如超过5%…...
游戏引擎学习第301天:使用精灵边界进行排序
回顾并为今天的内容做准备 昨天,我们解决了一些关于排序的问题,这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题,但我们提出了一个看起来合理的排序标准。 有两点…...
网络框架二次封装:基于Kotlin的高扩展性网络请求框架完整实现
完整目录结构 1. 架构设计1.1 分层架构1.2 核心组件1.3 接口关系图2. 基础配置实现2.1 NetworkConfig完整代码2.2 CacheConfig完整代码3. 核心网络客户端3.1 SmartHttpClient完整实现3.2 单例管理3.3 服务创建与执行4. DSL请求构建器4.1 NetworkRequest完整实现4.2 生命周期绑…...
高噪声下扩展边缘检测算子对检测边缘的影响
目录 一、常见的边缘检测算子 二、扩展边缘检测算子对检测边缘的影响 三、结论 一、常见的边缘检测算子 Sobel 算子: Prewitt算子;...
Linux 内核音视频架构(V4L2 )介绍
一.概述 Linux 内核中的 V4L2(Video for Linux Two)框架 是用于管理音视频设备(如摄像头、电视调谐器、视频采集卡等)的核心子系统。 它提供了一套统一的接口,使得用户空间应用程序能够方便地访问和控制硬件设备&…...