天气数据抓取工具

一个基于Model Context Protocol (MCP)的实验性项目,利用轻量级LLM和FastAPI从开放网络资源获取并结构化实时天气信息,适用于需要自动化天气数据检索的场景。

  • by EXPESRaza
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 expesraza/mcp_weather_scraper

使用说明

🌦️ MCP天气刮刀

该项目是 模型上下文协议(MCP) 通过**OpenAI**和FastAPI使用轻量级LLM从开放网络源获取和构建实时天气信息。目标是探索LLM如何与工具交互,并作为智能代理检索和推理非结构化网络数据。



🚀 特性

  • ✅ 符合MCP标准的服务器,通过浏览器搜索进行天气抓取
  • ✅ 与OpenAI LLM集成(例如gpt-3.5-turbo)
  • ✅ FastAPI服务器提供天气信息作为可调用的MCP工具
  • ✅ 使用自动HTML解析 selectolax 为了表现
  • ✅ LLM将非结构化web内容提取为结构化模式
  • ✅ Streamlit应用程序前端,用于用户交互
  • ✅ 使用响应缓存 functools.lru_cache

🧠 潜水前先刷新一下

本次回购的五大概念

| 🧩 概念|🔍 它是什么⚙️ 为什么重要| |-----------|---------------|-------------------| | 模型上下文协议(MCP) |LLM中工具调用的新协议|支持结构化AI代理通信| | 乌维科恩 |用于Python web应用程序的快速ASGI服务器|托管基于FastAPI的MCP服务器| | Selectolax |高速HTML解析器|高效抓取和提取天气数据| | functools.lru_cache |内置Python装饰器来缓存函数调用|通过避免重复获取来提高性能| | 令牌使用指标(OpenAI) |关于LLM调用中使用了多少令牌的信息|帮助跟踪成本并优化提示设计|

💡 即使你熟悉Python和API,这些工具也代表 尖端的AI堆栈工程 值得一看!


📊 令牌使用和性能指标

Streamlit UI现在包括:

  • ⏱️ 响应时间
    获取和处理天气信息所花费的时间

  • 🧠 提示令牌
    LLM提示中使用的令牌

  • 💬 完成令牌
    LLM响应中生成的令牌

  • 🔢 代币总数
    每个请求的令牌总数,可用于成本跟踪

这些结果以清晰的视觉布局显示在每张结果卡下。


🖥️ Streamlit应用程序预览


需求

  • Python 3.9或更高版本
  • 中列出的依赖关系 requirements.txt

🛠️ 设置

  1. 克隆仓库
    git clone https://github.com/your-username/mcp_weather_scraper.git
    cd mcp_weather_scraper
    
  2. 创建并激活虚拟环境
    python -m venv .venv
    .venv\Scripts\activate  # On Windows
    
  3. 安装依赖项
    pip install -r requirements.txt
    
  4. 设置环境变量 在根目录中创建.env文件并添加您的OpenAI API密钥
    OPENAI_API_KEY=your_openai_api_key
    
  5. 运行服务器
    uvicorn server:app --reload
    
    服务器将在以下时间可用http://localhost:8000. 您可以访问API文档:
    • Swagger用户界面:http://localhost:8000/docs
    • ReDoc :http://localhost:8000/redoc
  6. 提出请求
    python client.py
    
    或
    curl -X POST http://localhost:8000/weather -H "Content-Type: application/json" -d '{"location": "Seattle"}'
    
    该脚本发送一个POST请求,其中包含以下有效载荷:
    {
      "location": "Seattle"
    }
    
    服务器将以JSON格式的天气数据进行响应,例如:
    {
      "location": "Seattle",
      "temperature": "15°C",
      "humidity": "80%",
      "air_quality": "Good",
      "condition": "Cloudy"
    }
    

📦 文件夹结构

.
📁 mcp_weather_scraper/
│
├── assets/
│   └── streamlit_screenshot.png
├── server.py          # MCP-compatible tool server
├── client.py          # MCP client that interacts with model + tools
├── data_models.py     # Pydantic schemas for request/response
├── utils.py           # HTML cleaning, scraping, etc.
├── requirements.txt
└── .env

📄 许可证

This project is licensed under the MIT License.