LangChain框架概念及简单的使用案例

一、LangChain介绍

LangChain是一个强大的用于开发大模型应用程序的框架,为开发提供丰富的工具和组件,使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成,从而创建出能处理各种任务的智能体应用,如问答系统,聊天机器人,文本生成。

二、LangChain核心模块介绍

模型(Models)

在LangChain中,模型接口是与大语言模型进行交互的桥梁。它支持多种类型的模型,包含大语言模型(LLMs)和聊天模型(Chat Models)。

提示词模板(PromptTemplates)

提示词用于定义输入给语言模型的提示信息,帮助模型生成更符合预期的输出。它可以包含变量,通过填充变量来生成具体的提示。

链(Chains)

链是LangChain中一个重要的概念,它将多个组件组合在一起,按照一定的顺序执行,以实现更复杂的任务。常见的链类型包含顺序链(SequnentialChain)、并行链等。

工具(Tools)

工具是LangChain中用于执行特定任务的组件,如搜索引擎工具、数据库查询工具。开发者可以将工具集成到链中,以扩展应用的功能。

记忆(Menory)

在对话式应用中,记忆组件用于保存和管理对话中的历史信息,使模型能工具上下文进行更连贯的回复。LangChain提供了多种类型的记忆,如短期记忆,长期记忆等。

三、LangChain安装

安装环境要求

  1. python版本:建议使用python 3.7及以上版本
  2. 包管理工具:推荐pip

安装步骤

安装LangChain和相关依赖

pip install langchain==0.3.7
pip install langchain-core==0.3.43
pip install langchain-openai==0.3.1

四、LangChain实战

1、基本调用:简单问答机器人

演示任何使用LangChain调用大语言模型实现简单的问答功能

知识点:大模型配置和调用,以及SystemMessgae和HumanMessage。

在LangChain中,SystemMessage用于设置系统级别的提示词,HumanMessage用于表示用户的输入

from langchain.chains.conversation.base import ConversationChain
from langchain.chains.llm import LLMChain
from langchain.chains.sequential import SequentialChain
from langchain.memory import ConversationBufferMemory
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI# 创建一个大模型对象
llm = ChatOpenAI(openai_api_base="https://ark.cn-beijing.volces.com/api/v3",api_key="",temperature=0.7,max_tokens=10240,model_name="",
)# 简单的调用
def basic_demo():result = llm.invoke([SystemMessage(content="你是一个翻译小助手,请将输入的英文翻译成中文。"),HumanMessage(content="I love programming.")])print(result)

2、内存记忆:多轮聊天机器人

展示如何使用LangChain搭建一个聊天机器人,支持多轮聊天

知识点:ConversationBuffMemory、PromptTemplate、Memory

def multi_chat_demo():# 创建一个会话内存memory = ConversationBufferMemory()# 创建一个会话对象conversation = ConversationChain(llm=llm, memory=memory)while True:user_input = input("请输入:")if user_input == "退出":breakresult = conversation.predict(input=user_input)print(f"大模型输出:{result}")

3、单节点链调用:日报生成器

演示如何搭建一个简单的链(工作流)

# 单节点链路调用(工作流)
def basic_chat_demo():# 定义提示词模板prompt_template = PromptTemplate(input_variables=["job", "type"],template="你是一个职场文档专家,可以帮我生成一个{job}岗位的{type}文档,字数不要超过300")# 定义一个链(工作流),verbose= True将他调试信息全部打印出来chain = LLMChain(llm=llm, prompt=prompt_template, verbose=True, output_key="content")# 执行工作流result = chain.invoke({"job": "前端", "type": "工作日报"})print(result)

4、顺序链调用:美食推荐

实现美食推荐链路,根据用户输入的城市,推荐该城市的特殊菜谱。

知识点:顺序链、多节点参数传递

# 多节点链路调用
def sequential_chain_demo():# 第一第一个节点提示词prompt_templeate_1 = PromptTemplate(input_variables=["city"],template="你是一个美食家,可以告诉用户{city}地区特色菜是什么,只需要说一个菜名就可以,不需要对菜进行解释")# 定义第一个节点city_chain = LLMChain(llm=llm, prompt=prompt_templeate_1, verbose=True, output_key="food")prompt_templeate_2 = PromptTemplate(input_variables=["food"],template="你是一个厨师,可以输出一个{food}的菜谱,只需要输出一个{food}的菜谱,不需要对菜进行解释")food_chain = LLMChain(llm=llm, prompt=prompt_templeate_2, verbose=True, output_key="info")# 创建一个顺序链,把两个节点按照顺序组装all_chain = SequentialChain(chains=[city_chain, food_chain],input_variables=["city"],output_variables=["city","food","info"],verbose=True)result = all_chain.invoke({"city": "上海"})print(result)

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

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

相关文章

安卓audio 架构解析

audio_port_handle_t • 定义:audio_port_handle_t标识音频设备(如扬声器、耳机)或虚拟端口(如远程 submix)。它在设备连接或策略路由时由AudioPolicyManager分配,例如通过setDeviceConnectionState()动态注…

GitHub 上 Star 数量前 8 的开源 MCP 项目

原文链接:https://www.nocobase.com/cn/blog/github-open-source-mcp-projects。 MCP 这个词真正被广泛提起,是在 2025 年年初,尤其是在 AI 工具开发圈。3 月,一场围绕 “MCP 是否能成为未来标准协议” 的争论彻底点燃了讨论热度…

【数据结构与算法】数据结构初阶:排序内容加餐(二)——文件归并排序思路详解(附代码实现)

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程

MAVROS2目前不是官方提供的标准,主要区别还是通信机制的不同,以及API接口的区别,在使用的过程中,根据对应的版本安装即可,此处进提供简易的二进制安装方法,源码安装暂不提供,前去使用mavros即可…

Ubuntu 安装 ns-3 教程

Ubuntu 安装 ns-3最全 教程 1. 环境更新 sudo apt update sudo apt install git2. Ns3 最低依赖要求 2.1 安装依赖 安装依赖网址:根据自己安装的版本安装对应依赖。 https://www.nsnam.org/wiki/Installation Ubuntu/Debian/Mint 以下软件包列表在 Ubuntu 22.…

《林景媚与命运解放者》

《林景媚与命运解放者》——当数据库成为命运的主宰,谁将成为人类自由意志的解放者?《林景媚数据库宇宙》系列第十二部第一章:解放者的召唤公元 2098 年,随着“命运终结者”的威胁被解除,PostgreSQL Quantum Engine&am…

linux编译基础知识-头文件标准路径

&#x1f4c2; ​​1. 系统路径结构差异​​ 要查看 GCC 的默认头文件搜索路径&#xff0c;可通过以下方法操作&#xff08;以 Linux 环境为例&#xff09;&#xff1a; ​​1. 查看 C 语言头文件路径​​ gcc -v -E -xc - < /dev/null 2>&1 | grep -A 100 "#in…

离线语音芯片有哪些品牌和型号?

离线语音芯片的品牌有很多&#xff0c;型号也有很多&#xff0c;因为离线语音芯片的市场很大&#xff0c;几乎所有的想要语音控制的产品都可以通过增加一颗离线语音芯片来实现语音控制的能力&#xff0c;今天主要提到的就是离线语音芯片品牌厂家之一的唯创知音。唯创知音发展历…

Linux 软件包管理

Linux 软件包管理 分析 RPM 包 Linux 发行版本以 RHEL 为代表的发行版本&#xff0c;使用rpm包管理系统&#xff1a; RHEL (Red Hat Enterprise Linux&#xff09;Fedora&#xff08;由原来的RedHat桌面版本发展而来&#xff0c;免费版本&#xff09;CentOS&#xff08;RHEL的…

使用 Vue 3.0 Composition API 优化流程设计器界面

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

2025Nacos安装Mac版本 少走弯路版本

https://github.com/alibaba/nacos 一开始看网上文章&#xff0c;随便下了一个最新的3.0.2&#xff0c;然后出现很多错误 密钥等等问题&#xff0c;最后启动了&#xff0c;但是打不开链接&#xff1a;http://localhost:8848/nacos 然后开始找问题日志&#xff0c;/.nofollow/…

sifu mod制作 相关经验

sifu mod制作一遍流程数据传递后拆开是ok的&#xff0c;没必要合并 断片不能使用原材质不然导入ue里没法片段选择 效果拔群 带自动权重就会有跟随骨骼的效果&#xff0c;空顶点组会跟随父级的原点 这个选负的会抵消胶囊的碰撞效果 应用并刷新布料模拟&#xff08;相当于工程图的…

论文精读笔记:Overview

本文档记录了一些经典论文的讲解笔记。 重读经典&#xff1a;《ImageNet Classification with Deep Convolutional Neural Networks》 重读经典&#xff1a;《Generative Adversarial Nets》 重读经典&#xff1a;《Deep Residual Learning for Image Recognition》 重读经典…

Elasticsearch+Logstash+Filebeat+Kibana单机部署

目录 一、配置准备 下载java&#xff0c;需要java环境 二、单机模式 ELK部署 修改域名解析 elasticsearch配置 启动elasticsearch服务 查看是否启用 查看监听端口 logstash服务 创建配置文件 kibana 启动服务kebana 验证 网页访问 ​编辑 生成图表 回到网页 一、配置准…

redis快速部署、集成、调优

redis快速部署、集成、调优 1.部署 1.1 docker部署 参考&#xff1a;https://blog.csdn.net/taotao_guiwang/article/details/135508643 1.2 redis部署 资源见&#xff0c;百度网盘&#xff1a;https://pan.baidu.com/s/1qlabJ7m8BDm77GbDuHmbNQ?pwd41ac 执行redis_insta…

大学生HTML期末大作业——HTML+CSS+JavaScript音乐网站

HTMLCSSJS【音乐网站】网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计&#x1f4a5; 文章目录一、&#x1f3c1; 网站题目二、&#x1f6a9; 网站描述三、&#x1f38c; 网站介绍四、&#x1f3f4; 网站效果五、&#x1f3f3;️ 网站代码六、&#x1f3f3…

ARP协议是什么?ARP欺骗是如何实现的?我们该如何预防ARP欺骗?

ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一个工作在数据链路层&#xff08;OSI第二层&#xff09;和网络层&#xff08;OSI第三层&#xff09;之间的基础网络协议&#xff0c;它的核心功能是将网络层地址&#xff08;IP地址&#xf…

一个物理引擎仿真器(mujoco这种)的计算流程

物理仿真的核心循环 一个典型的物理仿真引擎&#xff0c;在每一个时间步&#xff08;dt&#xff09;内&#xff0c;大致会执行以下流程&#xff1a; 确定当前状态 (State)&#xff1a;获取所有物体当前的位置 q 和速度 v。计算力 (Forces)&#xff1a;根据当前状态&#xff0c;…

自然语言处理NLP(3)

上文&#xff1a; 自然语言处理NLP&#xff08;1&#xff09; 自然语言处理NLP&#xff08;2&#xff09; Gated RNN & LSTM 简单RNN存在的问题 随着时间的回溯&#xff0c;简单RNN不能避免梯度消失或者梯度爆炸 梯度裁剪 用来解决梯度爆炸问题 code: g&#xff1a;所有参…

内循环全部满足条件后,为true

### 实现方式在 C 中&#xff0c;可以通过在内循环外部定义一个布尔变量&#xff0c;并在内循环的每次迭代中检查特定条件是否满足。如果所有迭代均满足条件&#xff0c;则在内循环结束后将布尔变量设置为 true。以下是一个示例代码&#xff1a;cpp #include <iostream>i…