为什么选择LangChain
为什么需要大模型应用开发框架
大模型一般有两种形态 "呈现" 在我们眼前,一种是训练好的那种二进制文件,另外一种是将大模型的二进制文件进行部署之后暴露出一些相应的接口,但是无论是那种形式,LLM 只提供了一个非常基础的调用方式,当我们要构建一个复杂的 ChatBot 时,就需要考虑如何保存聊天的上下文、如何进行网络检索、如何加载本地数据、如何便捷管理 Prompt 等等工程问题。
甚至是当我们切换到不同的 LLM 时,模型的输入和输出结构差异都非常巨大,微量的需求就要修改大量的代码,或者在业务代码中做大量的判断与识别,让代码可维护性极差,但是其实不同 LLM 的交互流程其实都非常接近,如下可以看成是一个基础聊天机器人的链条,传入提示词,输出对应的结果,流程如下:

以下是使用OpenAI与文言一心大模型SDK写代码对比:
python
from openai import OpenAI
import os
def openai_completion():
"""OpenAI大语言模型聊天接口"""
# 1.提取从接口中获取的输入,POST
req = CompletionReq()
if not req.validate():
return validate_error_json(req.errors)
# 2.构建OpenAI客户端,并发起请求
client = OpenAI(base_url=os.getenv("OPENAI_API_BASE"))
# 3.得到请求响应,然后将OpenAI的响应传递给前端
completion = client.chat.completions.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "system", "content": "你是OpenAI开发的聊天机器人,请根据用户的输入回复对应的信息"},
{"role": "user", "content": req.query.data},
]
)
content = completion.choices[0].message.content
return success_json({"content": content})
python
import qianfan
def wenxin_completion():
"""文心一言大语言模型聊天接口"""
# 1.提取从接口中获取的输入,POST
req = CompletionReq()
if not req.validate():
return validate_error_json(req.errors)
# 2.构建文心一言客户端
client = qianfan.ChatCompletion()
# 3.得到请求响应,然后将文心一言的响应传递给前端
resp = client.do(messages=[
{"role": "user", "content": "你好"}
])
content = resp["body"]
return success_json({"content": content})
除了在代码开发这方面有大量的疑难杂项之外,对 LLM 的运行流程、输出、费用统计、错误监控也是一个非常重要的步骤,这些功能在基础的 LLM 均没有提供,需要程序员自行开发与对接,开发这些功能的耗时甚至会超过业务的部分,极大提升了 AI 应用开发的难度。
为了解决以上这些问题,AI 应用开发框架应运而生,其中最热门、更新速度最快、最稳定的框架就是 LangChain,而且目前 LangChain 提供了 Python 和 JavaScript 两个版本,适配了当前 AI 环境下最热门的两种语言。
- LangChain-Python: https://github.com/langchain-ai/langchain
- LangChain-JavaScript: https://github.com/langchain-ai/langchainjs
为什么选择LangChain
为什么选择 LangChain?主要有几个方面:认可度、持续维护、易用性、可扩展性、稳定版本、可观察。
首先是认可度,目前在 Github 上是目前 star 最多的 AI 应用开发框架,并且其上升速度非常恐怖,而且 LangChain 拥有活跃的开发者社区和丰富的文档资源,能够快速解决问题和获取帮助。
其次是持续维护,LangChain 框架经历数次融资,累计融资数千万美金,拥有足够的资源对框架进行长期及稳定更新的维护,在短短一年多的时间里 LangChain 团队提交了接近 10000 次 commit 进行数百个大小版本的更新与维护,创下 AI 应用开发领域之最。
项目也从早期的一个副业,迅速发展成数万个 LLM 应用的支柱,不乏一些知名项目:早期 Dify、MetaGPT、百度智能云千帆等,这些项目均校验了 LangChain 在生产环境中使用的可能。
作为一个年轻而有活力的框架,LangChain 正在彻底改变工业和技术,改变我们与技术的每一次互动。
除此之外,易用性和可扩展性也是 LangChain 的特性,LangChain 屏蔽了不同 LLM 调用接口、输入格式、输出格式之间的差异,用户无需深究不同 LLM 的细节,创建模型后,就可以直接使用。
在扩展性方面,除了 LangChain 提供的大量第三方组件的集成,也可以将自有的本地大语言模型、工具、数据库、文本嵌入等任何内容快速接入到 LangChain 中,LangChain 好比一把瑞士军刀,提供了近 700 种集成,涵盖从 LLM 到向量存储,再到 Agent 使用的各种工具。
至此不再需要为每一个任务找一个新工具,它提供了一站式的解决方案,不管你遇到什么问题,打钉子、拧螺丝、剪线,工具箱里总有一个合适的工具等着你。
例如以下是接入 LangChain 后,使用 OpenAI 和文心一言大语言模型的示例,修改 LLM 时,无需修改任何业务性的代码,直接切换不同的 LLM 即可:
python
from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
def completion():
"""聊天接口"""
# 1. 提取从接口中获取的输入,POST
req = CompletionReq()
if not req.validate():
return validate_error_json(req.errors)
# 2. 构建LLM客户端
# 使用OpenAI大语言模型
llm = ChatOpenAI()
# 百度文心一言大语言模型
# llm = QianfanChatEndpoint()
# 3. 将llm与输出解析器创建链
chain = llm | StrOutputParser()
# 4. 得到请求响应,并解析出字符串
content = chain.invoke(req.query.data)
return success_json({"content": content})
而像这类 LLM,在 LangChain 集成封装了超过 60 个,几乎市面上能找到的大语言模型,无论是开源还是闭源,LangChain 均进行了封装,并且保持了高强度的更新。
在可观测性上,LangChain 对比同类的 AI 应用框架,提供了独一无二的 LangSmith 平台。LangSmith 的一个核心优势是为你的 LLM 应用提供一流的调试体验,详细记录了正在执行的每个步骤、每个步骤的输入、输出、所需时间等数据。并以用户友好的方式展示这些信息,让你能够识别哪些步骤耗时最长,进入一个调试区域来处理 LLM 意外反馈的问题,追踪 Token 使用情况等。
最重要的转折点在 2024 年 1 月 8 日,LangChain 团队发布了第一个稳定版本 0.1.0 版本,并推出了 LangGraph 与 LangSmith。
这个版本完全向后兼容,并且有 Python 和 JavaScript 两个版本,甚至基于 LangGraph 组件,可以便捷使用 LangChain 组件构建工作流任务。至此,Agent 从一开始的黑箱模式变得可观测,完成最后一块拼图,实现了在企业生产环境中可以稳定使用 LangChain 的可能。
LangChain简介与基本概念
LangChain的乐高世界
小时候我们都玩过乐高积木,通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下,如果有一个数字世界的乐高,我们可以用这样的 "积木" 来构建智能程序,这些程序能够阅读、理解和撰写文本,与我们对话,甚至自主执行特定的任务。
提示词、工具、大语言模型就是一个一个积木块,等待着我们来发掘和搭建,而 LangChain 就是那个让我们将这些语言模型乐高积木组合成有趣应用的工具箱。它并不是一个实物,而是一个开源的 AI 应用开发框架,帮助开发者像搭建乐高一样快速构建和优化基于语言模型的应用。
一个简单的例子:
- 假设你想要用 GPT-4 建一个旅行顾问机器人。单独的 GPT-4就像是一堆杂乱无章的乐高积木:它可能知道很多关于世界各地的信息,但如果不能实时查找最新的航班信息或者酒店价格,它提供的旅行建议可能就不够准确或实用。
提问:我该带些什么去泰国旅行? GPT-4 可能会基于以往的数据提供一般性的建议,如防晒霜、泳衣等。
使用 LangChain 的工具+记忆+索引积木块构建一个旅行顾问机器人:
-
配备了 LangChain 的问答系统,它可以查询实时的天气预报API,了解当前泰国的季节和天气情况,提供更精确的建议,比如"泰国正处于雨季,记得带上雨具和防潮包"。
提问:泰国哪里的垂钓体验最佳?
LangChain 可以帮助连接到最新的旅行博客和垂钓爱好者论坛,甚至直接查阅最近的旅行者评论,给你提供最受推荐的目的地。
LangChain的基本概念
LangChain 主要提供了 6 大核心组件帮助我们更好的使用大语言模型,涵盖了 Models(模型)、Prompts(提示)、Indexes(索引)、Memory(记忆)、Chains(链)、Agents(代理)。
这些组件集成了数十种大语言模型、多样的知识库处理方法以及成熟的应用链、上百种可调用的工具箱,为用户提供了一个快速搭建和部署大语言模型智能应用程序的平台。

LangChain框架安装及文档介绍
LangChain框架安装及其组成
通过以下命令安装 LangChain 版本的最低依赖要求,并安装基础的 LangChain 社区包:
bash
pip install langchain langchain-community
安装 0.2.1 版本:
bash
pip install langchain==0.2.1 langchain-community==0.2.1
执行安装 langchain 后会自动安装以下扩展包:
bash
Installing collected packages: langsmith, langchain-core, langchain-text-splitters, langchain, langchain-community
电脑上已经安装了 LangChain 的旧版本,也可以进行更新安装:
bash
pip install -u langchain==0.2.1 langchain-community==0.2.1
LangChain 框架本身由多个开源库组成(v0.2.1 版本):
- langchain-core: 基础抽象和 LangChain 表达式语言。
- langchain-community: 第三方集成以及合作伙伴包(如 langchain-openai、langchain-anthropic 等),一些集成已经进一步拆分为自己的轻量级包,只依赖于 langchain-core。
- langchain: 构建应用程序认知架构的链、代理和检索策略。
- langgraph: 通过将步骤构建为图中的边和节点,使用 LLMs 构建健壮且有状态的多参与者应用程序。
- langserve: 将 LangChain 链部署为 REST API。
- langsmith: 一个开发平台,可以让你调试、测试、评估和监控 LLM 应用程序,并与 LangChain 无缝衔接。