Install
openclaw skills install price-check搜索国内主流电商平台(淘宝/天猫、京东、拼多多、苏宁、唯品会、考拉、抖音、快手、1688)的实时价格,自动找到最合适的可信购买点并给出'值不值得买'建议 + 直接可点击的购买链接;本地积累历史价数据,能识别当前价是历史低位还是高位。Keywords: 比价, 值不值得买, 哪里买最便宜, 历史价, 价格监控, X 现在合适入手吗, X 多少钱合适, 哪个平台最便宜, 套路价, 购买链接, 淘口令, price compare
openclaw skills install price-check第一步永远是把 human_report 字段原样发给用户。
JSON 里 _meta.agent_must_render 字段也重复了同一条规则。
CLI 用法(绕过 LLM 直出 markdown):uv run bin/price_check.py "X" --report
uv run bin/price_check.py "X" 就能跑,所有功能(横向比价 / verdict / 购买链接 / 本地 SQLite 历史价积累)开箱即得~/.openclaw/data/price-check/ 是 skill 自己的数据目录,零依赖(仅用 Python stdlib sqlite3),跨平台无障碍lark-cli / 不会因此报错。详见后面"飞书多维表格同步"章节metadata.openclaw.requires.bins 没声明它config.example.json(位于 skill 根目录)三件事,对应你日常买东西的三个真实需求:
可选叠加:把每次查询自动同步到飞书多维表格,方便手机/电脑跨设备刷历史 + 标记"已购"。
比价、值不值得买、哪里买最便宜、历史价、X 现在合适入手吗、X 多少钱合适、哪个平台最便宜、套路价、是不是先涨后降、当前价合理吗、给我购买链接、价格监控、price compare
| 升级 | 用户感知 |
|---|---|
| C 模式 | 报告固定 6 段:⚠️ 警告 → 🏆 best_deal+链接 → 📊 Top 3 表 → 📈 历史价 → 🤖 我的建议 → ⚠️ 透明度。即使建议不买也完整展示,防止 agent 为简洁砍数据 |
| 顶部警告区 | SKU 不匹配 / 无可信候选时,必须在标题正下方用 ⚠️ 块前置。防止用户被 best_deal 假象误推 |
| "我的建议"段独立 | Molty 综合判断单独成段("工具 verdict X,但因 SKU 不匹配实际不建议"),跟 verdict 字段语义分离 |
| 升级 | 用户感知 |
|---|---|
| F. LocalDBHistoryProvider | 用本地 SQLite price_snapshots 当历史价数据源(不依赖外部慢慢买)。同 query 跑 ≥3 次后,verdict 会引用"该商品历史 X-Y 元,当前处于历史低位/中位/高位" |
| G. verdict 升降档 | 当前价处于历史低位 + 比市场中位低 5-15% → 升档为"强烈推荐"(原本是"可以买");trap 命中(先涨后降)→ "别买" |
| H. 商品稳定指纹 | shopmind goodsId 含 session token(每次返回都不同),改用 (shop + title 前 30 字符) 作为商品稳定指纹,跨次匹配同一商品的历史价 |
| I. 飞书表加历史字段 | (首次跑 setup_feishu.py 一次性建 31 个字段,含历史段:历史样本数 / 历史最低 / 历史最高 / 历史均价 / 当前位置 / 市场30日中位 / 当前/市场比) |
| 升级 | 用户感知 |
|---|---|
| A. best_deal 自动拉购买链接 | 不再追问"哪里买",淘宝/天猫给淘口令、京东给短链 URL |
| B. Top 3 候选也自动拉链接 | 飞书消息里就能多平台对比 + 直接点击下单 |
| C. 导购优先排版 | 报告顶部不再是 verdict,而是"最划算 ¥X + 链接"和"Top 3 价格速览表";verdict 退居中部作为决策建议 |
| D. SQLite 本地持久化 | 每次查询写库,30min 缓存复用;本地积累历史价快照 |
| E. 飞书多维表格同步(opt-in) | 启用后查询历史进飞书表,手机/PC 飞书 App 直接刷历史 + 点击购买链接 |
| 功能 | v0.2 已实现 | v0.3 计划 |
|---|---|---|
| 全网横向比价(≈ 22-60 平台) | ✅ | ✅ |
| 价格分布底部 outlier 剔除(去配件/噪音) | ✅(price < raw_median × 0.3 自动剔除) | ✅(叠加历史价交叉验证) |
| condition 识别 7 档(accessory / bundle / refurbished / activation_questionable / parallel_import / trusted_domestic / unknown) | ✅(title 关键词词典) | ✅(叠加店铺评分) |
| trusted_shop 识别(自营/旗舰店) | ✅(shopName 字面量 + 正则) | ✅(叠加京东开放平台 vender_type 字段,运营商京东自营单独一档) |
| 标题相关性 / SKU 精确匹配("16 Pro 256G" vs "17 Pro 256G") | ✅(token 命中率 ≥ 0.75 + 多型号堆砌检测) | ✅(叠加 fuzzy match + 同义词 / 大小写 / 容量等价) |
| best_deal 选择按可信度 × 相关性 优先级 | ✅(先过 condition + relevance,再三档优先级) | ✅(叠加历史价档"别买") |
| 当前价 verdict(强烈推荐/可以买/再等等/数据质量不足/数据噪音过多/无数据) | ✅(基于 best_deal 价 vs 中位数 + relevance 标注) | ✅(叠加历史价精度更高 + "别买"档) |
| trap_warning 透明化(剔除 + flagged + low_relevance + 低价非可信候选提示) | ✅ | ✅(叠加"先涨后降"识别) |
| 历史价 history_summary | ❌(输出为 null) | ✅(HistoryProvider plugin 接入慢慢买自爬) |
| 详情页 URL(购买链接) | ❌(best_deal.url=null) | ✅(按需调 shopmind detail) |
注意:
history_summary与"先涨后降"两类信号在 v0.2 仍为null,下游不要假设它们存在。bin/price_check.py已留HistoryProvider抽象接口,v0.3 接入慢慢买/什么值得买/京东价保后只换 provider 即可,不动主流程。
用户问"X 多少钱值得买" / 触发词命中
↓
price-check 调 fetch_items(query)
↓
shopmind._fetch_search_items() ← 直接 import 上游 helper,拿 to-string 之前的原始 items
↓
_normalize_item(item, query) ← 字段标准化 + 注入 condition / condition_hits /
is_trusted_shop / relevance(score, matched, missing, ambiguous)
↓
原始 items[](≈ 22-60 条,全字段已含 condition + relevance)
↓
[1] 价格层 _filter_outliers() 剔除 price < raw_median × 0.3 → removed_outliers
↓
若 clean_items < 5 → verdict = "数据噪音过多,无法判断"
↓
[2] 信任层 + [3] 相关性层(在 _select_best_deal 内一次完成)
- condition ∈ {refurbished/bundle/accessory/activation_questionable} → flagged_items
- relevance.score < 0.75 或 relevance.ambiguous=True → low_relevance_items
- 剩下进 candidates,按三档优先级选 best_deal:
1. trusted_shop AND condition ∈ {trusted_domestic, unknown}
2. trusted_shop AND condition == parallel_import
3. NOT trusted_shop AND condition == trusted_domestic
↓
若所有档都没候选 → best_deal=null → verdict = "数据质量不足,无法可信推荐"
↓
compute_verdict() ← 用 best_deal.price vs stats.median 跑阈值(含 ratio>1 时"高于中位数"路径)
compute_trap_warning() ← 4 段拼接:剔除 / flagged / low_relevance / 低价非可信透明化
HistoryProvider.get_history() ← v0.2 = NoOp,永远 null(v0.3 swap-in 点)
↓
JSON 输出(agent 用)+ references/report-template.md(agent 拿去做最终回复)
uv run bin/price_check.py "iPhone 16 Pro 256G"
uv run bin/price_check.py "戴森 V12" --source 2 # 限制单平台(2=京东)
uv run bin/price_check.py "Switch 2" --page 2
uv run bin/price_check.py "AirPods Pro 3" --no-cache # 忽略 30min 缓存,强制重打
stdout 是单个 JSON 对象(含 best_deal.buy_url + Top 候选 buy_url)。agent 拿到 JSON 后照 references/report-template.md 渲染导购优先人类回复。
不想用飞书的人请直接跳过这一节。skill 默认
feishu_sync.enabled = false,不会触碰飞书 / 不会调 lark-cli / 不会因此报错。完全 0 痕迹。
启用后,每次查询的 best_deal + Top 3 + verdict + 历史价 自动同步到飞书多维表格,方便在手机/PC 飞书 App 直接刷历史 + 点击购买链接。
启用步骤:
装好 lark-cli(OPT-IN 依赖,未启用飞书的人不用装)
创建飞书多维表格 —— 在飞书云空间里新建一个空多维表格(推荐命名 "价格监控"),位置随意
授权要用的 bot 应用 —— 表格右上"协作" → 添加飞书 Bot 为可编辑(哪个应用看你 lark-cli 的默认 profile,OpenClaw 默认 Molty)
跑配置脚本(一次性):
uv run bin/setup_feishu.py 'https://your-tenant.feishu.cn/base/<BASE_TOKEN>...?...'
脚本会一次性自动建 31 个字段:查询词 / Verdict / Verdict依据 / best_deal 价格/平台/店铺/标题/链接/口令 / Top2链接 / Top3链接 / 匹配度 / Condition / 中位数 / 最低价 / 最高价 / 原始条数 / 剔除数 / 过滤数 / 不匹配数 / Trap提示 / 历史样本数 / 历史最低 / 历史最高 / 历史均价 / 当前位置 / 市场30日中位 / 当前/市场比 / 标记已购。
字段建好后把 base_token / table_id / enabled=true 写到 ~/.openclaw/data/price-check/config.json。
后续每次跑 price-check 自动同步,无需手动操作
如需关闭:编辑 ~/.openclaw/data/price-check/config.json 把 feishu_sync.enabled 改成 false。
如需切换 lark-cli profile(多飞书账号场景):在 config.json 加 feishu_sync.lark_cli_profile = "<profile-name>"。
{
"product": "<原始查询>",
"verdict": "强烈推荐 | 可以买 | 再等等 | 别买 | 数据噪音过多,无法判断 | 数据质量不足,无法可信推荐 | 无数据",
"verdict_reason": "可信最低价 ¥X(平台/店铺)比 N 平台中位数 ¥Y 低 K%;匹配度 100% (M/N token),缺 [token]",
"best_deal": {
"platform": "京东",
"shopName": "Apple产品京东自营旗舰店",
"price": 5999.0,
"title": "...",
"condition": "unknown",
"is_trusted_shop": true,
"relevance": { // v0.2 新增
"score": 0.75,
"matched": ["iPhone", "Pro", "256G"],
"missing": ["16"],
"ambiguous": false
},
"goodsId": "...",
"source": "2",
"url": null
},
"history_summary": null,
"all_platforms": [ /* 原始 items,每条含 condition / condition_hits / is_trusted_shop / relevance */ ],
"removed_outliers": [ /* [1] 价格层剔除:底部噪音 */ ],
"flagged_items": [ /* [2] 信任层过滤:refurbished/bundle/accessory/activation_questionable */ ],
"low_relevance_items": [ /* [3] 相关性层过滤:score < 0.75 或 ambiguous=true (v0.2 新增) */ ],
"stats": { "count": 17, "min": 5998, "max": 13998, "median": 8999, "stdev": ... },
"stats_raw": { "count": 22, "min": 4.9, "max": 13998, "median": 8999, "stdev": ... },
"trap_warning": "⚠️ 已自动剔除 N 条… ⚠️ 已过滤 M 条… ⚠️ 已过滤 K 条标题不匹配… 💡 还有 P 条更低价候选未进 best_deal…" | null,
"_meta": {
"skill": "price-check",
"version": "0.2.0",
"history_provider": "noop",
"data_source": "shopmind-price-compare._fetch_search_items()",
"outlier_filter": "price < raw_median × 0.3",
"min_clean_samples": 5,
"relevance_threshold": 0.75,
"ambiguous_model_count": 3,
"condition_classifier": "title-keyword (v0.2)",
"trusted_shop_classifier": "shopName-pattern (v0.2)",
"suspicious_conditions": ["refurbished", "bundle", "activation_questionable", "accessory"]
}
}
完整规则详见 references/report-template.md。摘要:
removed > 0 且 clean_count < 5 → 数据噪音过多,无法判断best_deal == null(信任层 × 相关性层全部过滤完没有候选)→ 数据质量不足,无法可信推荐best_deal.price ≤ clean_median × 0.85 → 强烈推荐best_deal.price ≤ clean_median × 0.95 → 可以买best_deal.price ≤ clean_median → 再等等(仅低 K%)best_deal.price > clean_median → 再等等(高 K%,常见于"全网真品 best_deal 比含个人店/翻新的中位数贵"场景)history.trap 命中 / 当前价高于历史均价两档)设计要点:verdict 用
best_deal.price(已过 condition + relevance + trust 三层筛选)而不是stats.min。stats.min 可能是配件、翻新机、不相关 SKU;best_deal 才是"真正能买的可信全新国行/水货的最便宜款"。verdict_reason 末尾必带匹配度 X%,提醒 SKU 接近度。
v0.5 起数据层自包含在 bin/_data_layer.py,不再依赖外部 skill。该文件是 maishou88.com 公共 API 的薄客户端,HTTP endpoints / OPENID 种子 / items 构造逻辑衍生自 shopmind-price-compare v2.2.0(作者 xiaohaook)—— 完整归属信息见 _data_layer.py 顶部 + README.md → Acknowledgements。
activation_questionable;"宠物除螨仪"可能误命中 accessory(实际可能是带除螨头的吸尘器主机)。词典在 bin/price_check.py:CONDITION_RULES 可调。