当前位置: 首页 > article >正文

Python实战:用LangGraph和MCP打造你的第一个AI代理(附完整代码)

Python实战用LangGraph和MCP构建智能代理的完整指南在当今快速发展的AI领域构建能够理解和执行复杂任务的智能代理已成为开发者关注的焦点。本文将带您深入了解如何利用LangGraph框架和模型上下文协议(MCP)构建一个功能完备的AI代理从基础概念到实际代码实现一步步掌握这一强大技术组合。1. LangGraph与MCP技术概览LangGraph是一个专为构建和编排AI代理而设计的框架它提供了一种灵活的方式来定义代理的行为和工作流程。与传统的线性处理不同LangGraph采用图结构来表示代理的决策流程使得复杂任务的分解和执行变得更加直观和高效。模型上下文协议(MCP)则是一个开放协议它标准化了应用程序如何向语言模型提供工具和上下文。可以将MCP想象为AI应用的USB接口——它为不同工具和数据源提供了一种标准化的连接方式。通过MCP我们可以轻松地将各种功能(如数学计算、天气查询等)封装为标准化工具供语言模型调用。这两项技术的结合为开发者提供了强大而灵活的工具集LangGraph负责代理的高层逻辑和流程控制MCP处理底层工具调用和上下文管理组合使用可实现复杂任务的分解与执行# 基础架构示例 from langgraph.prebuilt import create_react_agent from langchain_mcp_adapters.client import MultiServerMCPClient # 初始化MCP客户端连接多个工具服务器 client MultiServerMCPClient({ math: {command: python, args: [math_server.py], transport: stdio}, weather: {url: http://localhost:8000/mcp, transport: http} }) # 创建LangGraph代理 tools await client.get_tools() agent create_react_agent(gpt-4, tools)2. 环境准备与工具服务器搭建在开始构建代理前我们需要设置开发环境并准备必要的工具服务器。以下是完整的准备工作流程2.1 安装依赖包首先确保已安装Python 3.8然后通过pip安装所需依赖pip install langchain-mcp-adapters langgraph mcp dashscope提示建议使用虚拟环境来管理项目依赖避免与其他项目产生冲突。2.2 创建数学计算服务器数学服务器将提供基本的算术运算功能。创建一个math_server.py文件from mcp.server.fastmcp import FastMCP mcp FastMCP(Math) mcp.tool() def add(a: int, b: int) - int: 两个整数相加 return a b mcp.tool() def multiply(a: int, b: int) - int: 两个整数相乘 return a * b mcp.tool() def divide(a: int, b: int) - float: 两个整数相除 if b 0: raise ValueError(除数不能为零) return a / b mcp.tool() def subtract(a: int, b: int) - int: 两个整数相减 return a - b if __name__ __main__: mcp.run(transportstdio)2.3 创建天气查询服务器天气服务器模拟天气查询功能。创建weather_server.py文件from mcp.server.fastmcp import FastMCP mcp FastMCP(Weather) mcp.tool() async def get_weather(location: str) - str: 获取指定城市的天气信息 # 实际应用中这里会调用天气API return f{location}今天天气晴气温25℃ if __name__ __main__: mcp.run(transporthttp, port8000)2.4 服务器管理为了同时运行多个服务器可以使用supervisord或简单的终端多窗口方式# 窗口1运行数学服务器 python math_server.py # 窗口2运行天气服务器 python weather_server.py3. 构建核心代理逻辑有了工具服务器后我们可以开始构建主代理逻辑。创建一个main.py文件作为入口点import asyncio from langchain_mcp_adapters.client import MultiServerMCPClient from langgraph.prebuilt import create_react_agent from langchain_community.chat_models.tongyi import ChatTongyi async def main(): # 初始化语言模型(这里使用通义千问) llm ChatTongyi(temperature0) # 配置MCP客户端连接多个工具服务器 client MultiServerMCPClient({ math: { command: python, args: [math_server.py], transport: stdio }, weather: { url: http://localhost:8000/mcp, transport: http } }) # 创建LangGraph代理 tools await client.get_tools() agent create_react_agent(llm, tools) # 测试数学计算 math_response await agent.ainvoke({ messages: [{role: user, content: (3 7) × 12等于多少?}] }) print(数学计算结果:, math_response[messages][-1][content]) # 测试天气查询 weather_response await agent.ainvoke({ messages: [{role: user, content: 杭州天气怎么样?}] }) print(天气查询结果:, weather_response[messages][-1][content]) if __name__ __main__: asyncio.run(main())4. 高级功能与优化基础代理运行后我们可以进一步扩展其功能和性能4.1 添加工具拦截器工具拦截器允许我们在工具调用前后插入自定义逻辑例如日志记录、参数验证等from langchain_mcp_adapters.interceptors import MCPToolCallRequest async def logging_interceptor(request: MCPToolCallRequest, handler): 记录工具调用日志的拦截器 print(f调用工具 {request.name}参数: {request.args}) try: result await handler(request) print(f工具 {request.name} 调用成功结果: {result}) return result except Exception as e: print(f工具 {request.name} 调用失败: {str(e)}) raise # 在创建MultiServerMCPClient时添加拦截器 client MultiServerMCPClient( {...}, # 服务器配置 tool_interceptors[logging_interceptor] )4.2 多服务器负载均衡当有多个同类工具服务器时可以实现简单的负载均衡from random import choice math_servers [ {command: python, args: [math_server1.py], transport: stdio}, {command: python, args: [math_server2.py], transport: stdio} ] client MultiServerMCPClient({ math: choice(math_servers), # 随机选择一个数学服务器 weather: {...} })4.3 持久化与状态管理LangGraph支持将代理状态持久化实现长时间运行的对话from langgraph.checkpoint.sqlite import SqliteSaver memory SqliteSaver.from_conn_string(:memory:) agent create_react_agent( llm, tools, checkpointmemory ) # 恢复特定会话 agent_response await agent.ainvoke( {messages: [...]}, {configurable: {thread_id: user123}} )5. 实际应用案例与调试技巧让我们通过几个实际案例来展示代理的能力并分享一些调试技巧5.1 复杂数学表达式求解代理可以处理嵌套的数学表达式response await agent.ainvoke({ messages: [{ role: user, content: 计算(15 - 3) ÷ 4 7 × 2的值 }] })5.2 组合查询代理可以组合使用多个工具完成复杂查询response await agent.ainvoke({ messages: [{ role: user, content: 如果杭州气温是25度比北京高7度那么北京气温是多少? }] })5.3 调试技巧当代理表现不符合预期时可以检查工具调用日志确认工具是否被正确调用查看中间推理过程有些模型支持返回推理步骤简化问题从最基本的功能测试开始逐步复杂化调整温度参数降低temperature值减少随机性# 启用详细日志 import logging logging.basicConfig(levellogging.DEBUG)6. 性能优化与最佳实践为了确保代理的高效运行以下是一些性能优化建议6.1 服务器配置优化配置项推荐值说明线程数4-8根据CPU核心数调整超时时间30s避免长时间等待连接池大小10-20平衡资源与并发6.2 缓存常用结果对于不常变化的数据(如天气)可以添加缓存层from functools import lru_cache mcp.tool() lru_cache(maxsize100) async def get_weather(location: str) - str: 带缓存的天气查询 return await fetch_weather_api(location)6.3 异步处理充分利用Python的异步特性提高并发性能async def batch_queries(queries): tasks [agent.ainvoke({messages: [{role: user, content: q}]}) for q in queries] return await asyncio.gather(*tasks)构建基于LangGraph和MCP的AI代理是一个循序渐进的过程从简单的工具集成开始逐步添加复杂性和优化性能。本文介绍的方法和技巧可以帮助您快速上手这一强大技术组合为您的应用添加智能代理能力。

相关文章:

Python实战:用LangGraph和MCP打造你的第一个AI代理(附完整代码)

Python实战:用LangGraph和MCP构建智能代理的完整指南 在当今快速发展的AI领域,构建能够理解和执行复杂任务的智能代理已成为开发者关注的焦点。本文将带您深入了解如何利用LangGraph框架和模型上下文协议(MCP)构建一个功能完备的AI代理,从基础…...

机器人手臂相机 vs 抓手相机:5个关键区别与选型指南(附避坑技巧)

机器人手臂相机 vs 抓手相机:5个关键区别与选型指南(附避坑技巧) 在工业自动化领域,视觉引导系统如同机器人的"眼睛",而相机安装位置的选择往往决定了整个系统的精度与可靠性。当工程师面对手臂相机&#xf…...

小白也能搞定!用Docker和Halo 2.10搭建个人博客,再也不用担心公网访问问题

零基础玩转DockerHalo 2.10:打造高颜值个人博客全攻略 在数字内容创作爆发的时代,拥有一个专属博客空间已成为个人品牌建设的标配。但传统建站方案往往面临技术门槛高、维护成本大等痛点。本文将带你用Docker容器技术和Halo 2.10开源系统,30…...

OpenClaw技能开发入门:为Qwen3-VL:30B编写图片翻译插件

OpenClaw技能开发入门:为Qwen3-VL:30B编写图片翻译插件 1. 为什么需要自定义技能开发 去年冬天,我接手了一个跨国团队的文档协作项目,每天需要处理大量包含多语言图片的飞书消息。当我在深夜第三次手动将日文截图粘贴到翻译软件时&#xff…...

4个关键步骤解决Calibre中文路径乱码难题

4个关键步骤解决Calibre中文路径乱码难题 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址: https://gitcode.com/gh_m…...

别再手动拆任务了!用CrewAI+DeepSeek打造你的第一个AI小团队(附PDF解析实战)

用CrewAI构建自动化AI团队:从PDF解析到智能协作实战 在传统AI开发中,开发者往往需要手动编写复杂的任务流程,像指挥一个士兵完成所有战斗。而CrewAI带来的革命性变化在于——它让你能够组建一支训练有素的AI特种部队,每个成员各司…...

Matlab GUI 计时器:基于定时器对象自动更新的数字时钟演示

Matlab图形用户界面计时器:使用定时器对象自动更新的MatlabGUI,一个数字时钟,作为显示基本组件的快速演示,带有一个按钮,用于恢复/暂停执行更新实验室配了新酶标仪孵箱但总有人(比如同组摸鱼的小师妹顺便喊…...

2025+数据集成新范式:webSpoon企业级部署实战指南

2025数据集成新范式:webSpoon企业级部署实战指南 【免费下载链接】pentaho-kettle webSpoon is a web-based graphical designer for Pentaho Data Integration with the same look & feel as Spoon 项目地址: https://gitcode.com/gh_mirrors/pen/pentaho-ke…...

保姆级教程:在Windows 11上用VSCode和Conda搞定Depth-Anything-3(含常见报错修复)

Windows 11深度估计实战:VSCodeConda环境下的Depth-Anything-3全流程指南 深度估计作为计算机视觉领域的重要技术,正在自动驾驶、增强现实等场景中发挥关键作用。本文将带你在Windows 11系统上,使用VSCode和Conda搭建Depth-Anything-3开发环境…...

优化问题求解器选型指南:何时该用高斯伪谱法,而不是直接法或打靶法?

优化问题求解器选型指南:高斯伪谱法在动态系统控制中的战略定位 当面对化工反应器温度控制或航天器轨道转移这类复杂动态系统优化问题时,工程师们常陷入算法选择的困境。就像外科医生需要根据病灶位置选择手术刀或激光治疗一样,最优控制问题的…...

轻量级PDF渲染库PdfiumAndroid:Android开发者的高效集成指南

轻量级PDF渲染库PdfiumAndroid:Android开发者的高效集成指南 【免费下载链接】PdfiumAndroid 项目地址: https://gitcode.com/gh_mirrors/pd/PdfiumAndroid 核心价值:为什么选择PdfiumAndroid? 📌 解决PDF渲染痛点&#…...

Nunchaku-flux-1-dev部署避坑指南:解决403 Forbidden错误

Nunchaku-flux-1-dev部署避坑指南:解决403 Forbidden错误 部署Nunchaku-flux-1-dev时遇到403 Forbidden错误?别急,这篇文章手把手带你排查和解决这个常见但棘手的问题。 最近在部署Nunchaku-flux-1-dev时,不少小伙伴反映遇到了403…...

OneAgent智能体全球发布会圆满落幕:引领金融AI交易新时代

2026年3月25日,聚焦金融AI领域的盛会《OneAgent智能体全球产品发布会》在中国杭州成功落幕。本次发布会吸引了全球金融科技领域的行业专家、投资机构以及技术爱好者的关注,标志着OneAgent在全球AI金融市场的战略布局正式启动。AI原生对冲交易新物种&…...

vLLM-v0.17.1实操手册:SSH环境下vLLM服务日志实时分析与性能诊断

vLLM-v0.17.1实操手册:SSH环境下vLLM服务日志实时分析与性能诊断 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库,由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)发起,现已发展为社区驱动的项目。它…...

Windows 10下5分钟搞定环回适配器安装,轻松连接eNSP模拟器

Windows 10环回适配器极简安装指南:无缝对接eNSP模拟器实战 网络技术学习者和工程师们经常需要在本地搭建实验环境,而环回适配器作为虚拟网络设备的关键组件,能够为eNSP等模拟器提供稳定的连接基础。本文将彻底解决Windows 10环境下环回适配…...

OpCore Simplify:零基础黑苹果配置的终极自动化解决方案

OpCore Simplify:零基础黑苹果配置的终极自动化解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore EFI配置而烦…...

告别C盘爆炸!手把手教你将Dify+Docker数据盘迁移到D盘(附.ENV配置详解)

告别C盘爆炸!手把手教你将DifyDocker数据盘迁移到D盘(附.ENV配置详解) Windows系统盘空间告急是许多开发者的共同烦恼,尤其是当你开始使用Docker部署AI开发环境时。C盘空间像被黑洞吞噬一样迅速消失,系统运行速度也随之…...

《数据结构》| 第十章 排序算法实战指南

1. 排序算法入门:为什么我们需要这么多排序方法? 第一次接触排序算法时,很多人都会有这样的疑问:既然都能把数据排好序,为什么还要学这么多种算法?这就像装修时既有电钻又有锤子——每种工具都有最适合的使…...

3分钟打造macOS级桌面体验:开源光标主题全攻略

3分钟打造macOS级桌面体验:开源光标主题全攻略 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你知道吗?每天在电脑前工作8小时,你的鼠标指针会出现…...

实用教程!用fft npainting lama镜像批量处理图片水印

实用教程!用fft npainting lama镜像批量处理图片水印 1. 引言 1.1 为什么需要批量水印处理 在日常工作中,我们经常遇到需要处理大量带有水印图片的情况。无论是电商平台的商品图、社交媒体上的素材,还是企业内部文档,水印的存在…...

用了Trae写业务系统,为什么上线前总要手动补依赖和权限?

发版前夜,测试跑穿才发现前端字段跟后端对不上,改到凌晨三点才勉强收口。这种场景在引入 AI Coding 后并不罕见,不少团队用了 Trae 写业务系统,速度是上去了,可上线前总得花半天专门查安全漏洞和依赖冲突。大家原指望 …...

零中断迁移:企业级文档系统全流程实战指南

零中断迁移:企业级文档系统全流程实战指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本,也可以自己运行或参与开发。源项目地址&…...

用了Qoder写代码飞快,联调时却总因字段不一致返工,问题出在哪?

发版前夜,前端字段对不上后端接口,联调卡了整晚。这种场景在 AI Coding 普及后并不罕见,不少团队用了 Qoder 觉得生成快、跑通快,可一旦要改需求,系统就僵住了。看似工具背锅,其实根子往往不在速度&#xf…...

刚刚,英伟达革了自己的命:智能体自主进化7天,干掉所有算子工程师、GPU专家

这应该是今天刚刚出炉的、最炸裂的文章。在很多算子开发的微信群组,已经掀起了轩然大波。「这或许是超人类智能在软件领域的真正首次展露。」英伟达许冰刚刚在 X 上发出了如此断言。他所评论的,正是他与 Terry Chen 和 Zhifan Ye 为共同一作的一项英伟达…...

如何用QuickRecorder解决macOS录屏痛点:高效专业的从入门到精通实践指南

如何用QuickRecorder解决macOS录屏痛点:高效专业的从入门到精通实践指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitco…...

aircrack-ng使用教程

aircrack-ng是一款用于无线网络安全评估的工具套件,主要用于破解WEP和WPA/WPA2-PSK加密的无线网络密码。它通过分析捕获的数据包,利用密码破解技术来获取网络密钥,是网络安全测试和渗透测试中常用的工具之一。该工具支持多种攻击模式和优化选…...

bully使用教程

bully是一款用于破解Wi-Fi Protected Setup(WPS)的工具,主要通过暴力破解WPS PIN码来获取无线网络的访问权限。WPS是一种简化Wi-Fi设备连接的协议,由于其设计缺陷,使得通过暴力破解PIN码来获取网络密钥成为可能。bully…...

告别“替身攻击”:手把手教你用零阶优化(ZOO)直接黑盒攻击DNN模型

零阶优化实战:无需替代模型的黑盒对抗攻击指南 当面对一个部署在云端的深度学习API时,传统白盒攻击手段往往束手无策——既无法获取模型架构,也不能执行反向传播。本文将揭示如何运用零阶优化技术,仅通过输入输出查询就能构造高效…...

告别Finalshell内存焦虑:实测Xshell 8与MobaXterm,哪款才是低资源占用的SSH神器?

深度评测:Xshell 8与MobaXterm如何解决SSH工具的资源占用难题? 当你的开发工作流被频繁的内存告警打断时,选择一款轻量高效的SSH工具就成为了提升生产力的关键。作为每天需要连接多台服务器的开发者,我深刻理解那种看着任务管理器…...

打造轻量级Windows系统:Tiny11Builder深度应用指南

打造轻量级Windows系统:Tiny11Builder深度应用指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 价值定位:解决三大系统痛点 你的Windo…...