企业级天气数据平台,支持批量查询、历史数据、预警推送与多数据源聚合
天气查询工具包专业版是一项面向实际任务的技能,主要用于企业级天气数据平台,在免费版核心能力之上,扩展批量查询、历史数据、预警推送与多数据源聚合能力,适合物流、农业、旅游等需要规模化天气数据的企业与开发者;与免费版数据格式完全兼容,支持平滑升级;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
企业级天气数据平台,在免费版核心能力之上,扩展批量查询、历史数据、预警推送与多数据源聚合能力,适合物流、农业、旅游等需要规模化天气数据的企业与开发者。与免费版数据格式完全兼容,支持平滑升级。
本工具包在免费版基础上,面向企业与专业开发者,提供多城市并发批量查询、历史天气回溯、极端天气预警推送与多数据源智能聚合能力。支持API封装、SDK集成、Webhook回调与定时任务,可无缝集成到企业业务系统。
| 能力 | 免费版 | 专业版 | 说明 |
|---|---|---|---|
| 当前天气查询 | 支持 | 支持 | 完全兼容,平滑升级 |
| 天气预报 | 3天 | 16天 | 扩展预报范围 |
| 紧凑/完整/PNG格式 | 支持 | 支持 | 全格式兼容 |
| JSON结构化数据 | 支持 | 支持 | 增强字段与嵌套 |
| 单位切换 | 支持 | 支持 | 增加更多单位 |
| 历史天气查询 | 不支持 | 支持 | 过去30天至1年 |
| 多城市批量查询 | 不支持 | 支持 | 并发数百城市 |
| 天气预警推送 | 不支持 | 支持 | 极端天气主动通知 |
| 多数据源聚合 | 不支持 | 支持 | 智能切换最优源 |
| 数据缓存 | 不支持 | 支持 | 可配置刷新策略 |
| API/SDK封装 | 不支持 | 支持 | 企业级集成 |
| Webhook回调 | 不支持 | 支持 | 天气事件触发 |
| 定时任务 | 不支持 | 支持 | 定时查询与推送 |
| 可视化报表 | 不支持 | 支持 | 天气趋势图表 |
用input_params参数进行配置。
输入: 用户提供核心功能执行所需的指令和必要参数。 处理: 按照skill规范执行核心功能执行操作,遵循单一意图原则。 输出: 返回核心功能执行的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作用config_options参数进行配置。
输入: 用户提供参数配置与调用所需的指令和必要参数。 处理: 按照skill规范执行参数配置与调用操作,遵循单一意图原则。 输出: 返回参数配置与调用的执行结果,包含操作状态和输出数据。
config_options参数,支持修改/重置/导入操作用output_format参数进行配置。
输入: 用户提供结果处理与输出所需的指令和必要参数。 处理: 按照skill规范执行结果处理与输出操作,遵循单一意图原则。 输出: 返回结果处理与输出的执行结果,包含操作状态和输出数据。
output_format参数,支持导出/保存/转换操作
能力覆盖范围:本skill的核心能力覆盖以下场景关键词:企业级天气数据平、支持批量查询、历史数据、预警推送与多数据、面向企业与开发者、的高级天气数据工、在免费版基础上扩、展批量查询、源聚合能力、核心能力、多城市批量天气查、询与并发处理、历史天气数据查询、极端天气预警与主、动推送通知、多数据源聚合与智、自定义天气数据缓、存与刷新策略、天气数据、封装与、天气可视化与报表、回调与定时任务集等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。# 示例
import concurrent.futures
import urllib.request
import json
from datetime import datetime
class WeatherBatchQuery:
"""批量天气查询器"""
def __init__(self, max_workers=20):
self.max_workers = max_workers
self.cache = {}
self.cache_ttl = 1800 # 30分钟缓存
def query_single(self, city):
"""查询单个城市天气"""
url = (
f"https://api.open-meteo.com/v1/forecast"
f"?latitude={city['lat']}&longitude={city['lon']}"
f"¤t_weather=true&hourly=temperature_2m,precipitation"
)
try:
with urllib.request.urlopen(url, timeout=10) as resp:
data = json.loads(resp.read())
return {
"city": city["name"],
"temperature": data["current_weather"]["temperature"],
"windspeed": data["current_weather"]["windspeed"],
"weathercode": data["current_weather"]["weathercode"],
"status": "success"
}
except Exception as e:
return {"city": city["name"], "status": "error", "message": str(e)}
def batch_query(self, cities):
"""并发批量查询多个城市"""
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=self.max_workers) as executor:
futures = {executor.submit(self.query_single, c): c for c in cities}
for future in concurrent.futures.as_completed(futures):
results.append(future.result())
return results
# 使用示例:物流分拨中心天气监控
centers = [
{"name": "北京分拨中心", "lat": 39.9, "lon": 116.4},
{"name": "上海分拨中心", "lat": 31.2, "lon": 121.5},
{"name": "广州分拨中心", "lat": 23.1, "lon": 113.3},
{"name": "成都分拨中心", "lat": 30.6, "lon": 104.1},
{"name": "武汉分拨中心", "lat": 30.5, "lon": 114.3},
]
query = WeatherBatchQuery(max_workers=10)
results = query.batch_query(centers)
for r in results:
if r["status"] == "success":
print(f"{r['city']}: {r['temperature']}°C, 风速{r['windspeed']}km/h")
# 历史天气查询命令示例 weather-pro history --location "Beijing" --start "2025-06-01" --end "2025-06-30" --metrics "temperature,precipitation,windspeed" --format json --output beijing_june.json # 输出示例: # [INFO] 查询历史天气: Beijing (2025-06-01 至 2025-06-30) # [DATA] 数据源: Open-Meteo Archive API # [STATS] 平均温度: 26.3°C # [STATS] 最高温度: 38.2°C (2025-06-25) # [STATS] 最低温度: 17.8°C (2025-06-03) # [STATS] 累计降水: 78.5mm # [EXPORT] 数据已导出: beijing_june.json
# 天气预警引擎与Webhook推送
import json
import urllib.request
class WeatherAlertEngine:
"""天气预警引擎"""
ALERT_THRESHOLDS = {
"high_temp": 35, # 高温预警阈值
"low_temp": -10, # 低温预警阈值
"high_wind": 60, # 大风预警阈值(km/h)
"heavy_rain": 25, # 暴雨预警阈值(mm/h)
"storm_codes": [95, 96, 99] # 雷暴天气代码
}
def check_alerts(self, weather_data, location):
"""检查天气数据是否触发预警"""
alerts = []
temp = weather_data.get("temperature", 0)
wind = weather_data.get("windspeed", 0)
code = weather_data.get("weathercode", 0)
if temp >= self.ALERT_THRESHOLDS["high_temp"]:
alerts.append({
"type": "HIGH_TEMP",
"level": "WARNING",
"message": f"{location} 高温预警: {temp}°C",
"action": "建议减少户外活动,注意防暑"
})
if wind >= self.ALERT_THRESHOLDS["high_wind"]:
alerts.append({
"type": "HIGH_WIND",
"level": "WARNING",
"message": f"{location} 大风预警: 风速{wind}km/h",
"action": "建议固定室外物品,减少出行"
})
if code in self.ALERT_THRESHOLDS["storm_codes"]:
alerts.append({
"type": "STORM",
"level": "URGENT",
"message": f"{location} 雷暴天气预警",
"action": "建议避免户外活动,远离高地"
})
return alerts
def push_webhook(self, webhook_url, alert):
"""通过Webhook推送预警"""
payload = json.dumps(alert).encode("utf-8")
req = urllib.request.Request(
webhook_url,
data=payload,
headers={"Content-Type": "application/json"},
method="POST"
)
try:
with urllib.request.urlopen(req, timeout=5) as resp:
return resp.status == 200
except Exception as e:
print(f"推送失败: {e}")
return False
# 使用示例
engine = WeatherAlertEngine()
weather = {"temperature": 38, "windspeed": 25, "weathercode": 95}
alerts = engine.check_alerts(weather, "北京分拨中心")
for alert in alerts:
print(f"[{alert['level']}] {alert['message']}")
# engine.push_webhook("https://hooks.example.com/weather", alert)
以下场景天气查询工具包专业版不适合处理:
需要API集成、接口对接、Webhook配置、系统连接时使用。不适用于非本工具能力范围的需求。
结果处理: 执行完成后,查看输出结果确认操作状态。成功时输出包含处理摘要和结果数据;失败时根据错误信息排查问题,查阅错误处理章节获取恢复步骤。
-Type: 命令参数,用于指定操作选项# 企业级天气工具包配置
weather_pro_config:
edition: pro
data_sources:
primary: "open-meteo"
fallback: "wttr"
custom:
- name: "企业气象服务"
url: "https://weather.company.com/api"
api_key_env: "COMPANY_WEATHER_KEY"
batch_query:
enabled: true
max_concurrent: 50
timeout: 10
retry_count: 3
history:
enabled: true
max_days: 365
archive_source: "open-meteo-archive"
alerts:
enabled: true
thresholds:
high_temp: 35
low_temp: -10
high_wind: 60
heavy_rain: 25
channels:
- type: "webhook"
url: "https://hooks.example.com/weather"
- type: "email"
recipients: ["ops@company.com"]
cache:
enabled: true
ttl: 1800
storage: "redis"
schedule:
enabled: true
interval: "*/30 * * * *"
timezone: "Asia/Shanghai"
export:
formats: ["json", "csv", "pdf"]
template_customization: true
完全兼容。专业版返回的JSON结构与免费版一致,仅在字段上做了扩展。原有解析代码无需修改即可正常工作,新增字段为可选。
单次批量查询支持最多500个城市,并发度可配置(默认50)。如需更大规模,建议分批处理或联系企业版定制。
| 数据源 | 历史范围 | 精度 |
|---|---|---|
| Open-Meteo Archive | 过去1年 | 小时级 |
| Open-Meteo Historical | 过去10年 | 日级 |
| 企业气象服务 | 自定义 | 可定制 |
支持三种推送通道:
| 通道 | 延迟 | 适用场景 |
|---|---|---|
| Webhook | 秒级 | 系统集成,自动响应 |
| 邮件 | 分钟级 | 运维通知,存档 |
| 短信 | 秒级 | 紧急预警(需额外配置) |
# 数据源智能切换策略
class DataSourceManager:
"""多数据源管理器"""
def __init__(self, sources):
self.sources = sources # 按优先级排序
self.failure_count = {s: 0 for s in sources}
def get_best_source(self):
"""选择最优数据源"""
for source in self.sources:
if self.failure_count[source] < 3:
return source
return self.sources[0] # 全部失败时回退到首选
def report_failure(self, source):
"""记录数据源失败"""
self.failure_count[source] += 1
def report_success(self, source):
"""记录数据源成功,重置失败计数"""
self.failure_count[source] = 0
提供三种集成方式:
# 依赖说明 pip install weather-pro-sdk # API调用示例 python -c " from weather_pro import WeatherClient client = WeatherClient(api_key='your_key') result = client.batch_query(['Beijing', 'Shanghai', 'Guangzhou']) print(result) "
支持cron表达式配置定时查询,结果自动写入缓存或推送Webhook。
# 定时任务配置
schedule:
- name: "每小时主城区天气"
cron: "0 * * * *"
cities: ["北京", "上海", "广州", "深圳"]
action: "cache"
- name: "极端天气预警检查"
cron: "*/15 * * * *"
cities: ["all_logistics_centers"]
action: "alert"
webhook: "https://hooks.example.com/weather"
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
| wttr.in | 公开API | 可选 | 免费免Key,备选数据源 |
| Open-Meteo | 公开API | 推荐 | 免费免Key,主要数据源 |
| Open-Meteo Archive | 公开API | 可选 | 免费免Key,历史数据 |
| 企业气象服务 | API | 可选 | 需申请Key,定制数据 |
| Redis | 缓存 | 可选 | docker run redis,数据缓存 |
| Python 3.8+ | 运行时 | 推荐 | 批量查询与脚本执行 |
| requests | Python库 | 可选 | pip install requests |
| PyYAML | Python库 | 可选 | pip install pyyaml |
export COMPANY_WEATHER_KEY="your_company_weather_key"
export SMS_API_KEY="your_sms_api_key"
export WEATHER_WEBHOOK_URL="https://hooks.example.com/weather"
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
输入:用户提供操作指令和必要参数
输出:返回执行结果,包含操作状态和输出数据
用户: 执行核心功能 Skill: 正在执行核心功能... Skill: 执行完成,结果如下: 操作成功
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 133.9万人学习
共49课时 | 82.5万人学习