@clawhub-jeansgit-f38ae083eb
路亚钓鱼助手 — 天气查询、渔获记录、钓点推荐、潮汐查询、路亚饵知识、渔获统计。当用户提到路亚、钓鱼、钓点、渔获、潮汐、路亚饵、拟饵、鱼饵选择等相关话题时触发此技能。
---
name: lurefish
version: 1.0.0
description: 路亚钓鱼助手 — 天气查询、渔获记录、钓点推荐、潮汐查询、路亚饵知识、渔获统计。当用户提到路亚、钓鱼、钓点、渔获、潮汐、路亚饵、拟饵、鱼饵选择等相关话题时触发此技能。
---
# Lurefish
路亚钓鱼全能助手,帮助钓友规划出钓、记录战果、提升技巧。
## 快速开始
用户可能的需求:
- "明天适合钓鱼吗" → 查天气/风向
- "帮我记录今天的渔获" → 记录渔获
- "附近有什么好钓点" → 钓点推荐
- "今天潮汐怎么样" → 潮汐查询
- "这个鱼用什么饵" → 路亚饵知识
- "我今年钓了多少鱼" → 渔获统计
## 功能模块
### 1. 天气/风向查询
路亚受天气影响大,重点关注:
- **风向** — 东南风、西北风对鱼情影响不同
- **气压** — 气压低鱼活性差,气压高鱼活跃
- **温度** — 温差大的日子鱼口好
- **降水** — 雨前、雨后时机不同
**工具**: 使用 weather skill 或 wttr.in 查询
```bash
curl wttr.in/城市?format="%t %w %p"
```
### 2. 渔获记录
记录钓鱼成果,积累经验数据。
**数据结构** (保存到 `~/lurefish/catches.json`):
```json
{
"date": "2026-03-19",
"location": "千岛湖",
"species": "翘嘴",
"length": 45,
"weight": 1.2,
"lure": "米诺 7cm 银色",
"technique": "匀速收线",
"weather": "晴 东南风2级",
"notes": "早上7点开口"
}
```
**使用脚本**: `scripts/log_catch.py` 记录渔获
### 3. 钓点推荐
根据位置推荐附近钓点。
**数据来源**:
- 用户历史记录 (`~/lurefish/spots.json`)
- 在线地图搜索(需要时用 browser 搜索)
**钓点信息结构**:
```json
{
"name": "千岛湖大桥下",
"type": "淡水湖",
"species": ["翘嘴", "鲈鱼", "鳜鱼"],
"best_season": "春季、秋季",
"difficulty": "中等",
"notes": "早晚窗口期好"
}
```
### 4. 潮汐查询
海钓必看潮汐,淡水钓参考气压变化。
**工具**:
- 海钓: 使用 web_search 搜索 "潮汐表 [地点]"
- 淡水: 关注气压变化,气压上升期鱼活跃
**潮汐知识**:
- 大潮 — 农历初一、十五,潮差大,鱼活跃
- 小潮 — 农历初七、八、二十二、二十三
- 活汛 — 潮水流动快,鱼活跃
- 死汛 — 潮水流动慢,鱼口差
### 5. 路亚饵知识
不同鱼种、不同场景用不同饵。详见 `references/lures.md`。
**快速参考**:
| 目标鱼 | 推荐饵 | 备注 |
|--------|--------|------|
| 翘嘴 | 米诺、VIB | 早晚水面系效果好 |
| 鲈鱼 | 软虫、深潜米诺 | 结构区慢跳 |
| 鳜鱼 | 软虫、铅头钩 | 底层慢拖 |
| 黑鱼 | 雷蛙、波趴 | 草区水面系 |
| 海鲈 | 铁板、米诺 | 流水区效果好 |
### 6. 渔获统计
分析历史数据,发现规律。
**统计维度**:
- 总渔获数量/重量
- 各鱼种占比
- 最常使用的饵
- 高产时段分析
- 高产钓点排名
**使用脚本**: `scripts/stats.py` 生成统计报告
## 数据管理
所有数据存储在 `~/lurefish/` 目录:
```
~/lurefish/
├── catches.json # 渔获记录
├── spots.json # 钓点信息
└── stats.json # 统计缓存
```
首次使用时自动创建目录和数据文件。
## 资源文件
### scripts/
- `log_catch.py` — 记录渔获
- `stats.py` — 渔获统计
### references/
- `lures.md` — 路亚饵详细知识
- `species.md` — 常见路亚目标鱼种
FILE:references/lures.md
# 路亚饵知识
路亚饵(拟饵)是模仿小鱼、虾、虫等水生生物的人工饵料。
## 饵的分类
### 硬饵 (Hard Baits)
#### 米诺 (Minnow)
- **外形**: 模仿小鱼,细长流线型
- **适用**: 翘嘴、鲈鱼、海鲈、鳡鱼
- **操作**: 匀速收线、抽停、快抽
- **选择**:
- 浅水用浮水型 (F)
- 深水用沉水型 (S)
- 悬浮型 (SP) 适合抽停
#### 波趴 (Popper)
- **外形**: 凹头水面系
- **适用**: 翘嘴、黑鱼、海鲈
- **操作**: 抽动产生水花和声响
- **时机**: 早晚窗口期、鱼在水面追饵
#### 铅笔 (Pencil)
- **外形**: 细长水面系,无舌板
- **适用**: 翘嘴、海鲈
- **操作**: 走狗步 (左右摆动)
- **特点**: 适合安静水面
#### VIB (Vibration)
- **外形**: 金属或塑料,振动强烈
- **适用**: 翘嘴、鲈鱼、鳜鱼、海鲈
- **操作**: 匀速收线、跳底
- **特点**: 全层搜索,手感强
- **缺点**: 容易挂底
#### 铁板 (Metal Jig)
- **外形**: 金属板状,重心偏移
- **适用**: 海鲈、石斑、黄鱼
- **操作**: 跳底、快抽
- **场景**: 海钓、深水
#### 小胖 (Crankbait)
- **外形**: 短胖,大舌板
- **适用**: 鲈鱼、翘嘴
- **操作**: 匀速收线
- **特点**: 扰流强,深潜型可达5m+
#### 摇摆 (Swimbait)
- **外形**: 模仿游动的鱼
- **适用**: 鲈鱼、鳜鱼
- **操作**: 慢速收线
- **特点**: 大鱼杀手
---
### 软饵 (Soft Baits)
#### T尾软虫 (T-tail Grub)
- **外形**: T形尾巴
- **适用**: 鲈鱼、鳜鱼、黑鱼
- **操作**: 跳底、匀速收线
- **搭配**: 铅头钩、德州钓组
#### 卷尾蛆 (Curly Tail Grub)
- **外形**: 卷曲尾巴
- **适用**: 鲈鱼、鳜鱼
- **操作**: 跳底
- **特点**: 颜色选择多
#### 面条虫 (Stick Bait)
- **外形**: 细长软虫
- **适用**: 鲈鱼、鳜鱼
- **操作**: Wacky钓法、德州钓组
- **特点**: 自然下落,口好
#### 雷蛙 (Frog)
- **外形**: 模仿青蛙
- **适用**: 黑鱼
- **操作**: 草区水面慢拖
- **场景**: 草洞、荷叶间
#### 虾型 (Shrimp/Craw)
- **外形**: 模仿虾/蟹
- **适用**: 鳜鱼、鲈鱼、海鱼
- **操作**: 跳底、慢拖
- **特点**: 底层鱼杀手
#### 亮片软虫 (Creature Bait)
- **外形**: 多足异形
- **适用**: 鲈鱼、鳜鱼
- **操作**: 跳底
- **特点**: 扰流强
---
## 钓组搭配
### 德州钓组 (Texas Rig)
- 钩子穿过软虫,钩尖埋入
- 防挂底,适合结构区
- 搭配子弹铅
### 倒钓组 (Drop Shot)
- 钩在主线上,铅在下
- 保持饵离底,适合轻口
- 精细作钓
### 铅头钩钓组 (Jig Head)
- 简单直接,入门首选
- 钩头重量决定下落速度
- 搭配T尾、卷尾蛆
### Wacky钓组
- 钩子穿过软虫中间
- 自然飘落,诱惑力强
- 鲈鱼特效
---
## 颜色选择
### 清水
- 自然色: 银色、透明、浅色
- 模仿当地饵鱼
### 浑水
- 鲜艳色: 橙色、黄色、红色
- 亮片增加反光
### 阴天/早晚
- 深色、荧光色
- 水面系效果好
### 晴天中午
- 自然色、银色
- 深水用深色
---
## 尺寸选择
| 目标鱼 | 推荐尺寸 |
|--------|----------|
| 小型翘嘴 | 5-7cm |
| 大翘嘴 | 7-12cm |
| 鲈鱼 | 7-10cm |
| 鳜鱼 | 7-12cm 软饵 |
| 黑鱼 | 10-15cm 雷蛙 |
| 海鲈 | 10-15cm |
**原则**: 活性高用大饵,活性低用小饵
FILE:references/species.md
# 常见路亚目标鱼种
## 淡水鱼
### 翘嘴 (Culter)
- **分布**: 全国各地水库、湖泊、江河
- **习性**: 中上层,喜流水,早晚活跃
- **路亚季**: 春季3-5月、秋季9-11月
- **推荐饵**: 米诺、VIB、铅笔、波趴
- **技巧**:
- 早晚用水面系
- 白天深水用VIB
- 活性高时快抽
- **最佳时段**: 早晚窗口期、阴天全天
### 鲈鱼 (Bass/大口黑鲈)
- **分布**: 南方水库、池塘
- **习性**: 结构性,喜欢障碍物
- **路亚季**: 全年,春季最佳
- **推荐饵**: 软虫、米诺、小胖、摇摆
- **技巧**:
- 找结构: 桥墩、倒树、石堆
- 跳底为主
- 轻口用倒钓组
- **最佳时段**: 清晨、傍晚
### 鳜鱼 (Mandarin Fish)
- **分布**: 全国江河、水库
- **习性**: 底层, ambush predator
- **路亚季**: 春季、秋季
- **推荐饵**: 软虫、VIB、米诺
- **技巧**:
- 底层慢拖
- 找石头缝隙
- 轻口要耐心
- **最佳时段**: 早晚、阴天
### 黑鱼 (Snakehead)
- **分布**: 南方池塘、草湖
- **习性**: 草区、水面换气
- **路亚季**: 夏季
- **推荐饵**: 雷蛙、波趴
- **技巧**:
- 草洞、荷叶间
- 慢拖水面系
- 炸水后等2秒再刺鱼
- **最佳时段**: 上午
### 鳡鱼 (Barbel Chub)
- **分布**: 长江流域大型水库
- **习性**: 追击型,速度快
- **路亚季**: 夏季
- **推荐饵**: 大米诺、铁板
- **技巧**:
- 快抽
- 大饵大鱼
- 需要船只作钓
- **最佳时段**: 清晨
### 白条 (Minnow)
- **分布**: 全国小型水体
- **习性**: 上层群游
- **路亚季**: 夏季
- **推荐饵**: 微物米诺、瓜子亮片
- **技巧**:
- 微物装备
- 快速搜索
- **最佳时段**: 早晚
---
## 咸水鱼
### 海鲈 (Sea Bass)
- **分布**: 沿海、河口
- **习性**: 追击型,喜流水
- **路亚季**: 全年,春秋最佳
- **推荐饵**: 米诺、VIB、铁板
- **技巧**:
- 看潮水
- 流水区效果好
- 早晚窗口
- **最佳潮汐**: 活汛、涨潮
### 石斑 (Grouper)
- **分布**: 南海礁石区
- **习性**: 底层,结构鱼
- **路亚季**: 全年
- **推荐饵**: 铁板、软虫
- **技巧**:
- 重铅铁板
- 礁石区跳底
- 防挂底钓组
- **最佳潮汐**: 大潮活汛
### 黄鱼 (Yellow Croaker)
- **分布**: 沿海沙底
- **习性**: 底层
- **路亚季**: 春季、秋季
- **推荐饵**: 小铁板、软虫
- **技巧**:
- 慢速跳底
- 沙底区域
- **最佳潮汐**: 涨潮
### 真鲷 (Red Snapper)
- **分布**: 南海深水礁
- **习性**: 底层
- **路亚季**: 冬季
- **推荐饵**: 铁板
- **技巧**:
- 深水重铁板
- 慢速跳底
- **装备**: 船钓重装备
---
## 鱼种识别要点
| 鱼种 | 嘴型 | 体态 | 特点 |
|------|------|------|------|
| 翘嘴 | 上翘 | 侧扁 | 嘴明显上翘 |
| 鲈鱼 | 大嘴 | 纺锤 | 嘴大过眼 |
| 鳜鱼 | 大嘴带齿 | 纺锤 | 有花纹 |
| 黑鱼 | 蛇头 | 圆筒 | 像蛇头 |
| 海鲈 | 嘴大 | 纺锤 | 银白色 |
---
## 季节规律
### 春季 (3-5月)
- 鱼开始活跃,开口觅食
- 产卵期前后效果好
- 浅水区升温快
### 夏季 (6-8月)
- 早晚最佳,中午休眠
- 草鱼、黑鱼旺季
- 注意防晒
### 秋季 (9-11月)
- 育肥期,开口猛
- 翘嘴、鲈鱼黄金季
- 天气稳定时好
### 冬季 (12-2月)
- 鱼活性低
- 深水慢拖
- 南方海钓好季节
FILE:scripts/log_catch.py
#!/usr/bin/env python3
"""
渔获记录脚本 - 记录路亚钓鱼成果
用法:
python log_catch.py --species 翘嘴 --length 45 --weight 1.2 --lure "米诺 7cm" --location 千岛湖
python log_catch.py --interactive # 交互式录入
"""
import json
import argparse
from datetime import datetime
from pathlib import Path
import subprocess
DATA_DIR = Path.home() / "lurefish"
CATCHES_FILE = DATA_DIR / "catches.json"
def ensure_data_dir():
"""确保数据目录存在"""
DATA_DIR.mkdir(parents=True, exist_ok=True)
if not CATCHES_FILE.exists():
CATCHES_FILE.write_text("[]", encoding="utf-8")
def load_catches():
"""加载所有渔获记录"""
ensure_data_dir()
return json.loads(CATCHES_FILE.read_text(encoding="utf-8"))
def save_catches(catches):
"""保存渔获记录"""
CATCHES_FILE.write_text(json.dumps(catches, ensure_ascii=False, indent=2), encoding="utf-8")
def get_weather():
"""尝试获取当前天气"""
try:
result = subprocess.run(
["curl", "-s", "wttr.in/?format=%t+%w+%p"],
capture_output=True, text=True, timeout=5
)
return result.stdout.strip() if result.stdout.strip() else "未知"
except:
return "未知"
def log_catch(species, length=None, weight=None, lure=None, location=None,
technique=None, weather=None, notes=None, date=None):
"""记录一条渔获"""
catches = load_catches()
catch = {
"id": len(catches) + 1,
"date": date or datetime.now().strftime("%Y-%m-%d"),
"time": datetime.now().strftime("%H:%M"),
"species": species,
"length": length,
"weight": weight,
"lure": lure,
"location": location,
"technique": technique,
"weather": weather or get_weather(),
"notes": notes
}
catches.append(catch)
save_catches(catches)
print(f"✅ 已记录 #{catch['id']}: {species}")
if length:
print(f" 长度: {length}cm")
if weight:
print(f" 重量: {weight}kg")
if lure:
print(f" 用饵: {lure}")
if location:
print(f" 钓点: {location}")
return catch
def interactive_input():
"""交互式录入"""
print("🎣 渔获记录 (直接回车跳过)\n")
species = input("鱼种: ").strip() or None
if not species:
print("❌ 鱼种必填")
return
length = input("长度(cm): ").strip()
length = float(length) if length else None
weight = input("重量(kg): ").strip()
weight = float(weight) if weight else None
lure = input("用饵: ").strip() or None
location = input("钓点: ").strip() or None
technique = input("手法: ").strip() or None
notes = input("备注: ").strip() or None
log_catch(species, length, weight, lure, location, technique, notes=notes)
def main():
parser = argparse.ArgumentParser(description="渔获记录")
parser.add_argument("--species", help="鱼种")
parser.add_argument("--length", type=float, help="长度(cm)")
parser.add_argument("--weight", type=float, help="重量(kg)")
parser.add_argument("--lure", help="用饵")
parser.add_argument("--location", help="钓点")
parser.add_argument("--technique", help="手法")
parser.add_argument("--weather", help="天气")
parser.add_argument("--notes", help="备注")
parser.add_argument("--date", help="日期 (YYYY-MM-DD)")
parser.add_argument("--interactive", "-i", action="store_true", help="交互式录入")
parser.add_argument("--list", "-l", action="store_true", help="查看最近记录")
args = parser.parse_args()
if args.list:
catches = load_catches()
print(f"📝 共 {len(catches)} 条记录\n")
for c in catches[-10:]:
print(f"#{c['id']} {c['date']} {c['species']} {c.get('length', '')}cm {c.get('location', '')}")
return
if args.interactive:
interactive_input()
return
if args.species:
log_catch(
species=args.species,
length=args.length,
weight=args.weight,
lure=args.lure,
location=args.location,
technique=args.technique,
weather=args.weather,
notes=args.notes,
date=args.date
)
else:
parser.print_help()
if __name__ == "__main__":
main()
FILE:scripts/stats.py
#!/usr/bin/env python3
"""
渔获统计脚本 - 分析钓鱼数据
用法:
python stats.py # 完整统计
python stats.py --month 3 # 指定月份
python stats.py --top 5 # TOP 5 钓点/饵
"""
import json
import argparse
from datetime import datetime
from pathlib import Path
from collections import Counter
DATA_DIR = Path.home() / "lurefish"
CATCHES_FILE = DATA_DIR / "catches.json"
def load_catches():
"""加载渔获记录"""
if not CATCHES_FILE.exists():
return []
return json.loads(CATCHES_FILE.read_text(encoding="utf-8"))
def stats_summary(catches, top_n=5):
"""生成统计摘要"""
if not catches:
print("📭 暂无渔获记录")
return
total = len(catches)
total_weight = sum(c.get("weight", 0) or 0 for c in catches)
total_length = sum(c.get("length", 0) or 0 for c in catches)
# 鱼种统计
species_count = Counter(c["species"] for c in catches if c.get("species"))
# 用饵统计
lure_count = Counter(c.get("lure") for c in catches if c.get("lure"))
# 钓点统计
location_count = Counter(c.get("location") for c in catches if c.get("location"))
# 时段统计
hour_count = Counter()
for c in catches:
if c.get("time"):
try:
hour = int(c["time"].split(":")[0])
hour_count[hour] += 1
except:
pass
# 日期统计
date_count = Counter(c["date"] for c in catches if c.get("date"))
print("🎣 渔获统计")
print("=" * 40)
print(f"📊 总渔获: {total} 条")
print(f"⚖️ 总重量: {total_weight:.2f} kg")
print(f"📏 总长度: {total_length:.0f} cm")
print(f"📅 出钓天数: {len(date_count)} 天")
print()
print(f"🐟 鱼种 TOP {top_n}:")
for species, count in species_count.most_common(top_n):
pct = count / total * 100
print(f" {species}: {count} 条 ({pct:.1f}%)")
print()
print(f"🎣 用饵 TOP {top_n}:")
for lure, count in lure_count.most_common(top_n):
pct = count / total * 100
print(f" {lure}: {count} 条 ({pct:.1f}%)")
print()
print(f"📍 钓点 TOP {top_n}:")
for loc, count in location_count.most_common(top_n):
pct = count / total * 100
print(f" {loc}: {count} 条 ({pct:.1f}%)")
if hour_count:
print()
print("⏰ 高产时段:")
for hour, count in hour_count.most_common(5):
print(f" {hour:02d}:00-{hour+1:02d}:00: {count} 条")
def stats_by_month(catches, month):
"""按月份统计"""
month_str = f"-{month:02d}-"
month_catches = [c for c in catches if month_str in c.get("date", "")]
print(f"📅 {month} 月统计\n")
stats_summary(month_catches)
def main():
parser = argparse.ArgumentParser(description="渔获统计")
parser.add_argument("--month", "-m", type=int, help="指定月份 (1-12)")
parser.add_argument("--top", "-t", type=int, default=5, help="TOP N")
parser.add_argument("--year", "-y", type=int, help="指定年份")
parser.add_argument("--export", "-e", help="导出报告到文件")
args = parser.parse_args()
catches = load_catches()
if args.year:
year_str = str(args.year)
catches = [c for c in catches if c.get("date", "").startswith(year_str)]
if args.month:
stats_by_month(catches, args.month)
else:
stats_summary(catches, args.top)
if __name__ == "__main__":
main()