🥧 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
水果池结构:
{
"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. 脚本自动收集
python3 skills/fruit-pi/fruit-pi.py
脚本依次尝试每个水果的配置来源URL:
- 成功提取价格 → 输出结构化价格
- 失败 → 输出 search_hints(建议在哪个平台搜索)
2b. 手动触发收集
python3 skills/fruit-pi/fruit-pi.py --collect "金枕头榴莲"
2c. 搜索补充(脚本无法获取时)
当脚本返回 status: "no_price" 或脚本无法运行时,使用 web_search 手动搜索价格。
价格新鲜度规则(按顺序执行):
- 先尝试当前配置的平台 —— 用脚本或用 fetch 从当前 sources 拉取价格
- 检查拉取结果的新鲜度:
- 若成功获取 48小时以内的价格 → 直接使用,更新
last_price+last_updated - 若获取失败,或获取到的价格标记已 超过48小时 → 按后面流程搜索新平台
- 若成功获取 48小时以内的价格 → 直接使用,更新
- 搜索新平台:用 search_hints 或搜索策略搜索 → 成功则更新水果池(含 sources),失败则保持当前状态,不强行填数
搜索策略(按优先级):
- 国内水果:
<水果名> 批发价 今日 <年> - 泰国水果:
<fruit_en> wholesale price Thailand <month> <year> - 进口水果:
<fruit_en> import price China <month> <year> - 东南亚水果:
<fruit_en> price <country> market <month> <year>
推荐平台(按地区):
| 地区 | 平台 |
|---|---|
| 中国 | 惠农网(www.cnhnb.com), 一亩田(www.ymt.com), 广州江南市场, 北京新发地 |
| 泰国 | Talad Thai, 泰国农业部, Tridge |
| 越南 | 越南海关, 边贸市场 |
| 全球 | FAO, Trading Economics, Selina Wamucii |
2d. 价格提取与归化
从搜索结果提取价格后,统一处理:
- 单位归化:斤→×2=kg, 磅(lb)→×2.2046=kg
- 货币转换:外币→RMB(使用脚本汇率工具或按市场汇率,在回复中注明汇率来源)
- 保留原始价:同时显示外币原价 + 换算后 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. 工作流程(用户触发时)
第一步:检查水果池
python3 skills/fruit-pi/fruit-pi.py --status
- 无
fruit-pool.json→ 自动创建 - 池为空 → 提示添加水果
第二步:价格采集
python3 skills/fruit-pi/fruit-pi.py
收集结果分三类:
- ✅ 有价格 → 直接使用
- ❌ 无价格但有 search_hints → web_search 补采
- ❌ 无价格无 hint → 按「搜索策略」手动搜索
第三步:搜索补采(针对获取不到或过期的数据) 对脚本获取失败、或获取到的价格已超48小时的水果,执行 web_search:
- 用 search_hints 或搜索策略生成查询
- 从搜索结果提取价格
- 单位归化 + 货币换算
- 成功 → 更新水果池的 last_price / sources
- 失败 → 保持当前状态,不强行填数
第四步:格式化输出 按「输出格式」组织所有水果价格。
7. 异常处理
- URL失效爬不下 → 搜索新来源,提示用户添加
- 汇率API超时 → 使用脚本内建默认汇率,标注为估算
- 所有来源都无法获取 → 显示「暂无数据」,给出搜索建议
8. 输出约束
- 严禁输出思考过程、中间步骤、调试信息
- 不要输出脚本运行的JSON原始数据
- 只推送最终整理后的内容
- 价格统一用 ¥/kg 格式
- 外币始终保留原价标注