LangGraph是什么? LangGraph 是LangChain团队推出的流程编排工具,它基于状态机的思想,结合LangChain的Agent与Tool架构,允许我们以图的形式组织多个AI组件、服务调用、条件判断与上下文流转。
在大模型Agent系统中,一些入门教程或框架(包括LangChain早期版本)会鼓励用户把各种工具注册给模型,然后说:
“你可以调用这些tools,自己决定该怎么完成任务。”
 
这听起来像是Agent的“智能体现”,但实际上它把复杂性全推给了语言模型本身,代价非常高。
低参数量模型在自主决策上效果不好。 
流程逻辑是隐式的,决策都放到了prompt和模型权重中,而我们需要的是可靠、可复现、可维护的系统。从完全黑盒变成工程上可控的状态。 
 
LangGraph——让模型专注智能,流程交给编排系统 LangGraph并不是用来替代语言模型的“思考能力”,而是让你把流程逻辑从模型里“解耦”出来 ,这样模型专注处理智能任务,复杂决策与状态控制则交由LangGraph管理——就像微服务和调度系统一样,各司其职。
组件职责 
谁来做 
 
 
工具调用决策 
大模型 
 
控制流程走向 
LangGraph 
 
状态管理 
LangGraph 
 
智能处理(理解/总结/生成) 
大模型 
 
并发、回退、异常处理 
LangGraph 
 
实现一个会讲笑话、查询天气、闲聊的机器人 整个流程如上图所示,下面我们来感受下langgraph的实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 import  osfrom  langchain_core.messages import  AIMessage, AnyMessagefrom  langchain_deepseek import  ChatDeepSeekfrom  langgraph.constants import  END, STARTfrom  langgraph.graph import  StateGraphfrom  pydantic import  BaseModel, Fieldfrom  typing_extensions import  TypedDictINTENTION_PROMPT = """根据下面用户对话信息判断用户意图,意图有:查询天气、讲笑话、闲聊。结果请以json格式输出。  例如: 对话信息:     User: 今天天气怎么样? 输出:     {"intention": "查询天气"} 真实对话信息: {{messages}} """ class  IntentionOutput (BaseModel ):    intention: str  = Field(description='用户意图' ) llm = ChatDeepSeek(     model="deepseek-chat" ,       api_key=os.getenv("DEEPSEEK_API_KEY" ),   ) class  State (TypedDict ):    messages: list [AnyMessage]     intention: str  graph_builder = StateGraph(State) def  chatbot (state: State ):    """闲聊"""      return  {"messages" : AIMessage(content='哦吼,我也不知道聊啥子' )} def  get_weather (state: State ):    """查询天气"""      return  {"messages" : AIMessage(content='今天天气晴朗,23度,适合外出打羽毛球。' )} def  joke (state: State ):    """讲笑话"""      history_msgs = ""      for  msg in  state['messages' ]:         history_msgs += f"{msg['role' ]} :{msg['content' ]} \n"      prompt = '请根据用户最新的对话信息讲个笑话:\n'  + history_msgs     output = llm.invoke(prompt)     return  {"messages" : output} def  user_intention (state: State ):    """意图识别"""      history_msgs = ""      for  msg in  state['messages' ]:         history_msgs += f"{msg['role' ]} :{msg['content' ]} \n"      prompt = INTENTION_PROMPT.replace("{{messages}}" , history_msgs)     print ('意图识别' .center(60 , '-' ))     print (prompt)     structure_llm = llm.with_structured_output(IntentionOutput)     output = structure_llm.invoke(prompt)     final_intention = output.intention     if  final_intention not  in  ("查询天气" , "讲笑话" , "闲聊" ):         final_intention = '闲聊'      return  {"intention" : final_intention} def  intention_conditional_edge (state: State ):    if  state['intention' ] == '查询天气' :         return  'get_weather'      elif  state['intention' ] == '讲笑话' :         return  'joke'      else :         return  'chatbot'  graph_builder.add_node('user_intention' , user_intention) graph_builder.add_node("chatbot" , chatbot) graph_builder.add_node('get_weather' , get_weather) graph_builder.add_node('joke' , joke) graph_builder.add_edge(START, 'user_intention' ) graph_builder.add_conditional_edges('user_intention' , intention_conditional_edge, [     'chatbot' , 'get_weather' , 'joke' ]) graph_builder.add_edge('chatbot' , END) graph_builder.add_edge('get_weather' , END) graph_builder.add_edge('joke' , END) graph = graph_builder.compile () if  __name__ == "__main__" :    round1 = graph.invoke(         {"messages" : [{"role" : "user" , "content" : "我很开心,讲个好笑的事情吧" }]})     print (round1) 
更多示例请参考官方文档 。
编排可视化 可通过LangGraph Studio 来进行可视化,操作步骤:
1. 安装必要包 1 2 3 pip install --upgrade "langgraph-cli[inmem]"  
2. 创建langgraph.json 项目结构如下:
1 2 3 lg_demo/   - chat_demo.py(内容如上)   - langgraph.json 
langgraph.json内容:
1 2 3 4 5 6 7 8 9 {   "dependencies" :  [      "."    ] ,    "graphs" :  {      "agent" :  "./chat_demo.py:graph"    }  } 
3. 运行 1 DEEPSEEK_API_KEY=<your key>  langgraph dev 
会得到如下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 INFO:langgraph_api.cli:         Welcome to ╦  ┌─┐┌┐┌┌─┐╔═╗┬─┐┌─┐┌─┐┬ ┬ ║  ├─┤││││ ┬║ ╦├┬┘├─┤├─┘├─┤ ╩═╝┴ ┴┘└┘└─┘╚═╝┴└─┴ ┴┴  ┴ ┴ - 🚀 API: http://127.0.0.1:2024 - 🎨 Studio UI: https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024 - 📚 API Docs: http://127.0.0.1:2024/docs This in-memory server is designed for development and testing. For production use, please use LangGraph Cloud. 
如果浏览器无法正常打开https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024, 可尝试使用Firefox浏览器。
4. 示例 下图为最终可视化效果,包含每个节点及其流向(来自LangGraph Studio):
5. 客户端调用 你也可以通过python sdk进行调用,示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 from  langgraph_sdk import  get_sync_clientclient = get_sync_client(url="http://localhost:2024" ) for  chunk in  client.runs.stream(    None ,       "agent" ,       input ={         "messages" : [             {                 "role" : "user" ,                 "content" : "今天南京天气好吗?适合外出吗?" ,             },             {                 "role" : "assistant" ,                 "content" : "今天天气晴朗,23度,适合外出打羽毛球。"              },             {                 "role" : "user" ,                 "content" : "那你给我讲个天气相关的笑话吧"              }         ],     },     stream_mode="messages" , ):     print (f"Receiving new event of type: {chunk.event} ..." )     print (chunk.data)     print ("\n\n" ) 
个人感受 
如果为了演示,可以尝试上面可视化部分。 
如果集成至已有服务,可单独使用LangGraph服务编排。