当前位置: 首页 > news >正文

一文读懂LangChain/LangGraph:从智能体构建到复杂工作流编排

引言:为什么需要LangChain与LangGraph?

在人工智能应用开发领域,大语言模型(LLM)展现出了惊人的潜力,但直接将其集成到生产系统中却面临诸多挑战:如何管理上下文?如何连接外部工具和数据?如何构建多步骤、有状态的复杂推理流程?这正是LangChain和LangGraph诞生的背景。

LangChain是一个用于开发由语言模型驱动的应用程序的框架,它通过“链”(Chains)的概念,将模型调用、提示模板、记忆、工具调用等组件标准化并串联起来。而LangGraph则是在LangChain基础上,专为构建有状态、多参与者的智能体(Agent)和复杂工作流而设计的库。它引入了图(Graph)的概念,使得开发者能够以可视化、可调试的方式编排LLM、工具和人类决策。

简单来说,LangChain解决了“如何让LLM做一件事”的问题,而LangGraph解决了“如何让LLM和一系列工具协作完成一连串复杂任务”的问题。

核心概念快速扫盲

在深入之前,我们先厘清几个关键术语:

  • 链(Chain):LangChain的核心抽象。一个链将多个组件(如模型、提示词、解析器)按固定顺序组合,执行一个特定任务。例如,一个“问答链”可能包含:接收用户问题 -> 检索相关文档 -> 构造提示词 -> 调用LLM -> 解析答案。
  • 智能体(Agent):一个由LLM驱动的自主决策系统。它配备了一系列工具(如搜索、计算、API调用),并能根据目标动态决定下一步使用哪个工具。LangChain提供了多种Agent执行器。
  • 图(Graph):LangGraph的核心。图由节点(Nodes)边(Edges)组成。节点代表一个执行步骤(如调用LLM、运行工具),边定义了节点之间的流转条件。这允许构建循环、分支和并行执行路径。
  • 状态(State):LangGraph中贯穿整个图执行过程的共享数据上下文。它定义了每个节点可以读取和修改哪些信息,是构建有状态应用的关键。

LangChain 核心组件与实战

让我们通过一个简单的代码示例,快速感受LangChain如何工作。假设我们要构建一个根据公司名称查询其简介并总结的链。

# 示例:使用LangChain构建一个简单的查询-总结链fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_community.utilitiesimportWikipediaAPIWrapper# 1. 初始化组件llm=ChatOpenAI(model="gpt-4o-mini")wikipedia=WikipediaAPIWrapper()output_parser=StrOutputParser()# 2. 构建提示词模板prompt=ChatPromptTemplate.from_messages([("system","你是一个商业分析助手。请根据提供的公司信息,用一段话总结该公司的核心业务与特点。"),("user","公司信息:{company_info}\n\n请开始总结:")])# 3. 构建并运行链# 这是一个简单的链:获取信息 -> 格式化提示词 -> 调用LLM -> 解析输出defcompany_summary_chain(company_name:str):# 第一步:获取信息(可视为一个节点)company_info=wikipedia.run(company_name)# 第二步和第三步:通过LangChain LCEL语法组合chain=prompt|llm|output_parser# 执行链summary=chain.invoke({"company_info":company_info})returnsummary# 使用链result=company_summary_chain("OpenAI")print(result)

这个例子展示了LangChain的“链式”思维。然而,当任务变得复杂,需要根据上一步的结果动态决定下一步行动时(例如,LLM判断信息不足,需要先调用搜索工具),简单的链就显得力不从心。这时就需要智能体,而LangGraph为构建健壮的智能体提供了更强大的范式。

LangGraph:用图编排复杂工作流

LangGraph 将工作流视为一个有向图。它的强大之处在于可以轻松处理:

  1. 循环:智能体思考 -> 执行工具 -> 观察结果 -> 继续思考,直到任务完成。
  2. 分支:根据LLM或条件判断,决定下一步走向哪个节点。
  3. 状态管理:自动维护对话历史、工具执行结果等上下文。

让我们构建一个简单的研究助手智能体,它可以根据一个问题,自动决定是直接回答,还是需要先搜索维基百科。

# 示例:使用LangGraph构建一个带条件分支的研究助手fromtypingimportTypedDict,Annotatedimportoperatorfromlanggraph.graphimportStateGraph,ENDfromlangchain_openaiimportChatOpenAIfromlangchain_community.toolsimportWikipediaQueryRunfromlangchain_community.utilitiesimportWikipediaAPIWrapper# 1. 定义状态结构classAgentState(TypedDict):question:stranswer:strneeds_search:boolsearch_result:str# 2. 初始化工具和模型llm=ChatOpenAI(model="gpt-4o-mini",temperature=0)wiki_tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())# 3. 定义节点函数defdecide_route(state:AgentState):"""决策节点:判断是否需要搜索"""# 这里可以设计更复杂的逻辑,例如让LLM判断问题是否需要事实核查simple_questions=["什么是人工智能?","你是谁?"]ifstate["question"]insimple_questions:return{"needs_search":False}else:return{"needs_search":True}defcall_llm_directly(state:AgentState):"""直接回答节点"""messages=[("system","你是一个乐于助人的助手。直接回答用户问题。"),("user",state["question"])]response=llm.invoke(messages)return{"answer":response.content}defsearch_and_answer(state:AgentState):"""搜索并回答节点"""# 执行搜索search_result=wiki_tool.run(state["question"])# 基于搜索结果构造提示词messages=[("system","你是一个严谨的研究助手。请基于以下搜索结果为用户的问题提供一个准确的回答。"),("user",f"问题:{state['question']}\n\n搜索结果:{search_result}")]response=llm.invoke(messages)return{"search_result":search_result,"answer":response.content}# 4. 构建图workflow=StateGraph(AgentState)# 添加节点workflow.add_node("decide",decide_route)workflow.add_node("direct_answer",call_llm_directly)workflow.add_node("search_answer",search_and_answer)# 设置入口点workflow.set_entry_point("decide")# 根据条件创建边workflow.add_conditional_edges("decide",# 下一个节点由 `decide_route` 函数返回的 `needs_search` 值决定lambdax:"direct_answer"ifnotx.get("needs_search",True)else"search_answer")workflow.add_edge("direct_answer",END)workflow.add_edge("search_answer",END)# 编译图app=workflow.compile()# 5. 执行图initial_state={"question":"特斯拉汽车公司是哪一年成立的?","answer":"","needs_search":None,"search_result":""}final_state=app.invoke(initial_state)print(f"最终答案:{final_state['answer']}")

通过这个流程图,可以清晰地看到LangGraph的工作方式:

渲染错误:Mermaid 渲染失败: Parse error on line 2: ...用户问题”] --> B{“决策节点\n(decide_route)”} -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

LangChain vs LangGraph:如何选择?

特性LangChainLangGraph
核心范式链(Chain)图(Graph)
状态管理通过Memory组件,相对独立内置、显式、强类型的状态管理,贯穿全图
流程控制线性或有限分支(通过Router)任意复杂的循环、分支、并行、人工干预
适用场景相对固定、线性的任务(文档问答、文本总结、简单提取)复杂、有状态、多步骤的智能体和工作流(自主研究、多工具协作、审批流程)
调试与可视化可通过回调查看日志原生支持将工作流图可视化,执行过程可追溯

选择建议:

  • 如果你的应用是线性的、无状态的或状态简单(例如,聊天机器人单轮响应、文档处理流水线),从LangChain开始更直接。
  • 如果你需要构建具备长期记忆、能使用多种工具、任务步骤动态可变的智能体,或者业务逻辑本身就是一个复杂的流程图(例如,客服工单处理、数据分析管道),那么LangGraph是你的不二之选。它提供的结构和可控性对于复杂应用至关重要。
http://www.jsqmd.com/news/1244642/

相关文章:

  • RAG优化:用户随口一问,RAG为什么就检索不到?
  • 原来重庆竟有如此知名的校园广播销售制造厂?
  • 南宁爱彼回收哪里收的价格更高?2026年7月最新平台实测对比+避坑指南! - 尊奢回收二奢平台
  • HarmonyOS API 23 ArkTS 实战:实现一个轻量级 PDF 文本简易阅读器
  • [论文学习]Mamba:具有选择性状态空间的线性时间序列建模
  • 零担运输专属测试标准ISTA 3B,ISTA3B测试为何选做的人较?
  • 查询铝箔玻璃棉板厂家联系电话 对接高品质保温建材供应商 - 品牌优推
  • 2026年含腐植酸水溶肥OEM推荐 农资代工服务商靠谱选型指南 - 品牌优推
  • 仓颉语言入门与 ArkTS 对比:HarmonyOS NEXT 的开发新范式
  • 找天津专业的混凝土路缘石厂 本地大小基建工程供货更有保障 - 品牌优推
  • Ubuntu下PHP开发环境配置与优化指南
  • Modbus 协议全面详解系列简介
  • 天门成品混凝土检查井源头厂家产品介绍及选购指南 - 品牌优推
  • 2026年论文AI率检测与降重工具实测指南
  • 2026年集装箱宿舍厂家选哪家 靠谱选购实用参考指南 - 品牌优推
  • AI搜索数据质量崩塌前的3个静默信号:基于172TB真实日志的早期预警模型(含阈值计算表)
  • 【ADMM】多主体综合能源系统+分布式ADMM研究(Matlab代码实现)
  • 无货源副业新手必看!2026电商采购工具怎么选不踩坑? - 抖掌柜
  • 文心一言图像生成参数避坑清单,98%新手踩过的4个致命参数陷阱及实时修复方案
  • 找国标阻燃绝缘胶垫生产厂家电话 实用选型采购对接指南 - 品牌优推
  • 2026年7月最新伯爵青岛西海岸万达广场维修保养服务电话 - 亨得利钟表维修中心
  • AIO与GEO融合趋势:从内容生成到智能搜索优化的技术演进
  • 2026年东北多场景适配玻璃生产厂家推荐测评指南 - 品牌优推
  • Chrome插件AI化转型白皮书(2024最新实践手册):覆盖92%高频场景的7类可商用AI插件架构模板
  • 原生木浆卷纸哪家好:【联盛森宝】原木柔韧 - MXyuyu
  • 非接触式便携微型生理变异性监测设备的技术现状
  • 微服务中使用JWT 认证体系详解:HMAC vs RSA 签名、OAuth2 Token 获取机制
  • 徐州智能阳台升降窗生产厂家价格及实用选购指南 - 品牌优推
  • 百亿级系统架构设计实录:Java架构师开发必备!
  • 鸿蒙 ArkTS 实战:Course GPA Calculator 从课程绩点计算到成绩统计应用完整解析