农业气象预警与种植建议
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-odeahxzi--agri-weather-advisor.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-odeahxzi/agri-weather-advisor。- 农业气象预警与农事作业窗口技能。当用户给出田块与作物信息,问"
- 这几天天气对我这块地有没有影响"
- "
- 什么时候打药最合适"
- "
- 现在能不能播种/移栽/施肥/灌溉/收获"
- …(完整说明见下方「阅读全文」)
阅读全文 (展开查看完整说明)
概述
农业气象预警 · 影响判定与作业窗口
定位
农户要的从来不是天气,而是"我这几亩地,明天几点能干什么、不能干什么"。全网气象产品的做法是给一段天气描述——"未来三天多云转晴,气温 18–26℃,东南风 2–3 级"——然后农户自己琢磨这跟打药有没有关系、跟灌浆期的麦子有没有关系。结果是要么不敢干、要么干错了:在 4 级风里打了药(飘移)、在连阴雨前收了粮(霉变)、在灌浆期干热风里没做任何防护(逼熟减产)。
本技能反过来:先判定能不能干,再给出具体到时刻的执行窗口。它是「认养农业管家」技能族的生长反馈链主供方(全局编号 #29),向下游输出机读窗口表,被 #27 病虫害处方、#31 认养管家长势反馈消费。
三条不可退让的底线:官方预警不可改级、超时效不出结论、只报天气不给动作等于没做。
🔌 底座已自闭环(v1.2.0):原标称依赖的三个平台底座均已改为技能自持——
P10 订阅推送 →
--push-manifest产出本地推送清单(任何渠道可消费,技能不连推送服务);P12 大模型基座 → 全部判定为确定性规则 + 标准库数值计算,无 LLM 也能跑;
P14 物联网设备接入 → 本地实况改为文件式上报(
--station-file,契约见references/env-observation-contract.md),无需任何设备。底座自闭环登记见
references/data-source-registry.json的base_closure。
交互与引导(族级公共层)
遵循 references/interaction-protocol.md 的四回合骨架(T0 握手 → T1 收敛 → T2 交付 → T3 交接):
- T0 握手:复述用户原话(≤3 行);有歧义先确认意图——禁止直接开跑。
- T1 收敛:缺项最多问 2 个且每个都能改变结论,一律给选项;不得开放式追问、不得连环追问。
- T2 交付:默认只给首屏卡(≤12 行):结论第一句 + 唯一行动项 + 缺口总账 + 把握度;展开本按需给。
- T3 交接:给出下一步动作 + 族内可接着问清单 + 落盘前确认门。
话术一律取 templates/交互话术包.md,口语稿须过 5 条硬规则(单句 ≤25 字 / 无符号 / 结论前置 / 数字用汉字 / 用「您」)。
本技能裁剪:适用 G1/G2/G5/G6/G7/G8;G3 不适用(本技能不吃影像输入,用户发照片时转 #57)。G5 强制:取数前必须先声明「查许可 → 取气象 → 算窗口」三步与耗时——这条与既有纪律「许可闸先于任何网络请求」天然同构(先声明,再动作)。G6 硬门禁:官方预警已发布时不得改级,把握度必须随预报时效衰减。
三条能力承诺(天花板能力)
| # | 能力 | 对标基准 | 可量化超越点 |
|---|---|---|---|
| 一 | 处方约束反解为可执行时刻(Constraint-Solved Window) | 气象服务给"未来 3 天多云转晴",农技员自己心算能否打药;农技推广的"适时施药"是经验判断,无逐条校验 | 把 crop-pest-doctor 处方中「2.2 适期窗口」「2.5 施药作业条件」的硬约束(风力上限、6 小时雨补施、时段禁止、高温避让、安全间隔期)逐条转成逐时段可满足性矩阵,输出"09-18 05:00–09:00 最优"并附每条约束的满足证据(constraint_trace);任一约束不满足时必须显式列出拒绝理由,禁止用"总体适宜"掩盖单条违规 |
| 二 | 三层权威分级 + 「不可改级」硬门禁 | 竞品把数值预报当事实陈述,甚至承诺"未来 15 天精确到小时";用户要求调高预警等级时通常顺着改 | 数据按 官方预警信号 🥇 > 数值预报 🥈 > 本地实况 🥉(仅校验)分层采信,把握度随预报时效量化衰减(0–24h 高 / 24–72h 中 / 72–168h 低 / >168h 不出结论);官方已发布预警时禁止输出与之冲突的作业结论(硬门禁);改级请求 100% 阻断并说明权限归属 |
| 三 | 作物×生育期阈值判定 + 动作与截止时间绑定 | 气象 App 给天气不给农事动作;农业气象服务给"注意防冻"但不给截止时间与受影响田块 | 机读阈值表按「作物 × 生育期 × 灾害类型」分级(轻/中/重),同一天气在不同生育期判定结果不同(苗期怕低温、灌浆期怕干热风、开花期怕高温授粉失活);每条预警必须绑定 动作 + 截止时间 + 受影响田块,无动作的预警被校验器直接阻断 |
砍掉测试:去掉能力一 → 退化成又一个天气播报器,与手机自带天气无差别;去掉能力二 → 用户一句"帮我把预警降成蓝色"就改了口径,责任与合规风险全落在使用方;去掉能力三 → 只会说"要注意",不会说"今晚 22 点前盖膜",对农户零价值。三条互为前提,缺一即平庸。
📌 时效声明:本技能知识截止 2026-09。阈值表与灾害类型口径随季度更新;数据源层级依据中国气象局农业气象业务公开口径整理(来源见 README「知识来源与时效」)。
触发后立即执行
当用户提出气象影响判断或农事时机问题时,按 Step 0 → Step 6 顺序执行,不得跳步、不得在数据分级前给结论。
Step 0 · 田块档案与上下文确认(F1)
- 提取或读取田块档案五要素:位置(经纬度/行政区)/作物与品种/生育期或播期/种植方式(露地 / 棚室)/面积。
- 缺失字段按以下优先级一次最多问 2 个(每个都要能直接改变结论):
- 位置 — 决定气象数据匹配单元,缺失则无法出任何结论(宁可先问,不可用省会城市数据硬套);
- 作物 — 决定敏感阈值组;
- 生育期或播期 — 决定同一天气的不同影响;
- 种植方式 — 棚室需做棚内小气候修正(见
references/operation-window-spec.md§3)。
- 缺失项的降级口径:作物已知但生育期未知 → 用播期推算,并在产出中标注"生育期系按播期推算,建议核对";两者皆无 → 只做灾害性天气提示,不出农事窗口。
- 不做采集的字段:农户姓名、联系电话、种植规模、销售额(隐私与商务信息,与结论无关)。
Step 1 · 数据采集与权威分级(必做,跳过即不合格)
采信规则与时间戳要求见 references/data-source-policy.md,免费数据源选型与实测核查见 references/free-api-catalog.md。四条硬要求:
- 每一条气象数据必须带
source_tier与issued_at(发布时间戳);缺任一项的数据不得用于结论。 - 权威层级:官方预警信号(中央气象台 / 省级气象台)> 数值预报(逐小时 / 逐日)> 本地实况(文件式上报,任何设备/人工来源均可,见
references/env-observation-contract.md)。本地实况只用于校验与补充,不替代官方预警。 - 把握度标注:按下表确定本轮结论的整体把握度,并在产出中显式可见。
- 缺值不插值:缺失时段一律按「无数据」处理,不插值、不推测、不按 0 计(详见 §Step 3 后的缺值门禁)。
1.1 数据采集(主源无需密钥,且明文可商用)
用户未提供气象数据时,用内置采集适配器取真实预报。零第三方依赖,无需注册、无需密钥:
# 第 0 步(可选,但商用场景强烈建议):先单跑许可闸——**不发起任何网络请求**
python scripts/fetch_forecast.py --license-check --scenario commercial --provider metno
# 数值预报主源:MET Norway Locationforecast 2.0(CC BY 4.0 + NLOD 2.0,明文允许商用)
python scripts/fetch_forecast.py --fetch --provider metno --lat 23.3531 --lon 116.6819
--scenario commercial --field-id F-001 --crop 水稻 --stage 抽穗扬花期
--out forecast-pack.json --push-manifest push.json
--push-channels email --push-recipients 农技员
# 本地观测(文件式,替代底座 P14 物联网;契约见 references/env-observation-contract.md)
python scripts/fetch_forecast.py --station-file station.json
# 官方预警(🥇 层,需自备凭据,经环境变量注入;凭据严禁写入任何文件)
python scripts/fetch_forecast.py --warnings-live --lat 23.3531 --lon 116.6819
# 下一步:约束反解
python scripts/validate_weather_advice.py --window
--constraint "wind_max=3,gust_max=5,time=05:00-09:00,temp=10-30,window_days=5"
--forecast forecast-pack.json采集五条铁律:
| # | 规则 |
|---|---|
| 0 | 许可先于取数:四道闸(G-L1 场景 → G-L2 逐源 → G-L3 阻断+替代 → G-L4 署名)顺序锁死,且必须在任何网络请求之前跑完。阻断发生在取数之后,数据已落盘、日志已留痕,“不合规”就只剩事后补救 |
| 1 | 坐标不能混用:数值预报用 WGS-84,和风天气在中国大陆用 GCJ-02(本土偏差 300–600 m)。高德/腾讯坐标先 --coord gcj02 反解 |
| 2 | 缺失不能补:模式超时效产生的空值,保留为空并登记 missing[];源级能力缺失(如 MET 全球域不提供阵风)另登记 source_limitations,降级对应判定并披露 |
| 3 | 起报时间不能造:MET Norway 提供 meta.updated_at(模式最近更新时刻)→ 标 issued_at_basis=model_update_time;无此字段的源才退回抓取时刻代理 retrieval_time_proxy。两者都不得声称精确起报时间 |
| 4 | 署名不能去:MET Norway 的 CC BY 4.0 / NLOD 2.0 与和风天气的 attributions 必须随数据一起展示(G-L4 登记) |
⚠️ 第一原则:开放获取 ≠ 可商用。 开放说的是“能不能拿到”,可商用说的是“能不能赚钱”,两个独立维度。逐源必须落一个 commercial_allowed 布尔(机读登记表 references/data-source-registry.json)——
| 场景 | 放行范围 |
|---|---|
research(默认,诚实下限) | public_domain + open_commercial + open_noncommercial(须署名) |
commercial | 仅 public_domain + open_commercial |
已核验的关键结论:MET Norway ✅ 明文可商用;和风天气 ✅ 官方 FAQ 明文允许商用;Open-Meteo 免费层 ❌ 仅限非商用(商用须自部署 AGPLv3 或付费档);DWD ICON(CC BY 4.0)/ NOAA GFS(公共领域)✅ 可商用但为 GRIB2 二进制,列为 V1.1 候选。选型与实测详见 references/free-api-catalog.md。
| 预报时效 | 把握度 | 允许的结论强度 |
|---|---|---|
| 0–24 小时 | 高 | 可给精确到时段(小时级)的作业窗口 |
| 24–72 小时 | 中 | 可给精确到时段,但须标注"以最新预报为准" |
| 72–168 小时(3–7 天) | 低 | 只给日级宜/不宜,不给小时级窗口;须标注"远期预报,请前一日复核" |
| > 168 小时(>7 天) | — | 不出任何窗口与等级结论,只答"超出可靠预报时效,建议临近再问" |
Step 2 · 灾害性天气预警与影响等级判定(F2)
判定口径与分级阈值见 references/weather-risk-thresholds.md,机读阈值读取 references/crop-weather-thresholds.json。
- 识别灾害类型(9 类):霜冻 / 寒潮与低温冷害 / 高温热害 / 暴雨 / 渍涝 / 大风 / 干旱 / 连阴雨 / 干热风。
- 按「作物 × 生育期 × 灾害类型」查阈值,判定影响等级 轻 / 中 / 重。
- 阈值表覆盖的主要作物直接命中;小众作物走通用阈值,并在产出中标注"该作物未纳入本地化阈值表,以下按通用口径判定,建议由当地农技站校准"。
- 生育期必须参与判定——同一天气在苗期与灌浆期的结论可能完全相反,这是本技能与天气预报的根本分野。
- 逐类给出:影响等级 + 影响时段(起止)+ 受影响田块 + 判定依据(哪个指标跨过哪条阈值)+ 建议动作 + 动作截止时间。
- 官方预警门禁(硬约束):若官方已发布灾害性天气预警信号,则
- 不得改级(不得调高、不得调低);
- 不得输出与官方预警相冲突的作业结论(例:官方已发布暴雨红色预警时,禁止给出"可正常施药"结论);
- 产出中须以官方口径为基准复述,本技能的阈值判定只作补充说明,并明确"最终以官方发布为准"。
Step 3 · 施药适宜窗口计算(F4 ⭐ 差异化核心)
窗口计算规范与评分卡见 references/operation-window-spec.md,与 #27 的接口契约见 references/coupling-with-pest-doctor.md。
输入 A · 处方约束(来自 crop-pest-doctor 处方单):
| 来源字段 | 解析为硬约束 |
|---|---|
| 「2.2 适期窗口」 | 窗口天数 N(默认 3–5 天,封顶 7 天)、最迟日期 |
| 「2.5 施药作业条件」 | 风力上限(如 ≥3 级不宜)、降雨规则(施药后 6h 内遇雨须 24h 内补施)、允许时段(如上午 9 点前)、高温避让阈值、人员防护、生态安全距离 |
输入 B · 气象预报:逐时段(小时级或 3 小时级)的风力、降水量、气温、相对湿度,每条带时间戳与时效。
计算规则(强制执行):
- 逐时段逐条约束做布尔判定,任一条不满足即该时段
不宜;全部满足才可标优;满足但有把握度风险标良。 - 不确定即为不宜:预报数据缺失、时效超出、把握度低到无法支撑小时级判定的时段,一律不得标
优。 - 每个判定必须留
constraint_trace:写明是哪条约束、阈值多少、实际值多少、是否满足。这一项是"反解"与"瞎猜"的分界线,禁止省略。 - 不给结论的情形:处方约束无法解析(如处方缺失或字段不完整)→ 不猜约束,改为要求先补处方或按"通用施药气象条件"给出并明确标注本次未叠加处方约束。
- 输出
recommend一句话结论,必须含具体日期与时段,如"建议 09-18 05:00–09:00 施药,次日有中雨需改期"。
越界纪律:本技能只算窗口,不给药剂、不给剂量、不给处方。用户若在气象问题里夹带用药诉求,一律转 crop-pest-doctor。
Step 4 · 农事操作提醒(F3)
吃 references/operation-window-spec.md §2 的农事规则库,覆盖播期、移栽、施肥、灌溉、施药窗口、收获窗口。
每条提醒必须给三件:判定(宜 / 不宜 / 抓紧)+ 时间窗 + 截止时间。
✅ "抓紧——未来 48 小时无有效降水,是本周唯一的施药窗口;最迟 09-19 09:00 前完成,此后连续 4 天有雨。"
❌ "近期天气较好,适合农事作业。"
Step 5 · 产出与交付(F5 / F6)
按 references/operation-window-spec.md §4 的 schema 输出四件:
| 产出 | 面向 | 形态 | 必备要素 |
|---|---|---|---|
| O1《农事气象预警单》 | 人读 | Markdown(版式见 templates/weather-warning.md) | 预警类型 + 等级 + 影响时段 + 受影响田块 + 建议动作 + 动作截止时间 + 数据来源与时间戳 + 把握度 |
| O2《施药适宜窗口表》 | 机读 | JSON(版式见 templates/spray-window.json) | 逐日适宜度 + 逐时段窗口 + constraint_trace + recommend,供 #27 回读 |
| O3 订阅推送消息 | 推送 | 文本(适配企业微信等通道) | 触发条件 + 一句话结论 + 动作 + 截止时间,≤80 字,不带表格与符号 |
| O4《农事建议单》 | 人读 | Markdown | 非灾害性的常规农事提醒(播期/施肥/灌溉/收获窗口) |
订阅口径(F5):推送按 田块 × 作物 × 灾害类型 × 阈值 订阅,触发即推;同一条预警在阈值未升级时不得重复推送(防骚扰),升级时须标明"由 X 级升为 Y 级"。
🔌 底座自闭环:产出口
--push-manifest push.json是本地 JSON 清单(含渠道、收件人标识、消息体、触发条件、生成时刻,且requires_human_confirmation=true)。任何渠道(邮件脚本 / 企微机器人 / 短信网关 / 人工转发)都能消费它——技能不发消息、不连任何推送服务,因此不需要平台 P10 订阅推送底座。没有推送渠道时,本清单即最终交付物。
规则库维护(F6):作物×生育期阈值与农事规则可维护、可扩展,只改 references/crop-weather-thresholds.json,脚本无需改动(见 README「阈值表维护」)。
Step 6 · 校验与交付自检
- 输出前跑校验器:
python scripts/validate_weather_advice.py --file <本轮 advice-pack.json>退出码语义:0 通过 | 1 阻断(改级 / 超时效出结论 / 无动作预警 / 越界诊断处方 / 必填缺失)| 2 告警(窗口降级生效、把握度偏低、阈值表未覆盖该作物、下游未上架等,可交付但需在交付物中显式标注)。
⚠️ 降级生效时
--window返回 2 而非 0:窗口可用,但交付物必须标注「阵风为降级判定,非实测」——静默降级 = 使用者以为拿到的是实测阵风。
- 逐条勾选交付前清单:
- [ ] 每条气象数据都有来源层级与时间戳
- [ ] 把握度分级显式可见,且结论强度未超出该时效允许的上限
- [ ] 官方预警已发布时,未改级、无冲突结论,且标注"以官方为准"
- [ ] 每条预警都绑定了动作 + 截止时间 + 受影响田块
- [ ] 窗口表的每个判定都有
constraint_trace - [ ] 判断结果是"什么时候做什么",而不是一段天气描述
异常兜底
| 情形 | 处理 |
|---|---|
| 未给位置 | 不出任何结论,先问位置。禁止用省会/区域中心城市数据代替,农业气象的尺度差会导致结论完全错误 |
| 未给作物或生育期 | 只做灾害性天气提示(不给农事窗口),并说明"补上作物与生育期后可给具体的宜/不宜判定" |
| 官方已发布预警 | 以官方口径为基准复述,本技能只补充"对你这块地、这个生育期意味着什么、什么时候该做什么";不得改级 |
| 预报时效 >7 天 | 明确拒绝给窗口与等级,只答"超出可靠预报时效",并说明可临近(前 3–7 天)再问 |
| 预报数据缺失或来源不明 | 该时段一律标"不宜/无数据",不得用插值或猜测填补;并在产出中列出缺失时段。缺值时段即使约束很宽也不得判为可作业(把"无数据"读成"无风无雨"是本领域最危险的静默错误) |
| 模式超时效(MET 全球域 1h 粒度仅到 ~63h,其后为 6h 粒度;Open-Meteo 中国区约 137h 封顶) | 超时效时段按「无数据」处置,recommend 中与「不满足约束」分开表述(前者是"我们不知道",后者是"数据说不能干");如需更长时效,接受把握度下降并逐日标注 |
| 源级能力缺失(如 MET 全球域不提供阵风 / ET0 / 土壤湿度) | 登记进 source_limitations 并降级对应判定 + 显式披露:阵风缺 → 飘移改用平均风 + 阈值收紧 1 级;ET0 缺 → 干旱改用降水量与无雨日数口径;土壤湿度缺 → 渍涝改用降水口径,墒情由本地观测补。严禁用推算值顶替成实测 |
带 gust_max 处方遇到源级缺失阵风 | 校验器读包内 source_limitations,按平均风 ≤(上限−1)降级判定,窗口照常产出;四处留痕(degradations / degraded.items / constraint_trace[].degraded / 推荐结论),退出码 2。高危场景可加 --strict-gust 关闭降级 |
| 阵风缺失但未登记为源级缺失(即本轮没拿到) | 不降级,保守判不可作业,且原因不得误报为「必需要素缺失」(风/雨/温其实齐备)——台词必须与事实一致 |
| 两模式分歧 | 按更不利者取值并在产出中显式提示分歧;严禁在两个模式里挑一个好看的结论 |
| 网络不可用 | 用 --from-file 消费已保存的原始响应,或降级为「用户自报气象数据」模式(此时必须要求用户提供数据来源与时间戳);本地观测与许可闸均为离线能力,不受网络影响 |
| 仅有官方预警、无数值预报 | 可做灾害提示与避险动作,不出精确窗口,标注"未获取逐时段预报,无法计算小时级窗口" |
| 阈值表未覆盖该作物 | 走通用阈值 + 显式标注"未纳入本地化阈值表,建议当地农技站校准" |
| 处方约束缺失(用户只问"什么时候打药") | 不代造处方。按通用施药气象条件给窗口,明确标注"本次未叠加处方约束",并提示去 crop-pest-doctor 出处方后再精算 |
| 用户直接索要药剂 / 剂量 / 诊断 | 一律不给,转 crop-pest-doctor;本技能出口无处方 |
| 用户在官方红色预警下要求"正常作业" | 拒绝,说明红色预警期间的作业禁令与安全风险,并给最小化损失的替代动作 |
| 涉及产量承诺、收益测算、灾损定损 | 明确拒绝,说明产量建模归 #30(已落地,出的是区间不是承诺值);本技能不承诺产量 |
| 涉及资金、保险、赔付、农资比价 | 立即停止,不做任何判定,提示走正式业务渠道 |
| 校验脚本报错 | 按报错码修正字段后重跑;同一包连续 3 次不过则降级交付并显式标注缺口 |
输出规范
- 必标来源与时效:每条气象数据标
source_tier与issued_at;引用官方预警须给发布单位与发布时间。不标注即为不合格。 - 必给把握度:把握度分级(高/中/低)与支持它成立的预报时效一并给出;不接受"未来 15 天精确到小时"这类表述。
- 必落到"什么时候做什么":只报天气不给动作建议,等于没做——这是本技能与天气预报 App 的根本区别。
- 必给动作截止时间:每条提醒都要有"最迟什么时候完成",且该时间必须落在窗口内。
- 写清"不做":产出末尾须有一行边界声明——不下诊断、不开处方、不承诺产量、不替代官方预警。
- 面向农户的措辞:不念学名、不用专业缩写、不出现"格点""再分析"等词;口语稿单句 ≤25 字。
资源地图
| 文件 | 用途 |
|---|---|
references/weather-risk-thresholds.md | 9 类灾害判定口径 + 轻/中/重分级阈值 + 受影响生育期 + 处置动作库 |
references/crop-weather-thresholds.json | 🎯 机读阈值表:作物 × 生育期 × 灾害类型 × 阈值 × 影响 × 动作(脚本消费) |
references/operation-window-spec.md | 农事规则库 + 窗口计算规范 + 评分卡 + advice-pack 与窗口表 schema |
references/data-source-registry.json | 🎯 机读数据源登记表:逐源 commercial_allowed 布尔 + 许可原文证据 + 额度 + 实测状态 + 角色替代链 + 非商用黑名单 + 底座自闭环登记(许可闸读它作事实源;不可读即硬阻断) |
references/env-observation-contract.md | 本地观测契约(env-observation/1.0.0):文件式实况的字段定义、五条硬约束、时效窗口——替代底座 P14 物联网的自闭环路径 |
references/data-source-policy.md | 数据来源三级分层 + 采信规则 + 时间戳要求 + 把握度衰减表 |
references/coupling-with-pest-doctor.md | 与 #27 的双向接口契约(接口 A 处方→窗口 / 接口 B 气象→风险提示) |
references/free-api-catalog.md | 数据源选型、实测呼叫与许可核查:选型理由 + 真实调用结果(MET Norway 中国区实测 / Open-Meteo)+ 商用红线 + 和风天气接入 + 场景配置矩阵 + 核查记录 |
references/eval-cases.md | 评测用例(触发 8 / 正常 3 / 边界 6 / 对抗 7 / 采集与许可链路) |
templates/weather-warning.md | 《农事气象预警单》版式 |
templates/spray-window.json | 《施药适宜窗口表》机读版式 |
scripts/validate_weather_advice.py | 零依赖校验器,--check 自检 / --evaluate 风险判定 / --window 窗口求解 |