尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

一文读懂LangChain/LangGraph

一文读懂LangChain/LangGraph
📅 发布时间:2026/7/15 17:45:30

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

在人工智能快速发展的今天,大语言模型(LLM)已成为开发者构建智能应用的核心工具。然而,直接将LLM接入应用会遇到诸多挑战:如何管理复杂的对话流程?如何处理多步骤任务?如何集成外部工具和数据源?LangChain和LangGraph正是为解决这些问题而生的框架。

LangChain是一个用于开发由语言模型驱动的应用程序的框架,而LangGraph则是构建在LangChain之上的状态机库,专门用于创建复杂、有状态的对话和工作流。本文将带你全面了解这两个框架的核心概念、使用场景和实际应用。

什么是LangChain?

核心概念

LangChain是一个开源框架,旨在简化基于大语言模型的应用程序开发。它提供了一套标准化的接口和组件,让开发者能够更轻松地构建复杂的LLM应用。

主要组件包括:

  1. 模型(Models):支持多种LLM提供商(OpenAI、Anthropic、Google等)
  2. 提示词(Prompts):模板化和管理提示词
  3. 链(Chains):将多个LLM调用组合成序列
  4. 记忆(Memory):在对话中保持状态
  5. 索引(Indexes):与外部数据源集成
  6. 代理(Agents):让LLM决定使用哪些工具

基本使用示例

fromlangchain.llmsimportOpenAIfromlangchain.promptsimportPromptTemplatefromlangchain.chainsimportLLMChain# 初始化LLMllm=OpenAI(temperature=0.7)# 创建提示词模板prompt=PromptTemplate(input_variables=["product"],template="为{product}写一段营销文案,突出其三个主要特点。")# 创建链chain=LLMChain(llm=llm,prompt=prompt)# 运行链result=chain.run("智能手表")print(result)

什么是LangGraph?

从LangChain到LangGraph

虽然LangChain的链(Chains)可以处理简单的线性流程,但在面对复杂、有分支、有循环的工作流时显得力不从心。LangGraph应运而生,它引入了图(Graph)的概念,让开发者能够构建任意复杂度的状态机。

LangGraph的核心优势:

  • 支持循环和条件分支
  • 明确的状态管理
  • 可视化工作流
  • 更好的错误处理和重试机制

状态机概念

在LangGraph中,每个节点代表一个处理步骤,边代表状态转移。这种设计模式特别适合:

  • 多轮对话系统
  • 复杂决策流程
  • 需要外部工具调用的任务
  • 需要人工干预的工作流

LangGraph的核心组件

1. 状态(State)

状态是一个字典,在整个图执行过程中传递和更新。你可以定义状态的类型注解来获得更好的类型检查。

fromtypingimportTypedDict,Annotatedfromtyping_extensionsimportTypedDictimportoperatorclassState(TypedDict):messages:Annotated[list,operator.add]# 消息列表topic:str# 当前话题step:int# 当前步骤

2. 节点(Nodes)

节点是执行具体任务的函数,接收状态作为输入,返回更新后的状态。

defgenerate_response(state:State)->State:"""生成AI回复的节点"""# 获取最新用户消息last_message=state["messages"][-1]# 调用LLM生成回复response=llm.invoke(f"用户说:{last_message}\n请回复:")# 更新状态state["messages"].append({"role":"assistant","content":response})state["step"]+=1returnstate

3. 边(Edges)

边定义了节点之间的流转条件,可以是固定的,也可以是基于状态的动态条件。

defshould_continue(state:State)->str:"""决定下一步走向哪个节点"""ifstate["step"]>=5:return"end"# 结束对话elif"帮助"instate["messages"][-1]["content"]:return"help_node"# 转到帮助节点else:return"generate_response"# 继续生成回复

4. 图(Graph)

将节点和边组合成完整的图结构。

fromlanggraph.graphimportStateGraph,END# 创建图构建器workflow=StateGraph(State)# 添加节点workflow.add_node("generate_response",generate_response)workflow.add_node("help_node",provide_help)workflow.add_node("human_input",get_human_input)# 设置入口点workflow.set_entry_point("generate_response")# 添加条件边workflow.add_conditional_edges("generate_response",should_continue,{"end":END,"help_node":"help_node","generate_response":"generate_response"})# 添加固定边workflow.add_edge("help_node","generate_response")# 编译图app=workflow.compile()

实际应用场景

场景一:智能客服系统

fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDict,AnnotatedimportoperatorclassChatState(TypedDict):messages:Annotated[list,operator.add]user_query:strcontext:listrequires_human:booldefclassify_intent(state:ChatState):"""分类用户意图"""# 使用LLM判断用户意图intent=llm.classify(state["user_query"])state["intent"]=intentreturnstatedefretrieve_knowledge(state:ChatState):"""检索相关知识"""ifstate["intent"]=="technical":# 从知识库检索docs=vectorstore.similarity_search(state["user_query"])state["context"]=docsreturnstatedefgenerate_answer(state:ChatState):"""生成回答"""response=llm.generate_with_context(query=state["user_query"],context=state["context"])state["messages"].append({"role":"assistant","content":response})returnstatedefescalate_to_human(state:ChatState):"""转接人工"""state["requires_human"]=Truereturnstate# 构建客服图workflow=StateGraph(ChatState)workflow.add_node("classify",classify_intent)workflow.add_node("retrieve",retrieve_knowledge)workflow.add_node("answer",generate_answer)workflow.add_node("escalate",escalate_to_human)workflow.set_entry_point("classify")workflow.add_edge("classify","retrieve")workflow.add_edge("retrieve","answer")workflow.add_edge("answer",END)# 条件边:如果用户不满意,转人工workflow.add_conditional_edges("answer",lambdas:"escalate"ifs.get("dissatisfied",False)elseEND,{"escalate":"escalate",END:END})

场景二:数据分析工作流

是

否

是

否

用户输入分析需求

需求解析与澄清

需求是否明确?

数据查询与获取

进一步询问用户

数据预处理

分析执行

结果可视化

报告生成

交付用户

用户是否满意?

任务完成

调整分析参数

最佳实践

1. 状态设计原则

  • 保持状态简洁:只存储必要的信息
  • 使用类型注解:提高代码可读性和可维护性
  • 考虑状态持久化:对于长时间运行的工作流

2. 错误处理

defsafe_node_function(state:State):"""带错误处理的节点函数"""try:# 主要逻辑result=some_operation(state)state["result"]=result state["error"]=NoneexceptExceptionase:# 错误处理state["error"]=str(e)state["should_retry"]=Truereturnstatedefretry_logic(state:State):"""重试逻辑"""ifstate.get("should_retry",False)andstate.get("retry_count",0)<3:state["retry_count"]=state.get("retry_count",0)+1return"previous_node"# 返回上一个节点重试else:return"error_handler"# 转到错误处理节点

3. 性能优化

  • 并行执行:对于独立的节点,考虑并行处理
  • 缓存机制:缓存昂贵的LLM调用结果
  • 流式输出:对于长文本生成,使用流式响应

常见问题解答

Q1: LangChain和LangGraph有什么区别?

LangChain更像是一个工具箱,提供了构建LLM应用所需的各种组件。LangGraph则是一个专门用于构建复杂工作流的框架,特别擅长处理有状态、多步骤、有分支的任务。

Q2: 什么时候应该使用LangGraph?

当你需要:

  • 多轮对话系统
  • 复杂决策流程
  • 需要循环或条件分支的任务
  • 可视化工作流
  • 更好的状态管理

Q3: 学习曲线如何?

如果你已经熟悉Python和基本的LLM概念,LangChain的学习曲线相对平缓。LangGraph需要理解状态机和图的概念,但官方文档和示例非常丰富。

Q4: 生产环境注意事项

  • 做好错误处理和重试机制
  • 监控和日志记录
  • 状态持久化考虑
  • 性能测试和优化

相关新闻

  • Android面试深度解析:从基础概念到系统设计实战指南
  • withoutbg-python云端API深度解析:专业级背景移除效果与API调用最佳实践
  • 2026成都名包回收满分星级测评|连锁机构全域门店实测深度报告 - 奢侈品回收机构参考

最新新闻

  • 广义函数(分布)不是奇异函数补充工具,是无穷维螺旋场中奇点、薄层、脉冲类局部螺旋脉络的标准化描述载体《全域数学vs传统数学:人类文明进阶200讲》第84讲
  • C语言实现HTTP分块传输:从协议原理到高性能网络编程实战
  • MSP430FR231x硬件设计实战:端口配置、JTAG调试与ADC布局详解
  • 1.8VIN,3.3/3.6/5VOUT,电荷泵升压芯片,XZ3200
  • Jido:Elixir自治代理框架的终极指南
  • ChatGPT预测失效的4个隐性陷阱,90%团队踩坑却浑然不觉:从提示词偏差到数据时效断层深度拆解

日新闻

  • 告别启动盘残留:用Diskpart彻底清除U盘EFI分区与恢复完整空间
  • 2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官
  • Arch ECS 入门指南:10分钟掌握C#高性能数据驱动架构

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号