LangChain 与 LangGraph双生框架协同构建AI应用

LangChain 和 LangGraph 是两个围绕语言模型(LLM)设计的开源框架,但聚焦于不同的核心目标。LangChain 由 Hugging Face 开发,旨在通过模块化组件链式组合(如 LLM、API、数据库)简化复杂工作流的构建,适合单次任务自动化场景(如数据处理、报告生成)。而 LangGraph 由 Stability AI 推出,专注于多轮对话的状态管理与流程建模,通过有向无环图(DAG)支持动态决策和上下文持久化,适用于客服、医疗问诊等需要长期交互的场景。

两者的协同价值显著:LangChain 可作为 LangGraph 的底层执行引擎,实现具体逻辑(如调用 LLM 或 API),而 LangGraph 则为 LangChain 提供对话状态管理能力,增强多轮交互支持。开发者需根据需求选择框架——简单自动化任务选 LangChain,复杂多轮对话系统选 LangGraph,混合场景则可结合二者优势。未来,LangChain 或向通用 AI Agent 框架演进,LangGraph 则可能强化实时事件驱动能力。

一、框架背景与开发动机

下面分别介绍LangChain 和 LangGraph ,包含背景、定义、目标、技术细节完整代码示例,内容更加丰富且贴近实际场景。

LangChain

  • 背景
    由 Hugging Face 团队于 2023 年开源,目标是解决复杂 AI 应用的模块化构建难题。随着 LLM 的普及,开发者需要将 LLM 与数据库、API、文件系统等组件无缝集成,但传统方法往往需要重复造轮子。
  • 开发动机
    提供一套标准化接口(如 ChainRunnable),让开发者能够像搭积木一样组合工具链,降低开发复杂度。
    在这里插入图片描述

LangGraph

  • 背景
    由 Stability AI 团队(ChatGPT 开发方)于 2023 年推出,专注于对话系统的状态管理和流程建模。传统 LLM 在多轮对话中容易丢失上下文,导致逻辑断裂。
  • 开发动机
    通过图结构建模对话流程,确保长期上下文的连贯性,支持动态调整任务路径(如用户中途改变需求)。

二、详细定义与核心目标

LangChain

  • 定义
    模块化 AI 工程框架,提供标准化的组件接口(Runnable),支持将 LLM、外部服务、文件系统等组件链式组合,构建端到端的应用。
  • 核心目标:
    • 简化复杂工作流:例如自动从 PDF 提取数据 → LLM 分析 → 生成报告。
    • 复用现有工具:无需从头实现组件,直接集成开源库或 SaaS API。

LangGraph

  • 定义
    基于图的对话管理框架,通过有向无环图(DAG)建模多轮对话的逻辑节点和状态转移,支持动态决策和上下文持久化。

  • 核心目标:

    • 解决上下文丢失问题:确保对话系统在多轮交互中保持一致性。
    • 灵活的任务编排:根据用户输入动态切换流程分支(如医疗问诊的分诊路径)。
  • 技术对比(补充细节)**

维度LangChainLangGraph
核心抽象Chain(链式组合)、Runnable(可执行单元)Node(图节点)、Edge(状态转移边)、State(全局对话状态)
状态管理仅传递单次调用上下文(如 LLM 的 promptoutput维护全局状态(如用户历史记录、流程执行进度)
执行模式线性执行链式任务(A→B→C),支持并行调用(如多 API 并发请求)支持条件分支、循环、子图嵌套,可动态修改流程图结构(热更新)
调试与监控提供链式调用的日志追踪和错误捕获可视化流程图界面,实时监控节点执行状态和状态变化

三、实际场景案例实战

LangChain 示例:电商推荐系统

场景

用户输入商品关键词 → LLM 解析需求 → 调用数据库获取商品列表 → 根据用户评分生成推荐结果。

完整代码
from langchain import load_llm, Runnable, Chain
from langchain.tools import database_tool  # 假设已定义数据库工具

# 1. 加载 LLM 模型
llm = load_llm("gpt-4o")

# 2. 定义数据库查询工具(模拟)
class ProductDatabaseTool:
    def __init__(self):
        self.db = {
            "电子产品": [{"id": 1, "name": "iPhone 15", "rating": 4.8}, {"id": 2, "name": "MacBook Pro", "rating": 4.7}],
            "服装": [{"id": 3, "name": "T-Shirt", "rating": 4.5}]
        }
    
    def query_products(self, category: str) -> list:
        return self.db.get(category, [])

product_db = ProductDatabaseTool()

# 3. 构建链式流程
chain = (
    Runnable([llm, product_db.query_products])  # LLM 解析需求并调用数据库
    .add_link(  # 过滤高评分商品
        lambda x: [item for item in x if item["rating"] >= 4.6]
    )
    .add_link(  # 生成推荐理由
        lambda x: f"根据您的需求,推荐以下商品:{', '.join([item['name'] for item in x])}"
    )
)

# 4. 执行链
input_text = "我需要一台高性能的笔记本电脑"
result = chain.invoke(input_text)
print(result)  # 输出示例:"根据您的需求,推荐以下商品:MacBook Pro"

LangGraph 示例:医疗问诊助手

场景

用户描述症状 → 系统分诊 → 根据病情严重程度调用专科知识库或转诊医生。

完整代码
from langgraph import Graph, Node, State
from langchain import load_llm, Runnable

# 1. 加载 LLM 模型
symptom_checker = load_llm("gpt-4o")

# 2. 定义分诊节点
class TriageNode(Node):
    def __init__(self):
        self.llm = symptom_checker
    
    def execute(self, state: State) -> dict:
        prompt = f"用户症状:{state['history'][-1]['text']},需要分诊到哪个科室?"
        return {"category": self.llm.invoke(prompt)}

# 3. 定义专科咨询节点
class SpecialtyNode(Node):
    def __init__(self, specialty: str):
        self.llm = load_llm(f"gpt-4o-specialty-{specialty}")
    
    def execute(self, state: State) -> dict:
        prompt = f"用户症状:{state['history'][-1]['text']},请提供专业建议。"
        return {"advice": self.llm.invoke(prompt)}

# 4. 构建流程图
graph = Graph()
graph.add_node(TriageNode())
graph.add_node(SpecialtyNode("general"), SpecialtyNode("cardiology"))
graph.add_edge("TriageNode", "SpecialtyNode", condition=lambda x: x["category"] == "general")
graph.add_edge("TriageNode", "SpecialtyNode", condition=lambda x: x["category"] == "cardiology")

# 5. 初始化状态并运行
initial_state = State(history=[{"role": "user", "text": "我胸口疼痛"}])
result = graph.execute(initial_state)
print(result["advice"])  # 输出示例:"建议立即就诊心内科,可能存在心脏病风险。"

四、框架协同使用案例

场景

用户请求“帮我制定旅行计划”,系统需:

  1. 分析需求(城市、预算、天数)
  2. 调用天气 API 获取目的地天气
  3. 根据 LLM 建议生成行程
  4. 如果用户追问细节,保持上下文一致性。
混合代码示例
from langchain import load_llm, Runnable, Chain
from langgraph import Graph, Node, State

# LangChain 部分:构建行程生成链
llm = load_llm("gpt-4o")
weather_api = Runnable([lambda city: f"Weather in {city} is sunny."])

plan_chain = (
    Runnable([llm, weather_api])  # 解析需求 + 查询天气
    .add_link(lambda x: f"建议行程:第一天去{city},天气晴朗,适合户外活动。")
)

# LangGraph 部分:集成多轮对话
class TravelAssistantNode(Node):
    def __init__(self):
        self.plan_chain = plan_chain
    
    def execute(self, state: State) -> dict:
        user_query = state["history"][-1]["text"]
        return {"plan": self.plan_chain.invoke(user_query)}

graph = Graph()
graph.add_node(TriageNode())  # 假设已有分诊节点
graph.add_node(TravelAssistantNode())
graph.add_edge("TriageNode", "TravelAssistantNode", condition=lambda x: x["category"] == "travel")

# 执行混合流程
initial_state = State(history=[{"role": "user", "text": "制定巴黎5天旅行计划"}])
final_result = graph.execute(initial_state)
print(final_result["plan"])  # 输出示例:"建议行程:第一天去巴黎,天气晴朗,适合户外活动。"
  • 选择框架的关键考量
需求场景推荐框架理由
单次任务自动化(数据清洗、报告生成)LangChain模块化组合工具链,快速实现端到端流程
多轮对话系统(客服、医疗问诊)LangGraph管理上下文状态,支持动态流程调整
需要同时处理单任务+多轮交互混合使用两者LangChain 负责执行逻辑,LangGraph 维护对话状态
  • 示例应用增强
  1. LangChain
    • 集成 Vector Databases(如 Pinecone),支持语义搜索增强检索能力。
    • 推出 Agent 模板库(如“代码助手”、“数据分析员”),加速通用 AI Agent 开发。
  2. LangGraph
    • 增强 实时事件驱动支持(如实时传感器数据接入)。
    • 开发 可视化流程设计器,降低非技术人员的使用门槛。

通过以上深入解析,开发者可以根据具体需求灵活选择或组合这两个框架,构建下一代智能应用。

五、最后总结

LangChain 和 LangGraph 分别解决了 AI 开发中的两大痛点:模块化集成多轮对话管理。前者通过标准化接口简化工具链组合,后者通过图结构建模确保对话连贯性。二者的技术差异体现在架构设计(链式 vs. 图状)、状态管理方式(单次传递 vs. 全局维护)和适用场景(单任务流程 vs. 多轮交互)。实际开发中,开发者可根据需求单独使用或混合集成,例如用 LangChain 构建行程规划工具链,再通过 LangGraph 实现用户追问时的上下文延续。这一互补关系为构建下一代智能应用提供了灵活的技术基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值