1. 引言:为什么需要LangChain/LangGraph?

想象一下,你有一台性能超强的智能机器人(大模型),但它只会说"你好"——因为你不知道如何教它完成复杂任务。这时候,LangChain和LangGraph就像给机器人装上了"大脑操作系统":LangChain帮你连接各种工具(比如计算器、数据库、搜索引擎),LangGraph则让机器人能像人一样一步步思考、记住中间结果,甚至和其他机器人协作。

今天,我们就用"说人话"的方式,带你玩转这两个AI开发神器!无论你是产品经理、运营还是刚入门的开发者,读完这篇文章,你都能明白如何用它们快速搭建实用的AI应用。

2. 核心概念快速入门

2.1 LangChain:AI应用的"万能连接器"

LangChain的核心思想很简单:把大模型和各种外部资源"粘"在一起,让它们协同工作。就像乐高积木,提供了标准化的接口,你可以轻松组合出不同的AI应用。

举个例子:你想做一个"股票分析助手",需要:

  1. 调用搜索引擎获取最新股票数据
  2. 用大模型分析数据
  3. 把结果存入Excel表格
  4. 生成自然语言报告

没有LangChain,你需要写大量代码来连接这些步骤;有了LangChain,只需几行代码就能搞定!

2.2 LangGraph:让AI像人一样"思考"的流程图引擎

如果说LangChain是"零件库",那LangGraph就是"流程图设计器"。它允许你定义:

  • 步骤(节点):比如"获取数据"、“分析数据”、“生成报告”
  • 流程(边):步骤之间的顺序和条件(比如"如果数据不足,返回重新获取")
  • 记忆(状态):保存中间结果(比如分析过程中的临时结论)

最适合处理多步骤、需要决策、有状态的复杂任务,比如智能客服、自动化办公流程等。

2.3 关键术语通俗解释

术语通俗解释生活类比
PromptTemplate预先定义的问题模板,只需填入变量填空题试卷
Chain多个操作步骤的串联工厂流水线
Agent能自主决策调用工具的智能体会自己找工具的助理
Memory保存对话历史的组件聊天记录本
Tool可调用的外部功能(如搜索、计算)瑞士军刀的不同工具
Graph定义任务流程的有向图流程图
Node流程中的单个步骤流程图中的方框
State保存流程中所有数据的对象工作备忘录

3. LangChain实战:30行代码构建智能工具

3.1 环境准备与安装

首先安装必要的库(确保你的Python环境已就绪):

# 安装LangChain核心库
pip install langchain

# 安装OpenAI模型支持(以OpenAI为例,也可替换为其他模型)
pip install openai

# 安装LangGraph(后续进阶部分使用)
pip install langgraph

3.2 基础组件上手

3.2.1 PromptTemplate:填空题模板
from langchain.prompts import PromptTemplate

# 定义一个旅游景点推荐模板
prompt = PromptTemplate(
    input_variables=["destination", "interest"],  # 需要填入的变量
    template="我要去{destination}旅游,喜欢{interest},请推荐3个必去景点,每个景点配一句话理由。"
)

# 使用模板生成具体问题
question = prompt.format(destination="成都", interest="美食和历史")
print(question)
# 输出:我要去成都旅游,喜欢美食和历史,请推荐3个必去景点,每个景点配一句话理由。
3.2.2 Chain:任务流水线

最简单的LLMChain能把模板和大模型串起来:

from langchain.llms import OpenAI
from langchain.chains import LLMChain

# 初始化大模型(请替换为你的API密钥)
# 注意:实际使用时需要注册OpenAI账号并获取API密钥
llm = OpenAI(api_key="your_api_key_here")

# 创建Chain(模板+模型)
chain = LLMChain(llm=llm, prompt=prompt)

# 运行Chain
result = chain.run(destination="成都", interest="美食和历史")
print(result.strip())

预期输出:

1. 宽窄巷子:明清建筑风格的古街,汇集了成都特色小吃和手工艺品,能同时体验美食与历史文化。
2. 武侯祠:中国唯一的君臣合祀祠庙,纪念三国时期蜀汉丞相诸葛亮,感受三国文化的深厚底蕴。
3. 锦里古街:紧邻武侯祠的仿古商业街,晚上灯笼亮起时格外有情调,可品尝三大炮、糖油果子等传统美食。

图1:LLMChain工作流程图

3.2.3 Memory:对话记忆本

让AI记住之前的对话内容:

from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

# 创建记忆组件(就像聊天记录本)
memory = ConversationBufferMemory()

# 创建带记忆的对话Chain
chatbot = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True  # 显示思考过程(调试用)
)

# 第一次对话
response1 = chatbot.run("你好,我叫小明,计划去成都旅游3天。")
print(f"AI: {response1}")

# 第二次对话(AI应该记得小明的名字和行程)
response2 = chatbot.run("我需要一份每天的行程安排,以美食为主。")
print(f"AI: {response2}")

图2:对话记忆工作时序图

3.2.4 Tools:连接外部世界的触手

LangChain支持调用各种工具,比如计算器、搜索引擎、数据库等。以SerpAPI(搜索引擎)为例:

from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType
from langchain.tools import SerpAPIWrapper

# 初始化搜索引擎工具(需要注册SerpAPI获取密钥)
search = SerpAPIWrapper(serpapi_api_key="your_serpapi_key_here")

# 定义工具列表
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="当你需要获取实时信息(如天气、新闻、当前事件)时使用"
    )
]

# 创建Agent(会自己决定是否使用工具)
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True  # 显示思考过程
)

# 提问需要实时信息的问题
result = agent.run("成都明天的天气如何?适合旅游吗?")
print(result)

Agent思考过程(verbose=True时显示):

I need to check the weather in Chengdu tomorrow.
Action: Search
Action Input: 成都明天天气
Observation: 成都明天晴,气温20-28℃,微风。
Thought: I now know the weather.
Final Answer: 成都明天晴,气温20-28℃,微风,非常适合旅游。建议携带防晒用品,穿舒适的鞋子。

3.3 实战案例:旅游攻略生成器

下面我们用SequentialChain串联多个步骤,自动生成完整的旅游攻略:

from langchain.chains import SequentialChain

# 步骤1:推荐景点
prompt_attractions = PromptTemplate(
    input_variables=["destination", "days", "interest"],
    template="用户计划去{destination}旅游{days}天,喜欢{interest}。请推荐5个必去景点,用逗号分隔。"
)
chain_attractions = LLMChain(
    llm=llm,
    prompt=prompt_attractions,
    output_key="attractions"  # 输出变量名,供下一个Chain使用
)

# 步骤2:生成行程
prompt_itinerary = PromptTemplate(
    input_variables=["destination", "days", "attractions"],
    template="为{destination}的{days}天行程设计详细计划,包含{attractions}等景点,每天推荐1家当地餐厅。"
)
chain_itinerary = LLMChain(
    llm=llm,
    prompt=prompt_itinerary,
    output_key="itinerary"  # 最终输出变量
)

# 串联两个Chain
overall_chain = SequentialChain(
    chains=[chain_attractions, chain_itinerary],
    input_variables=["destination", "days", "interest"],
    output_variables=["itinerary"],
    verbose=True
)

# 运行完整流程
result = overall_chain.run(
    destination="成都",
    days=3,
    interest="美食和历史"
)

# 打印结果
print("===== 成都3天旅游攻略 =====")
print(result)

图3:旅游攻略生成流程图

关键点:SequentialChain适合"流水线"式的任务,前一个步骤的输出作为后一个步骤的输入,无需人工干预。

4. LangGraph进阶:构建多步骤智能工作流

4.1 为什么需要状态管理?

想象一个电商退货流程:

  1. 用户提交退货申请
  2. 系统查询订单状态(是否已发货)
  3. 如果已发货:生成退货标签
  4. 如果未发货:直接取消订单并退款
  5. 通知用户结果

这个流程有条件分支(已发货/未发货)和状态传递(订单信息),用普通Chain很难实现,而LangGraph擅长处理这类场景。

4.2 核心概念:图、节点、状态

  • Graph:整个工作流的蓝图,定义了步骤和流向
  • Node:流程中的单个任务(函数),如"查询订单"、“生成标签”
  • Edge:节点之间的连接,表示流程走向
  • State:保存整个流程中的数据(如订单号、状态、用户信息)

4.3 实战案例:电商退货处理助手

下面用LangGraph实现上述退货流程:

from langgraph.graph import StateGraph, END
from typing import TypedDict

# 1. 定义状态(流程中需要传递的数据)
class ReturnState(TypedDict):
    order_id: str  # 订单号
    is_shipped: bool  # 是否已发货(默认None,查询后填充)
    return_label: str  # 退货标签(生成后填充)
    user_notification: str  # 给用户的通知(最终结果)

# 2. 定义节点函数(每个步骤做什么)
def check_order(state: ReturnState) -> ReturnState:
    """查询订单状态(模拟)"""
    print(f"查询订单 {state['order_id']} 状态...")
    # 模拟查询结果:假设订单号为偶数的已发货,奇数的未发货
    state["is_shipped"] = int(state["order_id"]) % 2 == 0
    return state

def generate_return_label(state: ReturnState) -> ReturnState:
    """生成退货标签(模拟)"""
    print("生成退货标签...")
    state["return_label"] = f"RETURN-{state['order_id']}-{state['is_shipped']}"
    state["user_notification"] = (
        f"订单 {state['order_id']} 已发货,请使用退货标签 {state['return_label']} "
        "寄回商品,退款将在收到退货后3个工作日内处理。"
    )
    return state

def cancel_order(state: ReturnState) -> ReturnState:
    """取消订单并退款(模拟)"""
    print("取消订单并退款...")
    state["user_notification"] = (
        f"订单 {state['order_id']} 尚未发货,已为您取消订单并安排退款,"
        "退款将在1-2个工作日内到账。"
    )
    return state

# 3. 定义条件分支(根据状态决定下一步)
def should_generate_label(state: ReturnState) -> str:
    """如果已发货,生成标签;否则取消订单"""
    return "generate_label" if state["is_shipped"] else "cancel_order"

# 4. 构建图(定义流程)
workflow = StateGraph(ReturnState)

# 添加节点
workflow.add_node("check_order", check_order)  # 查询订单节点
workflow.add_node("generate_label", generate_return_label)  # 生成标签节点
workflow.add_node("cancel_order", cancel_order)  # 取消订单节点

# 定义流程走向
workflow.set_entry_point("check_order")  # 入口:先查询订单
workflow.add_conditional_edges(
    "check_order",  # 从查询订单节点出发
    should_generate_label,  # 根据条件函数决定走向
    {
        "generate_label": "generate_label",  # 条件1:走向生成标签节点
        "cancel_order": "cancel_order"  # 条件2:走向取消订单节点
    }
)
workflow.add_edge("generate_label", END)  # 生成标签后结束
workflow.add_edge("cancel_order", END)  # 取消订单后结束

# 5. 编译并运行
app = workflow.compile()

# 测试已发货订单(偶数ID)
print("===== 测试已发货订单 =====")
result = app.invoke({"order_id": "20231004"})
print(result["user_notification"])

# 测试未发货订单(奇数ID)
print("\n===== 测试未发货订单 =====")
result = app.invoke({"order_id": "20231005"})
print(result["user_notification"])

图4:退货处理工作流状态图

运行结果:

===== 测试已发货订单 =====
查询订单 20231004 状态...
生成退货标签...
订单 20231004 已发货,请使用退货标签 RETURN-20231004-True 寄回商品,退款将在收到退货后3个工作日内处理。

===== 测试未发货订单 =====
查询订单 20231005 状态...
取消订单并退款...
订单 20231005 尚未发货,已为您取消订单并安排退款,退款将在1-2个工作日内到账。

关键点:LangGraph通过StateGraph和条件分支,实现了复杂业务流程的自动化,且状态数据在整个流程中自动传递。

5. 综合对比与选型指南

特性LangChainLangGraph
核心定位组件集成与工具调用状态管理与流程控制
数据传递简单链式传递(前→后)全局状态对象(所有节点可访问)
流程控制线性流程为主支持条件分支、循环、并行
适用场景• 简单问答
• 单步骤工具调用
• 对话机器人
• 多步骤工作流
• 复杂决策流程
• 多智能体协作
学习曲线较低(基础功能)中等(需理解图论概念)
典型案例• 客服问答机器人
• 文档摘要工具
• 实时信息查询
• 自动化办公流程
• 多步骤数据分析
• 智能决策系统

选型建议:

  • 如果你需要快速搭建简单的AI应用(如问答、摘要),用LangChain足够
  • 如果你需要处理复杂流程(多步骤、条件判断、状态保存),用LangChain+LangGraph组合

6. 常见问题解答(FAQ)

Q1:LangChain只能用OpenAI的模型吗?

A:不是!LangChain支持几乎所有主流大模型,包括国内的百度文心一言、阿里通义千问、智谱AI等,只需更换对应的LLM类即可。

Q2:没有编程基础能学LangChain吗?

A:可以!LangChain的设计理念就是简化AI应用开发,基础功能只需掌握Python基础语法就能上手。推荐先从简单的Chain和PromptTemplate开始学。

Q3:LangGraph和普通的流程图工具(如BPMN)有什么区别?

A:最大区别是与AI深度集成。LangGraph的节点可以直接调用大模型和工具,状态数据可以被AI分析和决策,而普通流程图工具主要用于流程可视化,不具备执行能力。

Q4:如何部署用LangChain/LangGraph开发的应用?

A:可以部署为Web服务(用FastAPI/Flask)、桌面应用或云函数。LangChain提供了langserve工具,专门用于部署Chain和Graph为API服务。

Q5:学习资源推荐

  • 官方文档:LangChain Docs、LangGraph Docs(最权威)
  • 中文教程:LangChain中文网、B站"LangChain实战"系列视频
  • 社区:LangChain Discord(英文)、知乎"LangChain"话题(中文)

总结

LangChain和LangGraph就像给大模型装上了"手脚"和"大脑":LangChain让AI能"做事"(调用工具、处理数据),LangGraph让AI能"思考"(规划步骤、记住状态)。无论你是想提升工作效率,还是开发创新AI产品,这两个工具都能帮你快速实现想法。

现在就动手试试吧!用LangChain/LangGraph开发你的第一个AI应用,体验大模型开发的乐趣~

更多推荐