使用 LangGraph 创建工作流

LangGraph 是 LangChain 中的工作流引擎,为什么 LangChain 需要创建工作流,这还是由于大语言模型的应用特点。大语言模型本身不具备业务功能,大语言只能根据提示词进行处理并返回,通常一组对话无法完成一个复杂的任务,需要一步一步的进行处理,根据大语言模型的返回,应用会根据返回做对应的处理,并通过复杂的多轮交互完成一个复杂的任务。Graph 就可以理解为状态机,我们先简单创建一个Graph。

创一个 Graph

一个图中主要包括三个概念,状态、节点和链接边。Graph 有两个特别的节点,START 和 END,START 为开始节点、END 结束节点,Graph可以理解为流程,有开始和结束节点。状态(State)是在每个节点之间进行传递的对象,State 需要进行自定义,是一个普通的 Python 对象,State 有一些预定义的方法,包括 add 和 add_message,add 是添加数据到 List 中,add_messages 是特别为 LLM Messages 用的,

from typing import Annotated

from typing_extensions import TypedDict

from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages


class State(TypedDict):
    # Messages have the type "list". The `add_messages` function
    # in the annotation
### LangGraph 工作流使用教程 #### 创建基础工作流 构建基于 LangGraph工作流涉及多个方面,从简单的对话记录到复杂的应用程序开发。对于初学者来说,可以先尝试通过 LangGraph 来实现与虚拟角色之间的交互[^1]。 ```python from langgraph import Graph, Node # 初始化图结构 graph = Graph() # 添加节点并设置属性 node_start = Node(id="start", content="欢迎来到LangGraph世界!") graph.add_node(node_start) # 连接不同节点形成路径 next_node_id = "greeting" node_greet = Node(id=next_node_id, content="你好啊!有什么可以帮助你的吗?") graph.connect_nodes("start", next_node_id) ``` 此段代码展示了如何初始化一个基本的会话流程,其中包含了两个主要部分:一是创建起始点 `Node` 对象;二是利用 `.connect_nodes()` 方法来指定各个节点间的连接关系。 #### 定义高级工作流 当掌握了基础知识之后,就可以进一步学习更复杂的操作——即定义应用程序的工作流。这通常涉及到一系列预设好的节点配置以及它们之间相互作用的方式[^2]。 ```python def define_workflow(): workflow_steps = [ {"id": "input_user_message", "type": "input"}, {"id": "process_request", "type": "function_call"}, {"id": "output_response", "type": "output"} ] for step in workflow_steps: node = Node(**step) graph.add_node(node) if not first_step: previous_step_id = get_previous_step() graph.connect_nodes(previous_step_id, step["id"]) define_workflow() ``` 上述函数说明了怎样按照既定顺序排列各功能模块,并确保每一步都能顺利传递给下一步执行。值得注意的是,在实际项目中还需要考虑错误处理机制等问题。 #### 利用代理增强工作流能力 为了满足更加多样化的需求场景,LangGraph 支持引入代理概念来进行任务分配和协调。这种特性允许开发者设计出具备高度灵活性及可扩展性的解决方案[^3]。 ```python class Agent: def __init__(self, name): self.name = name def execute_task(self, task_name): print(f"{self.name}正在执行{task_name}") agent_a = Agent(name='AgentA') agent_b = Agent(name='AgentB') agents_mapping = { 'search_web': agent_a, 'summarize_text': agent_b } for task, responsible_agent in agents_mapping.items(): responsible_agent.execute_task(task) ``` 这段示例体现了通过类实例化方式模拟不同的代理实体,并让其负责特定类型的作业。借助这种方式,不仅简化了整体架构的设计难度,同时也提高了系统的响应速度和服务质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值