🌦️ 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
______________________________________________________________________
🛠️ 设置
- 克隆仓库
git clone https://github.com/your-username/mcp_weather_scraper.git
cd mcp_weather_scraper- 创建并激活虚拟环境
python -m venv .venv
.venv\Scripts\activate # On Windows- 安装依赖项
pip install -r requirements.txt- 设置环境变量
在根目录中创建.env文件并添加您的OpenAI API密钥
OPENAI_API_KEY=your_openai_api_key- 运行服务器
uvicorn server:app --reload服务器将在以下时间可用http://localhost:8000. 您可以访问API文档: - Swagger用户界面:http://localhost:8000/docs - ReDoc :http://localhost:8000/redoc
- 提出请求
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.