开启左侧

用 LangGraph 构建 Agent 逐步指南

[复制链接]
米落枫 发表于 10 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者:CS实验室
引言

在人工智能领域,检索增强生成(RAG)系统已成为处理简单查询并生成上下文相关响应的常见工具。然而,随着对更复杂人工智能应用需求的增长,我们需要超越这些检索能力的系统。于是,AI 智能体(AI Agent)应运而生——这些自主实体能够执行复杂的多步骤任务,在交互过程中保持状态,并动态适应新信息。LangGraph 作为 LangChain 库的强大扩展,旨在帮助开发者构建这些高级 AI 智能体,通过支持具有循环计算能力的有状态、多参与者应用来实现这一目标。
在本文中,我们将探讨LangGraph如何改变AI开发,并通过一个计算太阳能板节能效果的示例,逐步说明如何构建自己的AI智能体。此示例将展示LangGraph的独特功能如何创建智能、适应性强且适用于现实世界的AI系统。
什么是LangGraph?

LangGraph是一个构建于LangChain之上的高级库,旨在通过引入循环计算能力来增强您的大型语言模型(LLM)应用。虽然LangChain允许创建用于线性工作流的有向无环图(DAG),但LangGraph更进一步,支持添加循环,这对于开发复杂的、类似智能体的行为至关重要。这些行为使得LLM能够持续循环执行某个过程,根据不断变化的条件动态决定下一步要采取的行动。


  LangGraph:结点、状态和边 LangGraph的核心概念是状态图
    状态:表示在计算过程中维护和更新的上下文或记忆。它确保图中的每一步都能访问之前步骤的相关信息,从而允许基于整个过程中积累的数据进行动态决策。结点:作为图的基本构建块,代表单独的计算步骤或函数。每个结点执行特定任务,如处理输入、做出决策或与外部系统交互。结点可以自定义,以在工作流中执行各种操作。:连接图中的结点,定义从一个步骤到下一个步骤的计算流程。它们支持条件逻辑,允许执行路径根据当前状态发生变化,并促进数据和控制在结点之间的流动,从而实现复杂的多步骤工作流。
LangGraph通过无缝管理图结构、状态和协调,重新定义了AI开发,使创建复杂的多参与者应用成为可能。借助自动状态管理,LangGraph确保在交互过程中保留上下文,使AI能够智能地响应变化的输入。其简化的智能体协调保证了精确的执行和高效的信息交换,让开发者能够专注于创新工作流的设计,而不是技术细节。LangGraph的灵活性允许开发定制的高性能应用,而其可扩展性和容错性确保您的系统即使在企业级应用中也能保持稳健和可靠。
逐步指南

现在我们已经对LangGraph是什么以及它如何增强AI开发有了基本理解,接下来深入一个实际示例。在这个场景中,将构建一个AI智能体,旨在根据用户输入计算太阳能板的潜在节能效果。该智能体可以作为太阳能板销售商网站上的潜在客户生成工具,与潜在客户互动,提供个性化的节能估算。通过收集诸如每月电费成本等关键数据,该AI智能体帮助客户了解太阳能的经济效益,同时为销售团队的后续跟进筛选潜在客户。此示例展示了LangGraph在创建智能、动态系统方面的强大能力,这些系统可以自动化复杂任务并推动业务价值。
第一步:导入必要的库

首先导入项目所需的所有基本Python库和模块。
  1. from langchain_core.tools import tool
  2. from langchain_community.tools.tavily_search import TavilySearchResults
  3. from langchain_core.prompts import ChatPromptTemplate
  4. from langchain_core.runnables import Runnable
  5. from langchain_aws import ChatBedrock
  6. import boto3
  7. from typing import Annotated
  8. from typing_extensions import TypedDict
  9. from langgraph.graph.message import AnyMessage, add_messages
  10. from langchain_core.messages import ToolMessage
  11. from langchain_core.runnables import RunnableLambda
  12. from langgraph.prebuilt import ToolNode
  13. from langgraph.prebuilt import tools_condition
复制代码
这些导入中包含了后续将要用到的LangChain、LangGraph以及AWS服务。
第二步:定义计算太阳能节能效果的工具

定义一个工具,该工具将根据用户提供的每月电费成本来计算节能效果。
  1. @tool# 使用@tool装饰器将该函数标记为一个工具,使其可以在LangGraph中被调用defcompute_savings(monthly_cost:float)->float:"""
  2.     工具函数:根据用户的每月电费成本,计算切换到太阳能后的潜在节能效果。
  3.    
  4.     参数:
  5.         monthly_cost (float): 用户当前的每月电费成本。
  6.    
  7.     返回:
  8.         dict: 包含以下内容的字典:
  9.             - 'number_of_panels': 估计所需的太阳能板数量。
  10.             - 'installation_cost': 估计的安装成本。
  11.             - 'net_savings_10_years': 安装成本后的10年净节省金额。
  12.     """defcalculate_solar_savings(monthly_cost):# 计算中的假设值
  13.         cost_per_kWh =1.00# 每度电的成本。此数值根据需要进行修改,这里仅仅是示例
  14.         cost_per_watt =1.50# 每瓦太阳能板的成本。此数值根据需要进行修改,这里仅仅是示例
  15.         sunlight_hours_per_day =3.5# 每天的平均日照小时数
  16.         panel_wattage =350# 每块太阳能板的功率(瓦)
  17.         system_lifetime_years =10# 太阳能系统的使用寿命(年)# 计算每月用电量(单位:千瓦时)
  18.         monthly_consumption_kWh = monthly_cost / cost_per_kWh
  19.         
  20.         # 计算所需的系统容量(单位:千瓦)
  21.         daily_energy_production = monthly_consumption_kWh /30# 假设每月30天
  22.         system_size_kW = daily_energy_production / sunlight_hours_per_day
  23.         
  24.         # 计算所需的太阳能板数量和安装成本
  25.         number_of_panels = system_size_kW *1000/ panel_wattage  # 将千瓦转换为瓦
  26.         installation_cost = system_size_kW *1000* cost_per_watt  # 计算总安装成本# 计算年度节省金额和10年净节省金额
  27.         annual_savings = monthly_cost *
复制代码
原文地址:https://blog.csdn.net/qiwsir/article/details/145113743
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )