从猜比分到可校准流程:World Cup Predictor Skill 的一个月开发复盘
文章状态
当前可用- 最后验证
- 2026-07-22
- 适用环境
- World Cup Predictor Skill / Codex
- 风险提示
- 这是对预测方法和 Skill 开发过程的复盘,不代表比赛结果保证或投注建议。
过去一个月,我用同一个 World Cup Predictor Skill 连续做赛前预测、临场更新和赛后复盘。真正有价值的结果不是猜中了多少比分,而是把一次次判断偏差变成了可复用、可检查的 Agent 规则。
随着本届世界杯结束,worldcup-predictor 的开发也在当前版本正式终止,后续不再继续更新。现有 Skill 和参考框架仍然保留,作为这轮实践形成的最终版本;这篇文章则是项目收尾时对整个开发过程、主要失误和通用校准规则的一次完整总结。
最初写这个 Skill 时,目标只是约束 AI 不要凭球队名气直接猜比分:先看市场,再看数据、新闻、比赛背景和打法匹配,最后给出比分与信心。
实际跑起来后才发现,这还不够。
足球预测不是一次静态问答。首发会变,带伤球员可能只踢半场,早早丢球会改变双方风险偏好,换人可能增强禁区防守却削弱控球和反击出口,红牌又可能把原本已经失衡的比赛彻底放大。赛后如果只看比分猜没猜中,下一场还会继承错误的经验。
这个月的开发,本质上是在把一个“预测提示词”改造成一套小型校准系统。
第一版解决了什么
第一版已经建立了五层证据结构:
| 层级 | 主要问题 |
|---|---|
| 市场 | 当前共识如何定价胜平负、总进球和晋级可能性 |
| 数据 | 球队创造了什么质量的机会,而不只是有多少控球和射门 |
| 新闻 | 首发、伤停、停赛、病情和轮换会改变哪些角色 |
| 背景 | 小组积分、淘汰赛路径、天气、旅途和场地如何改变风险偏好 |
| 打法 | 双方通过压迫、推进、转换、定位球和禁区占位怎样制造或限制机会 |
预测必须写明实际用了哪些层,没读到的数据也要明确标为缺失。赔率只能提供基线,不能替代首发、状态和打法;控球、角球、传中和总射门只能说明压力,不能自动证明机会质量。
这套结构解决了“来源幻觉”和“单一信号决定结论”的问题,却没有完全解决三个更难的问题:比赛阶段怎样拆分、临场信息怎样重算、赛后怎样判断究竟错在哪里。
对话里反复暴露的六类问题
连续预测以后,错误开始呈现出稳定类型。
| 观察到的现象 | 容易得出的错误结论 | 后来沉淀的规则 |
|---|---|---|
| 强队控球和射门很多 | 强队必然制造了更好机会 | 分开压力数量、机会创造和终结兑现 |
| 预测首发中的核心球员最终出场 | 赛前人员判断完全正确 | 出场不等于能踢满;继续保留分钟数和角色健康分支 |
| 淘汰赛最终晋级方判断正确 | 整场预测都正确 | 分开 90 分钟、加时、点球和最终晋级 |
| 领先方换上更多后卫 | 防守一定更稳 | 检查控球点、推进者、反击出口和二点保护是否同时被移除 |
| 红牌后比分被拉开 | 红牌解释了全部比赛 | 比较红牌前后的机会结构,判断它是根因还是放大器 |
| 最终比分碰巧命中 | 比赛形态也判断正确 | 分阶段评分,并检查机会是否均衡、数据口径是否一致 |
这些问题看起来分散,背后其实是同一个缺陷:旧流程太容易把一个标签当成状态。
“核心首发”“领先后加强防守”“控球占优”“比分命中”都不是完整状态。Agent 还必须知道发生在什么时间、由什么角色组成、有哪些证据、后续还能怎样变化。
淘汰赛必须分阶段判断
小组赛的平局可能是双方都能接受的积分结果;淘汰赛的 90 分钟平局只是进入下一个决胜阶段。把两者混在一起,会同时扭曲比分预测和晋级概率。
因此淘汰赛输出被拆成四项:
- 90 分钟比分或赛果倾向。
- 最终晋级倾向。
- 进入加时的风险,以及是否可能在加时解决。
- 进入点球大战的风险和点球资源差异。
复盘时也按同样层级评分。预测“90 分钟战平、某队最终晋级”,如果实际在 90 分钟内分出胜负,就不能因为晋级方对了而忽略比赛阶段判断错误;如果加时后比分与预测数字相同,但 90 分钟比分不同,也只能记录为最终比分命中、常规时间精确比分未命中。
这里还有一个容易混淆的概率口径:进入加时 包含后来在加时或点球解决的比赛,而加时决出和进入点球是两个更窄的分支。如果需要输出互斥概率,应直接使用“90 分钟决出 / 加时决出 / 点球决出”,避免把包含关系写成相加关系。
决赛可以参考近期决赛进入加时的频率,但它只能是有限先验。当前 90 分钟平局定价、两队打法、门将、进攻意愿和替补资源仍然比一小段历史样本更重要。
三四名决赛不是普通淘汰赛
三四名决赛暴露了另一种过度简化:认为冠军压力消失,就会自动变成轻松开放的大比分比赛。
更可靠的判断方式不是看轮换人数,而是看轮换角色。
如果双方仍保留核心创造者、终结者和转换推进点,却轮换了门将、中卫、中场屏障或压迫组织者,那么进攻质量可能保留得比防守协同更完整。此时应该同时提高预期总进球和高比分尾部,而不是只把原来的 1-0 机械改成 2-1。
早早出现进球后还可能形成反馈循环:落后方更早打开阵型,领先方又有可信的反击出口,双方机会会共同增加。模型需要扩大比分分布,并降低精确比分信心。
这仍然只是条件修正。关键攻击手被轮换、天气压低节奏、双方继续保持紧凑结构,或者市场与近期数据都不支持开放比赛时,不能因为“三四名决赛”这个标签强行预测大球。
临场更新从评论变成状态重算
早期版本已经要求半场看 xG、重大机会、射正和换人需求,但真实对话暴露出一个更基础的问题:如果事件事实没有先对齐,后面的战术解释会建立在错误时间线上。
因此每个半场或用户指定的临场检查点,都先建立一个紧凑事件账本:
当前比分与进球者
牌、点球和 VAR 决定
伤退与换人
补时时间
事件来源与仍未确认的原因
页面确认事实、用户从转播观察到的内容和 Agent 的战术推断必须分开。事件记录写明伤退换人时,不能解释成教练主动调整;页面没有说明原因时,也只能保留未知。
这一步很朴素,却能避免一种常见错误:统计数字本身没有读错,但因为进球、伤退或换人时间点错了,整段因果解释都错了。
换人不能只看位置标签
临场判断里最明显的一次过度反应,是把“前锋下、后卫上”直接解释成领先方防守增强。
实际上,新增后卫可能提高禁区人数,却同时移除球队的持球点、向前传球、反击速度和释放压力的出口。对手因此能持续压回球权、争夺二点并反复进入禁区,晚段丢球风险反而可能上升。
所以换人后的检查对象改成了角色:
- 谁负责把球从后场带出来。
- 谁能在压力下保住球权。
- 谁继续占据禁区和牵制中卫。
- 谁提供宽度、二点保护和反击出口。
- 这些变化怎样影响反抢与退防暴露。
比分被扳平以后,还要从新比分、剩余时间和场上人员重新开始。此前领先方为了保护比分移除的推进者和创造者,可能已经无法重新登场;不能继续沿用扳平前的防守成功概率,更不能只凭后卫数量做没有实时模型或可读市场支持的大幅概率跳转。
打法优势也包括让对手踢不出来
另一次复盘来自一场控球方对转换型球队的比赛。只看控球方自己的射门和进攻产出,会漏掉反抢在防守端创造的价值。
如果对手拿球后找不到第一脚和第二脚向前传递,中场接球者无法转身,回收球权后只能回传或立刻再次丢失,那么它赖以生存的转换路线已经被结构性切断。此时不能把对手进攻低迷简单归结为某个前锋状态不好,也不能只用控球率描述优势。
这个修正让打法分析从“谁创造得更多”扩展到“谁让对手最擅长的路线消失了”。它比针对某支球队写死升降级结论更通用。
赛后复盘不只判对错
比分是必须记录的结果,但不是唯一评分标准。现在的复盘至少分三层。
结果层
记录 90 分钟赛果、精确比分、最终晋级和决胜阶段是否判断正确。不同阶段分别评分,不用最终结果覆盖中间判断。
过程层
检查预测中的核心因果是否成立:强队有没有稳定制造重大机会,弱队的反击或定位球路线是否真实存在,人员缺失是否确实影响了推进、终结或防守组织。
低比分猜对,但实际比赛由一方持续压制、只是被门将超常发挥或低效终结压住比分,只能算结果正确、过程部分正确。相反,开放比赛的方向判断正确,但总进球仍远超 xG 或 xGOT,也要区分“总进球基线太保守”和“极端终结方差”,不能把所有偏差都推给偶然性。
关键事件层
红牌、VAR、点球、门将失误、伤退和极端终结效率单独记录。红牌前比赛已经一边倒时,红牌更像放大器;红牌真正改变原本均衡的比赛时,才是主要状态转折。
不同数据源对射正、扑救、牌数和 xG 的计算可能不同。复盘应使用同一来源内部一致的统计,或者分别列出来源与口径,不能从多个来源各挑一个数字拼成看似完整、实际不存在的比赛记录。卡牌还要提前说明统计的是球员单黄、全部黄牌事件、两黄变红、直接红牌还是技术区牌。
两次复盘怎样真正改动了 Skill
这个月后半段有两次更新很能说明开发方法。
一次法国对西班牙的预测与复盘对话中,现有框架已经覆盖机会质量、压力质量、换人和淘汰赛阶段。真正缺失的只有两个窄问题:半场事件账本,以及控球方通过反抢切断对手转换发起点的结构性压制。最终只把这两条通用规则写进详细参考文档,没有写入任何“某队应该上调或下调”的本届赛事结论。
另一次英格兰对阿根廷的临场复盘中,缺口集中在领先方换人和扳平后的状态重置。更新同样没有扩张 Skill 入口,而是在临场规则中增加:后卫换前锋不自动等于防守升级;扳平后从比分和人员重新计算;没有模型或市场支撑时,不根据换人标签编造精确概率变化。
这两次改动都很小,但比增加更多球队描述更重要。Skill 的价值不在于记住某场比赛结论,而在于下次遇到相同结构时能更少犯一次同类错误。
哪些内容刻意没有写进去
连续复盘很容易导致过拟合,因此有几类信息被刻意挡在 Skill 之外:
- 某支球队在本届赛事应该永久上调或下调。
- 某个比分出现后,下一场机械增加同类比分概率。
- 浏览器某次读取失败对应的脆弱工具实现细节。
- 当前上下文和用户都没有提供的跨会话预测台账。
- 事后补造的胜平负概率与命中率。
只有能跨球队、跨轮次、跨数据源继续成立的判断方法,才进入参考框架。比赛特定事实保留在当次分析和复盘里,不伪装成通用足球规律。
为什么详细规则放在 reference
当前 Skill 仍然保持两层结构:
worldcup-predictor/
├── SKILL.md
└── references/
└── prediction-framework.md
SKILL.md 负责触发范围、核心流程、来源边界和标准输出;不断增长的比赛状态、卡牌、换人、VAR、复盘和校准规则放在 prediction-framework.md。这样既避免入口文件膨胀,也让 Agent 在需要深度分析时能读到完整规则。
完整设计和安装方式见《World Cup Predictor:给 AI Agent 的世界杯足球预测 Skill 设计》,源码维护在 Onlydreams/worldcup-predictor。
下一步:建立真正可量化的台账
目前这套方法已经能做定性校准,但还不能诚实地发布一个完整“预测命中率”。过去的预测并非每场都提前保存了统一字段和明确概率,事后补数字再计算评分,只会制造虚假的精度。
下一轮更适合从第一场开始记录:
比赛与预测时间
证据截止时间和实际来源层
90 分钟赛果与精确比分
最终晋级与决胜阶段
赛果信心与精确比分信心
关键缺失数据
过程判断与错误类别
只有赛前明确给出归一化胜平负概率时,赛后才计算 Brier Score;没有提前概率就保留 High、Medium、Low 等级,不把定性信心伪装成定量模型。
结论
一个预测 Skill 的成熟,不是它越来越敢给比分,而是它越来越清楚自己什么时候应该降低信心、什么时候必须重算,以及赛后究竟该修改哪一段判断链。
这个月最终沉淀下来的不是一组球队排名,而是一套更稳定的工作方式:证据分层,比赛分阶段,临场看状态变化,赛后分离结果、过程与关键事件,只把通用错误写回 Skill。
这比偶然猜中一个 2-1 更接近可持续的预测系统。