【带你 langchain 双排系列教程】10. LangGraph快速入门与底层原理剖析
LangGraph是LangChain工具集中用于构建多智能体工作流的库,旨在简化状态机的创建,使多个智能体能够协同工作。它可以帮助开发者将大型语言模型(LLM)的步骤图形化,从而更高效地管理和执行复杂的任务流程。
·
一、什么是LangGraph?
LangGraph是LangChain工具集中用于构建多智能体工作流的库,旨在简化状态机的创建,使多个智能体能够协同工作。它可以帮助开发者将大型语言模型(LLM)的步骤图形化,从而更高效地管理和执行复杂的任务流程。
二、快速入门:环境配置与基本组件
环境配置
首先,确保你的开发环境已经安装了必要的依赖。以下是推荐的环境配置:
bash复制
python -m venv langgraph-env
source langgraph-env/bin/activate
pip install langchain langgraph
基本组件
LangGraph的核心组件包括:
- Graph:管理整个图的结构和状态。
- State:在节点间传递的状态对象,用于存储和更新信息。
- Node:图中的节点,表示具体的步骤或操作。
- Edge:定义节点之间的连接和转换逻辑。
三、实战示例:构建一个简单的智能体
示例1:基本状态机
Python复制
from langgraph.graph import StateGraph, State
from typing_extensions import TypedDict
# 定义状态
class State(TypedDict):
value: str
# 创建图
graph = StateGraph(State)
# 添加节点
def node1(state: State):
return {"value": "Node 1 executed"}
def node2(state: State):
return {"value": "Node 2 executed"}
graph.add_node("node1", node1)
graph.add_node("node2", node2)
# 添加边
graph.add_edge("node1", "node2")
# 设置入口和出口
graph.set_entry_point("node1")
graph.set_finish_point("node2")
# 执行图
final_state = graph.run({"value": "Initial state"})
print(final_state)
示例2:智能客服系统
Python复制
from langgraph.graph import StateGraph, State
import json
class CustomerServiceState(TypedDict):
conversation_history: list
current_intent: str
user_info: dict
resolved: bool
class CustomerServiceGraph(StateGraph):
def __init__(self):
super().__init__()
self.add_node("greeting", self.greet_customer)
self.add_node("understand_intent", self.analyze_intent)
self.add_node("handle_query", self.process_query)
self.add_node("confirm_resolution", self.check_resolution)
async def greet_customer(self, state: CustomerServiceState):
"""欢迎客户"""
response = await self.llm.generate(
prompt=f"""
历史对话:{state['conversation_history']}
任务:生成合适的欢迎语
要求:
1. 保持专业友好
2. 如果是老客户,表示认出了他们
3. 询问如何帮助
"""
)
state['conversation_history'].append(f"Assistant: {response}")
return state
async def analyze_intent(self, state: CustomerServiceState):
"""理解用户意图"""
response = await self.llm.generate(
prompt=f"""
历史对话:{state['conversation_history']}
任务:分析用户意图
输出格式:
{{
"intent": "退款/咨询/投诉/其他",
"confidence": 0.95,
"details": "具体描述"
}}
"""
)
state['current_intent'] = json.loads(response)
return state
# 初始化系统
graph = CustomerServiceGraph()
state_manager = StateManager()
error_handler = ErrorHandler()
async def handle_customer_query(user_id: str, message: str):
# 加载或创建状态
state = state_manager.load_state(user_id) or {
"conversation_history": [],
"current_intent": None,
"user_info": {},
"resolved": False
}
# 添加用户消息
state["conversation_history"].append(f"User: {message}")
# 执行状态机流程
try:
result = await graph.run(state)
# 保存状态
state_manager.save_state(user_id, result)
return result["conversation_history"][-1]
except Exception as e:
return await error_handler.with_retry(
graph.run,
state
)
四、底层原理剖析
状态管理
LangGraph通过状态(State)对象在节点间传递信息。状态可以包含任意类型的数据,用于存储和更新任务执行过程中的关键信息。
图结构
LangGraph使用有向图(Directed Graph)来表示任务流程。节点(Node)表示具体的任务步骤,边(Edge)定义了节点之间的转换逻辑。
异步执行
LangGraph支持异步执行,允许开发者在节点中使用async和await,从而提高任务执行的效率和灵活性。
模块化设计
LangGraph的模块化设计使得开发者可以轻松地扩展和定制功能。通过添加自定义节点和边,可以构建复杂的多智能体系统。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)