Skill: kobenfang/fruit-pi (version 1.1.1)

--- name: fruit-pi description: 全球水果价格收集与查询。管理水果池，自动采集榴莲/荔枝/樱桃等水果每日批发价，支持国内外报价，RMB/公斤换算。Fruit price tracker for global fruits, wholesale market data, agricultural commodity prices. tags: - fruit-price - 水果价格 - 农产品行情 - 批发价 - 榴莲价格 - 全球果价 - 每日报价 - Data & APIs triggers: - fruit pi - Fruit Pi - 水果派 - 水果价格 - 全球水果价格 - 果价 - 水果池 - 看看水果池 --- # 🥧 Fruit Pi · 水果派 全球水果价格收集助手。管理您的水果池，定时收集价格，按 RMB/公斤 展示。 ## 时区规则 读取 `USER.md` 中的 `Timezone:` 字段。若无配置则用 `date +%Z` 回退。 ## 行为规则 **触发即执行**：用户说出任意触发词，按不同规则执行： **区分两种触发模式：** - 🍎 **价格模式**：`水果派 / 水果价格 / 全球水果价格 / 果价 / fruit pi` → 执行完整收集流程：读池→拉价格→搜补→展示 - 📋 **列表模式**：`水果池 / 看看水果池` → **只列出水果池中的水果，不搜索不收集** **主动感知与初始化**：首次触发或无水果池时，自动创建水果池文件并以默认水果启动跟踪。若水果池为空则主动提示添加水果。 ## 文件索引 ### 运行时（`workspace/memory/`） - `fruit-pool.json` - 水果池（用户区，不上传） ### 脚本 - `skills/fruit-pi/fruit-pi.py` - 核心收集器 ## 核心流程 ### 1. 水果池管理 水果池文件：`workspace/memory/fruit-pool.json` **水果池结构：** ```json { "fruits": { "金枕头榴莲": { "en_name": "Monthong Durian", "sources": [ {"name": "惠农网", "url": "https://...", "currency": "CNY"}, {"name": "泰国市场", "url": "https://...", "currency": "THB"} ], "last_price": {"price_rmb": 89.5, "original_price": 450, "original_currency": "THB"}, "last_updated": "2026-05-11" } }, "seasonal_fruits": [ {"name": "荔枝", "season": "5-7月", "en_name": "Lychee"}, {"name": "樱桃", "season": "5-7月", "en_name": "Cherry"} ], "metadata": { "version": 1, "last_collected": null } } ``` **管理操作（通过自然语言）：** - 「把榴莲加入水果池」 → `--add "榴莲" --en "Durian"` - 「给榴莲加个新的价格来源」 → 询问URL后 `--add-source` - 「把荔枝移出水果池」 → `--remove "荔枝"` - 「看看水果池」 → `--list` ### 2. 价格收集流程 #### 2a. 脚本自动收集 ```bash python3 skills/fruit-pi/fruit-pi.py ``` 脚本依次尝试每个水果的配置来源URL： - 成功提取价格 → 输出结构化价格 - 失败 → 输出 search_hints（建议在哪个平台搜索） #### 2b. 手动触发收集 ```bash python3 skills/fruit-pi/fruit-pi.py --collect "金枕头榴莲" ``` #### 2c. 搜索补充（脚本无法获取时） 当脚本返回 `status: "no_price"` 或脚本无法运行时，使用 web_search 手动搜索价格。 **价格新鲜度规则（按顺序执行）：** 1. **先尝试当前配置的平台** —— 用脚本或用 fetch 从当前 sources 拉取价格 2. **检查拉取结果的新鲜度**： - 若成功获取 **48小时以内**的价格 → 直接使用，更新 `last_price` + `last_updated` - 若获取失败，或获取到的价格标记已 **超过48小时** → 按后面流程搜索新平台 3. **搜索新平台**：用 search_hints 或搜索策略搜索 → 成功则更新水果池（含 sources），失败则保持当前状态，不强行填数 **搜索策略（按优先级）：** 1. 国内水果：`<水果名> 批发价 今日 <年>` 2. 泰国水果：`<fruit_en> wholesale price Thailand <month> <year>` 3. 进口水果：`<fruit_en> import price China <month> <year>` 4. 东南亚水果：`<fruit_en> price <country> market <month> <year>` **推荐平台（按地区）：** | 地区 | 平台 | |------|------| | 中国 | 惠农网(www.cnhnb.com), 一亩田(www.ymt.com), 广州江南市场, 北京新发地 | | 泰国 | Talad Thai, 泰国农业部, Tridge | | 越南 | 越南海关, 边贸市场 | | 全球 | FAO, Trading Economics, Selina Wamucii | #### 2d. 价格提取与归化 从搜索结果提取价格后，统一处理： 1. **单位归化**：斤→×2=kg, 磅(lb)→×2.2046=kg 2. **货币转换**：外币→RMB（使用脚本汇率工具或按市场汇率，在回复中注明汇率来源） 3. **保留原始价**：同时显示外币原价 + 换算后 RMB/公斤 ### 3. 输出格式 ``` 🥧 Fruit Pi · 水果派 · <日期> ━━━ 🍎 水果池 ━━━ <报价来源1> ← 来源平台 🥇 金枕头榴莲 · ¥89.5/kg 泰国 ฿450/kg（≈¥89.5，汇率฿1=¥0.20） 🥇 山竹 · ¥45.2/kg ... <报价来源2> ← 其他来源 🥇 阿克苏苹果 · ¥12.8/kg ... ━━━ 🌟 当季推荐 ━━━ 🔥 荔枝（5-7月） | 樱桃（5-7月） | 杨梅（5-6月） 不在水果池中，可回复"加入荔枝"开始跟踪 ━━━ 📖 什么是水果池？━━━ 水果池是你关注的水果清单。把想跟踪价格的水果加入池中， 我会每天收集最新价格。 用法： "把榴莲加入水果池" → 开始跟踪 "看看水果池" → 查看当前池中水果 "刷新水果池" → 手动更新一次价格 💬 回复"水果派"查看最新价格 ``` ### 4. 消息格式要求 - 使用 `━━━` 分隔段落 - 报价来源用小标题 `← 来源平台` - 每个水果一行：`🥇 名称 · RMB价格/kg` + 外币原价 - 价格来源标注清晰 - 末尾附水果池用法提示 ### 5. 用户交互 | 用户说 | 动作 | |--------|------| | 「水果派/水果价格/果价」 | 完整收集：拉价格+搜索补采+展示 | | 「水果池/看看水果池」 | **只列出水果清单，不收集价格** | | 「加入<水果名>」 | `--add "<fruit>"` | | 「移除<水果名>」 | `--remove "<fruit>"` | | 「看看水果池」 | `--list` | | 「刷新水果池」 | 执行完整收集流程 | | 「刷新<水果名>」 | `--collect "<fruit>"` | | 「<水果名>什么价」 | 尝试收集该水果价格 | | 「推荐水果」 | 当季推荐 | ### 6. 工作流程（用户触发时） **第一步：检查水果池** ```bash python3 skills/fruit-pi/fruit-pi.py --status ``` - 无 `fruit-pool.json` → 自动创建 - 池为空 → 提示添加水果 **第二步：价格采集** ```bash python3 skills/fruit-pi/fruit-pi.py ``` 收集结果分三类： - ✅ 有价格 → 直接使用 - ❌ 无价格但有 search_hints → web_search 补采 - ❌ 无价格无 hint → 按「搜索策略」手动搜索 **第三步：搜索补采（针对获取不到或过期的数据）** 对脚本获取失败、或获取到的价格已超48小时的水果，执行 web_search： 1. 用 search_hints 或搜索策略生成查询 2. 从搜索结果提取价格 3. 单位归化 + 货币换算 4. 成功 → 更新水果池的 last_price / sources 5. 失败 → 保持当前状态，不强行填数 **第四步：格式化输出** 按「输出格式」组织所有水果价格。 ### 7. 异常处理 - URL失效爬不下 → 搜索新来源，提示用户添加 - 汇率API超时 → 使用脚本内建默认汇率，标注为估算 - 所有来源都无法获取 → 显示「暂无数据」，给出搜索建议 ### 8. 输出约束 - **严禁输出思考过程、中间步骤、调试信息** - 不要输出脚本运行的JSON原始数据 - 只推送最终整理后的内容 - 价格统一用 ¥/kg 格式 - 外币始终保留原价标注


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)