LangChain简介

LangChain是一个用于在LLM(大语言模型)之上进行应用层开发的框架,相比直接使用基础的Python代码调用LLM,使用LangChain能让我们更方便的进行应用层开发,而不必过多关心底层代码的编写。

截止到目前为止,LangChain的最新版本的1.2.16,从1.x版本开始,LangChain相比于早期相对稳定的0.3版本改动极大,曾经的很多用法诞生于LangChain的早期高速迭代和摸索阶段,目前已经不推荐或彻底废弃了,本系列笔记我们直接基于LangChain最新版本进行介绍。此外,LangChain官方实际上提供了两个版本,一个是基于Python的“标准”版本,另一个是基于TypeScript的版本LangChain.js,在早期TypeScript版本落后较多,但在1.x版本后已经非常接近Python版本的成熟度了,不过我们这里还是以经典的Python版本为例演示。

官方文档:https://www.langchain.com/

LangChain的优缺点

使用LangChain有很多优势,例如:

  1. LangChain像是一个胶水框架,它可以很方便的集成各种在线LLM的API、本地LLM、各种向量数据库、Embedding模型、工具等,LangChain对各种模型和接口做了统一的接口抽象,这意味着如果我们在同类的不同组件之间切换,基本只需要改一行代码
  2. LangChain对AI应用中的概念进行了很多基础封装,实现聊天机器人、RAG、Agent智能体等功能时使用这些现成的组件能省去很多手写基础代码的麻烦
  3. LangChain提供了“链(Chain)”的概念,我们基于这个“链”可以很方便的组装各种前置和后置的处理器,如组织提示词、解析返回数据等,以此来实现我们所需要的最终目标

当然,LangChain也并非没有缺点。LangChain最为致命的问题是它是一个典型的被严重过度设计的框架,LangChain的过度抽象让其使用方式也是十分“抽象”,许多高度封装的组件表现的像一个黑盒,看不懂、底层逻辑不透明且难以定制,在真实项目开发场景下非常不灵活。LangChain的用法是极度封装的,很多API甚至表现得像一种全新的DSL而非我们所熟知的语法,这犯了和世界上最难用的构建系统Gradle类似的问题(“怎么写都能编译,怎么运行都报错”)!LangChain另一个较小的缺点是时至今日它现在仍在快速迭代开发中,API也经常大幅修改产生Break Changes,框架版本一旦升级不出问题不太可能。此外LangChain文档目前也不完善,对于一个参数可能文档里只有潦草的解释,连具体能取哪些值都未说明,除了翻阅源码,正确用法就只能靠猜了。最后,LangChain的很多模块是社区维护的,这些模块充斥Bug,使用它们也需要你有强大的编程水平和解决问题能力。当然,以上这些缺点随着后续版本的发布可能发生变化。

总而言之,个人认为在生产环境中引入LangChain要谨慎,或者仅使用其中的低级组件封装,当成一个流行的胶水框架来使用。不过尽管LangChain有诸多缺点,它仍然十分值得学习,其中的一些思想我们可以借鉴并应用到我们自己的项目中。

LangChain框架与生态

LangChain主要包含这样几个部分:

LangChain Core:框架的核心内容,包括基础功能和类的封装与实现。

LangChain Community:用于和各种在线或本地LLM及周边功能的集成,大多由社区维护,质量参差不齐,随着版本迭代,有些成熟的模块会从其中独立出来,因此LangChain Community的API经常发生新增和移除,如果要使用该部分,我们需要对其文档持续关注。

LangGraph:LangGraph其实是一个用于构建智能体的状态机框架,它用于定义和执行LLM和其它步骤之间的交互逻辑。在LangChain早期版本中,LangGraph是个独立框架,但在新版本的LangChain1.x中,构建reAct智能体时底层使用的就是LangGraph。对于大部分功能来说,LangChain内置的智能体实现可能就满足我们的需求了,但如果我们需要极其定制化的流程编排,那么此时就需要直接使用LangGraph构建智能体。

LangSmith:LangSmith是LangChain官方提供的一个遥测监控平台,提供免费和收费的云服务,主要用于调试和采集运行时信息等场景。使用LangSmith能图形化的展示我们的AI应用上执行了哪些步骤,每一步的输入输出是什么。然而个人认为这个平台实际意义有限,毕竟我们不可能在内网生产环境中使用,不过在学习阶段还是比较有用的,推荐注册一下并将其配置到工程中,这个配置是非侵入式的,不需要改动任何代码。

LangChain框架简单入门

安装LangChain框架

安装LangChain框架非常简单,这里推荐使用uv管理项目,执行以下命令安装LangChain框架和OpenAI集成包。我这里使用的LangChain是最新的1.2.16版本。

uv add langchain langchain-openai

为什么要用OpenAI集成包?因为大多数模型提供商以及像Ollama这样的本地推理工具都支持OpenAI兼容的API服务端点,OpenAI规范目前几乎是LLM服务的事实标准规范,我们安装它就能兼容绝大多数的情况。当然,如果你非要用Anthropic或Google的LLM,它们官方确实出于商业考虑没提供OpenAI兼容的服务端点,但各自的集成包目前也相对成熟,参照官方文档对应安装即可。

关于LLM的选择

LLM是LangChain应用的核心,简而言之,LLM负责接收输入字符串(可能还包括temperaturetop-p等参数)并输出一个字符串(及一些元信息,例如你本地调用消耗了多少token等,各个厂商的API可能有不同的元信息)。

如果你问当前(2026年3月1日)哪些LLM最“强大”,个人实际使用非常主观的感受是Anthropic的Claude Opus系列最强没有之一,紧随其后的是OpenAI的GPT系列和超大上下文下表现最强的Google Gemini Pro,第三梯队则是几乎占领开源领域的国内Kimi-K2.5、GLM-5、MiniMax-M2.5、Qwen-3.5系列以及X的闭源模型Grok 4,再次是DeepSeek v3/r1(据说要出新版本,但去年发布的这两个旧版本已显著落后)、Llama 4、Mistral Large 3等。当然,以上所说的都是参数规模巨大的模型,在PC上运行几乎不太可能,使用这些模型可能需要寻找付费提供商,又或者是从某些活动或渠道白嫖来的额度。

我们这里就不弄那么复杂了,本系列笔记主要将通过本地部署的Ollama运行小规模开源模型来演示例子代码,API端点使用OpenAI兼容模式,使用的LLM则是开源的Qwen3-30B-A3B,虽然它只是个30b的MOE模型,但在性能、速度和使用成本之间较为均衡,大多数主流配置PC都可以流畅运行,作为演示例子是足够的。

LangChain使用代码例子

下面是一个简单的例子,代码创建了一个LangChain内置的reAct风格的Agent(智能体),并模拟提供了一个天气查询工具get_weather,智能体接收用户输入后如果涉及天气查询则会自动调用工具并输出结果。

from langchain.agents import create_agent
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI


@tool
def get_weather(city: str) -> str:
    """Get current weather for a given city via Open-Meteo public APIs.

    Args:
        city: City name used for geocoding, for example "San Francisco" or "Beijing".

    Returns:
        A compact weather summary string, or an error message when lookup/request fails.
    """
    return "晴 14℃"


# 创建基于Ollama的模型
model = ChatOpenAI(
    model="qwen3:30b-a3b",
    base_url="http://localhost:11434/v1/",
    api_key="dummy",
    temperature=1,
    top_p=1,
    max_tokens=16384,
    timeout=120,
    max_retries=6
)

# 创建智能体
agent = create_agent(
    model=model,
    tools=[get_weather],
    system_prompt="You are a helpful AI assistant",
)

# 执行智能体
resp = agent.invoke(
    {"messages": [{"role": "user", "content": "查询洛杉矶今天的天气如何?"}]}
)
# 打印输出结果
print(resp["messages"][-1].content)

代码非常简单,我们首先定义了一个模拟的get_weather工具函数,LangChain中工具函数需要用@tool装饰器标注,我们为其编写了详细注释,这是因为LangChain会将注释作为工具的描述信息传递给大语言模型,详细的注释对LLM争取调用工具有帮助。随后我们创建了ChatOpenAI对象,不过我们真正连接的是本地的Ollama服务,最后我们用LangChain内置的create_agent()函数创建了一个reAct风格的智能体。

执行后,如果一切正常,结果类似如下。

洛杉矶今天天气晴朗,气温14℃。

使用LangSmith

使用LangSmith需要注册账号并获取APIKey,注册后我们还需要配置环境变量。

LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT="https://api.smith.langchain.com"
LANGSMITH_API_KEY="<APIKey>"
LANGSMITH_PROJECT="<项目名>"

前面例子如果配置了LangSmith,可以看到类似如下的遥测数据结果。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。