LangGraph实战教程:用Python构建多步骤AI Agent工作流
LangGraph是LangChain团队推出的一个强大框架,用于构建有状态、多步骤的AI Agent工作流。与传统的链式调用不同,LangGraph让开发者可以定义包含循环、分支和条件逻辑的图结构,非常适合构建复杂的AI代理系统。
环境准备
首先安装必要的依赖包:
pip install langgraph langchain-openai langchain-community
基础示例:构建一个简单的问答Agent
以下代码展示如何用LangGraph构建一个能自主决定是否调用工具搜索的AI Agent:
from typing import TypedDict, Literal
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, AIMessage
# 定义状态结构
class AgentState(TypedDict):
messages: list
next_step: str
# 初始化LLM
llm = ChatOpenAI(model="gpt-4", temperature=0)
# 定义节点函数
def call_model(state: AgentState) -> AgentState:
response = llm.invoke(state["messages"])
state["messages"].append(AIMessage(content=response.content))
return state
def should_continue(state: AgentState) -> Literal["tools", "end"]:
last_msg = state["messages"][-1]
if "需要搜索" in last_msg.content:
return "tools"
return "end"
# 构建图
workflow = StateGraph(AgentState)
workflow.add_node("agent", call_model)
workflow.set_entry_point("agent")
workflow.add_conditional_edges("agent", should_continue)
# 编译并运行
app = workflow.compile()
result = app.invoke({
"messages": [HumanMessage(content="2026年AI行业最大的新闻是什么?")],
"next_step": ""
})
print(result["messages"][-1].content)
添加工具调用
LangGraph支持与LangChain工具无缝集成:
from langchain_community.tools import DuckDuckGoSearchRun
from langgraph.prebuilt import ToolExecutor, ToolInvocation
# 定义工具
search = DuckDuckGoSearchRun()
tools = [search]
tool_executor = ToolExecutor(tools)
def call_tool(state: AgentState) -> AgentState:
last_msg = state["messages"][-1]
tool_invocation = ToolInvocation(
tool="duckduckgo_search",
tool_input=last_msg.content
)
result = tool_executor.invoke(tool_invocation)
state["messages"].append(AIMessage(content=f"搜索结果:{result}"))
return state
高级:带记忆的多轮对话Agent
利用LangGraph的持久化功能,可以构建跨会话记忆的Agent:
from langgraph.checkpoint import MemorySaver
# 启用记忆功能
memory = MemorySaver()
app_with_memory = workflow.compile(checkpointer=memory)
# 带会话ID运行
config = {"configurable": {"thread_id": "session_1"}}
result = app_with_memory.invoke({
"messages": [HumanMessage(content="你好,我叫小明")]
}, config=config)
result = app_with_memory.invoke({
"messages": [HumanMessage(content="我叫什么名字?")]
}, config=config)
# Agent会正确回答"小明"
LangGraph的设计理念是"图即工作流"——每个节点执行一个操作(调用LLM、运行工具、处理数据),边决定了执行顺序和条件分支。这种方式比传统框架更灵活,能够应对真实世界中复杂的AI Agent场景。
建议初学者从简单的两节点图开始,逐步增加工具节点和条件判断,最终构建出能自主决策的多工具Agent系统。
©️版权声明:若无特殊声明,本站所有文章版权均归AI工具集原创和所有,未经许可,任何个人、媒体、网站、团体不得转载、抄袭或以其他方式复制发表本站内容,或在非我站所属的服务器上建立镜像。否则,我站将依法保留追究相关法律责任的权利。