(建议收藏)LangGraph+MCP构建工业级ReAct Agent,从入门到精通,这一篇讲透了!

一、引言

在当今快速发展的工业4.0时代,供应链管理面临着前所未有的复杂性和挑战。传统的供应链管理系统往往缺乏智能决策能力,难以应对动态变化的市场需求和供应商状况。本文将深入探讨如何基于ReAct(Reasoning + Acting) Agent技术架构,结合LangGraph和MCP (Model Context Protocol) 工具集成,构建一个工业级的供应链管理智能系统。

二、ReAct Agent原理与LangGraph结合机制

ReAct范式核心理念

ReAct (Reasoning + Acting) 是一种将推理和行动相结合的AI Agent架构模式。与传统的单纯推理或行动模式不同,ReAct通过以下三个核心阶段形成闭环:

  1. 观察 (Observe): 感知当前环境状态和问题
  2. 思考 (Think): 基于观察进行推理和策略制定
  3. 行动 (Act): 执行具体的工具调用和决策

LangGraph集成优势

LangGraph作为一个强大的工作流编排框架,为ReAct Agent提供了以下关键能力:

  • 状态管理: 维护Agent在不同阶段的状态信息
  • 工作流编排: 协调多个工具的执行顺序和依赖关系
  • 结果聚合: 整合多个工具的输出结果
  • 错误处理: 提供robust的异常处理机制

三、系统架构设计

整体架构图

核心组件说明

1. 输入层 (Input Layer)

负责接收和预处理各种供应链数据:

  • 库存数据:当前库存水平、安全库存阈值
  • 供应商信息:供应商能力、历史表现、地理位置
  • 历史销售:过往销售记录、季节性趋势
  • 市场需求:外部市场信号、预测数据
2. ReAct Agent核心 (ReAct Core)

实现核心的推理-行动循环:

  • 观察模块:状态感知和问题识别
  • 思考模块:推理引擎和决策逻辑
  • 行动模块:工具调用和执行控制
3. MCP工具集 (MCP Tools)

提供专业的供应链分析能力:

  • 库存分析工具:识别库存不足和过剩
  • 供应商评估工具:综合评估供应商表现
  • 需求预测工具:基于历史数据预测未来需求
  • 采购优化工具:生成最优采购计划

四、代码实现详解

核心数据结构设计

from dataclasses import dataclassfrom datetime import datetimefrom typing import Dict, List, Any, Optional@dataclassclass SupplierInfo:    """供应商信息数据结构    设计理念:    - 使用dataclass简化数据管理    - 包含供应商的关键评估维度    - 支持序列化和反序列化    """    supplier_id: str          # 供应商唯一标识    name: str                 # 供应商名称    location: str             # 地理位置    reliability_score: float  # 可靠性评分 (0-1)    cost_efficiency: float    # 成本效率 (0-1)    delivery_time: int        # 交付时间 (天数)    quality_rating: float     # 质量评级 (0-5)    capacity: int             # 最大供应能力@dataclassclass InventoryItem:    """库存项目数据结构    关键设计考虑:    - 支持动态库存阈值管理    - 包含成本信息用于优化决策    - 关联供应商信息    """    item_id: str    name: str    current_stock: int        # 当前库存量    min_threshold: int        # 最小库存阈值    max_capacity: int         # 最大库存容量    unit_cost: float          # 单位成本    supplier_id: str          # 关联供应商    last_updated: datetime    # 最后更新时间

MCP工具集成实现

抽象基类设计
from abc import ABC, abstractmethodimport loggingclass MCPTool(ABC):    """MCP工具抽象基类    设计模式:    - 使用抽象基类确保工具接口一致性    - 内置使用统计和日志记录    - 支持异步执行提高性能    """    def __init__(self, name: str, description: str):        self.name = name        self.description = description        self.usage_count = 0        self.logger = logging.getLogger(f"MCP.{name}")    @abstractmethod    asyncdef execute(self, **kwargs) -> Dict[str, Any]:        """执行工具功能 - 子类必须实现"""        pass    def log_usage(self):        """记录工具使用情况"""        self.usage_count += 1        self.logger.info(f"工具 {self.name} 被调用,总使用次数: {self.usage_count}")
库存分析工具实现
class InventoryAnalysisTool(MCPTool):    """库存分析工具    核心功能:    1. 识别库存不足的商品    2. 检测过度库存情况    3. 计算库存总价值    4. 生成库存管理建议    """    def __init__(self):        super().__init__(            name="inventory_analysis",            description="分析当前库存状态,识别库存不足或过剩的商品"        )    asyncdef execute(self, inventory_data: List[InventoryItem]) -> Dict[str, Any]:        """执行库存分析        算法逻辑:        1. 遍历所有库存项目        2. 基于阈值判断库存状态        3. 计算紧急程度和成本影响        4. 生成分类结果和建议        """        self.log_usage()        low_stock_items = []    # 库存不足商品        overstock_items = []    # 过度库存商品        optimal_items = []      # 库存正常商品        for item in inventory_data:            stock_ratio = item.current_stock / item.max_capacity            # 判断库存不足            if item.current_stock <= item.min_threshold:                urgency = 'high'if item.current_stock < item.min_threshold * 0.5else'medium'                low_stock_items.append({                    'item_id': item.item_id,                    'name': item.name,                    'current_stock': item.current_stock,                    'shortage': item.min_threshold - item.current_stock,                    'urgency': urgency                })            # 判断过度库存 (超过80%容量)            elif stock_ratio > 0.8:                excess = item.current_stock - item.max_capacity * 0.7                overstock_items.append({                    'item_id': item.item_id,                    'name': item.name,                    'excess': excess,                    'cost_impact': excess * item.unit_cost                })            else:                optimal_items.append(item.item_id)        # 计算总库存价值        total_value = sum(item.current_stock * item.unit_cost for item in inventory_data)        return {            'analysis_timestamp': datetime.now().isoformat(),            'total_items': len(inventory_data),            'total_inventory_value': total_value,            'low_stock_items': low_stock_items,            'overstock_items': overstock_items,            'optimal_items_count': len(optimal_items),            'recommendations': self._generate_inventory_recommendations(low_stock_items, overstock_items)        }        def _generate_inventory_recommendations(self, low_stock, overstock):        # 辅助函数,实际应有更复杂逻辑        recs = []        if low_stock:            recs.append(f"建议立即为 {len(low_stock)} 种库存不足的商品启动采购流程。")        if overstock:            recs.append(f"发现 {len(overstock)} 种商品存在过度库存,建议考虑促销或减少后续采购。")        return recs
供应商评估工具实现
class SupplierEvaluationTool(MCPTool):    """供应商评估工具    评估维度:    - 可靠性评分 (30%权重)    - 成本效率 (25%权重)      - 质量评级 (25%权重)    - 交付时间 (20%权重)    """    def __init__(self):        super().__init__(            name="supplier_evaluation",            description="综合评估供应商表现,并进行排名"        )    asyncdef execute(self, suppliers: List[SupplierInfo], weights: Dict[str, float] = None) -> Dict[str, Any]:        """执行供应商综合评估        评估算法:        1. 标准化各项指标到0-1范围        2. 应用权重计算综合评分        3. 排序并生成排名        4. 识别优秀和待改进供应商        """        self.log_usage()        # 默认评估权重        if weights isNone:            weights = {                'reliability_score': 0.3,                'cost_efficiency': 0.25,                'quality_rating': 0.25,                'delivery_time': 0.2            }        evaluated_suppliers = []        for supplier in suppliers:            # 标准化交付时间评分 (时间越短评分越高)            delivery_score = max(0, 1 - (supplier.delivery_time - 1) / 30)            quality_score = supplier.quality_rating / 5.0            # 计算加权综合评分            composite_score = (                supplier.reliability_score * weights['reliability_score'] +                supplier.cost_efficiency * weights['cost_efficiency'] +                quality_score * weights['quality_rating'] +                delivery_score * weights['delivery_time']            )            evaluated_suppliers.append({                'supplier_id': supplier.supplier_id,                'name': supplier.name,                'composite_score': round(composite_score, 3),                'ranking': 0# 将在排序后设置            })        # 按综合评分排序        evaluated_suppliers.sort(key=lambda x: x['composite_score'], reverse=True)        for i, supplier in enumerate(evaluated_suppliers):            supplier['ranking'] = i + 1        return {            'evaluation_timestamp': datetime.now().isoformat(),            'total_suppliers': len(suppliers),            'top_suppliers': evaluated_suppliers[:5],            'recommendations': self._generate_supplier_recommendations(evaluated_suppliers)        }    def _generate_supplier_recommendations(self, evaluated_suppliers):        # 辅助函数        ifnot evaluated_suppliers:            return ["无供应商数据可供推荐。"]        top_supplier = evaluated_suppliers[0]        return [f"优先考虑与排名第一的供应商 '{top_supplier['name']}' (综合评分: {top_supplier['composite_score']}) 合作。"]

ReAct Agent核心实现

class SupplyChainReActAgent:    """供应链管理ReAct Agent    核心特性:    - 实现完整的ReAct循环    - 集成多个MCP工具    - 支持上下文记忆    - 提供决策可解释性    """    def __init__(self):        # 初始化工具集 (假设其他工具已定义)        self.tools = {            'inventory_analysis': InventoryAnalysisTool(),            'supplier_evaluation': SupplierEvaluationTool(),            # 'demand_forecast': DemandForecastTool(),            # 'procurement_optimization': ProcurementOptimizationTool()        }        self.memory = []  # 历史决策记录        self.current_context = {}    asyncdef think(self, observation: str, context: Dict[str, Any]) -> str:        """思考阶段:分析情况并制定推理策略        推理过程:        1. 解析当前观察内容        2. 分析可用的上下文信息        3. 识别需要解决的问题类型        4. 制定工具调用策略        """        self.current_context.update(context)        reasoning_steps = []        # 基于上下文分析需要执行的任务        if'inventory_data'in context:            reasoning_steps.append("检测到库存状态信息,需要分析库存水平。")        if'supplier_data'in context:            reasoning_steps.append("发现供应商数据,应评估供应商表现。")        # 检测紧急情况        if'紧急'in observation or'不足'in observation:            reasoning_steps.append("检测到紧急情况,提高处理优先级。")        reasoning = f"""        观察: {observation}        推理过程:        {chr(10).join(f"- {step}" for step in reasoning_steps)}        执行计划:        1. 库存分析 - 了解当前库存状态        2. 供应商评估 - 评估可用供应商        3. 采购优化 - 制定最优采购计划 (需要前序步骤结果)        """        return reasoning    asyncdef act(self, action_plan: str) -> Dict[str, Any]:        """行动阶段:执行工具调用和决策        执行策略:        1. 按依赖关系顺序执行工具        2. 传递上下文信息        3. 收集执行结果        4. 处理异常情况        """        results = {}        try:            # 1. 库存分析            if'inventory_data'in self.current_context:                results['inventory_analysis'] = await self.tools['inventory_analysis'].execute(                    inventory_data=self.current_context['inventory_data']                )            # 2. 供应商评估            if'supplier_data'in self.current_context:                results['supplier_evaluation'] = await self.tools['supplier_evaluation'].execute(                    suppliers=self.current_context['supplier_data']                )                        # 后续工具调用...        except Exception as e:            results['error'] = str(e)        return results    asyncdef observe(self, action_results: Dict[str, Any]) -> str:        """观察阶段:分析执行结果并生成新观察        观察重点:        1. 分析各工具的执行结果        2. 识别关键发现和异常        3. 更新系统状态认知        4. 为下一轮决策准备信息        """        observations = []        # 分析库存分析结果        if'inventory_analysis'in action_results:            inv_result = action_results['inventory_analysis']            low_stock_count = len(inv_result.get('low_stock_items', []))            if low_stock_count > 0:                observations.append(f"发现{low_stock_count}个商品库存不足。")        # 分析供应商评估结果        if'supplier_evaluation'in action_results:            sup_result = action_results['supplier_evaluation']            top_supplier = sup_result.get('top_suppliers', [{}])[0]            if top_supplier:                observations.append(f"最佳供应商: {top_supplier.get('name')} (评分: {top_supplier.get('composite_score')})。")        # 存储到记忆中        self.memory.append({            'timestamp': datetime.now().isoformat(),            'action_results': action_results,            'observations': observations        })        return"\n".join(f"- {obs}"for obs in observations) if observations else"未发现显著问题。"    asyncdef react_cycle(self, initial_observation: str, context: Dict[str, Any]) -> Dict[str, Any]:        """完整的ReAct循环执行"""        # Think -> Act -> Observe        reasoning = await self.think(initial_observation, context)        action_results = await self.act(reasoning)        final_observation = await self.observe(action_results)        return {            'cycle_timestamp': datetime.now().isoformat(),            'initial_observation': initial_observation,            'reasoning': reasoning,            'action_results': action_results,            'final_observation': final_observation        }

五、决策流程设计

Agent决策流程图

决策流程说明

1. 观察阶段 (Observation Phase)
  • 状态收集: 从多个数据源收集当前供应链状态。
  • 问题识别: 基于预设规则和阈值识别潜在问题。
  • 优先级评估: 根据业务影响和紧急程度确定处理优先级。
2. 思考阶段 (Reasoning Phase)
  • 情况分析: 深入分析问题的根本原因和影响范围。
  • 策略制定: 基于历史经验和最佳实践制定解决策略。
  • 工具选择: 选择最适合的分析工具和执行路径。
3. 行动阶段 (Action Phase)
  • 工具执行: 并行或串行执行选定的分析工具。
  • 结果收集: 汇总各工具的执行结果和中间数据。
  • 质量检查: 验证结果的完整性和合理性。

六、数据流向设计

数据流向图

数据处理流程

1. 数据源层
  • 库存数据库: 实时库存水平、库存变动历史
  • 供应商数据库: 供应商基本信息、历史表现数据
  • 销售历史数据: 历史销售记录、客户需求模式
  • 市场数据: 外部市场信号、行业趋势数据
2. 数据处理层
  • 数据清洗: 处理缺失值、异常值、重复数据
  • 数据标准化: 统一数据格式、单位、编码标准
  • 特征工程: 提取关键特征、计算衍生指标
3. Agent处理层
  • 状态感知: 实时监控供应链关键指标
  • 问题识别: 基于规则和机器学习识别异常
  • 决策执行: 调用相应工具执行分析和优化

七、系统演示与结果分析

演示场景设置

我们构建了一个包含2个供应商和2种库存商品的模拟供应链环境:

import asyncio# 供应商数据示例suppliers = [    SupplierInfo("SUP001", "华东制造", "上海", 0.92, 0.85, 5, 4.5, 10000),    SupplierInfo("SUP002", "南方工业", "深圳", 0.88, 0.90, 7, 4.2, 8000),]# 库存数据示例  inventory_items = [    InventoryItem("ITEM001", "钢材板材", 150, 200, 1000, 85.5, "SUP001", datetime.now()),    InventoryItem("ITEM002", "电子元件", 50, 100, 500, 12.8, "SUP002", datetime.now()),]# 运行Agentasyncdef run_demo():    agent = SupplyChainReActAgent()    initial_observation = "系统常规检查,发现钢材板材库存低于阈值。"    context = {        "inventory_data": inventory_items,        "supplier_data": suppliers    }    result = await agent.react_cycle(initial_observation, context)        import json    print(json.dumps(result, indent=2, ensure_ascii=False, default=str))# 在Jupyter Notebook或支持asyncio的环境中运行# asyncio.run(run_demo())

执行结果分析

系统成功执行了完整的ReAct循环,产生了以下关键结果(示例):

  • 库存分析结果: 识别出"钢材板材"和"电子元件"库存不足,紧急程度分别为"medium"和"high"。
  • 供应商评估结果: "华东制造"综合评分最高(0.899),被列为首选供应商。
  • 最终观察: “发现2个商品库存不足。\n- 最佳供应商: 华东制造 (评分: 0.899)。”

系统优势总结

  1. 智能决策: 基于ReAct范式的推理-行动循环,使决策过程更接近人类专家。
  2. 工具集成: MCP协议确保工具的标准化和可扩展性,方便接入新的分析模型。
  3. 实时响应: 异步执行提高系统响应速度,能够快速应对供应链变化。
  4. 可解释性: 完整的推理过程和决策依据被记录下来,增强了AI决策的透明度。
  5. 可扩展性: 模块化设计支持新工具、新数据源的快速集成。

本文详细介绍了基于ReAct Agent技术架构的工业级供应链管理系统的设计与实现。通过结合LangGraph的工作流编排能力和MCP的工具集成标准,我们构建了一个具有以下特点的智能系统:

  1. 完整的ReAct循环: 实现了观察-思考-行动的闭环决策过程。
  2. 模块化工具集: 基于MCP标准的可扩展工具架构。
  3. 实时决策能力: 支持动态供应链环境的快速响应。
  4. 可解释的AI: 提供完整的推理过程和决策依据。
  5. 工业级可靠性: 包含完善的错误处理和监控机制。

该系统不仅展示了ReAct Agent在复杂业务场景中的应用潜力,也为其他工业领域的智能化改造提供了可参考的技术方案。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

以下是基于Python、LangChain、LangGraphMCP实现Text2SQL Agent的大致方法: ### 环境准备 首先需要安装相关的库,可使用以下命令: ```python pip install langchain langgraph mcp ``` ### 了解相关组件 - **MongoDB**:是一款流行的NoSQL数据库,将数据存储在灵活的JSON格式文档中,适合需要灵活性和可扩展性的AI应用,可作为数据源 [^1]。 - **LangChain**:是智能体框架,在实现Text2SQL Agent中可用于构建智能体的基础逻辑 [^2]。 - **LangGraph**:用于工作流编排,可对Text2SQL Agent的整个工作流程进行合理安排 [^2]。 - **MCP**:包含MCP Client(协议客户端)、MCP Adapters(工具转换层)、MCP Protocol(协议层)和MCP Servers(数据源服务),负责与数据源交互等工作 [^2]。 ### 实现步骤 #### 1. 连接数据源 使用MCP相关组件连接到MongoDB数据源。示例代码如下: ```python from mcp.client import MCPClient from mcp.adapters import MongoDBAdapter # 创建MCP客户端 client = MCPClient() # 创建MongoDB适配器 adapter = MongoDBAdapter() # 连接到MongoDB数据源 client.connect(adapter, "mongodb://localhost:27017") ``` #### 2. 构建Text2SQL Agent 使用LangChain构建智能体的核心逻辑,将自然语言文本转换为SQL查询。示例代码如下: ```python from langchain.agents import AgentExecutor, Tool from langchain.llms import OpenAI # 定义一个工具,用于将自然语言转换为SQL def text_to_sql(text): # 这里可以实现具体的文本到SQL的转换逻辑 sql = f"SELECT * FROM table WHERE condition = '{text}'" return sql # 创建工具 tools = [ Tool( name="TextToSQL", func=text_to_sql, description="Convert natural language text to SQL query" ) ] # 创建语言模型 llm = OpenAI() # 创建智能体执行器 agent = AgentExecutor.from_agent_and_tools( agent=agent, tools=tools, verbose=True ) ``` #### 3. 工作流编排 使用LangGraph对整个工作流程进行编排,确保各个组件之间的协作顺畅。示例代码如下: ```python from langgraph import Graph # 创建LangGraph图 graph = Graph() # 添加节点和边 graph.add_node("TextInput", input_type="text") graph.add_node("Text2SQLAgent", agent=agent) graph.add_node("MCPQuery", client=client) graph.add_edge("TextInput", "Text2SQLAgent") graph.add_edge("Text2SQLAgent", "MCPQuery") ``` #### 4. 执行工作流 将自然语言文本输入到工作流中,得到最终的SQL查询结果。示例代码如下: ```python # 输入自然语言文本 input_text = "Find all records where name is 'John'" # 执行工作流 result = graph.run({"TextInput": input_text}) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值