LangChain简介
- LangChain是一个专为开发基于大语言模型(LLMs)应用而设计的新型框架
- 作为程序设计者可以利用大模型的潜能以及LangChain的便捷,开发出令人惊叹的智能应用
- 框架的设计目标,是使这种AI类型的应用成为可能,并帮助我们最大限度地释放大语言模型的潜能
LangChain的核心特性
- 数据感知:将语言模型与其他数据源连接,实现对多样性数据的理解与利用
- 代理性:允许语言模型与其环境互动,使模型能更好地理解和响应环境
课程介绍
- 启程篇:从 0 到 1
- 内容:LangChain的安装流程和快速入门操作
- 实践:构建基于“易速鲜花”本地知识库的智能问答系统
- 目标:直观感受LangChain的强大功能
- 基础篇:深入 6 大组件
- 模型(Models) :各大语言模型的接口、调用细节以及输出解析机制
- 提示模板(Prompts) :提示工程流线化,进一步激发大语言模型的潜力
- 数据检索(Indexes) :建立和操作文档,返回相关文档以搭建知识库
- 记忆(Memory) :通过短时和长时记忆存储和检索对话数据
- 链(Chains) :封装功能的核心机制,灵活完成常见用例
- 代理(Agents) :另一个LangChain中的核心机制,使大模型自主调用工具,形成智能自主Agent
- 应用篇:积累场景中的智慧
- 内容:LangChain组件在实际场景中的应用
- 实践:嵌入式存储、数据库连接、异步通信、智能代理的角色扮演等
- 目标:通过实际案例展示组件了解如何共同完成复杂任务,提升实战能力
- 实战篇:动手!
- 项目:部署鲜花网络电商的人脉工具,开发易速鲜花聊天客服机器人
- 实践:从模型调用到数据连接,再到记忆的存储与检索,掌握构建智能系统的每个环节
- 目标:能够独立利用LangChain构建智能问答系统,适用于企业或个人需求
README.md文档
- 注册豆包API账号
- 访问火山方舟官网完成账号注册和服务授权
- 在控制台的 API Key管理 页面中创建 API Key
- 在控制台的 在线推理页面 中创建推理接入点,推荐使用doubao-pro-32k作为主力模型,模型部署完成后即可获得模型的base_url和model_endpoint
- 编辑项目中的 /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:情人节玫瑰宣传语
- 安装所需包(不用重复pip install -r requirements~ 环境里面装好了)
- 获取 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:海报文案生成器
- 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 交互
- 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: 实际的图像字幕生成模型
- 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,尝试下载并处理图像。如果下载或处理图像时发生任何异常,则返回错误信息。若成功,生成图片的文字描述,并返回该描述
- 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 应用提供重要支持和灵活性……无论如何,有一点毋庸置疑。我们正站在一个崭新的历史节点上。