back
loading skill details...
全球水果价格收集与查询。管理水果池,自动采集榴莲/荔枝/樱桃等水果每日批发价,支持国内外报价,RMB/公斤换算。Fruit price tracker for global fruits, wholesale market data, agricultural commodity prices.
---
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 格式
- 外币始终保留原价标注
don't have the plugin yet? install it then click "run inline in claude" again.