logo

LangChain实战课的基础学习(一)

引言

以往只是简单的使用大模型进行一些基础的使用,基本就是给出问题,让模型进行回答,其实在3.5刚出来的时候,我就参考了注册的教程,注册了账号,但是因为网络不稳定,加上没有实际应用到业务中,所以属于浅尝辄止了,后来国内的大模型如雨后春笋一样,我慢慢知道了:天宫,文心一言,通义千问,智谱清言等等,但是好像每个大模型对我来说都是一样,就是简单的提问,然后找找答案了,或者一个不行,在另一个继续搜索。不知道JYM是怎么用的,可以指导指导我。
然后1024那天,就看直播嘛,主要是有抽奖,嘿嘿,然后,哎,讲的有点吸引人哦,我就听了听,然后也是扫码看到了这个AI练中学,虽然只试听3章,但是我觉得还是挺好的,整体听下来,感觉AI不再是我头脑中那种简单的你问我答的东西。
我用自己的理解稍微描述下,此处仅做记录,也许以后我有更深的认识,到时候也能看到自己的不足。我是做java编程的,那天听老师讲完,就感觉这个里面涉及的内容其实和正常编程调用API差不多的,只是这里的API是其他的相关模型,比如提到的向量数据库,切分相关文档等等。

正文

接下来,我就在课程之后进行了再运行,同时借助MarsCode针对代码进行了一些解释。
第一部分是:实现一个请给我写一句情人节红玫瑰的中文宣传语。
  
  
  
  
  
  
本文件是【开篇词|带你亲证AI应用开发的“奇点”时刻】章节的配套代码,课程链接:https://juejin.cn/book/7387702347436130304/section/7388071021892337700
您可以点击最上方的“运行“按钮,直接运行该文件;更多操作指引请参考Readme.md文件。
import os
from langchain_openai import ChatOpenAI
# llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200)
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
print(text)
  1. from langchain_openai import ChatOpenAI导入了langchain_openai模块中的ChatOpenAI类,这是一个用于与OpenAI的Chat模型进行交互的类.
  2. llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))是初始化了一个Chat模型,这行代码尝试从环境变量中获取LLM_MODELEND的值,并将其作为模型名称初始化ChatOpenAI实例。如果环境变量中没有提供模型名称,则会使用默认值(如果有)。
  3. text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")这行代码使用llm实例的predict方法生成文本。传入的字符串是一个提示,要求模型生成一句关于情人节红玫瑰的中文宣传语。
  4. 最后是打印print(text)
总结来说,这段代码的目的是使用OpenAI的Chat模型根据给定的提示生成文本,并将生成的文本打印出来。
有的小伙伴看到这里会觉得,这也没什么呀,直接提问大模型,也会给出答案的呀!如下所示:
是的,的确,在上面这个例子中,没有什么特殊的,但是以上只是一个简单的示例,就像输出hello world一样,我们可以接着丰富内容和结构。
  
  
  
  
  
  
本文件是【开篇词|带你亲证AI应用开发的“奇点”时刻】章节的配套代码,课程链接:https://juejin.cn/book/7387702347436130304/section/7388071021892337700
您可以点击最上方的“运行“按钮,直接运行该文件;更多操作指引请参考Readme.md文件。
# ---- Part 0 导入所需要的类
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
# ---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
print("正在初始化图像字幕生成模型...")
# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)
print("初始化图像字幕生成模型成功")
# ---- Part II 定义图像字幕生成工具类
class ImageCapTool(BaseTool):
name = "Image captioner"
description = "使用该工具可以生成图片的文字描述,需要传入图片的URL."
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 caption
def _arun(self, query: str):
raise NotImplementedError("This tool does not support async")
# ---- PartIII 初始化并运行LangChain智能体
# llm = OpenAI(temperature=0.2)
llm = ChatOpenAI(
model=os.environ.get("LLM_MODEL_4K_FUNCTION_CALL"),
temperature=0,
)
print("初始化大语言模型成功")
# 使用工具初始化智能体并运行
tools = [ImageCapTool()]
agent = initialize_agent(
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
tools=tools,
llm=llm,
verbose=True,
handle_parsing_errors=True,
)
img_url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg"
# agent.run(input=f"{img_url}\n请创作合适的中文推广文案")
agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")
以上代码是一个使用LangChain和Hugging Face的Transformers库来生成图像描述并基于此描述生成推广文案的Python脚本。
  
  
  
  
  
  
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
1.以上代码首先是导入了多个模块,包括用于操作系统交互的os,用于HTTP请求的requests,用于图像处理的PIL,用于图像字幕生成的transformers,用于LangChain工具的langchain.tools,用于OpenAI模型的langchain_openai,以及用于初始化和运行LangChain智能体的langchain.agents。可以看到这样细致的导入模块后会把功能做的更精准,我们可以使用一个通用的大模型来完成任务,但是针对性的使用模块可以更灵活,也更精确。
  
  
  
  
  
  
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
print("正在初始化图像字幕生成模型...")
# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)
print("初始化图像字幕生成模型成功")
以上代码始化了一个来自Hugging Face的图像字幕生成模型。它首先指定了要使用的模型名称,然后初始化了一个处理器(用于处理图像)和一个生成模型(用于生成字幕)。
  
  
  
  
  
  
class ImageCapTool(BaseTool):
name = "Image captioner"
description = "使用该工具可以生成图片的文字描述,需要传入图片的URL."
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 caption
def _arun(self, query: str):
raise NotImplementedError("This tool does not support async")
定义了一个名为ImageCapTool的工具类,它继承自BaseTool。这个工具类有一个_run方法,用于根据传入的图片URL生成图像的文字描述。它还定义了一个_arun方法,用于异步运行,但这里抛出了一个NotImplementedError,表示该工具不支持异步。
  
  
  
  
  
  
# llm = OpenAI(temperature=0.2)
llm = ChatOpenAI(
model=os.environ.get("LLM_MODEL_4K_FUNCTION_CALL"),
temperature=0,
)
print("初始化大语言模型成功")
# 使用工具初始化智能体并运行
tools = [ImageCapTool()]
agent = initialize_agent(
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
tools=tools,
llm=llm,
verbose=True,
handle_parsing_errors=True,
)
img_url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg"
# agent.run(input=f"{img_url}\n请创作合适的中文推广文案")
agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")
  1. 以上代码初始化了一个OpenAI的Chat模型,然后使用这个模型和之前定义的ImageCapTool工具初始化了一个LangChain智能体。最后,它使用这个智能体根据给定的图片URL生成了一个中文推广文案。
总的来说,这段代码展示了如何使用LangChain和Hugging Face的Transformers库来构建一个能够理解图像并生成相应推广文案的智能系统。
这个功能直接使用大模型也可以完成,如下所示:
上面引入了一个重要的库:Hugging Face,这个库在机器学习社区很火。目前已经共享了超100,000个预训练模型,10,000个数据集,变成了机器学习界的github。一些开源框架本质上就是调用transfomer上的模型进行微调(当然也有很多大牛在默默提供模型和数据集)。他既提供了数据集,又提供了模型可以随便调用下载。
最后借用老师的一句话来总结:玩 LangChain,真的很有意思,越深入,越发觉大语言模型是一个无尽的宝藏。在这样的系统中,
我们并不是生硬的去设计什么固定的逻辑,而是由语言模型通过理解和推理来决定执行什么操作以及执行的顺序
以上就是我在第一课的学习中所知道的。
————————————————
版权声明:本文为稀土掘金博主「bramble荆棘」的原创文章
原文链接:https://juejin.cn/post/7430785950487609363
如有侵权,请联系千帆社区进行删除
评论
用户头像