Back to skills
extension
Category: Data & AnalyticsNo API key required

泡泡抽盒机概率推测

This skill helps with blind-box (盲盒) clue images where each box lists two wrong options. Capability 1: enumerate every valid arrangement and output a per-box, per-product probability table. Capability 2: given the user's buying goal (want / avoid / priority order), compute the optimal draw order that gets the wanted styles with the fewest draws. Trigger phrases: 盲盒概率, 线索图推测, 每个盒子或格子的概率, 盲盒猜品种, 抽盒顺序, 最优抽盒, 想要A不想要B, 先买A再买B, blind box probability, optimal draw order.

personAuthor: user_b72334b3hubcommunity

盲盒概率推测 · Blind-box Clue Probability

一张盲盒线索图,每个盒子标了两个"错误选项"。本 Skill 据此穷举所有合法摆放, 算出每个品种落在每个盒子的概率;更能按你的购买目标(想要 / 避开 / 购买顺序) 给出最优抽盒顺序,用最少次数抽到想要的款式。


✨ 功能亮点

  • 概率统计表:穷举全部合法排列,输出每个品种 × 每个盒子的百分比概率(Markdown 表)。
  • 线索图识别:读图片自动识别品种、盒子编号、每盒的两个错误选项(也支持文字线索)。
  • 最优抽盒顺序:按目标自动选模式,输出期望抽中次数、平均撞坑次数、budget 成功率、首抽建议与应对表。
  • 三种目标模式(从自然语言自动解析):
    • 任一模式:想要 A 或 B → 抽到任一款即停
    • 集齐模式:想要 A 和 B → 集齐全部
    • 有序集齐:想要先 A 再 B → 按声明优先级有序集齐(购买顺序会影响期望次数
    • 叠加项:不想要 / 避开 C → 尽量避开该款式

🎯 适用场景 / 触发词

  • 发来盲盒线索图 / 排除线索,问"每个品种在哪个盒子概率最大"
  • 问"应该按什么顺序抽盒最划算 / 最快抽到想要的"
  • 触发词示例:盲盒概率、线索图推测、抽盒顺序、最优抽盒、想要 A 不想要 B、先买 A 再买 B、blind box probability、optimal draw order

📦 安装

本地安装(从 zip):

  1. 解压 blindbox-clue-probability.zip
  2. 把解压出的 blindbox-clue-probability/ 目录放到技能目录:
    • 用户级:~/.workbuddy/skills/blindbox-clue-probability/
    • 项目级:<项目>/.workbuddy/skills/blindbox-clue-probability/
  3. 在 WorkBuddy 的「技能」面板中启用即可。

引擎为纯 Python(仅用标准库 itertoolsargparsejson),无需任何第三方依赖。 Python 3.8+ 即可运行。


📂 文件结构

blindbox-clue-probability/
├── SKILL.md                    # 工作流与算法说明(Agent 读取)
├── README.md                   # 本文件
├── scripts/
│   ├── blindbox.py             # 穷举 + 概率表引擎
│   └── draw_order.py           # 最优抽盒顺序引擎(依赖 blindbox.py)
└── references/
    └── spec_format.md          # 约束规格 JSON 格式与目标参数说明

🚀 快速上手

Workflow A — 概率统计表

  1. 把线索整理成规格 JSON(见 references/spec_format.md):
{
  "products": ["雪人的抱抱","晚霞棉花糖","雨天小铠甲","大风中凌乱","高电量警告","背着太阳跑"],
  "boxes": ["1","2","3","4","5","6"],
  "exclusions": {
    "1": ["雪人的抱抱","晚霞棉花糖"],
    "2": ["晚霞棉花糖","雨天小铠甲"],
    "3": ["雨天小铠甲","大风中凌乱"],
    "4": ["高电量警告","雨天小铠甲"],
    "5": ["背着太阳跑","雨天小铠甲"],
    "6": ["雪人的抱抱","背着太阳跑"]
  },
  "fixed": {}
}
  1. 运行:
python3 scripts/blindbox.py spec.json
# 或:echo '{...}' | python3 scripts/blindbox.py

输出:合法排列总数 + 各盒可能品种 + 概率分布表(每行之和 = 100%)。

Workflow B — 最优抽盒顺序

# 自然语言目标:集齐 A 和 B,避开 C
python3 scripts/draw_order.py spec.json \
  --goal-text "我想要背着太阳跑和晚霞棉花糖,不想要雨天小铠甲"

# 结构化参数:有序集齐 + 限定 4 抽内成功率
python3 scripts/draw_order.py spec.json \
  --want 雨天小铠甲,背着太阳跑 --mode ordered --order 雨天小铠甲,背着太阳跑 --budget 4

# 单一想要、尽量避开
python3 scripts/draw_order.py spec.json \
  --goal-text "我想要背着太阳跑,不想要雨天小铠甲"

输出:模式解析、期望抽中次数、平均撞坑次数、budget 内成功率、推荐第一抽、 首抽各盒评估表、首抽应对表(自适应策略)。有序模式还会对比"顺序反过来"的期望次数。


⚙️ 命令行参数参考(draw_order.py)

| 参数 | 说明 | |------|------| | spec | 约束规格 JSON 路径,- 表示从 stdin 读 | | --goal-text | 自然语言目标,如 我想要A和B,不想要C | | --want | 逗号分隔的想要款式 | | --avoid | 逗号分隔的避开款式 | | --mode | any / collect / ordered | | --order | 逗号分隔的有序目标(mode=ordered 时用) | | --lambda | avoid 惩罚权重,默认 1.0,越大越避开 | | --budget | 最多抽几个盒子,用于统计成功率 |

款式名必须与 products 列表完全一致(引擎会告警未知款式)。


🧠 算法要点

  • 概率表:对全部 N! 排列穷举过滤(N ≤ 8 日常完全可用),统计频次得概率。
  • 任一模式 / 集齐无序:在全部合法排列上做 expectimax,每步选"期望代价最低"的未开盒; 代价 = 1(本次抽取)+ λ·I(开出 avoid)
  • 集齐有序:严格按声明优先级,每步先开"最可能有当前最高优先级剩余款式"的盒。 因此推荐首抽未必是原始期望最低盒——这正是"先买哪个"的优先级权衡。
  • 抽盒为不放回,策略是自适应的:每开一盒后根据 revealed 内容更新后验再决定下一抽。

⚠️ 边界情况

  • 穷举复杂度 O(N!)。品种数过大(N > 10 左右)会明显变慢,建议缩小规模。
  • 同一品种在同一盒既被排除又被固定会触发合法性报错。
  • 概率表每行之和 = 100%(每个品种必然落在某盒),可用此校验读图是否漏看。
  • 合法排列数 > 1 → 线索不足以唯一确定,可补充 fixed 收敛;= 0 → 线索自相矛盾。

📄 许可

技能由用户自行创建,供个人使用与分享。