LangChain是基于LangChain构建的,面向智能体多轮交互/状态持久化/分支并执行图结构的工作流框架
LangGraph = LangChain + 图 + 状态机
LangChian应用场景
多步复杂推理
长时间运行任务(数小时、数天)
需要人工(Human-in-the-Loop)
追求生产级稳定性
LangGraph技术架构

第一个LangGraph
from typing import TypedDict, Annotated, List, Dict
from langgraph.graph import StateGraph, START, END
import uuid
# 1.定义State(可选)
class HelloState(TypedDict):
name: str
greeting: str
# 2.定义节点Node
def greet(helloState: HelloState) -> dict:
name = helloState["name"]
return {"greeting": f"你好,{name}"}
def add_emoji(helloState:HelloState) -> dict:
greeting = helloState["greeting"]
return {"greeting": greeting + " 。。。😄"}
# 3.构建图graph
graph = StateGraph(HelloState)
graph.add_node("greeting",greet)
graph.add_node("add_emoji",add_emoji)
graph.add_edge(START, "greeting")
graph.add_edge("greeting","add_emoji")
graph.add_edge("add_emoji",END)
# 4.编译图
app = graph.compile()
# 5.运行
# invoke()方法只接收状态字典作为核心参数
result = app.invoke({"name":"z3"})
print(result)
print(result["greeting"])
#
# #6 打印图的边和节点信息
#6.1 打印图的ascii可视化结构
print(app.get_graph().print_ascii())
print("="*50)
#
# #6.2 打印图的Mermaid代码可视化结构并通过https://www.processon.com/mermaid编辑器查看
print(app.get_graph().draw_mermaid())
print("="*50)
#6.3 生成 PNG并写入文件
png_bytes = app.get_graph().draw_mermaid_png(max_retries=2,retry_delay=2.0)
output_path = "langgraph" + str(uuid.uuid4())[:8] + ".png"
with open(output_path, "wb") as f:
f.write(png_bytes)
print(f"图片已生成:{output_path}")
运行结果:
{'name': 'z3', 'greeting': '你好,z3 。。。😄'}
你好,z3 。。。😄
+-----------+
| __start__ |
+-----------+
*
*
*
+----------+
| greeting |
+----------+
*
*
*
+-----------+
| add_emoji |
+-----------+
*
*
*
+---------+
| __end__ |
+---------+
None
==================================================
---
config:
flowchart:
curve: linear
---
graph TD;
__start__([<p>__start__</p>]):::first
greeting(greeting)
add_emoji(add_emoji)
__end__([<p>__end__</p>]):::last
__start__ --> greeting;
greeting --> add_emoji;
add_emoji --> __end__;
classDef default fill:#f2f0ff,line-height:1.2
classDef first fill-opacity:0
classDef last fill:#bfb6fc
==================================================
图片已生成:langgraph4e0b0152.png
将打印的Mermaid代码拷贝到ProcessOn网站

LangGraph 中使用LLM作为节点
"""
LangGraph 简单案例HelloWorld:
构建一个最小的有向图,流程是:START → 模型节点 → END
LangGraph的灵魂:State(状态) + Nodes(节点) + Edges(边) + Graph(图)
"""
import uuid
from typing import TypedDict, Annotated, List
from dotenv import load_dotenv
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
import os
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage
load_dotenv()
# ========== 1. 定义状态(State) ==========
# 存储对话消息
class MessageState(TypedDict):
# messages 是一个消息列表,Annotated + add_messages 表示支持自动追加消息
messages: Annotated[List, add_messages]
# ========== 2. 定义大模型 ==========
llm = init_chat_model(
model="qwen-plus",
model_provider="openai",
api_key=os.getenv("aliQwen-api"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# ========== 3. 定义节点函数 ==========
# 节点:调用大模型,并把回复加入到 state["messages"] 里
def model_node(state: MessageState):
reply = llm.invoke(state["messages"]) # 输入历史消息,调用模型
return {"messages": [reply]} # 返回新消息,自动加到 state
# ========== 4. 构建图结构 ==========
graph = StateGraph(MessageState) # 初始化图,指定 State 类型
graph.add_node("model", model_node) # 添加一个节点,名字叫 "model"
graph.add_edge(START, "model") # 从 START 到 "model"
graph.add_edge("model", END) # 从 "model" 到 END
# 打印图的边和节点信息
#print(graph.edges)
print()
#print(graph.nodes)
# ========== 5. 编译==========
app = graph.compile()
# ========== 6. 运行 ==========
#result = app.invoke({"messages": [HumanMessage(content="请用一句话解释什么是 LangGraph。")]})
result = app.invoke({"messages": "请用一句话解释什么是 LangGraph。"})
# 打印模型的最后一条回复
print("模型回答:", result["messages"][-1].content)
print()
# =========================
#1. 打印图的ascii可视化结构
print(app.get_graph().print_ascii())
print("="*50)
#2. 打印图的Mermaid代码可视化结构并通过https://www.processon.com/mermaid编辑器查看
print(app.get_graph().draw_mermaid())
print("="*50)
#3. 生成 PNG并写入文件
# png_bytes = app.get_graph().draw_mermaid_png()
# output_path = "langgraph" + str(uuid.uuid4())[:8] + ".png"
# with open(output_path, "wb") as f:
# f.write(png_bytes)
# print(f"图片已生成:{output_path}")
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
浙公网安备 33010602011771号