钓鱼天气预报与鱼情分析(钓鱼鱼情参谋)
什么时候用
用户问到出钓时机、鱼情、天气对钓鱼的影响时触发,例如:
- 「明天去太湖钓鱼怎么样」「周末去千岛湖能钓翘嘴吗」
- 「这周哪天适合钓鱼」「最近几天哪天出钓最好」
- 「XX 水库鱼情」「舟山这两天海钓行不行」「几点去最好」
- 「今天风这么大还能钓吗」「降温了鲫鱼还开口吗」
- 用户报渔获:「今天钓了 12 条鲫鱼」「空军了」→ 用钓获日志记一笔
不适用:问某个钓场收费、开放时间、放了什么鱼;问禁渔区具体边界;问买什么竿。这些明说本技能不提供,请用户查当地公告或问钓场。
流程
- 问清三件事(缺哪个问哪个,别一次问一堆):
- 去哪:地名或经纬度。地名越具体越好(「汤逊湖」比「武汉」准)。
- 钓什么:目标鱼(默认鲫鱼)。可选:鲫鱼 crucian、鲤鱼 carp、草鱼 grass、鲢鳙 silver、罗非 tilapia、翘嘴 culter、鲈鱼 bass、黑鱼 snakehead、鳜鱼 mandarin、黄颡 catfish、海鲈 seabass、黑鲷 seabream(中文名也认)。
- 什么水:水库/湖/河/塘/海。用户不知道就用默认 auto,脚本走 OpenStreetMap 自动识别。
- 跑脚本:
`` python {baseDir}/scripts/fishcast.py --place 太湖 --species crucian python {baseDir}/scripts/fishcast.py --place 舟山 --water sea --species seabass python {baseDir}/scripts/fishcast.py --lat 30.41 --lon 114.34 --water lake --days 3 ``
- 默认输出中文 Markdown 报告(今天、明天详讲,7 天一行一个概览);加
--json输出结构化结果(结构见references/model.md§8)。 - 地名有多个同名地点时,报告顶部会列出候选,默认按第 1 个算。不是用户要的地方就用
--pick 序号重跑,或者直接问用户是哪一个。 - 报告里出现「未识别水域类型」时,问用户是什么水,再用
--water重跑。 - 网络:脚本读
HTTPS_PROXY/HTTP_PROXY环境变量。取不到数据时脚本会说「天气数据暂时没取到,稍后再试」,照这句话告诉用户,不要编分数。stderr 里[技术细节]开头的行只给你排查用,不要转述给用户。
- 给用户讲:先一句结论(哪天几点去、多少分、什么等级和那句等级说明),再讲最佳时段和两三条最关键的理由和建议;有安全提示必须放在最前面说。结尾保留「按天气和经验估算,不保证有鱼;出发前查当地禁渔期」。说话规矩见下面「跟钓友说话」。
- 钓完记一笔(空军也记):
`` python {baseDir}/scripts/journal.py add --date 2026-09-20 --time 06:30 --place 汤逊湖 --species crucian --count 12 --weight 2.1 --note 腥香商品饵 python {baseDir}/scripts/journal.py add --date 2026-09-21 --lat 30.41 --lon 114.34 --water lake --count 0 --note 空军 python {baseDir}/scripts/journal.py list python {baseDir}/scripts/journal.py stats python {baseDir}/scripts/journal.py delete --id 3 # 记错了删掉重记 ``
记的时候脚本自动算出当时的鱼情分一起存(~/.fishcast/journal.db,环境变量 FISHCAST_HOME 可改目录)。stats 按分数档(<35 / 35–49 / 50–64 / 65–79 / ≥80)统计平均渔获和空军率;少于 10 笔时脚本会说样本不够,照实转告,不要从几条记录里下结论。
跟钓友说话(必须遵守)
脚本输出已经是钓友能看懂的话,你转述、解释时也一样:
- 不许说的词:Overpass、Nominatim、Open-Meteo、OSM、接口、API、JSON、fixture、null/None、weather_code、S_temp、g、闸门、solunar、major/minor、hPa、m/s、脚本参数名(
--pick、--water等)。数据来源只在报告末尾那行小字里出现,你不用提。 - 换成人话:
- 水温打折 →「水温太低(太高)了,鱼不爱动,整体打折」;冰钓鲫鱼 →「冰钓鲫鱼照样能钓,打折少一些」
- solunar / 中天 →「月亮时段」
- 水域没识别 →「没认出是什么水,你告诉我是河、湖、水库、池塘还是海」
- 地名有好几个 →「叫这个名字的地方不止一个,你说的是第几个」
- 网络失败 →「天气数据暂时没取到,稍后再试」
- 气压说「百帕」;风速说「几级风」(可以带米/秒);浪高说「米」
- 每个等级都带一句人话解释(报告里有),不要只报一个数字。
- 不解释公式和权重,用户追问「为什么扣分」就用报告「说明」那一列的原话讲。
- 结尾一句:「按天气和经验估算,不保证有鱼;出发前查当地禁渔期。」
分数怎么解读
| 分数 | 等级 | 怎么跟用户说 | |---|---|---| | ≥80 | 极佳 | 条件都在线,挑最佳时段去 | | 65–79 | 好 | 值得去,注意报告里扣分最多的那项 | | 50–64 | 一般 | 能钓,别期望太高,时段比日子更重要 | | 35–49 | 偏差 | 能不去就不去,去就只钓最佳时段 | | <35 | 不建议 | 多半是雷暴、大风、强降水或水温离谱 |
- 日分六成看「挑对时间去能有多好」(当天最好的几个小时),四成看「这一天整体怎么样」——跟用户就这么说。
- 有雷暴、大风、大浪的日子,日分最高只给 60(严重的只给 45),报告里会写「今天有雷暴,只建议在安全时段短钓,或者改天」;这句话一定要转告,并点明危险时段。
- 看 8 样东西:水温、气压、温变、风、天空、时段、月相/潮、水域;水温最要紧,水温太离谱整体打折。水温是按前几天气温估的,海边用实测海水温度。
- 冷季(估算水温 <12℃)重午间、怕北风降温;热季(>26℃)重早晚和夜钓、怕闷热缺氧。
- 公式在
references/model.md(给你看的,不用讲给用户),用户问「为什么是这个分」时按报告里的说明解释,不要自己加原因。
边界(必须遵守)
- 不是保证:这是经验规则模型,没有用真实渔获校准过。不要说「肯定上鱼」「必爆护」。
- 安全优先:报告里有雷暴、阵风 7 级以上、浪高 ≥2.5 m、强降水的时段,分数已经被封顶;跟用户讲时先说安全,明确劝退,不要因为别的时段分高就淡化。雷暴天不在水边、收起碳素竿;可能结冰时冰厚 <10 cm 不上冰;高温防中暑。夜钓、礁石、水库陡坡提醒结伴。
- 禁渔与规定:本技能不掌握禁渔区、禁钓区、收费钓场信息。每次给出建议时都要提醒用户自查当地禁渔期:长江流域重点水域 2021–2030 年十年禁渔(垂钓按各地管理办法,多数要求一人一竿一线一钩)、各大流域春季禁渔期、海洋伏季休渔(大致 5 月 1 日起,各海区结束时间不同)。细节见
references/china-rules.md,一律以当地农业农村(渔政)部门最新公告为准。 - 不提供钓场收费、放鱼量、具体钓位坐标;不教电鱼、网捕、锚鱼等违法或各地禁止的钓法。
配合 WorkBuddy「自动化」每周提醒
用户想每周自动收到周末鱼情时,教用户在客户端「自动化 → 添加」里建一条(技能选本技能「钓鱼天气预报与鱼情分析」,打开「推送到小程序」):
| 名称 | 时间 | 提示词 | |---|---|---| | 周末鱼情 | 每周五 18:00 | 用钓鱼天气预报与鱼情分析跑 fishcast.py --place <我的常去钓点> --species <目标鱼> --days 3,只讲周六、周日:各自分数、最佳时段、有没有安全提示;最后提醒我钓完用 journal.py 记渔获。 |
电脑需要开机、客户端在线才会触发。常去钓点和目标鱼问一次记下来,别每周都问。
文件
scripts/fishcast.py:主程序(Open-Meteo 天气/海况 + Nominatim 地名 + Overpass 水域识别,全部免 key)scripts/model.py:打分模型(纯计算);scripts/astro.py:日月算法(suncalc 移植)scripts/journal.py:钓获日志scripts/test_fixtures.py、scripts/test_astro.py、fixtures/:回归样例(--fixture可离线跑)references/model.md:模型唯一口径;references/impl-notes.md:实现澄清;references/species.md:鱼种习性;references/china-rules.md:禁渔与垂钓规定assets/species.json:鱼种表