基于mcp+deepseek+fastmcp实现一个天气查询系统

这是一个非常具体且前沿的技术组合,是当前 AI Agent 领域中非常先进的实践模式,它实现了 大语言模型 (LLM)工具调用 (Function Calling) 能力与 外部实时数据源 的安全、标准化集成。

🌩️ 天气查询系统架构概览

该系统将遵循 MCP 客户端-服务器 模型,其中 DeepSeek 作为 LLM 充当决策者,FastMCP 搭建的服务器充当实际的数据执行者。

组件 角色定位 核心技术 职责描述
LLM (DeepSeek) AI Agent / 决策者 DeepSeek/Claude/GPT-4 等 LLM 分析用户查询,根据 MCP 服务器提供的工具描述,决定是否调用工具以及调用哪个工具(Function Calling)。
MCP Client (宿主应用) 协议中介 Claude Desktop / Cursor IDE / 自定义 Client 连接 FastMCP 服务器,将 LLM 的工具调用请求转发给服务器,并将服务器的返回结果反馈给 LLM。
MCP Server (天气服务) 执行者 / 数据抽象层 FastMCP (基于 Python) 监听客户端请求,封装对外部天气 API (如 OpenWeatherMap) 的调用逻辑,并将结果以标准格式返回。
Data Source 实时数据源 OpenWeatherMap / NWS API / 和风天气 提供实际的实时天气数据和预报信息。

1. FastMCP 天气服务器 (weather_server.py)

这个文件定义了 LLM 可以调用的天气查询工具。

import httpx
import uvicorn
import os
from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel, Field
from starlette.applications import Starlette

# --- 配置 ---
# ⚠️ 替换为您的实际天气 API Key
# 推荐使用 OpenWeatherMap 或其他支持城市名查询的 API
WEATHER_API_KEY = "YOUR_OPENWEATHERMAP_KEY" 
WEATHER_API_BASE = "https://api.openweathermap.org/data/2.5" 
SERVER_HOST = "127.0.0.1"
SERVER_PORT = 8080

# 1. 初始化 FastMCP 服务器
mcp = FastMCP("weather_service")

# 2. 定义工具的输入参数
class GetWeatherInput(BaseModel):
    """获取当前天气预报的输入模型。"""
    city: str = Field(description="需要查询天气的城市名称,例如:'北京', 'Shanghai', 'London'。")
    
# 3. 定义 MCP 工具
@mcp.tool()
async def get_current_weather(input: GetWeatherInput) -> str:
    """
    根据城市名称获取当前的详细天气状况,包括温度、湿度、风速和天气描述。
    LLM应该在用户询问天气时调用此工具。
    
    :param input: 包含城市名称的输入模型。
    :return: 格式化的天气信息字符串。
    """
    city = input.city
    
    # 构造 API URL (使用 metric 单位和中文语言)
    url = (
        f"{
     
     WEATHER_API_BASE}/weather?q={
     
     city}&appid={
     
     WEATHER_API_KEY}"
        f"&units=metric&lang=zh_cn"
    )
    
    if WEATHER_API_KEY == "YOUR_OPENWEATHERMAP_KEY":
         return "错误:请在 weather_server.py 中设置 WEATHER_API_KEY。"

    try:
        # 使用 httpx 异步发送请求
        async with httpx.AsyncClient(timeout=10.0) as client:
            response = await client.get(url)
            response.raise_for_status() # 抛出 4xx/5xx 错误
            data = response.json()
            
            # 提取并格式化关键天气数据
            if data.get('cod') == 200:
                main = data.get('main', {
   
   })
                weather = data.get('weather', [
【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术与健康

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值