一个引擎 + 一份 SKILL.md,让任意 Agent 算出可复现的世界杯预测 A real Dixon-Coles engine + one SKILL.md. Reproducible World Cup predictions for any agent.
"LLM 负责知道什么,引擎负责算出什么。" — v3 设计原则
- ✨ 核心特性
- 🎯 它解决什么问题
- 🧠 架构 · 引擎 + 四层约束
- 🚀 快速开始 · 全 Agent 安装
- 🌐 兼容环境
- 📦 输出契约
- 🇲🇽 分组与赛程
- 🔄 每日情报与评分维护
- 💡 适用场景
- 🛣️ Roadmap
- ❓ FAQ
- 🤝 Contributing
⚠️ 声明- 📜 License
- 🙏 致谢
| 特性 | 说明 |
|---|---|
| 🧮 真实计算引擎 | tools/predict.py 实现 Dixon-Coles-lite:评分差 → 期望进球 λ → 比分网格 → 低比分 τ 修正,概率可复现、可回测 |
| 🎯 零依赖 | Python 3.8+ 标准库,无第三方包、无网络调用、无 API key,装哪儿都不挂 |
| 🔀 双轨制 | 能跑代码的 agent 走引擎(轨道一);纯对话环境按内置查表回退(轨道二),两轨数值一致 |
| ⏱️ 赛中模式 | 按剩余时间缩放 λ,从当前比分向后条件化 — 比分不倒退由数学保证,红牌/主场均有乘数修正 |
| 🧱 资料锁死 | 48 队评分 + 分组 + 中英别名在 data/ratings.json,定性资料库在 SKILL.md,模型只许引用不许编造 |
| 🛂 自动校验 | tools/validate_prediction.py:概率总和=100、比分方向一致、比分不倒退、赛前 85% 封顶、违禁词拦截 |
| 📦 严格 JSON | plus_json(含引擎溯源字段)/ compat_json(兼容 v1 前端)双契约 |
| 🛡️ 内置红线 | 拒绝任何投注 / 赔率 / 下注建议,prompt 红线 + 校验器违禁词双保险 |
直接问大模型 "墨西哥对南非谁会赢?",你会得到编造的历史交锋、虚构的伤病、飘忽的格式。原版 skill 用资料库 + 权重 + JSON 契约治住了这些 —— 但还剩最后一个病灶:
❌ 概率数字本身仍是"凭感觉" — 同一场比赛问两次,可能给出两组不同的数字。无法复现、无法校准、无法回测。
v3 的答案:在四层约束底下,垫一个真正的统计引擎。
┌─────────────────────────────────────────────────────────┐
│ Layer 0 · 🧮 计算引擎 (v3 新增 · 数字的唯一来源) │
│ ratings.json → λ → Poisson 网格 → Dixon-Coles τ 修正 │
│ 赛中条件化 · 红牌乘数 · 85/95/98 封顶 · 总和恒=100 │
└────────────────────────────┬────────────────────────────┘
↓ 数值骨架(LLM 禁止改动)
┌────────────────┬─────────────────┬─────────────────────┐
│ Layer 1 │ Layer 2 │ Layer 3 │
│ 📚 资料库 │ 📐 方法论 │ 📦 输出契约 │
│ 48 队锁死 │ 定性分析规则 │ 严格 JSON + 校验器 │
└────────────────┴─────────────────┴─────────────────────┘
+
┌─────────────────────────────────────────────────────────┐
│ Layer 4 · 🔄 每日情报区(已外置 data/daily_brief.md) │
└─────────────────────────────────────────────────────────┘
用户提问 / Agent 任务
│
▼
┌──────────────────────────┐
│ 宿主 Agent (任意 LLM) │
└────────────┬─────────────┘
│ 读取 SKILL.md
┌────────────┴─────────────┐
│ 能执行代码吗? │
└──────┬───────────┬───────┘
能 ✅│ │❌ 不能
▼ ▼
┌───────────────────┐ ┌──────────────────────┐
│ 轨道一 · 引擎 │ │ 轨道二 · 查表回退 │
│ tools/predict.py │ │ 评分差 → 概率对照表 │
│ ─────────────────│ │ (由引擎离线生成, │
│ 概率·比分·晋级倾向 │ │ 保证两轨一致) │
└─────────┬─────────┘ └──────────┬───────────┘
│ 数值骨架 │
▼ ▼
┌─────────────────────────────────────────────┐
│ LLM 补全定性字段(keyFactors / analysis / │
│ playersToWatch)— 资料库 + 实时检索 │
│ 🚫 一个概率数字都不许改 │
└────────────────────┬────────────────────────┘
▼
┌─────────────────────────────────────────────┐
│ tools/validate_prediction.py 自动校验 │
│ → 严格 JSON 预测结果(前端可直接渲染) │
└─────────────────────────────────────────────┘
引擎职责:winProb / draw / predictedScore / knockout.advanceProb 等所有数字。
LLM 职责:伤停、状态、战术等定性判断;发现重大事实(核心球员伤退)时,更新 data/ratings.json 重跑引擎,而不是手改数字。
通用逻辑只有一步:把整个文件夹复制进宿主 agent 的 skills 目录。各平台目录约定不同,对号入座;找不到时搜你所用平台文档里的 "skills directory"。
mkdir -p ~/.claude/skills
cp -r worldcup2026-prediction-skill-pro ~/.claude/skills/
# 项目级安装放 <项目>/.claude/skills/重启会话后直接说:预测韩国 vs 捷克,半场 0-0。
# 以你的实际 workspace 路径为准;云端衍生版在技能管理界面上传文件夹即可
cp -r worldcup2026-prediction-skill-pro ~/openclaw-workspace/skills/推荐加一条 heartbeat 周期任务,情报维护全自动:
- 每天 09:00:如当日有世界杯比赛,检索各场首发/伤停/天气,
更新 skills/worldcup2026-prediction-skill-pro/data/daily_brief.md;
有改变实力判断的重大消息时,更新 data/ratings.json 对应评分并注明理由。# Codex
mkdir -p ~/.codex/skills/worldcup2026-prediction-pro
cp -r worldcup2026-prediction-skill-pro/* ~/.codex/skills/worldcup2026-prediction-pro/Cursor / Windsurf:文件夹放进项目,在 .cursorrules(或等价物)加一行:
预测足球比赛时,遵循 skills/worldcup2026-prediction-skill-pro/SKILL.md,
并优先执行其中的 tools/predict.py 获取概率。
无原生 skill 体系:SKILL.md 全文注入 system prompt + 授予执行 tools/predict.py 的 shell 权限。
连工具都没有:只注入 SKILL.md,模型自动走轨道二查表回退(confidence 上限"中")。
# 赛前
python tools/predict.py --teamA 韩国 --teamB 捷克 --stage 小组赛
# 赛中(半场=45)· 比分不会倒退
python tools/predict.py --teamA 韩国 --teamB 捷克 --minute 45 --score 0-0
# 淘汰赛 + 红牌 + 校验管道
python tools/predict.py --teamA 英格兰 --teamB 克罗地亚 --stage 16强 \
--minute 60 --score 1-1 --red-card B | python tools/validate_prediction.py -| 宿主环境 | 执行代码 | 轨道 | 体验 |
|---|---|---|---|
| Claude Code / Claude Cowork | ✅ | 引擎 | ⭐⭐⭐⭐⭐ |
| OpenClaw 小龙虾🦞 及衍生(StepClaw / WorkBuddy) | ✅ | 引擎 + heartbeat 自动情报 | ⭐⭐⭐⭐⭐ |
| Codex / Cursor / Windsurf / Gemini CLI | ✅ | 引擎 | ⭐⭐⭐⭐ |
| Claude.ai 网页(开启代码执行) | ✅ | 引擎 | ⭐⭐⭐⭐ |
| 任意 OpenAI 兼容 API(注入 system prompt) | ❌ | 查表回退 | ⭐⭐⭐ |
唯一硬依赖:Python 3.8+,仅标准库。引擎完全离线;实时情报检索依赖宿主 agent 自身的搜索能力。
默认输出 plus_json(含引擎溯源),需要对接旧前端时注明 compat_json 只输出 v1 七字段。
{
"teamA": { "name": "韩国", "winProb": 38 },
"draw": 39,
"teamB": { "name": "捷克", "winProb": 23 },
"predictedScore": "0-0",
"confidence": "中",
"mode": "in_play",
"stage": "小组赛",
"currentState": { "minute": "HT", "score": "0-0", "knownEvents": [], "estimated": false },
"engine": {
"model": "dixon-coles-lite v3",
"ratings": { "韩国": 1780, "捷克": 1730 },
"lambda90": { "韩国": 1.55, "捷克": 1.09 },
"rho": -0.10, "capApplied": 92
},
"dataQuality": { "level": "medium", "sourcesUsed": ["engine_ratings", "user_state"], "notes": "…" },
"keyFactors": ["半场低节奏", "韩国创造力略优", "捷克定位球威胁"],
"analysis": "…(LLM 结合资料库与实时检索撰写,不改引擎数字)",
"playersToWatch": [
{ "team": "韩国", "player": "李刚仁", "reason": "组织与最后一传" },
{ "team": "捷克", "player": "希克", "reason": "禁区终结支点" }
],
"safeUse": "仅供球迷讨论,不构成任何决策建议。"
}| 字段 | 约束 | 校验方式 |
|---|---|---|
winProb × 2 + draw |
整数 · 总和 == 100 | 🤖 自动 |
predictedScore |
^\d{1,2}-\d{1,2}$ · 方向与最高概率一致 · 赛中不得低于当前比分 |
🤖 自动 |
| 赛前单队胜率 | ≤ 85(赛中按 92/95/98 分级封顶) | 🤖 自动 |
knockout.advanceProb |
淘汰赛输出 · 总和 == 100(draw=90分钟战平进加时/点球) | 🤖 自动 |
keyFactors |
3-5 条 | 🤖 自动 |
playersToWatch |
每队各 1 人 | 🤖 自动 |
| 违禁词 | 投注/赔率/盘口/倍投/Kelly… 出现即 INVALID | 🤖 自动 |
赛事:2026 FIFA World Cup(美国 · 加拿大 · 墨西哥三国联办) 日期:2026 年 6 月 11 日 — 7 月 19 日 · 48 队 · 104 场 晋级规则:每组前两名 + 8 个成绩最好的第三名 → 32 强淘汰赛
👉 点击展开 12 个小组完整分组表(对照 2025-12-05 官方抽签核实)
| 组 | 球队 |
|---|---|
| A | 🇲🇽 墨西哥 · 🇿🇦 南非 · 🇰🇷 韩国 · 🇨🇿 捷克 |
| B | 🇨🇦 加拿大 · 🇧🇦 波黑 · 🇶🇦 卡塔尔 · 🇨🇭 瑞士 |
| C | 🇧🇷 巴西 · 🇲🇦 摩洛哥 · 🇭🇹 海地 · 🏴 苏格兰 |
| D | 🇺🇸 美国 · 🇵🇾 巴拉圭 · 🇦🇺 澳大利亚 · 🇹🇷 土耳其 |
| E | 🇩🇪 德国 · 🇨🇼 库拉索 · 🇨🇮 科特迪瓦 · 🇪🇨 厄瓜多尔 |
| F | 🇳🇱 荷兰 · 🇯🇵 日本 · 🇸🇪 瑞典 · 🇹🇳 突尼斯 |
| G | 🇧🇪 比利时 · 🇪🇬 埃及 · 🇮🇷 伊朗 · 🇳🇿 新西兰 |
| H | 🇪🇸 西班牙 · 🇨🇻 佛得角 · 🇸🇦 沙特 · 🇺🇾 乌拉圭 |
| I | 🇫🇷 法国 · 🇸🇳 塞内加尔 · 🇮🇶 伊拉克 · 🇳🇴 挪威 |
| J | 🇦🇷 阿根廷 · 🇩🇿 阿尔及利亚 · 🇦🇹 奥地利 · 🇯🇴 约旦 |
| K | 🇵🇹 葡萄牙 · 🇨🇩 刚果金 · 🇺🇿 乌兹别克斯坦 · 🇨🇴 哥伦比亚 |
| L | 🏴 英格兰 · 🇭🇷 克罗地亚 · 🇬🇭 加纳 · 🇵🇦 巴拿马 |
核心设计:规则与数据彻底分离。 SKILL.md 永远不动,日常只维护 data/ 两个文件:
┌──────────────────────────────────────────────┐
│ SKILL.md 规则 + 资料库 · 🔒 锁死 │
├──────────────────────────────────────────────┤
│ data/ratings.json 48 队评分 · ✏️ 可热更新 │
│ └─ 改评分 → 引擎即时生效,无需改任何代码 │
│ data/daily_brief.md 每日情报 · ✏️ 可热更新 │
│ └─ 首发/伤停/天气,优先级高于资料库 │
└──────────────────────────────────────────────┘
| 方式 | 适用场景 |
|---|---|
| 🦞 小龙虾 heartbeat | 每天定时自动检索 → 写 daily_brief → 重大消息改 ratings → 重跑引擎 |
| 🤖 GitHub Action | 定时拉新闻 → LLM 提取要点 → PR 到 data/ |
| ✍️ 人工值守 | 大赛期间每日 5 分钟,参考 eloratings.net / FIFA 排名微调 |
- 🤖 Agent 数字员工 — 小龙虾每天早上自动备好当日所有比赛的预测简报
- 📱 球迷应用 / 网页 — plus_json 直接渲染预测卡片(合规提示见下方声明)
- 💬 微信群 / Discord 机器人 — 群友提问即出预测
- 📊 数据可视化看板 — 引擎批量跑 104 场 · 蒙特卡洛模拟夺冠概率树
- 🎙️ 内容创作辅助 — 解说稿 / 短视频脚本的结构化数据底座
- 🧪 教学样本 — "LLM + 确定性引擎"协作架构的教科书案例
- v1.0 — 48 队资料库 + 4 层约束 + 严格 JSON(原版 · TradingAi666)
- v2.0 — 赛前+赛中双模式 · 反幻觉规则 · 数据质量字段 · 校验脚本(Plus)
- v3.0 — 可执行 Dixon-Coles 引擎 · 双轨制 · 全 Agent 适配 · 校验器强化(Pro · 本版)
- v3.1 —
tests/backtest.py:小组赛实战回测(Brier / log-loss),用真实结果调 ratings - v3.1 —
tools/update_ratings.py:从公开 Elo 数据自动更新评分 - v3.2 — 蒙特卡洛整届模拟:夺冠概率 / 出线概率 / 对阵树一键生成
- v4.0 — 抽象为"赛事预测 Skill 模板",支持欧洲杯 / 美洲杯 / 俱乐部赛事
Q1: 这是机器学习模型吗?需要训练吗?
是统计模型,但不需要训练。 v3 的引擎是 Dixon-Coles 风格的解析模型:评分差直接映射期望进球,泊松网格算概率。评分基线是编辑维护的(可热更新),不依赖训练流程。想更进一步,Roadmap 里的回测脚本可以用真实赛果校准评分。
Q2: 和 v1/v2 比,预测会更准吗?
更可信,且可验证。 v1/v2 的概率是 LLM 凭语感给的,同一问题两次回答可能不同;v3 的概率由引擎确定性计算,可复现、可回测、可校准。准确率本身取决于评分质量——所以维护 data/ratings.json 是日常运营的核心。足球的偶然性谁都消不掉,85% 封顶就是对这一点的敬畏。
Q3: 我能拿这个做付费应用 / 上架小程序吗?
MIT 协议,代码层面可以。但合规自负,几条硬提醒:仅限娱乐与球迷讨论;严禁接入任何投注、博彩、赔率业务(skill 红线 + 校验器双重拦截,但绕过红线的后果由使用者承担);在中国大陆上架小程序时注意"竞猜"类目审核风险,纯展示型比互动竞猜型安全;"世界杯/FIFA"为注册商标,商用命名请规避。
Q4: 赛中预测靠谱吗?比分会不会"倒退"?
不会,这是 v3 的硬保证。赛中模式按剩余时间缩放期望进球,从当前比分向后做条件化——最终比分 = 当前比分 + 剩余进球,数学上不可能倒退;校验器还会再拦一道。红牌(被罚下方 ×0.65 / 对手 ×1.25)、75 分钟后追分节奏、东道主主场都有量化修正。
Q5: 评分 / 情报怎么自动更新?
短期:手动编辑 data/ 下两个文件,引擎即时生效。
推荐:小龙虾 heartbeat 任务(本 README 安装节有现成配置)。
规划:v3.1 的 update_ratings.py + GitHub Action,全自动闭环。
Q6: 淘汰赛的"平局"是什么意思?
draw 表示 90 分钟战平进入加时/点球。v3 额外输出 knockout.advanceProb(基于评分差的 logistic),直接告诉你谁更可能笑到最后,不用再从 analysis 里猜。
- ⭐ Star 本项目 — 最简单的支持方式
- 🐛 报 Issue — 预测离谱、校验失效、文档错漏
- 📝 修订评分 / 资料库 — 编辑
data/ratings.json或 SKILL.md 资料库,请附信息来源 - 💡 二次创作 — 做了预测站 / 机器人 / 小龙虾工作流?来 Issues 里炫一下
git clone https://github.com/optimus-a1/worldcup2026-prediction-skill-pro.git
cd worldcup2026-prediction-skill-pro
git checkout -b feature/your-update
# 修改后提交 PR- 🎯 本项目仅供娱乐、球迷讨论与数据研究
- 🚫 内置红线 + 校验器违禁词 — 拒绝输出任何投注、赔率、下注建议;严禁接入涉及真实资金的自动化流程(自主执行类 agent 风险尤甚)
- 🧠 预测为概率估计,不构成任何决策依据,请理性看球
- 🔍 本包代码全部透明、离线、无外联,可自行审计
- ⚖️ 所有球队、球员信息均为公开资料;仅供 2026 FIFA World Cup 一届使用
MIT License © 2026 optimus-a1
- TradingAi666 / 柱子哥 — 原版「绿茵神算」作者。资料库锁死、四层约束、严格 JSON、反投注红线的奠基设计全部来自原版,v2/v3 是站在这套骨架上的演进
- Dixon & Coles (1997) — Modelling Association Football Scores and Inefficiencies in the Football Betting Market,引擎方法论的学术源头
- FIFA — 赛程与分组信息
- 所有 ⭐ 本项目的朋友
⚽ 让我们拭目以待 · See You at the Pitch ⚽
Made with ⚽ by @optimus-a1 v1 open-sourced on the opening day · v3 engine-powered since June 12, 2026.