World Cup Predictor 是一个面向 AI Agent 的足球比赛分析 Skill,目标不是让模型直接猜比分,而是把市场基线、比赛数据、球队新闻、打法匹配、比赛状态动机、临场更新、纪律风险、VAR/越位判罚和赛后复盘放进同一套可检查流程里。


足球预测最容易犯的错,是把某一个信号当成答案。

赔率低,就默认强队大胜;上一场赢得多,就默认状态爆棚;控球率高、射门多,就默认进攻质量好;连续几场平局后,又开始机械防平。AI Agent 如果没有明确流程约束,也很容易被这些表面信号带着走。

这个 Skill 要解决的是另一个问题:不是让 Agent 更敢猜,而是让它在猜之前先说明自己到底用了哪些证据,哪些没有查,哪些只是推断。

这个 Skill 解决什么问题

worldcup-predictor 适合处理世界杯和国际足球比赛分析,包括:

  • 赛前胜平负倾向和精确比分预测。
  • 赔率、预测市场或盘口作为证据层的对比。
  • 小组出线形势和净胜球动机分析。
  • 淘汰赛晋级、加时和点球大战场景分析。
  • 卡牌和纪律风险预测。
  • 球员伤停、首发变化和角色适配影响。
  • 两队打法匹配、压迫、推进、转换和定位球分析。
  • 比赛进行中的临场更新、换人结构和晚段风险判断。
  • 争议进球、VAR 和越位判罚的规则链复盘。
  • 赛后复盘,用结果和机会质量修正下一场判断。

它不把赔率、交易价格或博彩市场当成投注建议。赔率只是市场基线,最多说明当前共识和风险定价,不能替代球队状态、机会质量和人员可用性。

核心原则:证据分层

这个 Skill 的主线是分层,而不是堆信息。

层级 典型来源 使用方式
市场 Polymarket、Stake、主流赔率 作为基线,不作为结论
数据 Sofascore、FotMob、Flashscore、WhoScored、FBref、比赛中心 看 xG、重大机会、射正、扑救、评分和势头
新闻 FIFA、足协、BBC、Guardian、ESPN、本地记者 查伤停、停赛、轮换、首发线索和旅途影响
背景 小组积分、淘汰赛签表、晋级路径、赛程、场地、天气、队内连续性 判断动机、风险偏好和稳定性
打法 压迫、推进、转换、防守间距、定位球 解释机会如何被创造或限制

关键约束是:Agent 必须说清楚实际用了哪些层级。

如果没有直接读到 Sofascore,就不能说“根据 Sofascore 数据”;如果没有官方首发,就只能说“首发未确认”;如果只看到了用户截图,也要标明是截图输入,而不是实时网页数据。FBref、StatsBomb free data、Understat 这类更适合延迟复盘或历史校准,除非确认有当前比赛覆盖,否则不能当成实时赛前数据。

最新版还把“页面读取顺序”写进了规则。如果用户说比赛页、赔率页、技术统计页或首发页已经打开,Agent 要先检查现成页面或标签页,确认具体比赛页面,再决定是读 DOM、看截图、打开新页面、搜索网页还是调用 API。不能一上来就猜 URL、写 scraper,或者绕过用户已经打开的资料。

这条规则看起来朴素,但很重要。预测类回答最容易出现“证据幻觉”:模型会把常见来源名、常识判断和真实读取混在一起,最后看起来很专业,但不可复核。

预测流程

Skill 里把一次预测拆成十步:

  1. 检查校准状态:如果之前有赛后复盘,要先继承明确修正,不要被最近几场结果机械带偏。
  2. 识别比赛状态:时间、小组或淘汰赛轮次、积分或签表路径、出线/晋级动机,以及平局、加时或点球是否改变双方风险偏好。
  3. 设置市场基线:优先打开 Polymarket 世界杯 games 页和 Stake 世界杯足球直达页,再读取公开赔率或预测市场价格,转换成粗略强弱和总进球预期。
  4. 验证近期表现:优先看当前赛事数据,同时参考最近五场友谊赛或赛前热身赛;赛前没有当前 xG 时,用近期赛事数据、官方比赛中心、可信新闻和打法证据替代。
  5. 检查人员可用性:伤停、停赛、病情、轮换、预计首发和关键角色是否能踢满 60-70 分钟。
  6. 分析打法匹配:两队如何创造机会、限制机会、抗压推进、防转换、处理定位球,以及换人后结构怎么变化。
  7. 压测纸面强队:如果强队只是名气、控球或市场价格占优,但近期缺少高质量机会、禁区占位、二点压迫、传球稳定性或防守控制,就要限制净胜球预期,并把平局、加时和点球路径放到主判断里。
  8. 加入环境和纪律修正:天气、旅途、主场或共同东道主因素、开球时间、场地、海拔、裁判尺度、卡牌风险、队内治理和连续性信号都只作为修正项。
  9. 输出预测:给出胜平负倾向、精确比分、备选比分、信心和最关键失败模式;淘汰赛要拆开 90 分钟比分、晋级倾向、加时和点球风险。
  10. 赛后复盘:对照比分、xG、机会、评分、关键事件、换人和晚段控制,更新后续判断。

这里最有价值的是第 1 步和第 10 步。很多预测失败不是因为少看了一条新闻,而是因为模型没有记住自己上一场错在哪里。

比如连续出现平局后,Agent 可能开始过度防平;意识到自己太保守后,又可能直接摆回纸面强队。这个 Skill 要求把这种校准写出来:上一轮错在高估市场、错在低估伤停、错在机会质量,还是错在把比分当成真实实力。

真实使用后补上的规则

这个 Skill 不是一次性写出来的,而是在连续预测和复盘里逐步收紧的。

一开始最容易出现的问题,是纸面强弱权重太高。比如分析荷兰和日本时,不能只看荷兰传统强队身份,也要看中卫年龄、边翼卫回追、最终名单和日本核心球员是否伤退。如果赛前确认远藤航、三笘薰这类关键球员缺席,日本近期状态再好,也要下调中场抗压和左路破局能力。

第二个问题,是复盘后容易矫枉过正。连续几场平局会让模型开始机械防平;但法国、阿根廷、英格兰这类球队,如果核心终结点健康、首发结构完整,就不能因为“首轮保守”或“天气湿热”直接压成平局。反过来,葡萄牙这种强队如果中卫组合替补化、主力中卫缺阵、边路爆点替补,就应该实质性提高被拖平风险。

第三个问题,是跨会话校准会丢失。一次新的预测如果只记住“别过度防平”,但没有继承前面复盘出的完整条件,就容易把强队拉得太猛。更稳的做法是把校准状态写成显式字段:上一轮到底是纸面强弱错误、过度防平、首发/伤病漏判、市场误读,还是被红牌、门将超常、终结波动改写。

第四个问题,是来源边界必须写清楚。Polymarket 截图、Stake 公开页、新闻报道、Sofascore/FotMob 数据,证据等级不一样;如果没有直接读到 Sofascore,就只能说“数据层缺失”,不能用“参考了 Sofascore”包装判断。盘口可以把西班牙、比利时这类场次从保守预测拉回胜局,但不能替代伤病、首发和机会质量。

第五个问题,是“黑马”和“弱队”标签会误导判断。一支非传统豪门如果已经连续在世界杯、洲际赛事或淘汰赛里证明了防守、转换、定位球和大赛稳定性,就不应该只因为地理或历史品牌被叫成黑马;反过来,弱队也不一定只是防守搅局者,如果它连续展现出定位球、直接打法、目标中锋、转换推进或二点球路线,就要把进球路径单独计入。

最新版补强点

最新版本把“世界杯预测”从小组赛场景扩展到了更完整的比赛状态判断。

第一,市场读取有了默认入口和校验规则。世界杯比赛先检查公开预测市场与对应赛事的公开赔率页;页面没有可读盘口时,再用公开赔率聚合器或用户截图补充。作为 90 分钟基线,只读取完整的正常胜平负(1X2)行,不把让球、大小球、晋级盘、促销卡或拉新赔率混在一起;页面跳转、受限、赔率陈旧或只显示旧场次,也要如实记录。具体入口维护在 skill 仓库中,避免在文章正文里把市场页写成推荐链接。市场价格只作为公开数据输入,不构成投注平台推荐。

第二,数据源分层更细。Sofascore、FotMob、Flashscore 和 FIFA match centre 更适合即时比赛数据;WhoScored、事件图和热图适合战术诊断;FBref、StatsBomb free data、Understat 更适合赛后延迟复盘、历史校准和模型训练。读不到高级数据时,预测可以继续,但必须把缺失层写出来,并降低比分、净胜球或细节判断的置信度。控球、角球、传中和总射门只代表压力;要判断是否真有优势,还要看 xG、重大机会、射正、xGOT、强制扑救和二点控制。

第三,小组赛和淘汰赛被拆开处理。小组赛看积分、第三名压力、净胜球和轮换;淘汰赛必须区分 90 分钟结果和最终晋级结果,还要单独评估加时、点球、替补深度、体能、门将和主罚点球资源。90 分钟平局赔率接近时,加时和点球应是主分支,而不是一句附带风险。不能把“平局够用”“第三名压力”这类小组赛逻辑直接套到淘汰赛,也不能把 1X2 和晋级盘混成同一个概率。

第四,卡牌和纪律风险成为可选输出。遇到用户问牌数时,不给虚假的精确数字,而是给主预测牌数、合理区间和红牌触发条件,例如裁判尺度、边后卫被持续冲击、中场战术犯规、落后方末段抢断风险。犯规多不等于黄牌多:先区分整个赛事的执法尺度与该场裁判阈值,再看反复破坏转换、危险动作、抗议和追分状态是否真的会把身体对抗转成卡牌。

第五,复盘和校准有了边界。红牌、VAR、点球、门将失误、伤退和极端终结效率要作为关键事件波动单独记录,不要直接算成模型判断错误。真正需要修正的是赛前判断链条:市场误读、伤病漏判、首发结构漏判、机会质量误判,还是过度防平。新一场分析只能继承当前上下文或用户明确提供的复盘记录,不能假装拥有跨会话的模型台账。

第六,临场更新被拆成单独规则。早早丢球不能只看比分,要看热门方到底是在制造真实机会,还是只有领地和传中;半场要用 xG、重大机会、射正、换人需求和替补解法更新判断;60 分钟后的换人不能只列球员名,而要看谁推进、谁占禁区、谁保护二点、谁提供宽度,以及这种变化会不会提高反击丢球风险。没有可见站位、热图或重复结构时,不能只凭换人名单断言阵型变化;应把它写成角色与风险推断。

第七,VAR、越位和裁判争议要讲规则链。争议球不能只说“该吹”或“不该吹”,要拆出最后一次进攻方触球、球员位置、越位位置球员是否参与、后卫触球是主动处理还是折射/封堵/扑救,以及社媒片段、官方事件记录、IFAB 规则和技术解释分别能确认什么。赛后舆情、球员或教练的批评可以作为背景,但不能被当作裁判偏向的证据。

第八,新增快速预测路线。用户明确只要一轮粗预测或首发公布前的第一版时,Agent 应先给出标明“临时”的紧凑判断,不等全部数据到齐;同时保留市场、数据、新闻、背景和打法五层,写清未检查项,以及会改变结论的首发、伤停、裁判、天气或盘口触发器。后续有新首发或赔率截图时,优先更新受影响的一层,不机械重跑全部流程。

第九,环境和团队连续性只做有证据的修正。共同东道主、海拔或区域场地不能自动等同完整主场优势,要拆开旅行、球迷、时区、气候、场地熟悉度与生理适应;核心球员公开指出仓促重建、磨合不足或队内失序时,则应把它作为会影响压迫协同、防线沟通和末段韧性的高权重信号,并与未经证实的传闻分开。

第十,临场复盘先建立事件账本。半场或其他检查点要先核对比分和进球者、牌、点球或 VAR、伤退、换人和补时时间,再解释技术统计。用户从转播中观察到的事件仍然标为用户输入;事件记录没有说明换人原因时,也不能直接把它写成战术调整。

第十一,换人要按结构而不是攻守标签解释。领先方用后卫换前锋,并不自动等于防守升级;如果同时移除了控球点、推进者或反击出口,球队可能更难释放压力,反而持续承受传中、二点球和禁区冲击。比分被扳平后还要从新比分、剩余时间和场上人员重新判断,不能沿用领先阶段的保护信心,也不能只凭后卫人数做没有模型或市场支持的大幅概率跳转。

第十二,打法匹配增加了“压制对手路线”的判断。控球方的反抢价值不只体现在夺回球权或继续进攻,还包括让依赖转换的对手找不到第一脚、第二脚向前传递。如果对方的中场接球者无法转身、推进出口反复被切断,这是一种结构性打法压制,不能只归结为某个攻击手状态不好。

第十三,三四名决赛和决赛不能只套普通淘汰赛模板。三四名决赛要按角色检查轮换:如果进攻核心仍在,但门将、中卫、中场屏障或压迫组织者被拆散,就应提高总进球预期并扩大高比分尾部,而不是只把保守比分机械加一球。决赛的加时历史只能作为有限先验,还要与当前 90 分钟平局价格、打法、门将和进攻意愿一起判断。

第十四,复盘要按比赛阶段和数据口径评分。90 分钟比分、加时后比分、最终晋级和决胜阶段是不同结论;加时后比分碰巧命中,不代表 90 分钟精确比分也命中。低比分猜对但实际机会一边倒,只能算部分过程命中;红牌发生前比赛已经失衡时,红牌更可能是放大器而不是全部根因。不同数据源的射正、扑救、牌数或 xG 口径不一致时,应保留单一来源的内部一致统计,或者分别说明口径,不能拼成一份不存在的比赛记录。

这些规则不是预先想出来的功能列表,而是连续预测、临场更新和赛后复盘后留下的通用修正。完整演进过程见《从猜比分到可校准流程:World Cup Predictor Skill 的一个月开发复盘》

权重不是公式,而是检查清单

参考框架里给了一组默认权重:

维度 权重 检查内容
球队和打法匹配 25% 机会创造、防机会、抗压推进、防转换、定位球
人员可用性和状态 25% 首发、伤停、停赛、角色状态、替补质量
当前比赛数据 20% xG、重大机会、射正、扑救、机会位置、比赛势头
市场基线 15% 赔率、预测市场、流动性、价格变化
比赛状态、背景和环境 15% 小组积分或淘汰赛签表、平局价值、晋级路径、主场、天气、旅途、队内连续性

这不是要把足球变成精确公式,而是防止某个维度被无意识放大。

如果一支球队依赖一个核心组织者、推进者、终结者、门将或定位球手,人员权重就应该上调。这里的“可用”也不是进了大名单就算,而是能不能执行自己的角色:能不能冲刺、压迫、带球、对抗、传关键球,能不能踢到足够分钟。

输出格式

这个 Skill 要求先给紧凑表格,再给短分析。非简单的赛前、临场或复盘回答,表格前还要有一行证据快照:准确对阵、已知开球时间和时区、信息截止时间、实际读取的页面/输入,以及事实是已确认、报道、推断还是用户提供。

| Match | Evidence cutoff | Sources used | Market baseline | Data/news correction | Prediction | Result / score confidence |
|---|---|---|---|---|---|---|
| A vs B | 12:00 UTC; lineups pending | Market, news, matchup | A small favorite | B low block is strong; A missing creator | A 1-0; backup 1-1 | Medium / Low |

然后补充每场比赛的要点:

  • Evidence snapshot:具体对阵、信息截止时间、实际读到的来源和事实状态。
  • Sources used:实际使用了市场、数据、新闻、背景、打法中的哪些层级。
  • Calibration:是否有当前上下文中明确给出的复盘修正;没有就说明没有继承记录。
  • Prediction:比分和备选比分,并把赛果置信度与精确比分置信度分开。
  • Knockout note:淘汰赛时拆开 90 分钟结果、晋级倾向、加时和点球风险。
  • Cards note:用户询问纪律时,给主预测牌数、合理区间和红牌触发条件。
  • Why:最关键的 2-4 条理由。
  • Failure mode:预测最可能怎么失效。
  • Missing data:哪些重要数据没查到。
  • Disclaimer:如果用了赔率或市场价格,说明这只是信息性分析,不是投注或金融建议。

这个格式的重点不是好看,而是把“我为什么这么判断”和“我哪里可能错”放在同一个回答里。

一个调用示例

可以这样让 Agent 调用:

Use $worldcup-predictor to analyze Spain vs Portugal using current team news, market baseline, recent match data, style matchup, and match-state incentives.

中文可以这样写:

使用 $worldcup-predictor 分析西班牙 vs 葡萄牙,结合当前球队新闻、市场基线、近期比赛数据、打法匹配和比赛状态动机。

如果只想做赛后复盘,也可以这样写:

Use $worldcup-predictor to review the prediction after the match. Compare the prediction with result, xG, big chances, lineups, key events, and update the model correction for the next forecast.

中文可以这样写:

使用 $worldcup-predictor 复盘这场比赛预测。对比预测、实际比分、xG、重大机会、首发、关键事件,并更新下一场预测要继承的模型修正。

更好的提问方式,是直接给边界:

Use $worldcup-predictor for an informational match forecast. If official lineups or live data are unavailable, mark the prediction as provisional and list which missing data would change the score.

中文可以这样写:

使用 $worldcup-predictor 做一版信息性赛前预测。如果官方首发或实时数据不可用,请标记为临时预测,并列出哪些缺失数据会改变比分判断。

如果是淘汰赛,可以明确要求拆开 90 分钟和晋级判断:

使用 $worldcup-predictor 分析法国 vs 阿根廷这场淘汰赛。请分别给出 90 分钟比分、晋级倾向、加时风险、点球大战风险,以及哪些首发或伤病信息会改变判断。

如果只想先看整轮的临时版本,可以直接说明:

使用 $worldcup-predictor 先给这轮淘汰赛一版首发公布前的粗预测。请标明未检查的数据层,分别给出 90 分钟比分、晋级倾向和加时/点球风险,并列出会触发改判的首发、伤停、裁判、天气或盘口变化。

如果要看卡牌风险,可以这样写:

使用 $worldcup-predictor 预测英格兰 vs 葡萄牙的卡牌风险。请给出主预测牌数、合理区间、红牌触发条件,并说明裁判尺度和双方犯规点。

如果比赛已经进行中,可以明确要求临场更新:

使用 $worldcup-predictor 更新这场比赛的判断。请先检查已打开的比赛页和技术统计页,区分页面确认数据、我提供的转播观察和你的战术推断,再根据 xG、重大机会、射正、换人和比赛状态修正预测。

如果要复盘争议判罚,可以直接要求按规则链拆解:

使用 $worldcup-predictor 复盘这个 VAR/越位争议进球。请区分最后一次进攻方触球、球员位置、是否参与比赛、后卫触球性质,以及哪些事实来自官方记录、技术解释、视频可见信息或社媒片段。

这样能减少 Agent 编造来源,也能让结论更容易复核。

安装和结构

作为一个本地 Skill,它的核心入口是:

worldcup-predictor/
├── SKILL.md
├── README.md
├── README_CN.md
├── LICENSE
├── agents/
│   └── openai.yaml
└── references/
    └── prediction-framework.md

完整仓库可以看 Onlydreams/worldcup-predictor

SKILL.md 保持简洁,负责说明什么时候触发、核心流程和输出格式;更细的权重、市场读取规则、数据读取规则、信心标签和复盘模板放在 references/prediction-framework.md

这种拆法的好处是入口文件不会膨胀,Agent 需要详细规则时再读取引用文档。README 则只负责面向人解释安装、用途和边界,不和 Skill 逻辑重复太多。

对于 Codex 风格的本地 skills,常见安装目录是:

~/.codex/skills/worldcup-predictor

只要运行环境支持读取 SKILL.md 作为技能入口,就可以按类似方式安装。

使用边界

这个 Skill 的边界很明确:

  • 不输出确定性结果。
  • 不把赔率当成下注建议。
  • 不声称使用了没有实际读取的信息源。
  • 不跳过用户已经打开的比赛页、赔率页、首发页或技术统计页,直接猜 URL、写 scraper 或调用 API。
  • 不把截图、论坛消息或社交媒体片段当作强证据。
  • 不把“报道”“推断”“用户提供”和页面已确认的事实混在一起,也不把来源名当作已经读取的证据。
  • 不把预测首发或用户截图当成官方首发;必须标明临时状态和会改变判断的首发触发点。
  • 不把 FBref、StatsBomb free data 或 Understat 当成实时比赛源,除非已经确认有当前比赛覆盖。
  • 不把小组赛的平局、净胜球、第三名压力逻辑直接套到淘汰赛。
  • 不忽略加时和点球:淘汰赛必须区分 90 分钟结果和最终晋级倾向。
  • 不把共同东道主或区域场地自动当成完整主场优势,仍要看旅行、球迷构成、气候、场地熟悉度和压力。
  • 不把控球、角球、传中或总射门直接等同于高质量机会,也不把高犯规量直接等同于高黄牌量。
  • 不把 VAR 或越位争议简化成情绪判断;要按触球、站位、参与比赛和后卫触球性质拆规则链。
  • 不把非传统强队天然叫成黑马;如果它已经有连续大赛成绩和稳定比赛内容,就按稳定强队处理。
  • 不因为一场大胜、一张红牌、一个门将超神表现,就立刻重写球队强弱判断。
  • 不声称继承了当前上下文或用户未提供的跨会话校准记录。
  • 不让天气、开局谨慎或连续平局这类单一变量支配全部预测。

它真正想强化的是预测纪律:先说明证据层,再说判断;先承认缺失数据,再给信心;赛后不是只看比分对不对,而是复盘判断链条哪里偏了。

对足球预测来说,这比猜中一个 2-1 更重要。