最全面又最浅显易懂的Langchain快速上手教程(上)

Posted by WGrape的博客 on February 12, 2024

文章内容更新请以 WGrape GitHub博客 : 最全面又最浅显易懂的Langchain快速上手教程(上) 为准

本文原创,著作权归WGrape所有,未经授权,严禁转载

最全面又最浅显易懂的Langchain快速上手教程(上)

一. 前言

随着GPT模型的问世,大语言模型(LLM)时代已经来临。LLM的出现,使得人工智能在语言处理方面的能力得到了极大的提升。Langchain作为一个面向后端开发者的框架,旨在帮助开发者快速上手并利用LLM开发出强大的应用程序。本教程将为您提供一份全面的指南,帮助您快速掌握Langchain的使用方法!

二. 基础介绍

1. 什么是Langchain

Langchain是一个基于大语言模型的应用开发框架,随着社区的快速成长,它现在已不仅仅是一个开发框架,更多的是一个LLM应用的基建工程,提供从开发到上线整个闭环流程的全程支持。

所以当提到Langchain的时候,需要知道它起初只是一个比较简单的LLM应用开发框架,只是后来社区成长后,出现了一系列Langchain命名的项目,它们共同组成了现在的Langchain社区

2. Langchain的核心组成

(1) 四大部分

Langchain作为一个LLM应用的基建工程,整体是非常庞大的,从底向上主要分为四个部分

  • LangChain Lib 库 :主要包括core/community/experimental等Python库,源码位置 langchain-ai/langchain/libs/
  • LangChain Template 模板库 :主要包括各种可参考和借鉴的LLM生产级别应用,源码位置 langchain-ai/langchain/templates
  • LangServe REST服务支持 :主要用于将LLM应用部署为REST服务,源码位置 langchain-ai/langserve
  • LangSmith 开发者平台 :主要包括LL应用从开发、测试、部署、运维于一体的Devops平台

(2) LangChain Lib结构

LangChain Lib从底向上主要包括LangChain-Core/LangChain-Community/LangChain(本身)三大部分

  • LangChain-Core :LangChain-Core是整个LangChain生态的抽象,比如LangChain Expression Language(LCEL) language models, document loaders, embedding models, vectorstores, retrievers等模块的抽象,源码位置 langchain-ai/langchain/libs/core
  • LangChain-Community :LangChain-Community是对Core层抽象的实现,比如对LangChain Expression Language(LCEL) language models, document loaders, embedding models, vectorstores, retrievers等模块抽象的实现,源码位置 langchain-ai/langchain/libs/community
  • LangChain :对LangChain-Community部分进行整合和适配,就构成了LangChain这个单一项目。只通过这一个LangChain项目就可以快速构建LLM应用了,它主要由LLMs and Prompts, Chains, Data Augmented Generation, Agents, Memory组成。源码位置 langchain-ai/langchain/libs/langchain

(3) 其他部分

这里会简单概述下LangChain Template、LangServe和LangSmith模块的应用场景。

  • LangSmith :当一个LLM应用越来越复杂的同时,伴随着的底层实现也越来越复杂。比如越来越多的Chain、Agent等模块之间的调用也更加复杂化,这时Debug的关键性就会显现出来,这就是LangSmith出现的原因。它虽然不是必须使用的产品,但是绝对会帮助并提高工作的效率。

3. Langchain Lib中的Langchain

在上文的《LangChain Lib结构》中已介绍了Langchain Lib主要由三层组成,所以了解这个架构设计会对后面的理解非常有帮助。无论官方提供的功能操作有多少,多”混乱“,我们也可以时刻找到正确的方向。

本文会主要讲解Langchain Lib部分,所以后面提到的Langchain单词,需要明确知道它不是指一个庞大的Langchain体系,而是特指Langchain Lib中的Langchain,或者代指整个Langchain Lib部分。

为了更简单的理解,甚至可以把Langchain和Langchain Lib作等同的理解,二者在理解上其实没有太大的区别。

4. 关于安装

可以选择使用一键式多环境管理sparrow服务中已经集成的Langchain环境

(1) 安装Langchain

使用如下命令即可快速安装Langchain。通过python -m site命令查看langchain的安装目录,就会发现它就是上面提到Langchain源码 langchain-ai/langchain/libs/langchain

pip install langchain

image

所以在官网中可以看到,使用下面源码安装的方式也可以同样成功安装Langchain。

image

(2) 安装Langchain-Community

从上文《LangChain Lib结构》可知Langchain是对Langchain-Community的整合和适配。所以在安装完Langchain后,会自动安装langchain-community,如果需要单独安装,使用下面命令即可

pip install langchain-community

(3) 安装Langchain-Core

从上文《LangChain Lib结构》可知Langchain-Community是对Langchain-Core中抽象的具体实现。所以在安装完Langchain后,会自动安装langchain-core,如果需要单独安装,使用下面命令即可

pip install langchain-core

(4) 安装Langchain Lib的其他部分

截止2024年2月份,可以看到在Lib中有新增的一些模块

  • experimental :实验模块,使用pip install langchain-experimental命令安装
  • cli :命令行模块,使用pip install langchain-cli命令安装

image

(5) 安装LangServe和LangSmith

LangSmith SDK模块在安装完Langchain后也会自动安装,如果需要单独安装,请使用如下命令

pip install langsmith

LangServe模块只有在安装完Langchain CLI后才会自动安装(注意不是Langchain),如果需要单独安装,请使用如下命令

# 同时安装客户端和服务端
pip install "langserve[all]"

# 仅安装客户端
pip install "langserve[client]"

# 仅安装服务端
pip install "langserve[server]"

(6) 安装其他依赖

建议根据如下提示进行安装

# 必须安装
pip install langchain-openai # LLM大语言模型必须使用

5. 入门例子

在下面这个例子中,主要分为几个简单的入门例子

  • 创建LLM :使用langchain_openai包中的ChatOpenAI()创建一个LLM大语言模型对象
  • 创建Prompt :使用langchain_core包中的ChatPromptTemplate创建一个Prompt对象
  • 创建Output_parser :使用langchain_core包中的StrOutputParser()创建一个输出处理器
  • 使用LCEL语进行链式调用 :使用或运算符|即可自动实现链式调用(基于__ror__魔法函数实现),如prompt | llm | output_parser
# ==================== 创建LLM并调用 ====================
from langchain_openai import ChatOpenAI

# 1. 使用系统配置的OPENAI_API_KEY环境变量
llm = ChatOpenAI()

# 2. 传递openai_api_key参数
# llm = ChatOpenAI(openai_api_key="")

print(llm.invoke("1+1=?"))

# ==================== 创建一个复杂的Prompt并使用Chain链式调用 ====================
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are good at math."),
    ("user", "{input}")
])

chain = prompt | llm
print(chain.invoke({"input": "1+1=?"}))

# ==================== 创建一个StrOutputParser输出处理器并加入到Chain中 ====================
from langchain_core.output_parsers import StrOutputParser

output_parser = StrOutputParser()

chain = prompt | llm | output_parser
print(chain.invoke({"input": "1+1=?"}))

暂时未完…

由于文章篇幅的限制,先告一段落。相信经过上面简单的介绍之后,相信已经可以对Langchain有了初步的理解,下面会着重用最简单的描述、最容易理解的图、最直观的代码来深入讲解Langchain。

暂时未完,请期待下篇。