LangChain :以大模型为引擎的全新应用开发框架,新一代AI开发框架
-
何谓 LangChain?释放大语言模型潜能的利器
作为一种专为开发基于语言模型的应用而设计的框架,通过LangChain,我们不仅可以通过API调用如 ChatGPT、GPT-4、Llama 2 等大型语言模型,还可以实现更高级的功能
两个特性:
- 数据感知: 能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。
- 具有代理性: 能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。
LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。
LangChain提供了一系列工具、套件和接口,可以简化创建由LLMs和聊天模型提供支持的应用程序的过程。
-
打通 LangChain 从原理到应用的最后一公里
4 大模块
启程篇:从 0 到 1
介绍LangChain系统的安装流程,如何进行快速的入门操作。
如何使用LangChain来构建一个基于“易速鲜花”本地知识库的智能问答系统,直接感受LangChain强大的功能。
基础篇:深入 6 大组件
LangChain中的具体组件包括:
- 模型(Models) ,包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
- 提示模板(Prompts) ,使提示工程流线化,进一步激发大语言模型的潜力。
- 数据检索(Indexes) ,构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
- 记忆(Memory) ,通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
- 链(Chains) ,是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
- 代理(Agents) ,是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!
应用篇:积累场景中的智慧
如何将LangChain组件应用到实际场景中。
如何使用LangChain的工具和接口,进行嵌入式存储,连接数据库,引入异步通信机制,通过智能代理进行各种角色扮演、头脑风暴,并进行自主搜索,制定自动策略,尝试不同方案完成任务。
讲解这些组件的功能,还通过实际应用场景来展示它们是如何互相配合,共同完成复杂任务。
本模块中的很多机制都来源于最新论文,其中对AI智能代理机制的各种使用方式将令你大开脑洞。
实战篇:动手!
如何部署一个鲜花网络电商的人脉工具,并开发一个易速鲜花聊天客服机器人。
从模型的调用细节,到数据连接的策略,再到记忆的存储与检索,每一个环节都是为了打造出一个更加智能、更加人性化的系统。
将能够利用LangChain构建出属于自己的智能问答系统。
-
LangChain 有趣用例抢先看
应用 1:情人节玫瑰宣传语
生成简短的宣传语
- 安装三个包,通过
pip install langchain来安装LangChain,通过pip install openai来安装OpenAI,还需要通过pip install langchain-openai以便在 LangChain 中使用 OpenAI 模型。 - 在OpenAI网站注册属于自己的OpenAI Key
先导入了OpenAI的API Key,然后从LangChain中导入OpenAI的Text模型接口,并初始化这个大语言模型,把我们的需求作为提示信息,传递给大语言模型。每次运行都会有新的惊喜。
import os
from langchain_openai import ChatOpenAI
# 创建语言模型实例
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
print(text)
其他结果:
情人节,红玫瑰盛绽爱的火焰,一朵红玫瑰,是炽热爱情最浓烈的表达。
情人节,红玫瑰盛绽爱的火焰,一朵红玫瑰,是炽热情感的绝美代言,是献给挚爱最经典的浪漫。
……
应用 2:海报文案生成器
为每一个海报的内容,写一两句话
代码主要包含三个部分:
- 初始化图像字幕生成模型(HuggingFace中的image-caption模型)。
- 定义LangChain图像字幕生成工具。
- 初始化并运行LangChain Agent(代理),这个Agent是OpenAI的大语言模型,会自动进行分析,调用工具,完成任务。
根据输入的图片URL,由OpenAI大语言模型驱动的LangChain Agent,首先利用图像字幕生成工具将图片转化为字幕,然后对字幕做进一步处理,生成中文推广文案
说明:因为temperature=0.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
# ---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
cache_dir = "/cloudide/workspace/cache"
# 确保缓存目录存在
os.makedirs(cache_dir, exist_ok=True)
print("正在初始化图像字幕生成模型...")
# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model, cache_dir=cache_dir)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model, cache_dir=cache_dir)
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 请为这张图创作合适的中文推广文案")
针对上面的鲜花图片,程序进入了AgentExecutor链,开始思考推理,并采取行动——调用Image Cationer工具,接收该工具给出的结果,并根据其返回的内容,再次进行思考推理,最后给出文案。
并不是生硬的去设计什么固定的逻辑,而是由语言模型通过理解和推理来决定执行什么操作以及执行的顺序。
-
思考总结
LangChain作为一款专为大语言模型(LLMs)设计的应用框架,代表了人工智能发展中的一大突破。它不仅仅是一个工具集,它的诞生和普及是对大语言模型能力的一次深化和扩展。为了理解LangChain的深远意义,首先必须回顾大语言模型的快速演化和它们对技术与社会产生的深远影响。
大语言模型,如OpenAI的GPT系列、Meta的LLaMA系列,已经在近几年取得了惊人的进展。它们不仅能理解和生成语言,还能在许多领域展示出与人类相当的表现:从文档自动化生成、语言翻译到内容创作、情感分析等。尤其是GPT-4等更为先进的模型,在多个专业领域的任务上表现出超越传统机器学习算法的能力。这些语言模型通过数百亿甚至数千亿个参数,学习并建模了从日常对话到专业技术文献的广泛知识,因此具备了强大的通用性和灵活性。
然而,尽管大语言模型在“理解”和“生成”能力上达到了前所未有的高度,但其实际应用中往往面临着巨大的挑战。传统的开发模式将大语言模型视为一个“黑箱”,通过API调用它们进行推理和生成,虽然这种方式快速且高效,但也有其局限性。首先,语言模型在没有外部知识支持的情况下,其生成的答案有时显得空洞、不准确。其次,模型对于复杂任务的执行往往缺乏灵活性和自适应能力,它们在面对实际环境中的不确定性时,往往缺乏自主决策的能力。因此,如何让大语言模型具备更加丰富的上下文感知能力,如何赋予其与外部系统交互的能力,以及如何增强其在动态环境中的应变能力,成为了AI应用开发中的核心问题。
LangChain正是在这一背景下应运而生。它通过提供一套灵活、模块化的工具和接口,使得开发者能够构建不仅仅是被动响应的语言模型应用,而是能够主动进行推理、调度任务、与外部数据交互并做出动态决策的智能系统。这一转变,不仅仅是技术上的升级,更是AI应用开发理念的一次革新。
数据感知与环境交互的深度融合
LangChain的两大核心特性,数据感知和代理性,正是为了解决大语言模型在实际应用中面临的知识局限性和交互能力不足的问题。大语言模型固然在训练过程中吸收了大量的数据,但它们的“理解”能力依然存在局限:它们无法主动获取外部信息,也无法根据环境的变化做出及时的调整。而LangChain通过将语言模型与外部数据源、API以及其他工具进行连接,打破了这一局限,使得模型能够“感知”外部世界并根据实时信息做出反应。
例如,LangChain的“数据感知”特性使得模型能够通过连接数据库、搜索引擎、API接口等多种渠道获取外部数据,从而提升其回答的准确性和多样性。这不仅仅是为了提升生成文本的质量,更多的是为了让大语言模型能够更好地理解和适应其所处的环境。通过这种方式,LangChain实现了模型与环境的双向交互,语言模型不再仅仅是一个被动的问答系统,而是一个能够主动获取信息、做出决策、执行任务的“智能代理”。
自主性与自我决策的能力
代理性(Agent)作为LangChain的另一个核心特性,赋予了大语言模型前所未有的自主性。传统的大语言模型只能根据用户的输入生成输出,而LangChain通过代理机制,允许模型在执行过程中根据实时的上下文信息主动调用外部工具、服务或API,甚至在多步推理过程中做出自我决策。例如,LangChain的代理可以根据给定的任务要求,选择合适的外部工具来生成文案、分析图像、查询数据库,甚至决定任务执行的顺序。这种能力使得大语言模型不仅能够在固定模式下进行推理,更能在动态环境中应对各种复杂情况,自主选择最合适的路径。
这种灵活性和自主性对于构建复杂的AI应用具有革命性的意义。在许多应用场景中,任务的执行不仅仅是对问题的简单回答,而是一个包含信息收集、数据处理、决策推理等多个环节的复杂过程。LangChain的设计,使得AI系统能够在执行过程中灵活切换任务和工具,类似于人类思维的灵活性和适应性。比如在商业决策、个性化推荐、客户服务等领域,AI系统需要不断获取新的信息、处理不同来源的数据,并且根据不同情境做出实时调整。LangChain通过其代理机制,让语言模型在这些复杂的任务中变得更加自主、高效,提升了AI在实际应用中的实用性和智能水平。
未来发展与潜在影响
LangChain的出现,不仅仅是一个技术框架的创新,更是大语言模型应用方向的一次重大突破。它代表了AI技术发展的一个趋势——从单一的生成任务到多模态、多工具、动态决策的智能应用。随着技术的不断进步,未来的LangChain框架可能会变得更加智能化和自主化。随着大语言模型训练的不断进化,它们将不仅仅是“信息处理器”,而是能够在更加复杂的环境中执行复杂任务的自主智能体。例如,在医疗、金融、法律等领域,AI不仅需要理解和生成文本,还需要根据实际数据做出实时决策,并与其他系统交互执行操作。这正是LangChain框架所能实现的价值,它能够让大语言模型超越传统的文本生成,进入更加智能化、自主化的应用领域。
此外,LangChain的灵活性和开放性也为未来的开发者提供了巨大的创造空间。它不仅能够支持现有的大语言模型,还能与不同类型的工具和服务进行集成,为开发者提供一个多元化的应用构建平台。随着AI技术不断渗透到各行各业,LangChain可能会成为未来AI应用的核心基础架构,推动AI从“辅助工具”向“智能代理”转变,进一步推动人工智能向着更加智能、更加自主的方向发展。
总结来说,LangChain并非仅仅是大语言模型应用的工具,而是推动AI智能化进程的重要引擎。它使得大语言模型不仅能够理解和生成语言,还能在多变的环境中做出自主决策、执行任务,从而为构建更为复杂和智能的AI应用提供了无限可能。在未来,随着更多创新应用的涌现,LangChain将不仅成为AI开发者的利器,也可能成为整个行业技术进步的催化剂,引领大语言模型走向更加广泛、深远的应用场景。