LangChain实战课-启程篇:从 0 到 1 (一) | 豆包MarsCode AI刷题

428 阅读7分钟

LangChain简介

  1. LangChain是一个专为开发基于大语言模型(LLMs)应用而设计的新型框架
  2. 作为程序设计者可以利用大模型的潜能以及LangChain的便捷,开发出令人惊叹的智能应用
  3. 框架的设计目标,是使这种AI类型的应用成为可能,并帮助我们最大限度地释放大语言模型的潜能

LangChain的核心特性

  • 数据感知:将语言模型与其他数据源连接,实现对多样性数据的理解与利用
  • 代理性:允许语言模型与其环境互动,使模型能更好地理解和响应环境

课程介绍

  • 启程篇:从 0 到 1
    • 内容:LangChain的安装流程和快速入门操作
    • 实践:构建基于“易速鲜花”本地知识库的智能问答系统
    • 目标:直观感受LangChain的强大功能
  • 基础篇:深入 6 大组件
    • 模型(Models) :各大语言模型的接口、调用细节以及输出解析机制
    • 提示模板(Prompts) :提示工程流线化,进一步激发大语言模型的潜力
    • 数据检索(Indexes) :建立和操作文档,返回相关文档以搭建知识库
    • 记忆(Memory) :通过短时和长时记忆存储和检索对话数据
    • 链(Chains)封装功能的核心机制,灵活完成常见用例
    • 代理(Agents)另一个LangChain中的核心机制,使大模型自主调用工具,形成智能自主Agent
  • 应用篇:积累场景中的智慧
    • 内容:LangChain组件在实际场景中的应用
    • 实践:嵌入式存储、数据库连接、异步通信、智能代理的角色扮演等
    • 目标:通过实际案例展示组件了解如何共同完成复杂任务,提升实战能力
  • 实战篇:动手!
    • 项目:部署鲜花网络电商的人脉工具,开发易速鲜花聊天客服机器人
    • 实践:从模型调用到数据连接,再到记忆的存储与检索,掌握构建智能系统的每个环节
    • 目标:能够独立利用LangChain构建智能问答系统,适用于企业或个人需求

README.md文档

  1. 注册豆包API账号
  2. 访问火山方舟官网完成账号注册和服务授权
  3. 在控制台的 API Key管理 页面中创建 API Key
  4. 在控制台的 在线推理页面 中创建推理接入点,推荐使用doubao-pro-32k作为主力模型,模型部署完成后即可获得模型的base_url和model_endpoint
  5. 编辑项目中的  /home/cloudide/.cloudiderc 文件,将API_Key、base_url、model_endpoint 配置在环境变量中,在命令行中执行 source ~/.cloudiderc ,之后就都可以使用自己豆包模型API执行课程代码
import os

# 设置环境变量
os.environ["OPENAI_API_KEY"] = "PERSONAL_OPENAI_API_KEY"
os.environ["OPENAI_BASE_URL"] = "PERSONAL_OPENAI_BASE_URL"
os.environ["LLM_MODELEND"] = "PERSONAL_LLM_MODELEND"

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

  1. 安装所需包(不用重复pip install -r requirements~ 环境里面装好了)
  2. 获取 OpenAI Key:注册并获取属于自己的 OpenAI API Key(LangChain 也支持其他开源大语言模型,但本课程主要使用 OpenAI 的 GPT 系列模型)
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)

应用2:海报文案生成器

  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
  • os: 用于访问环境变量(如 API Key)
  • requests: 用于从 URL 下载图片
  • PIL: Python Imaging Library,用于处理图像
  • transformers: Hugging Face 提供的库,包含图像字幕生成模型
  • langchain: 用于构建智能代理的框架,提供工具和接口来与 LLMs 交互
  1. 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("初始化图像字幕生成模型成功")
  • BLIP模型: 该部分初始化了 BLIP(Bootstrapped Language-Image Pre-training)图像字幕生成模型
  • processor: 处理器用于准备图像以供模型使用
  • model: 实际的图像字幕生成模型
  1. Part II: 定义图像字幕生成工具类
class ImageCapTool(BaseTool):  
    name: str = "ImageCaptioning"  
    description: str = "使用该工具可以生成图片的文字描述,需要传入图片的URL."  

    def _run(self, url: str) -> str:  
        try:  
            image = Image.open(requests.get(url, stream=True).raw).convert("RGB")  
        except Exception as e:  
            return f"无法加载图像: {e}"  

        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
  • description: 对工具的功能进行说明,指出需要传入图片的 URL
  • _run(url: str) -> str: 接受一个图片 URL,尝试下载并处理图像。如果下载或处理图像时发生任何异常,则返回错误信息。若成功,生成图片的文字描述,并返回该描述
  1. Part III: 初始化并运行LangChain智能体
llm = ChatOpenAI(  
    openai_api_key=os.environ.get("API_KEY"),  
    openai_api_base=os.environ.get("API_BASE"),  
    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 请为这张图创作合适的中文推广文案")
  • ChatOpenAI: 初始化 OpenAI 的大语言模型,设置 API 密钥、模型参数和其他配置
  • initialize_agent: 使用先前定义的工具初始化一个智能代理(agent)
  • invoke方法: 通过代理处理输入,生成适合于给定图像的中文推广文案

完整代码

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  

# 指定要使用的工具模型(HuggingFace中的image-caption模型)  
hf_model = "Salesforce/blip-image-captioning-large"  
print("正在初始化图像字幕生成模型...")  

# 初始化处理器和工具模型  
processor = BlipProcessor.from_pretrained(hf_model)  
model = BlipForConditionalGeneration.from_pretrained(hf_model)  
print("初始化图像字幕生成模型成功")  

# 定义图像字幕生成工具类  
class ImageCapTool(BaseTool):  
    name: str = "ImageCaptioning"  
    description: str = "使用该工具可以生成图片的文字描述,需要传入图片的URL."  

    def _run(self, url: str) -> str:  
        try:  
            image = Image.open(requests.get(url, stream=True).raw).convert("RGB")  
        except Exception as e:  
            return f"无法加载图像: {e}"  

        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  

# 初始化大语言模型  
llm = ChatOpenAI(  
    openai_api_key=os.environ.get("API_KEY"),  
    openai_api_base=os.environ.get("API_BASE"),  
    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"  
result = agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")  
print(result)

写在最后

LangChain 是一个强大的框架,主要用于构建多模态应用程序,尤其是在结合大语言模型(LLMs)与其他数据源(如图像、文本或数据库)时表现出色。

LangChain 的设计充分考虑了模块化,使得不同组件(如数据加载、文本处理、模型调用等)可以独立开发和替换。

LangChain 不仅支持文本,还可以处理图像、音频、视频等多种数据类型。

LangChain 提供了与多种外部 API 的无缝集成能力,比如 OpenAI、Hugging Face等。

学习心得
  • 学习了如何进行项目的初步配置
  • 学习了如何进行图形处理和描述生成
  • 初步了解LangChain大模型架构

结合 LangChain 的原理和发展,认识到它在构建多模态应用中的重要性。随着技术的进步,LangChain 将继续为构建更多创新的 AI 应用提供重要支持和灵活性……无论如何,有一点毋庸置疑。我们正站在一个崭新的历史节点上。