前言

如今大模型开发已经从单纯调用ChatGPT、DeepSeek接口,进阶到定制化LLM应用开发阶段。很多开发者想要实现知识库问答、自动工具调用、多轮智能对话、自主任务编排等功能,如果从零手写代码,会面临代码冗余、逻辑混乱、无法复用、难以落地的问题。

LangChain 就是解决这一痛点的开源框架,它为大模型应用开发提供了标准化组件、流程编排方案和全生命周期能力。本文将通俗易懂地讲解LangChain的核心原理、核心模块,搭配可直接运行的Python实战代码,全程适配DeepSeek大模型,新手也能一键上手。

一、什么是LangChain?核心定位详解

很多新手会混淆LangChain是框架还是工具库,这里给出精准定义:

LangChain 是一款基于大语言模型(LLM)的开源开发框架,同时集成了海量开箱即用的工具库,核心定位是标准化、模块化构建复杂LLM应用。

它和普通Python工具库(Requests、Pandas)有本质区别:普通工具库只能解决单一问题,而LangChain可以整合各类模型、工具、数据源,搭建完整的AI应用流水线,覆盖从数据处理、模型调用、流程编排到部署监控的全流程。

1.1 核心价值:告别造轮子,积木式开发AI应用

LangChain的核心作用是标准化RAG及各类LLM应用的全流程,将复杂的AI开发拆解为可复用的标准模块,完整流程如下:

  • 数据准备:通过各类文档加载器(Loader)解析PDF、TXT、网页、Word等多格式文件

  • 数据处理:通过文本分割器(Splitter)智能切分长文本,适配大模型上下文限制

  • 数据向量化:调用嵌入模型将文本转为向量数据

  • 数据存储:对接FAISS、Milvus、Pinecone等向量数据库持久化存储

  • 智能检索:通过检索器实现语义检索、关键词检索、混合检索

  • 模型交互:整合各类大模型、提示词模板、对话记忆模块

  • 流程编排:通过Chain、LCEL编排完整业务流程,实现自动化任务处理

简单来说:LangChain就是AI应用的“装配蓝图+标准零件库”,让开发者无需关注底层逻辑,快速搭建生产级AI问答、智能体、知识库系统。

1.2 三大核心优势

  1. 模块化可插拔:所有组件独立可替换,按需组合,适配不同业务场景

  2. 全生命周期支持:覆盖原型开发、测试、部署、监控全流程

  3. 开源生态强大:MIT开源协议、支持Python/JS双语言、兼容千余款模型与工具

1.3 LangChain与LangGraph分工(V1.0版本)

  • LangChain:快速构建通用AI智能体,上手简单、开发效率高,适合绝大多数常规LLM应用

  • LangGraph:底层运行时框架,专为长期运行、高定制化、可控性强的生产级智能体设计

二、LangChain十大核心模块(零基础必懂)

LangChain所有复杂应用,都是由以下核心模块组合而成,掌握这些模块就掌握了LangChain的核心精髓。

2.1 LLM与Prompt提示词模块

统一各类大模型的调用API(兼容OpenAI、DeepSeek等),同时提供标准化提示词模板,实现提示逻辑与业务数据分离,让代码更简洁、可复用性更强。

主流模板类型:

  • PromptTemplate:基础字符串模板,适用于简单文本生成

  • ChatPromptTemplate:对话式模板,支持系统、用户、AI多角色交互(最常用)

  • FewShotChatMessagePromptTemplate:少量示例模板,引导模型精准输出复杂格式内容

2.2 Message消息模块

大模型对话的基础单元,共四种核心消息对象,适配所有对话场景:

  • SystemMessage:系统角色,用于定义AI身份、行为规则

  • HumanMessage:用户提问消息

  • AIMessage:AI回复消息

  • ToolMessage:工具调用返回结果消息

2.3 输出解析器(Output Parsers)

核心作用:将大模型返回的非结构化文本,转换为程序可直接调用的结构化数据(字典、列表、对象、时间等),是工业级开发的必备模块。

解析器

输出类型

适用场景

StrOutputParser

字符串

文本摘要、续写、翻译等简单场景

JsonOutputParser

Python字典

API参数生成、实体信息提取

PydanticOutputParser

自定义实体对象

高可靠性数据校验、数据库入库

CommaSeparatedListParser

列表

关键词标签生成、多选项提取

2.4 文档加载器(Document Loaders)

统一解析各类文件和数据源,将不同格式内容转换为LangChain标准的Document对象(包含page_content文本内容+metadata元数据),是RAG系统的数据入口。

支持TXT、PDF、Word、Markdown、网页、CSV、JSON等几乎所有主流格式。

2.5 文本分割器(Text Splitters)

针对大模型Token限制,将长文本智能切分为适配输入的短片段,同时尽可能保留语义完整性,是RAG检索精准度的关键。

常用:递归字符分割器、Markdown结构化分割器、代码分割器、句子分割器等。

2.6 Chain链式编排模块

LangChain的核心精髓,用于将多个模块串联成完整的业务流水线,实现自动化任务执行。分为传统固定ChainLCEL灵活编排两种模式。

2.7 LCEL表达式语言

LangChain新版主推的编排方式,彻底替代老旧固定Chain。通过 | 管道符 自由组合各类组件,支持串行、并行、分支、透传、自定义函数接入,灵活性拉满。

2.8 RAG检索增强生成

解决大模型“知识滞后、幻觉问题”的核心方案,通过加载私有文档、实时数据,让大模型基于外部知识库回答问题,是目前企业级AI应用最主流的场景。

2.9 工具(Tools)模块

赋予大模型与外部世界交互的能力,让LLM不再局限于文本生成,可自主调用计算器、天气接口、数据库、代码解释器等外部工具,解决计算、查询、数据分析等复杂问题。

2.10 记忆(Memory)模块

大模型默认无状态、无记忆,Memory模块可存储对话历史,实现多轮连贯对话,支持完整历史存储、窗口式历史存储等多种模式。

2.11 Agent智能代理

高阶核心模块,区别于固定流程的Chain,Agent可以自主思考、自主规划任务、自主选择工具、自主编排执行顺序,适配不确定、多步骤的复杂场景。


三、核心概念辨析:Chain vs LCEL

很多新手容易混淆这两个概念,用大白话彻底讲清:

3.1 传统Chain(老版本)

相当于固定的乐高说明书,流程写死,只能按预设步骤执行,修改流程需要重构代码。优点是开箱即用,适合简单固定的单一场景。

3.2 LCEL(新版本主推)

相当于通用乐高拼接规则,没有固定流程,开发者可以用 | 管道符自由拼接模型、提示词、解析器、自定义函数,支持并行、分支、条件判断,灵活度极高,适配所有复杂场景。

3.3 核心区别总结

维度

Chain(老方法)

LCEL(新方法)

本质

固定流程模板

灵活积木拼接语法

灵活性

低,改流程需改代码

极高,自由增删改流程

学习成本

高,需记忆各类Chain类型

低,一套语法通用所有场景

适用场景

简单固定单步骤任务

复杂多步骤、动态任务


四、环境安装(前置准备)

安装LangChain核心依赖,本文所有代码基于Python环境,适配DeepSeek大模型:

# 安装核心库
pip install langchain langchain-core langchain-community
# 适配OpenAI兼容接口(DeepSeek)
pip install langchain-openai
# 查看版本
pip show langchain

五、全套实战代码(可直接运行)

所有代码均适配DeepSeek大模型API,兼容OpenAI接口格式,复制替换自己的API密钥即可运行。

5.1 基础大模型调用(单文本生成)

from openai import OpenAI

# 初始化DeepSeek API客户端
client = OpenAI(
    api_key = "你的DeepSeek_API_KEY",
    base_url="https://api.deepseek.com/v1"
)

# 调用模型生成回答
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system","content":"你是专业的大模型开发工程师,回答简洁专业"},
        {"role": "user","content":"一句话介绍LangChain"}
    ]
)

print(response.choices[0].message.content)

5.2 LCEL四大核心链式实战

5.2.1 串行链(Sequential Chain)

按顺序执行多步骤任务,最常用的基础流程:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 初始化DeepSeek模型
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key="你的DeepSeek_API_KEY",
    base_url="https://api.deepseek.com/v1",
    temperature=0.7,
    max_tokens=150
)

# 构建串行流水线:提示词→模型→解析器
prompt = ChatPromptTemplate.from_template("写一句关于“{topic}”的七言绝句")
serial_chain = prompt | llm | StrOutputParser()

# 执行调用
result = serial_chain.invoke({"topic": "月色"})
print("串行链输出:", result)
5.2.2 并行链(Parallel Chain)

同时执行多个独立任务,提升处理效率:

import json
from langchain_core.runnables import RunnableParallel

# 定义两条独立子链
poem_chain = ChatPromptTemplate.from_template("写一首关于{topic}的短诗") | llm | StrOutputParser()
joke_chain = ChatPromptTemplate.from_template("讲一个关于{topic}的俏皮话") | llm | StrOutputParser()

# 构建并行链
parallel_chain = RunnableParallel({
    "poem": poem_chain,
    "joke": joke_chain
})

# 执行
result = parallel_chain.invoke({"topic": "程序员"})
print(json.dumps(result, ensure_ascii=False, indent=2))
5.2.3 分支透传(RunnablePassthrough)

保留原始输入数据,同时执行分支任务,常用于RAG问答:

from langchain_core.runnables import RunnablePassthrough

# 模拟检索器
def fake_retriever(query: str) -> str:
    return f"【{query}】是构建LLM应用的模块化开发框架,支持流程灵活编排"

# 构建RAG问答链
rag_prompt = ChatPromptTemplate.from_template("根据上下文回答问题:\n上下文:{context}\n问题:{question}")
chain = {
    "context": fake_retriever,
    "question": RunnablePassthrough()
} | rag_prompt | llm | StrOutputParser()

# 执行
result = chain.invoke("LCEL是什么")
print("分支链输出:", result)
5.2.4 自定义函数接入(RunnableLambda)

将普通Python函数接入LCEL流水线,高度自定义业务逻辑:

from langchain_core.runnables import RunnableLambda

# 自定义后置处理函数
def add_tip(text: str) -> str:
    return text + "\n\n更多大模型开发技巧,关注LangChain生态!"

# 包装为标准组件
custom_func = RunnableLambda(add_tip)

# 构建完整流水线
chain = (
    ChatPromptTemplate.from_template("简单解释{concept},100字以内")
    | llm
    | StrOutputParser()
    | custom_func
)

result = chain.invoke({"concept": "RAG"})
print(result)

5.3 输出解析器实战(JSON结构化输出)

from langchain_core.output_parsers import JsonOutputParser

# 初始化JSON解析器
json_parser = JsonOutputParser()

# 构建提示词
prompt = ChatPromptTemplate.from_template(
    "从文本中提取姓名和城市信息,输出JSON格式\n{format_instructions}\n文本:{text}"
)

# 构建链
chain = prompt | llm | json_parser

# 执行解析
result = chain.invoke({
    "format_instructions": json_parser.get_format_instructions(),
    "text": "张伟是居住在北京的软件工程师"
})

print("结构化解析结果:", result)
print("数据类型:", type(result))

5.4 工具调用实战(计算器+天气查询)

from langchain_core.tools import tool
from langchain_core.messages import HumanMessage

# 1. 定义自定义工具
@tool
def multiply(a: int, b: int) -> int:
    """计算两个整数的乘积"""
    return a * b

@tool
def search_weather(city: str) -> str:
    """查询指定城市天气"""
    weather_map = {"北京":"晴天25℃","上海":"小雨22℃","广州":"多云28℃"}
    return weather_map.get(city, f"暂无{city}天气数据")

# 2. 绑定工具到模型
tools = [multiply, search_weather]
llm_with_tools = llm.bind_tools(tools)

# 3. 执行工具调用
query = "查询北京天气,计算35*3的结果"
ai_msg = llm_with_tools.invoke(query)

# 4. 解析并执行工具
tool_results = []
for tool_call in ai_msg.tool_calls:
    t_name = tool_call["name"]
    t_args = tool_call["args"]
    selected_tool = [t for t in tools if t.name == t_name][0]
    res = selected_tool.invoke(t_args)
    tool_results.append({t_name: res})

print("工具执行结果:", tool_results)

5.5 Agent智能代理实战(自动多任务处理)

from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 构建Agent提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是智能助手,根据用户需求调用对应工具完成任务"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

# 创建Agent和执行器
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# 执行复杂多步骤任务
result = agent_executor.invoke({"input": "查询广州天气,计算23*4,再查询深圳天气"})
print("Agent最终回答:", result["output"])

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐