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

【LangChain学习之旅】—(1) 何谓 LangChain

Reference:LangChain 实战课

【LangChain学习之旅】— 何谓 LangChain

  • 如何理解 LangChain
  • LangChain 中的具体组件
  • LangChain调用ChatGPT
  • LangChain代理功能

如何理解 LangChain

  • 作为一种专为开发基于语言模型的应用而设计的框架,通过 LangChain,不仅可以通过 API 调用如 ChatGPT、GPT-4、Llama 2 等大型语言模型,还可以实现更高级的功能。
  • 正有潜力且具有创新性的应用,不仅仅在于能通过 API 调用语言模型,更重要的是能够具备以下两个特性:
    1. 数据感知:能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。
    2. 具有代理性:能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。
  • 因此,LangChain 框架的设计目标,是使这种 AI 类型的应用成为可能,并帮助我们最大限度地释放大语言模型的潜能。

总而言之,LangChain 是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。LangChain 提供了一系列工具、套件和接口,可以简化创建由 LLMs 和聊天模型提供支持的应用程序的过程。

LangChain 中的具体组件

LangChain 中的具体组件包括:

  • 模型(Models),包含各大语言模型的 LangChain 接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts),使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes),构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory),通过短时记忆和长时记忆,在对话过程中存储和检索数据,让 ChatBot 记住你是谁。
  • 链(Chains),是 LangChain 中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
  • 代理(Agents),是另一个 LangChain 中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主 Agent 成为可能!你的 App 将产生自驱力!
  • 在这里插入图片描述

LangChain调用ChatGPT

  1. pip install langchain 安装 LangChain
  2. pip install openai 来安装 OpenAI
  3. 在 OpenAI 网站注册属于自己的 OpenAI Key(淘宝1块钱可以买5$额度GPT3.5)。
import os
os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003",max_tokens=200)
text = llm("请问你是谁?")
print(text)

在这里插入图片描述

LangChain代理功能

你已经制作好了一批鲜花的推广海报,想为每一个海报的内容,写一两句话,然后 post 到社交平台上,以期图文并茂。这个需求,特别适合让 AI 帮你批量完成,不过,ChatGPT 网页可不能读图。下面,我们就用 LangChain 的“代理”调用“工具”来完成自己做不到的事情。在这里插入图片描述
我们就用一段简单的代码实现上述功能。这段代码主要包含三个部分:

  1. 初始化图像字幕生成模型(HuggingFace 中的 image-caption 模型)。
  2. 定义 LangChain 图像字幕生成工具。
  3. 初始化并运行 LangChain Agent(代理),这个 Agent 是 OpenAI 的大语言模型,会自动进行分析,调用工具,完成任务。

不过,这段代码需要的包比较多。在运行这段代码之前,你需要先更新 LangChain 到最新版本,安装 HuggingFace 的 Transformers 库(开源大模型工具),并安装 Pillow(Python 图像处理工具包)和 PyTorch(深度学习框架)

pip install --upgrade langchain
pip install transformers
pip install pillow
pip install torch torchvision torchaudio
#---- Part 0 导入所需要的类
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain import OpenAI
from langchain.agents import initialize_agent, AgentType#---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)#---- Part II 定义图像字幕生成工具类
class ImageCapTool(BaseTool):name = "Image captioner"description = "为图片创作说明文案."def _run(self, url: str):# 下载图像并将其转换为PIL对象image = Image.open(requests.get(url, stream=True).raw).convert('RGB')# 预处理图像inputs = processor(image, return_tensors="pt")# 生成字幕out = model.generate(**inputs, max_new_tokens=20)# 获取字幕caption = processor.decode(out[0], skip_special_tokens=True)return captiondef _arun(self, query: str):raise NotImplementedError("This tool does not support async")#---- PartIII 初始化并运行LangChain智能代理
# 设置OpenAI的API密钥并初始化大语言模型(OpenAI的Text模型)
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
llm = OpenAI(temperature=0.2)# 使用工具初始化智能代理并运行它
tools = [ImageCapTool()]
agent = initialize_agent(agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,tools=tools,llm=llm,verbose=True,
)
img_url = 'https://mir-s3-cdn-cf.behance.net/project_modules/hd/eec79e20058499.563190744f903.jpg'
agent.run(input=f"{img_url}\n请给出合适的中文文案")

根据输入的图片 URL,由 OpenAI 大语言模型驱动的 LangChain Agent,首先利用图像字幕生成工具将图片转化为字幕,然后对字幕做进一步处理,生成中文推广文案。
在这里插入图片描述

相关文章:

  • 级数@常数项级数@正项级数审敛法总结
  • Vasya the Hipster
  • C++ 数据结构知识点合集-C/C++ 数组允许定义可存储相同类型数据项的变量-供大家学习研究参考
  • QT自带打包问题:无法定位程序输入点?metaobject@qsound
  • 在ubuntu上rmp打包:由二进制(安装后的目录)构建rpm包
  • c++ websocket 协议分析与实现
  • 关于#c语言#的问题:分析递归调用的过程◇画出调用过程各语句执行过程
  • TDengine 签约大唐水电院,助力水电时序数据高效写入存储查询
  • 基于Python数据可视化的网易云音乐歌单分析系统
  • ubuntu创建apt-mirror本地仓库
  • R语言【rgbif】——使用rgbif获取非行政单位区域内的物种记录信息(以泛喜马拉雅地区为例)
  • C++初学者使用Dev-C++5.11必备的小技巧
  • 【Proteus仿真】【51单片机】电子称重秤
  • <VR串流线方案> PICO 4 Pro VR串流线方案 Oculus Quest2 Link串流线方案
  • PyTorch : torch.cuda.amp: 自动混合精度详解
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • CAP理论的例子讲解
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript异步流程控制的前世今生
  • Just for fun——迅速写完快速排序
  • php中curl和soap方式请求服务超时问题
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React-生命周期杂记
  • Vue2.0 实现互斥
  • 当SetTimeout遇到了字符串
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 漂亮刷新控件-iOS
  • 如何实现 font-size 的响应式
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • ​flutter 代码混淆
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​什么是bug?bug的源头在哪里?
  • ###C语言程序设计-----C语言学习(3)#
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .md即markdown文件的基本常用编写语法
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET DataGridView数据绑定说明
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 常见的偏门问题
  • .ui文件相关
  • @Service注解让spring找到你的Service bean
  • [.NET]桃源网络硬盘 v7.4
  • [1127]图形打印 sdutOJ
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android Studio] 开发Java 程序
  • [BT]BUUCTF刷题第9天(3.27)