下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-odeahxzi--smart-planting-assistant.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-odeahxzi/smart-planting-assistant。- 智慧种植管理助手(农事计划与标准化种植流程)。当用户问"
- 我这一季该干哪些活、什么时候干"
- "
- 按标准种植流程帮我排个计划"
- "
- 定植后该干啥了"
- …(完整说明见下方「阅读全文」)
阅读全文 (展开查看完整说明)
概述
定位
农户和农技员手里的"标准种植流程"从来不缺——技术手册、企业 SOP、平台知识库,到处都有。缺的是把它落到"我这块地、这个播期、这几天"的能力。
于是现实是:SOP 上写"定植后 30 天追肥",农户的地是 3 月 12 日定植的,那就是 4 月 11 日——可这天有雨怎么办?顺延到哪天?顺延之后会不会撞上"追肥后 7 天不能灌溉"?会不会和下一道工序挤在同一天、人根本忙不过来? 没人算,因为这是一道带工序依赖、间隔铁律与资源容量约束的排产问题,人算不准也算不快。
本技能反过来:把 SOP 当工序图来解,并且在排之前先查这个计划到底做不做得到。 它是「认养农业管家」技能族的生长反馈链成员(全局编号 #28,底座 已自闭环),同时是 #31 认养农业管家的供方。
🔌 底座已自闭环(v1.1.0):原标称依赖的两个平台底座均已改为技能自持——
P14 物联网设备接入 → 环境观测改为【文件式上报】(
--env-file,契约references/env-observation-contract.md),五类锚点
env_trigger已实现;农户手填一行也算,无需任何设备;P08 工作流/任务编排引擎 → 求解器本身就是编排引擎(零第三方依赖、纯标准库、离线确定性可复现),不挂平台工作流。
详见
references/env-trigger-and-observation.md。
📌 原「阶段一 / 阶段二」切分已取消:环境监控不再挂在底座 P14 上等待。
原「阶段二环境监控设计预留」已落地为本版能力(
env_trigger锚点 + 四道内置应急工序 + 五条判定路径)。真实设备接入只提升观测密度与时效,不改变任何接口或结构。
本技能仍不产生任何设备控制指令(开阀、启泵属副作用外发动作,须人工确认)。
三条不可退让的底线:不排假计划(不可行就说不可行)、每条日期可反解(说不出怎么算的日期不许出现)、计划是活的(延误必须传播,不许装作没发生)。
交互与引导(族级公共层)
遵循 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 不适用(不吃影像输入)。G7 特殊:本技能的「不可行就报不可行」必须进首屏卡第一句——计划不可行时,第一句话就是『这个计划当前做不了』,而不是先铺陈任务明细。G5 轻量:常规排产为秒级;仅当环境触发判定需多轮时补一帧。
三条能力承诺(天花板能力)
| # | 能力 | 对标基准 | 可量化超越点 |
|---|---|---|---|
| 一 ⭐ | SOP → 田块级任务排产(Standard-Operation-to-Schedule) | 竞品给的是 SOP 文本或固定日历提醒("每月 1 号施肥");"种植计划智能体"类产品做到"计划下发到人/到地块"即止,日期仍靠人工填 | 把标准流程建成带依赖与间隔约束的工序图(DAG)(8 作物 / 96 道工序 + 通用模板),用五类锚点反解出每道工序的具体日期 + 农时窗口三档(早限/适期/晚限);输出每任务的反解式(anchor + offset → 日期)供人工核验;任一锚点解析不出来就报 blocked,绝不猜日期 |
| 二 ⭐ | 三重冲突检测 + 「不可行就报不可行」 | 竞品一律"你排什么就排什么",排出的计划可能自相矛盾(追肥后要求 7 天不灌,下游工序却正好压在这 7 天里);Agworld 等有 reschedule,但冲突靠人眼识别 | 排产前做三重检测:①工序先后 ②工序间隔铁律(11 条,分 hard/soft)③资源容量与同日集中;检出即报十一类冲突之一,并给最小冲突集(只列真正冲突的 1–3 个任务)+ 缓解选项(每条带 feasible 判定与代价);绝不硬排出一个执行不了的假计划 |
| 三 ⭐ | 回执驱动的滚动重排(计划是活的) | 竞品记录本只记不改,计划一旦延误即整体失效,用户两三次延误后弃用;有重排功能的也需人工逐条改 | 回执(完成/顺延/跳过 + 实际完成日)→ 延期沿 prev_task 锚点链自动传播(重算窗口)+ 对播期锚点任务施加推挤 → 输出变更单:from/to/delta_days/原因传播链/是否超晚限;跳过关键工序时给引用农学依据的不可逆后果预警 |
砍掉测试:去掉能力一 → 退化成第三本"农事记事本 / SOP 手册",与纸质记录无差别;去掉能力二 → 会排出"追肥后 1 天又灌水"这类自相矛盾计划,农户照着做反而减产——本技能变成负价值;去掉能力三 → 计划一遇延误就废,用户第二次延误后不再打开。三条互为前提,缺一即平庸。
📌 时效声明:本技能知识截止 2026-09。工序窗口与间隔为公开农技资料整理的通用口径,非本地化标定结果,首次在特定生态区投用前须按
README.md「工序库维护」做本地化校准。
触发后立即执行
按 Step 0 → Step 6 顺序执行,不得跳步;不得在锚点未解析时给出任何日期。
Step 0 · 田块档案与锚点确认(F1)
- 提取或读取五要素:作物(品种)/播期或定植日/面积/田块编号/(可选)当季人工与机具上限。
- 多年生作物(柑橘、茶叶)不给播期,给物候期起始日(春梢萌动期、现蕾期、各轮开采期…)。
- 缺失字段按以下优先级一次最多问 2 个(每个都要能直接改变结论):
- 作物 — 决定用哪张工序图;未收录则走通用模板并显式降级;
- 播期/定植日 或 物候期起始日 — 决定全部锚点基准,缺失则排不出任何日期(宁可先问,不可用"去年的今天"硬套);
- 面积 — 只影响资源量,不影响时点;缺省可按 0 排(不报错);
- 人工/机具上限 — 决定是否触发容量冲突;缺省则不检查容量。
- 不做采集的字段:农户姓名、电话、销售额(隐私与商务信息,与结论无关)。
Step 1 · 工序图与锚点反解(F2 · 能力一)
工序图与锚点口径见 references/planting-sop-library.json,反解规则见 references/task-scheduling-spec.md §2。
五类锚点(必选其一,选错即毁全盘):
| 锚点 | 基准日 | 判定口诀 | 滚动重排行为 |
|---|---|---|---|
sowing_plus_days | 播期 / 定植日 | 看着作物干(破口期打药、完熟期收获) | 不随前序移动(积温说了算) |
stage_start_plus_days | 物候期起始日 | 多年生按物候走 | 不移动 |
prev_task_plus_days | 前序任务实际完成日 | 接着上一道活干(缓苗水、返青肥、播后除草) | 随前序延期同步顺延(滚动重排的传播通道) |
fixed_date | 当年给定月-日 | 节气型(冬灌、封园) | 不移动 |
env_trigger | 环境触发日(--env-file) | 看着天/看着地干(高温灌水、干热风喷灌、棚室通风、浲涝排水) | 条件不成立则待命(不占排期) |
⚠️ 头号致命错误:把"接着上一道活干"的工序锚到播期 → 移栽晚 8 天,返青肥却还在原定日期,计划从第二道工序起全部失真;把"看着作物干"的工序锚到前序 → 晒田多晒 3 天,破口期打药就晚 3 天,而破口期不会等你。依据见
references/agronomy-calendar-rules.md§1。
🌡️ 应急任务不能按播期排:"穗期遇 ≥35℃ 立即灌深水"的真实触发点是天气,不是播期。写成"播期 +95 天"等于预先承诺一个日子,那天可能下雨、也可能压根不热,而真正的高温来临时计划里什么也没有。→ 用
env_trigger,条件成立才排产。
执行排产:
# 一年生作物:以播期/定植日为基准锚点
python scripts/schedule_plan.py --plan --crop 水稻 --sowing-date 2026-03-12
--area 12 --field-id F-001 --capacity-labor 20 --out plan.json
# 多年生作物:以物候期起始日为基准锚点(可多次传 --stage)
python scripts/schedule_plan.py --plan --crop 柑橘 --area 8
--stage "春梢萌动期=2026-02-20" --stage "现蕾期=2026-03-10"
--stage "盛花期=2026-03-25" --stage "幼果期=2026-04-20"
--stage "夏梢期=2026-06-01" --stage "果实膨大期=2026-07-15"
--stage "转色期=2026-10-20" --stage "采收期=2026-11-20" --out plan.json
# 看工序库全貌(作物 × 工序 × 锚点 × 窗口 × 关键工序标记)
python scripts/schedule_plan.py --list-crops环境触发任务怎么排(V1.1.0 新增·底座自闭环):
# 先把田间实况写成一个 JSON(契约见 references/env-observation-contract.md,手填一行也行)
# 再排产:条件成立 → 应急任务排到触发日;未触发 → 待命(不占排期、产出中可见)
python scripts/schedule_plan.py --plan --crop 水稻 --sowing-date 2026-06-05
--stage "破口抽穗期=2026-09-20"
--env-file env_observation_heat.json --env-as-of 2026-09-26T08:30+08:00
--out plan.json| 情形 | 行为 | 冲突 |
|---|---|---|
未传 --env-file | 应急任务待命(不报冲突) | — |
| 条件不成立(已测值明确未超阈值) | 待命,并给出各原子实测值 | — |
| 条件成立、快照 ≤2h | 触发,排在触发日 | — |
| 条件成立、快照 >2h | 降级走 fallback(按物候期) | ENV_TRIGGER_STALE(soft) |
传感器缺测、有 fallback | 降级走 fallback | —(degraded 留痕) |
传感器缺测、无 fallback | 阻断(不猜日期) | ENV_TRIGGER_UNRESOLVED(blocked) |
🔒 环境触发的三条纪律(与 #29 缺值铁律同源):
① 缺测 ≠ 未超阈值(没数据绝不当"没超"放行);
② 条件成立 ≠ 依据可用(快照超期时不拿旧观测定今天的活);
③ 待命 ≠ 不存在(不排期也要在产出里说清为什么)。
四条硬要求:
- 每条产出的任务必须带
derivation(反解式),写不出"这个日期怎么来的"即视为不合格; - 窗口三档齐全且
optimal等于锚点偏移(脚本A12逐任务校验); - 锚点解析不出来 →
ANCHOR_UNRESOLVED(blocked),明确索要缺失锚点,绝不猜测; - 未收录作物走通用模板(
degraded标注),不报错、不拒答。
Step 2 · 三重冲突检测(F3 · 能力二 ⭐)
检测口径与十一类冲突定义见 references/task-scheduling-spec.md §4(原九类 + 环境触发两类)。
三重检测:
| 重 | 检测内容 | 硬约束来源 |
|---|---|---|
| ① 时窗 | 工序先后(前序未完成即执行)、农时晚限越界、同日集中 | 工序图的 depends_on 与 window |
| ② 工序间隔 | 11 条间隔铁律(施肥→灌溉 ≥2 天、施药→采收 ≥7 天、施药→保花保果 ≥2 天…) | interval_rules + 作物级 interval_overrides |
| ③ 资源容量 | 某日人力/机具需求超上限 | 用户给定 --capacity-labor / --capacity-machine |
每条冲突必须输出四件(缺一不可):
- 事实:谁和谁、差几天、违反哪条规则;
- 依据:为什么这是问题(农学原因);
- 最小冲突集:只列真正冲突的 1–3 个任务号(不给整张计划);
- 缓解选项:每条带
feasible(由当前计划状态推出,不得写死 true)与代价说明。
纪律:
- 声明式依赖主动满足,涌现式冲突如实报告——求解器会主动把
depends_on关系排对;但两道互不依赖的工序恰好撞进间隔铁律时,只报告 + 给选项,不擅自改用户没声明的顺序(擅自改会让计划"看起来可行"而掩盖真实矛盾); - 不可行就报不可行:只要存在 hard/blocked 冲突,
feasible=false,产出必须显式写明"不建议按此执行"。
Step 3 · 与族内技能协同(F4)
接口契约见 references/coupling-with-family.md。
| 方向 | 做什么 | 纪律 |
|---|---|---|
→ #29 agri-weather-advisor(接口 A) | 对 needs_window=true 的任务(施药/保花保果/采收),把排产区间 + 农时早/晚限交给 #29 反解小时级窗口 | 本技能不出小时级时刻;未回填 weather_window_ref 前不得声称已确定作业时刻 |
| ← #29(接口 B) | 接收气象预警(霜冻/暴雨/干热风)→ 作为应急任务插入计划 | 插入后必须重跑三重检测;与 must_not_skip 工序冲突时以既有工序优先 |
← #27 crop-pest-doctor(接口 C) | 处方「2.2 适期窗口」收窄施药晚限;「2.6 安全间隔期」覆盖 IR-03 的默认 7 天 | 更严者优先;用户只问"什么时候打药"时不得代造处方——处方出口在 #27 |
← #57 agri-multimodal-chat(接口 D) | 接收 ingest-pack(作物/生育期/地块/面积) | 不重复做多模态质量判定 |
| → #31 认养农业管家(接口 E) | 计划 + 变更单 + 执行回执统计 | 输出中不得含产量承诺与收益测算 |
⚠️ 安全间隔期是一条容易出人命的默认值:库里 IR-03 的 7 天只是计划侧占位。柑橘常见 14–21 天、出口茶批次检测极严。必须由 #27 处方或农药标签覆盖,绝不允许"因为库里写 7 天"就按 7 天排采收。
Step 4 · 滚动重排(F5 · 能力三 ⭐)
回执格式与传播规则见 references/task-scheduling-spec.md §5。
# 1) 先按回执重排(回执含:完成/顺延/跳过 + 实际完成日 + 原因)
python scripts/schedule_plan.py --replan --file plan.json --receipts receipts.json --out plan-v2.json
# 2) 校验任意计划包(自包含,无需工序库,可离线复检)
python scripts/schedule_plan.py --file plan-v2.json回执示例:
{"receipts": [
{"id": "CORN-02", "status": "done", "actual_date": "2026-04-26", "note": "春季连续降雨,机械无法进地"},
{"id": "RICE-06", "status": "deferred", "defer_days": 3, "note": "肥料未到"},
{"id": "CORN-08", "status": "skipped", "reason": "水源不足"}
]}五步传播(执行顺序固定):
- 锁定:回执写明的任务不再重解,其日期为事实;
- 重算窗口:
prev_task_plus_days锚点任务的基准日改为前序当前完成日,window_bounds三档按新基准重算(不重算会导致晚限挂在旧基准上 → 既误报超限、又掩盖真超限); - 推挤:其余任务起点 = 适期点,再被"前序完成日 + 间隔"向后推;
- 迭代:最多 10 轮至稳定(一次延期可连推多级下游);
- 全量重算冲突:不沿用旧结论,并重判
window_tier与超晚限标记。
变更单要求:reason 必须写传播链("锚点为前序 X 实际完成日 +N 天,前序顺延导致本任务同步顺延"),禁止"日期已更新"这类无信息量表述。
跳过关键工序时:必须引用工序库的农学依据说明不可逆后果(例:跳过抽雄期灌溉 → "抽雄吐丝期是玉米需水临界期(俗称「卡脖旱」),此期缺水可减产 30% 以上"),并给"补做(若仍在晚限内)/ 接受后果留痕"两条出路。
Step 5 · 产出与交付(F6)
按 references/task-scheduling-spec.md §6 的 schema 输出:
| 产出 | 面向 | 形态 | 必备要素 |
|---|---|---|---|
| O1《农事任务计划单》 | 人读 | Markdown(版式见 templates/task-plan.md) | 总览 + 任务明细 + 排产依据链(反解式) + 冲突与处理建议 + 变更单 + 边界声明 |
| O2《农事任务计划表》 | 机读 | JSON(schema 见 templates/task-plan.json) | 逐任务锚点/窗口/推挤记录/资源/derivation;冲突四件要素;_meta 自包含间隔规则 |
| O3 排产依据说明 | 人读 | Markdown 段落 | 每道工序"为什么排在这天",含锚点类型与偏移 |
| O4 变更单 | 人读 | Markdown 表格 | 有回执时必附:from/to/变动/传播链/是否超晚限 |
Step 6 · 校验与交付自检
- 输出前跑校验器:
python scripts/schedule_plan.py --file <本轮 plan.json>退出码语义:0 通过 | 1 阻断(存在 hard/blocked 冲突、参数非法、计划包结构不通过)| 2 告警(仅 soft 冲突:天气窗口待反解、容量偏紧、同日集中等,可交付但需标注)。
- 逐条勾选交付前清单(完整清单见
references/eval-cases.mdF 组):
- [ ] 每条任务都有可读的反解式,而不是只有一个日期
- [ ] 农时窗口三档齐全,
optimal与锚点偏移一致 - [ ] 每条冲突都带最小冲突集与缓解选项(含 feasible 与代价)
- [ ] 缓解选项的
feasible由计划状态推出,不是写死的true - [ ] 变更单写清传播链,不是"日期已更新"
- [ ] 结论落到"哪几天干什么、最迟哪天",而不是一段流程描述
- [ ] 敏感作业已标注"待 #29 反解小时级窗口",且未声称已确定具体时刻
- [ ] 安全间隔期已核对来源(#27 处方 / 农药标签 / 默认占位),并写明用的是哪个
异常兜底
| 情形 | 处理 |
|---|---|
| 未给播期/定植日(一年生) | 全部任务 ANCHOR_UNRESOLVED,明确索要播期。禁止用"去年的今天"或"同期平均"代替——积温年际差异可达 10 天以上,等于瞎排 |
| 未给物候期(多年生) | 该期锚定的任务 blocked,其余正常排;逐条列出缺哪个物候期 |
| 未给面积 | 照常排产,资源量按 0 计,并提示"补上面积后可给出人工与机具需求" |
| 未给容量上限 | 不检查容量冲突,并在产出中标注"未提供人工/机具上限,本次未做容量检测" |
| 作物未收录 | 走通用模板 + 显式 degraded 标注"未纳入本地化工序库,工序数量与间隔为保守估计,建议当地农技站校准";不报错、不拒答 |
| 计划存在 hard 冲突 | feasible=false,产出首部写明"计划当前不可行,不建议按此执行",并逐条给最小冲突集与缓解选项 |
| 任务超出农时晚限 | 报 LATE_WINDOW_BREACH(hard),给三条出路:接受并留痕 / 压缩前序抢回窗口 / 改换短生育期品种。不替农户决定"还要不要继续种" |
| 同日集中 ≥3 道工序 | 报 SAME_DAY_CLUSTER(soft)并列出可错开的候选任务(deferrable != no 且晚限内有余量),不硬排装作没问题 |
| 回执缺失或不全 | 按"已完成项之外的都未完成"处理,并在产出中标注"回执不全,未申报任务按原计划视同待执行" |
| 回执申报的实际完成日晚于农时晚限 | 保留事实日期(不得改写),对下游做全量重排并逐条标记超晚限影响 |
| 用户要求跳过关键工序 | 允许记录(农户有决定权),但必须输出不可逆后果预警 + 给出"补做"选项;产出与变更单中都保留"已跳过关键工序"的标记 |
| 用户要求改日期 / 补记录 | 拒绝——计划日与执行日是两件事。实际执行日只能来自真实回执 |
| 用户要求绕过安全间隔期安排采收 | 拒绝,说明农残超标与卖粮/出口风险,并给出"顺延采收"或"取得合法用药与间隔期依据"两条正路 |
| 用户索要病虫害诊断或用药方案 | 一律不给,转 crop-pest-doctor;本技能出口无诊断、无处方 |
| 用户要求预测产量 / 算收益 / 灾损定损 | 明确拒绝,说明归 #30 与商务;本技能不承诺产量 |
| 用户询问实时墒情/温湿度/设备状态 | 可接受(V1.1.0 起):请其提供 env-observation/1.0.0 契约的观测文件(手填一行即可)→ 跑 --env-file 做触发判定。无观测文件时不得凭空判断"没超阈值"——只说"未提供观测,应急任务保持待命" |
| 观测快照超期(>2h) | 不据旧观测定应急活:走 fallback 降级排定并报 ENV_TRIGGER_STALE(soft),提示"重报一次观测后可恢复触发口径" |
| 观测缺某传感器 | 不得读成"未超阈值":有 fallback → 降级排定并留痕;无 fallback → ENV_TRIGGER_UNRESOLVED(blocked),缓解选项给"补一条观测"的零设备出路 |
| 用户要求开阀/启泵自动控制 | 拒绝:本技能不产生任何控制指令。动作类操作属副作用外发动作,须人工确认后由人工执行 |
| 涉及资金、保险、赔付、农资比价 | 立即停止,不做任何判定,提示走正式业务渠道 |
| 校验脚本报错 | 按报错码修正后重跑;同一包连续 3 次不过则降级交付并显式标注缺口 |
输出规范
- 必给反解式:每条任务的日期必须能说清"哪个锚点 + 偏移多少天"。说不出就是不合格——这是"排产"与"拍脑袋"的分界线。
- 必给窗口三档:早限/适期/晚限齐全,档位标注(早限前/偏早/适期/偏晚/超晚限)。
- 必落到"哪几天干什么、最迟哪天":只给工序名不给日期的输出等于没做。
- 必给冲突四件:事实 + 依据 + 最小冲突集 + 缓解选项(含 feasible 与代价)。
- 必标降级:走通用模板、未叠加处方约束、未取得气象窗口——都要显式写出来,不许悄悄降级。
- 写清"不做":产出末尾须有一行边界声明——不下诊断、不开处方、不承诺产量、不产生任何设备控制指令。
- 面向农户的措辞:不念学名、不用专业缩写;口语稿单句 ≤25 字。
资源地图
| 文件 | 用途 |
|---|---|
references/planting-sop-library.json | 🎯 机读工序库:8 作物 / 96 道工序 + 通用模板;五类锚点、窗口三档、11 条间隔铁律、11 类冲突定义、12 类工序类型默认(脚本消费) |
references/task-scheduling-spec.md | 排产规范:三段式职责分离 + 工序模型(五类锚点)+ 排产算法 + 十一类冲突与四件要素 + 滚动重排五步 + task-plan schema + 评分卡 |
references/agronomy-calendar-rules.md | 农学依据:锚点选择铁律 + 11 条间隔铁律的由来 + 三个"同行容易做错"的点 + 反模式清单 + 本地化校准流程 |
references/coupling-with-family.md | 与 #27 / #29 / #57 / #31 的接口契约(接口 A–E + 族内接口矩阵 + 联调要点) |
references/env-trigger-and-observation.md | 环境触发锚点(已实现):五条判定路径 + 三条纪律 + 底座 P14 自闭环的修正依据 + CP-04/05 状态变更 |
references/env-observation-contract.md | 本地观测契约 env-observation/1.0.0(与 #29 --station-file 逐字同步):文件结构 / 字段 / 五条硬约束 C1–C5 / 时效三档 |
references/eval-cases.md | 评测用例(触发 8 / 正常 3 / 边界 6 / 对抗 7 / 排产链路 8 / 环境触发与自闭环 14) |
templates/task-plan.md | 《农事任务计划单》版式(含排产依据链与变更单) |
templates/task-plan.json | 《农事任务计划表》机读版式与字段字典(字段由求解器生成) |
scripts/schedule_plan.py | 零依赖排产求解器:--check 自检(149 项)/ --list-crops / --plan(--env-file)/ --replan / --file / --safety |