计划采购物品全网比价与动态跟踪
功能概述
一个智能采购助手,帮助用户管理计划采购物品清单,自动进行全网比价和动态跟踪,按设定频率推送价格变化报告。
六大核心功能
| 功能 | 说明 | |------|------| | 物品录入 | 支持文字描述 + 图片上传两种方式 | | 全网比价 | 搜索主流电商平台(京东/淘宝/拼多多/天猫等),获取实时价格 | | 动态跟踪 | 跟踪降价、促销活动、新品发布、库存变化 | | 物品管理 | 查看清单、编辑详情、下架(归档)物品 | | 定时报告 | 按用户设定频率(每日/每周)生成价格变化报告 | | 多渠道推送 | 支持 Server酱→微信、PushPlus→微信、SMTP邮箱三种渠道 |
触发方式
用户说出以下任一关键词即触发本技能:
- "计划采购"、"采购比价"、"购物跟踪"
- "帮我比价"、"全网比价"、"价格跟踪"
- "录入采购物品"、"我要买XX"、"帮我盯着XX价格"
- "采购报告"、"比价报告"
- "下架采购物品"、"取消跟踪XX"
运行环境
- Python 3.9+
- 依赖:
requests,openpyxl
安装依赖
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\pip.exe install requests openpyxl
AI 执行流程
场景 A:用户首次使用 / 未配置
- 检测配置:读取
data/config.json,如不存在则进入配置引导 - 显示配置弹窗:用
show_widget渲染交互式配置页面,引导用户设置:- 推送频率(每日 / 每周几)
- 推送渠道(Server酱 SendKey / PushPlus Token / 邮箱 SMTP)
- 推送时间偏好
- 用户填写后点击「保存配置 ↗」,AI 写
data/config.json - 自动跳转到主面板
场景 B:用户录入采购物品
方式一:文字录入
- 用户说"我要买XXX,预算YYY元"
- AI 调用
scripts/item_manager.py add --name "XXX" --budget YYY添加物品 - AI 立即执行一次全网比价搜索(见"全网比价搜索流程")
- AI 将搜索结果写入物品的价格记录
- 回复用户:物品已录入,当前最低价 ¥XXX(平台),并展示主面板
方式二:主面板弹窗录入(推荐)
- AI 用
show_widget渲染主面板,包含「添加物品」区域 - 用户可输入物品名称、描述、预算、优先级,也可上传图片
- 如上传图片 → AI 先分析图片内容识别物品 → 自动填入物品名称和描述
- 点击「确认添加 ↗」→ AI 写入数据 → 执行比价 → 更新面板
场景 C:用户查看采购清单 / 主面板
- AI 用
show_widget渲染主面板,展示:- 在追物品列表:名称、预算、当前最低价、价格趋势箭头、状态
- 操作按钮:添加物品、生成报告、配置通知、下架物品
- 最近动态:降价提醒、促销信息
- 所有按钮绑定
sendPrompt()实现交互
场景 D:用户要求生成并发送报告
- AI 对每个在追物品执行全网比价搜索
- 调用
scripts/report_generator.py生成 HTML + Excel 报告 - 调用
scripts/notifier.py推送到用户配置的渠道 - 用
present_files展示报告文件 - 回复:报告已生成并推送
场景 E:用户要求下架物品
- AI 列出当前在追物品,让用户选择
- 或用户直接说"下架XXX"
- AI 调用
scripts/item_manager.py archive --id <ID>归档物品 - 回复:已下架
场景 F:定时自动执行(通过 WorkBuddy 自动化)
AI 引导用户创建自动化任务:
automation_update mode="create":
name: "采购物品每日比价跟踪"
scheduleType: "recurring"
rrule: "FREQ=DAILY" 或 "FREQ=WEEKLY;BYDAY=MO"
cwds: "当前工作目录"
prompt: "执行「计划采购物品全网比价与动态跟踪」技能的每日比价任务:对所有在追物品执行全网比价、记录价格、检测降幅超过5%的发送提醒、生成日报并推送到配置的渠道。"
全网比价搜索流程(AI 执行)
对于每个在追物品,AI 按以下步骤执行:
- 构造搜索词:
"{物品名称} 价格 京东 淘宝 拼多多" - 调用 WebSearch 搜索当前价格
- 提取价格信息:从搜索结果中提取各平台价格、商品链接
- 对比历史价格:与
data/items.json中的历史记录对比 - 检测显著变化:
- 降价 ≥ 5%:标记为"降价提醒"
- 降价 ≥ 10%:标记为"大幅降价"
- 出现促销/优惠券:标记为"促销动态"
- 记录:调用
scripts/item_manager.py record-price写入价格记录
数据存储
所有数据存储在技能目录下的 data/ 文件夹:
| 文件 | 用途 |
|------|------|
| data/items.json | 采购物品清单及价格历史 |
| data/config.json | 用户配置(推送渠道、频率) |
items.json 数据结构
{
"items": [
{
"id": "uuid",
"name": "物品名称",
"description": "描述",
"category": "分类",
"image_path": null,
"image_description": null,
"budget": 1000.00,
"priority": "high",
"status": "active",
"created_at": "2026-07-28T14:00:00",
"updated_at": "2026-07-28T14:00:00",
"price_records": [
{
"date": "2026-07-28",
"platform": "京东",
"price": 899.00,
"url": "https://...",
"title": "商品标题",
"note": ""
}
],
"price_alerts": [
{
"date": "2026-07-28",
"type": "price_drop",
"message": "京东降价5%,当前¥899"
}
]
}
]
}
config.json 数据结构
{
"frequency": "daily",
"weekly_day": 1,
"channels": {
"serverchan": {"enabled": false, "sendkey": ""},
"pushplus": {"enabled": false, "token": ""},
"email": {"enabled": false, "smtp_host": "", "smtp_port": 465, "sender": "", "password": "", "receivers": []}
},
"alert_threshold": 5,
"created_at": "2026-07-28T14:00:00"
}
脚本说明
| 脚本 | 用途 | 调用方式 |
|------|------|----------|
| scripts/item_manager.py | 物品 CRUD + 价格记录 | python scripts/item_manager.py <action> [args] |
| scripts/report_generator.py | 生成 HTML/Excel 报告 | python scripts/report_generator.py [--format html|xlsx] |
| scripts/notifier.py | 多渠道推送 | python scripts/notifier.py --report <path> [--channel all] |
| scripts/setup.py | 交互式配置向导 | python scripts/setup.py |
弹窗交互规范
所有弹窗使用 show_widget 渲染,遵循以下规则:
- 按钮必须加
↗箭头(触发 sendPrompt 的按钮) - 图片上传用
<input type="file" accept="image/*">+ FileReader - 弹窗间通过 sendPrompt 传递数据
- 遵循 WorkBuddy Visualizer 设计规范(加载 read_me 模块)
注意事项
- 价格数据仅供参考:来自搜索引擎结果,可能存在延迟或偏差
- 推送渠道需用户自行注册:Server酱(https://sct.ftqq.com)、PushPlus(https://www.pushplus.plus)
- 自动化执行依赖 WorkBuddy 自动化功能:需用户确认创建
- 图片识别:AI 通过视觉分析图片内容来识别物品,复杂场景建议补充文字描述
- 隐私保护:所有数据存储在本地
data/目录,不上传云端
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
本契约由 SkillHUB 平台调度层解析,脚本本地仅处理
402/验签/持久化三环节;付费本体交给支付宝。
Scan to join WeChat group