LangChain实战课——奇点时刻(二) | 豆包MarsCode AI刷题

89 阅读4分钟

引言

今天正式加入了《LangChain实战课》课程,解锁了该课程的全部内容。 根据课程首页介绍可知,该课程主要分4个模块,分别是:

  1. 启程篇:LangChain安装流程、LangChain快速入门、基础操作、以及构建“鲜花”本地知识库智能问答系统
  2. 基础篇:模型、提示模版、数据检索、记忆、链、代理六大组件
  3. 应用篇:LangChain 的工具和接口、嵌入式存储、数据库、异步通信机制、智能代理(角色扮演、头脑风暴,自主搜索,制定自动策略,尝试不同方案完成任务。最终,使诸多组件功能相互配合,共同完成复杂任务。
  4. 实战篇:部署鲜花网络电商的人脉工具,开发易速鲜花聊天客服机器人。模型调用细节,数据连接策略,记忆存储与检索。

正文

紧接上文,我们开始学习应用2:海报文案生成器

应用2: 海报文案生成器

课程中的我已经制作好了一批鲜花的推广海报,但是海报宣传内容还没确定,我需要为该海报想一些描述性的内容,以求图文并茂的展示我们的鲜花。但是我个人文字水平有限,我需要一些AI工具来帮我写一些宣传内容。

这时候LangChain“代理”就来咯!!!

image.png

鲜花图片

我们要通过以下三个步骤来对我们的代码进行前期操作。

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

操作步骤的前置工具包依赖

  • 更新LangChain到最新版本
  • 安装HuggingFace的Transformers库(开源大模型工具)
  • 安装 Pillow(Python图像处理工具包)
  • PyTorch(深度学习框架)
plain
复制代码
AI练中学
pip install --upgrade langchain
pip install transformers
pip install pillow
pip install torch torchvision torchaudio
plain
复制代码
AI练中学
#---- 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 caption
    
    def _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.invoke(input=f"{img_url}\n请创作合适的中文推广文案")

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

运行结果1:

运行结果2:

运行结果3:

说明:因为temperature=0.2代表模型拥有一定的随机性,所以大模型每次的推理过程生成的文案都不尽相同。

针对上面的鲜花图片,程序进入了AgentExecutor链,开始思考推理,并采取行动——调用Image Cationer工具,接收该工具给出的结果,并根据其返回的内容,再次进行思考推理,最后给出的文案是:“爱,让每一天充满美丽,让每一个心情都充满甜蜜。 ” 多么浪漫而又富有创意,大模型懂我!

当然,这个过程中还有很多很多的细节,比如:

  • 大模型是怎么思考的?
  • LangChain调用大模型时传入的具体提示文本是什么?
  • 代理是什么?
  • AgentExecutor Chain 是什么?
  • 它究竟是怎样调度工具的?

在后续的课程中,我会一步一步的跟着老师手撕 LangChain 内部源代码,把所有这些一点一滴地尽可能详尽理解。

关于 LangChain,我想向你分享的还有太多太多,短短的开篇词已经无法容纳了。那么,就让我最后告诉你:玩 LangChain,真的很有意思,越深入,越发觉大语言模型是一个无尽的宝藏。在这样的系统中,我们并不是生硬的去设计什么固定的逻辑,而是由语言模型通过理解和推理来决定执行什么操作以及执行的顺序

现在我准备好了。让我们一同投身到LangChain的世界中,解锁AI的无限可能!

更新日期 2024 - 11 - 1