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

Agent调用(高德地图)MCP服务

主要记录自己在调用MCP服务中遇见的问题,这是单个agent,主要作用是调用高德地图的MCP去解决问题。后续会构建多智能体去解决问题。

大模型的API申请,这儿我就懒得写了。我用的是Qwen

高德地图的API地址高德地图MCP的API申请

直接上代码:高德地图MCP服务有多个工具,每个工具都有name和描述。我循环打印出来了。大模型会根据问题以及工具描述去调用相应工具

from datetime import datetime
import time
from langgraph.checkpoint.memory import InMemorySaver
from mcp.server.fastmcp import FastMCP
# from mcp.tools import Tool, ToolsRoute
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from langchain_mcp_adapters.client import MultiServerMCPClient
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
import asyncio
load_dotenv("/home/sevnce/zy/sevnce_AI/.env")import loggingfrom logging.handlers import TimedRotatingFileHandlerdef set_logger(name, log_path):logHandler = TimedRotatingFileHandler(log_path, when="D",interval=30,backupCount=1,utc=False,encoding="utf-8")#日志中时间显示格式 年-月-天 时:分:秒logFormatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s','%Y-%m-%d %H:%M:%S')logHandler.setFormatter(logFormatter)logger = logging.getLogger(name)logger.addHandler(logHandler)#设置日志显示等级logger.setLevel(logging.INFO)return loggerlogger = set_logger("weather", "./log/weather_server.log")
mcp = FastMCP("Weather", port=8001)
gaode_map_api_key = os.getenv("GaoDe-map_API_KEY")client = MultiServerMCPClient({"amap-amap-sse": {"url": f"https://mcp.amap.com/sse?key={gaode_map_api_key}","transport": "sse"}}   # type: ignore
)llm = ChatOpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",model="qwen-plus",temperature=0,api_key=os.getenv("Qwen-plus_API_KEY")  # type: ignore
)async def get_weather(imput: str) -> str:sys_prompt = "你是一个高德地图工具,你需要根据用户的输入,返回对应的信息"checkpointer = InMemorySaver()from langchain_core.messages import SystemMessage, HumanMessagetry:tools = await client.get_tools()agent = create_react_agent(llm, tools, prompt=sys_prompt, checkpointer=checkpointer)logger.info(f"Weather_server: 获取到的工具列表: {[[tool.name, tool.description] for tool in tools]}")config = {"configurable": {"thread_id": "1"  }}async for chunk in agent.astream({"messages": [HumanMessage(content=imput)]}, config=config):# 你可以在这里处理每个 chunk,比如打印、yield、写文件等print(chunk)return "流式输出结束"# logger.info(response)# logger.info(response["messages"][-1].content)# # logger.info(f"Weather_server: 天气服务查询结果是:{response_content}")# return str(response["messages"][-1].content)except Exception as e:logger.error(f"Weather_server: 调用天气服务时出错: {str(e)}")response = f"抱歉,天气服务调用失败: {str(e)}"return responseif __name__ == "__main__":start_time = time.time()result = asyncio.run(get_weather("我现在在成都的红牌楼,想要去重庆洪崖洞旅游,请帮我整理一条旅游路线以及攻略"))print("-"*100)# print(result)end_time = time.time()print(f"处理时间: {end_time - start_time:.2f}秒")

http://www.dtcms.com/a/272820.html

相关文章:

  • Java虚拟机栈Test01
  • 盲盒一番赏小程序技术实现方案:高并发与防作弊的平衡之道
  • C#System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误。
  • Kettle导入Excel文件进数据库时,数值发生错误的一种原因
  • 计算机视觉速成 之 概述
  • Ubuntu如何快速搭建docker以及使用代理访问
  • Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
  • 数据结构 顺序表(1)
  • 等保-linux-三权分立账号设置,系统管理员、安全管理员、审计管理员
  • 目标检测中的评价指标计算
  • 数据结构 —— 键值对 map
  • Git操作技巧(一)
  • shell学习从入门到精通
  • 数据仓库:企业数据管理的核心枢纽
  • 创客匠人视角:从信任经济看创始人 IP 如何重塑 IP 变现逻辑
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • 量子计算系统软件:让“脆弱”的量子计算机真正可用
  • 有什么好使用的内网ip映射软件?可以让家庭/公司网络局域网端口,让公网互联网跨网访问
  • Spring boot整合dubbo+zookeeper
  • 26-计组-外存
  • 基于云端EC2的O3DE机器人仿真环境搭建指南
  • python自动化面试问题——关于python
  • 029_构造器重载与默认构造器
  • 【报错】Could not find a package configuration file provided by ‘glog’”
  • “Datawhale AI夏令营”基于带货视频评论的用户洞察挑战赛
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结
  • P1722 矩阵 II 题解 DFS深度优先遍历与卡特兰数(Catalan number)解
  • Spring Boot+Redis+Caffeine 二级缓存架构的终极实现方案、包含万级QPS下的黄金配置参数、全文超过2500字(博君一赞)
  • XGBoosting算法详解(Boosting思想的代表算法)
  • C语言<数据结构-链表>