LangChain实战课-开篇词|豆包MarsCode AI刷题

1,141 阅读6分钟

前言

参加了第六届字节跳动青训营的AI方向,从今天开始学习《LangChain 实战课》,记录一下学习心得和遇到的问题~

AI练中学理论上将所有需要的包都配置好了,如果代码不缺少包,就不需要自行配置。如果缺少某些包,用pip install 安装相关即可。

LangChain介绍

LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。

LangChain提供了一系列工具、套件和接口,可以简化创建由LLMs和聊天模型提供支持的应用程序的过程

课程介绍

  1. 启程篇:介绍LangChain系统的安装和快速入门,并指导如何利用LangChain构建基于“易速鲜花”本地知识库的智能问答系统
  2. 基础篇:深入LangChain的六大组件
  • 模型(Models) ,包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts) ,使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes) ,构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory) ,通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
  • 链(Chains) ,是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
  • 代理(Agents) ,是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!
  1. 应用篇:使用LangChain的工具和接口,进行嵌入式存储,连接数据库,引入异步通信机制,通过智能代理进行各种角色扮演、头脑风暴
  2. 实战篇:部署一个鲜花网络电商的人脉工具,并开发一个易速鲜花聊天客服机器人

工具

利用课程中的AI练中学功能边学边实践,编辑器里面集成的MarsCode AI跨越可以帮你给出很多问题的思路,例如解释代码逻辑、代码参数含义、报错修改建议……

(1)根据README.md文档进行配置(详细操作见文档)

①介绍了一些AI练中学的使用说明,熟悉一下编辑器的基础操作

②注册豆包API账号

  • 火山方舟官网注册;
  • 在API Key管理中创建API Key;
  • 在控制台的在线推理中创建推理接入点,完成模型部署;
  • 编辑/home/cloudide/.cloudiderc文件配置API_Keybase_urlmodel_endpoint
  • 在命令行中执行source ~/.cloudiderc,之后就可以使用自己豆包模型API执行课程代码

image.png

(2)安装requirements.txt中依赖包(AI练中学已配置好环境,如果程序不缺少包的话,就不用安装这些包)

命令行执行 pip install -r requirements.txt

根据 requirements.txt 文件中列出的所有依赖包和对应版本,自动下载并安装,以确保环境配置与项目的依赖需求一致。

正文

应用1:情人节玫瑰宣传语

(1)安装需要的包

os模块用于访问环境变量,以便从中获取 API 配置。

langchain_openaiLangChain提供的模块,用于集成 OpenAI 的语言模型。ChatOpenAI 类提供了访问聊天模型的接口。

(2)注册OpenAI Key

使用上述注册的火山方舟官网的API Key即可

(3)代码(使用README.md中截图的示例代码)

实例化语言模型 llm,通过环境变量获取API的key、base_url和model名称,并设置生成上限token数量。

import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    openai_api_key=os.environ.get("OPENAI_API_KEY"),
    openai_api_base=os.environ.get("OPENAI_BASE_URL"),
    model=os.environ.get("LLM_MODELEND"),
    max_tokens=200
)
test = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
print(test)

(4)生成结果

image.png

应用2:海报生成器

(1)安装需要的包

①标准库osrequests,用于访问环境变量和进行网络请求。

PIL库处理图像,transformers 库用于加载HuggingFace的图像字幕生成模型。

LangChain的相关类用于定义工具和初始化Agent。

(2)代码

①初始化图像字幕生成工具:HuggingFace中的image-caption模型

②定义LangChain图像字幕生成工具:ImageCapTool

③初始化并运行LangChain Agent

注意

  • ImageCapTool中name和description字段要类型注解为str;

  • LangChain初始化使用应用1的方式

# ---- 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: str= "ImageCaptioning"
    description: str = "使用该工具可以生成图片的文字描述,需要传入图片的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 = ChatOpenAI(
    openai_api_key=os.environ.get("OPENAI_API_KEY"),
    openai_api_base=os.environ.get("OPENAI_BASE_URL"),
    model=os.environ.get("LLM_MODELEND"),
    temperature=0.2
)
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.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")

(3)运行结果

image.png

总结

①学会了AI练中学的基本使用,利用MarrsCode AI帮助代码的理解和实现,注册了豆包API账号,完成了项目初步配置。

②使用LangChain的OpenAI语言模型,成功生成指定主题的宣传语。

③利用图像字幕生成工具HuggingFace中的image-caption模型,以及自定义的LangChain图像字幕生成工具ImageCapTool,成功使用Agent根据给定图片生成中文推广文案。