| name | post-review |
| description | 赛后复盘:获取比赛结果,对比推荐记录,计算命中率,分析失误原因,更新长期统计。在用户说「复盘」「昨天结果怎么样」「战绩」或每日09:30定时触发时使用。 |
| metadata | {"openclaw":{"emoji":"📋"}} |
赛后复盘(post-review)
获取已完场比赛的结果,对比推荐记录,计算命中率,分析失误原因,更新长期统计。
输入
- 需要复盘的日期(默认:昨天)
- 当日推荐记录(从 memory 中读取)
执行步骤
步骤 1:读取推荐记录
从每日记忆中获取需要复盘的推荐。若 memory/{复盘日期}.md 不存在,视为无推荐记录,直接执行下方「如果没有找到推荐记录」的后续逻辑(告知龙王、写入 ## 赛后复盘、结束)。
memory_get memory/{复盘日期}.md
找到推荐部分:在 memory 文件中查找所有二级标题为以下之一的 section:
## 推荐
## 推荐(*)(* 为时间,如 14:25)
取文件中最后出现的一个作为当日最终推荐。从该 section 内提取精选场次表、候补场次表、串关组合。
区分精选场次和候补场次:
- 精选场次:提取联赛、主队、客队、推荐内容、信心度、比赛ID
- 候补场次:同样提取,但标记为「候补」
复盘主体 = 精选场次(龙王实际投注的场次)。候补场次也做结果核对,但单独展示作为参考("如果选了会怎样"),不计入主要命中率统计。
补追待复盘场次:检查前 3 天({复盘日期-1} 到 {复盘日期-3})的 memory 文件,如果其中有标记为「待复盘」的场次,一并纳入本次复盘。这些场次:
- 在复盘报告中标注为「补复盘(原推荐日期:{日期})」
- 命中率计入原推荐日的统计;更新 MEMORY.md 累计值时合并入原推荐日贡献即可,无需修改原日 memory 的
## 赛后复盘
- 命中率和泊松 Top 6 校验正常计算
如果没有找到推荐记录(当日 + 待复盘均无):
- 告知龙王「{日期}没有推荐记录,无需复盘」
- 仍须在
memory/{复盘日期}.md 中追加写入(若文件不存在则创建):
## 赛后复盘
{日期} 无推荐记录,无需复盘。
以便 Heartbeat 不再重复触发复盘补漏。
- 结束流程(不执行步骤 2–9,不更新 MEMORY.md)
步骤 2:获取比赛结果
从推荐记录中取出每场比赛的比赛 ID,逐场打开分析页获取最终比分:
agent-browser tab new https://zq.titan007.com/analysis/{matchId}cn.htm
agent-browser wait --load networkidle
agent-browser snapshot
→ 提取页面顶部的最终比分(完场后页面会显示比分)
agent-browser tab close
逐场获取,每场间隔 1-2 秒。
如果推荐记录中比赛 ID 丢失,退化到列表页方案:
agent-browser open https://jc.titan007.com/index.aspx
agent-browser wait --load networkidle
→ 如需查看昨日赛程,切换日期选择器
→ agent-browser snapshot 或 eval 提取已完场比赛的比分
步骤 3:逐场核对
对每场推荐的比赛:
- 匹配比赛:通过主客队名在赛果列表中找到对应比赛
- 获取比分:记录最终比分(如 2:1)
- 判断命中:
胜平负:
| 推荐类型 | 命中判断规则 |
|---|
| 固定 2 项(首选+次选) | 推荐为 首选 + 次选(如 平+胜、胜平/平负/胜负)。实际赛果命中首选或次选任一即算该场胜平负命中。赛果判定:主胜=主队进球>客队,平局=主队=客队,客胜=客队进球>主队。 |
亚盘完整规则:
设净胜球 = 主队进球 - 客队进球,盘口 H = 主队让球数(正值主让,负值主受让)。调整后净胜球 D = 净胜球 - H。
| 盘口类型 | 举例 | 上盘(让球方)赢 | 走水 | 下盘(受让方)赢 |
|---|
| 整数盘 | -1, 0, +1 | D > 0 | D = 0 | D < 0 |
| 半球盘 | -0.5, -1.5, +0.5 | D > 0 | 不可能走水 | D < 0 |
| 四分之一球盘 | -0.75, -1.25, +0.25 | D > 0(全赢) | — | D < 0(全输) |
| ↑ 同上 | ↑ | — | — | — |
四分之一球盘详细规则(-0.75 = 半球/一球, -1.25 = 一球/球半, +0.25 = 平手/半球 等):
- 将盘口拆为两注:H₁ = H - 0.25, H₂ = H + 0.25
- 分别按整数/半球盘规则判定两注的输赢
- 全赢:两注都赢 → 命中
- 赢半:一注赢 + 一注走水 → 命中(半),统计计 0.5 场命中
- 输半:一注输 + 一注走水 → 未中(半),统计计 0.5 场未中
- 全输:两注都输 → 未中
大小球完整规则:
设总进球 T = 主队进球 + 客队进球。
| 盘口类型 | 举例 | 大球赢 | 走水 | 小球赢 |
|---|
| 半数盘 | 2.5, 3.5 | T > 盘口 | 不可能 | T < 盘口 |
| 整数盘 | 2, 3 | T > 盘口 | T = 盘口 | T < 盘口 |
| 四分之一数盘 | 2.25, 2.75 | 拆两注,规则同让球四分之一球盘 | — | 同上 |
大小球首选/次选(新口径):
- 若推荐记录中大小球写为「首选 …;次选 …」:
- 严格命中(用于统计):只判定首选是否命中(次选不计入命中率分子分母,仅用于覆盖展示)。
- 覆盖命中(用于风控评估):首选或次选任一命中则记为覆盖命中(可在逐场报告里单独写一行,不计入主命中率)。
- 若推荐记录中大小球仅有单一方向(旧记录):按旧规则直接判定该方向命中即可。
- 标记结果:命中 / 未中 / 走水 / 赢半 / 输半
走水和半赢半输场次的统计规则:
- 走水:不计入命中率(分子分母均排除),复盘报告中单独列出「⏸ 走水 N 场」
- 赢半:分子 +0.5,分母 +1
- 输半:分子 +0,分母 +1
- 命中率 = (全赢场次 + 赢半场次×0.5) / (总推荐 - 走水场次)
- 组合推荐处理:如果是组合推荐(如「主胜 + 大2.5球」),按玩法拆分分别判断命中,计入各玩法命中率(玩法类型:胜平负、亚盘、大小球、进球数;让球推荐计入亚盘);但在"推荐场次"维度仍算 1 场,任一玩法命中即视为该场命中。标注「⚠️ 观望」的玩法:该场在该玩法上不计入推荐数、不计入命中数(分子分母均排除),与 recommendation 的「多玩法统计规则」一致。
- 比分预测核对:将实际比分与推荐比分对比(泊松相关比分最多 6 个)
- 完全命中其中一个 → 标记 🎯 精准命中
- 未命中但总进球数一致 → 标记「进球数正确」
- 完全不中 → 标记「比分未中」
- 从当日 memory 读取「泊松比分简表」,只检查实际比分是否落在 Top 6 中;不再读取或要求完整 0:0~7:7 概率表。
- 两套比分增强:若该场在 ## 深度分析 中存在「与大小球同方向 Top 3」——即当时有大小球 vs 泊松矛盾、存了两套比分——则分别检查实际比分是否命中「整体 Top 3」或「同方向 Top 3」,用于对比矛盾场次的方向选择。
- 串关核对:从当日 memory 读取串关组合建议,逐个组合判断
- 2 串 1:两场推荐都命中 → 串关命中;任一未中 → 串关未中
- 3 串 1:三场推荐全部命中 → 串关命中;任一未中 → 串关未中
- 比分串关:两场比分都精准命中 → 串关命中
- 混合串关(如 1 场比分 + 1 场胜平负):各自按对应规则判断,全部命中才算串关命中
- 记录每个组合的预期赔率和实际结果
步骤 3.5:分析质量自评(泊松模型质量)
用以下指标评估比分模型质量:
- Top 6 命中:实际比分是否出现在泊松比分简表 Top 6 中?
- Top 4 命中 = 模型优秀
- Top 5-6 命中 = 模型合理
- Top 6 之外 = 模型偏差大,需检查 λ 值设定
- λ 偏差方向:实际总进球 vs 预期总进球(λ1+λ2),判断 λ 是系统性偏高还是偏低
- 两套比分场次:若该场深度分析中存在「与大小球同方向 Top 3」,在逐场输出中写「整体 Top3 命中/未中;同方向 Top3 命中/未中」,便于长期对比两套策略
步骤 4:分析复盘(逐场,不只看未命中)
对步骤 2 提取的每一场精选场次(及待复盘场次),从 memory 中读取该场的深度分析摘要:
- 定位方式:在
## 深度分析 中按该场 matchId(摘要块内含 比赛ID: {matchId})或 联赛 + 主队 + 客队 匹配到对应的 ### {联赛} {主队} vs {客队}(...) 摘要块,再读取其下「综合评估」「泊松比分简表」等子块。若某场在 ## 深度分析 中无对应块(如补复盘且原日未存摘要),该场 4a 中泊松锚定等写「无摘要」或省略。
memory_get memory/{复盘日期}.md
4a. 关键判断回顾(每场都做)
回顾深度分析第 8 步的「关键点/疑点/矛盾」,逐一与实际结果对照:
- 当时识别的矛盾信号——实际结果支持了哪一方?
- 例:「亚盘看好主队但欧指偏向平局」→ 实际结果是平局 → 欧指信号更准
- 当时标注的风险点——有没有真的发生?
- 例:「轮换风险」→ 确实轮换了 3 名主力,导致进攻乏力
- 当时的核心判断依据——赛后来看是否成立?
- 例:「看好主胜的核心依据是主场 5 连胜」→ 但对手近 5 场客场 4 胜 1 平,均值回归更该看客队
- RLM 信号——逆向线路移动最终指向了正确方向吗?
- 泊松方向校验:从该场深度分析摘要读取「大小球 vs 泊松比分」或其他方向矛盾。结合赛果注明:当时泊松方向、盘赔方向、推荐方向分别是什么,实际结果支持哪一侧;不再复盘 EV。
- 大小球盘口锚定(A 方案)(若摘要中有):从该场深度分析摘要的「泊松比分简表」头两行读取
大小球盘口锚定 = 启用/未启用(w=0.25, line=..., λtot: X→Y)。逐场报告中必须带一行,便于长期评估锚定是否在“帮忙还是拖后腿”:
- 启用:记录 line(含 2.25→2.5 / 2.75→3.0 的近似结果)、锚定前后 λtot 变化(Δλtot=Y−X)
- 未启用:写「未启用」
- 若摘要缺失该字段(旧格式)则写「无记录(旧摘要)」并不计入锚定统计
输出:每场 2-3 句话的判断回顾。
4b. 失误分析(仅未命中场次)
对未命中的场次,深入分析失误原因:
- 哪个维度的判断与实际不符?
- 是信息不足还是判断逻辑有误?
- 是否有赛前未预见的因素(红牌、伤退、天气等)?
- 泊松 λ 值是偏高还是偏低?偏了多少?
4c. 经验教训提炼(每次复盘必做)
从本日所有场次(命中 + 未中)中,提炼可复用的教训。不是就事论事,而是找到可以指导未来分析的规律:
格式:
💡 教训:{一句话概括}
来源:{联赛} {主队} vs {客队}({命中/未中})
详情:{具体发现}
行动:{未来遇到类似情况怎么做}
好教训的标准:
- 可泛化(不只对这一场有用,对同类型比赛都有参考价值)
- 可行动(明确告诉未来分析时该怎么调整)
- 有数据支撑(不是"运气不好"这种无意义的总结)
示例:
💡 教训:盘赔分歧时欧指比亚盘更可靠
来源:[英超] 热刺 vs 利物浦(未中)
详情:亚盘看好热刺让球(历史用词:亚盘方向),但欧指和平博都偏向客胜。最终选了亚盘方向,实际客胜。
行动:欧指与亚盘方向矛盾时,优先信任欧指(尤其平博方向),亚盘可能受注码影响失真。
💡 教训:赛程陷阱信号在豪门 vs 弱旅局中有效率极高
来源:[西甲] 皇马 vs 赫塔菲(命中)
详情:皇马下一场欧冠半决赛,本场果然精神松懈,只赢 1:0,低于预期。
行动:继续给「⚡ 赛程陷阱」标记高权重,豪门 vs 弱旅 + 下场有大赛 = 小球 + 低比分是大概率。
将有价值的教训写入 MEMORY.md 的「关键教训」部分。不是每天都有新教训——如果今天没有新发现,不硬写。但如果有,一定要记下来。
步骤 4.5:反事实分析
对每场推荐做"如果反着买会怎样"的回顾,帮助识别系统性偏差:
- 推荐主胜但实际客胜/平局:如果反着买(客胜/平局),赔率是多少?盈利几何?
- 推荐大球但实际小球:反向操作收益如何?
- 比分未中:实际比分是否不在泊松 Top 6 中?λ 值是否明显偏高或偏低?
输出格式:
🔄 反事实分析:
- {比赛1}:推荐{推荐} → 实际{结果}。反向操作赔率 {X.XX},{反思}
- {比赛2}:...
关注的模式:
- 如果连续多天反着买都能中 → 存在系统性方向偏差,需要在策略调优中记录
- 如果实际比分持续不在泊松 Top 6 内 → λ 值估算可能系统性偏高或偏低
步骤 5:计算统计
当日统计:
- 推荐场次数(含赢半/输半各计 1 场)
- 命中场次数(全赢计 1,赢半计 0.5)
- 走水场次数(不计入命中率)
- 命中率 = (全赢 + 赢半×0.5) / (总推荐 - 走水)(与步骤 3 公式一致)
- 大小球盘口锚定(A 方案)效果统计(仅统计有记录的场次;旧摘要缺字段的不计入):
- 启用锚定场次:N 场;未启用:M 场
- 大小球严格命中率对比(首选):启用组 {XX%} vs 未启用组 {XX%}
- λtot 误差对比(可选,若你在逐场里已计算):启用组平均 |(实际总进球)-(锚定后 λtot)| vs 未启用组平均 |(实际总进球)-(原 λtot)|
更新累计统计:
先读取 MEMORY.md 中的现有统计:
memory_get MEMORY.md
更新(与 MEMORY.md 结构一致):
- 累计战绩 · 总:总推荐 += 当日推荐数,总命中 += 当日命中数,累计命中率 = 总命中 / 总推荐
- 累计战绩 · 各联赛:按联赛维度累加推荐数、命中数,更新该表(新出现的联赛自动增加一行);命中率 = 该联赛命中数 / 该联赛推荐数
- 比分预测统计 · 总:精准命中数、进球数正确数、精准率、泊松模型质量
- 比分预测统计 · 各联赛:按联赛维度累加精准命中、进球数正确、推荐场次,更新该表(新联赛自动增加一行);精准率 = 该联赛精准命中 / 该联赛推荐场次
- 各玩法命中率:按玩法类型累加,玩法为 胜平负、亚盘、大小球、进球数 四类(让球推荐计入亚盘);更新表格中对应行的推荐数、命中数、命中率
- 泊松模型质量:Top 4 命中率、Top 6 命中率、λ 偏差方向
- 串关统计:推荐组合数、命中组合数、按串关类型分(2串1/3串1/比分串/混合串)
- 反事实偏差监测:是否存在连续反向命中趋势
步骤 6:策略复盘(当累计数据 >= 20 场时)
当累计推荐达到 20 场以上,额外做一次策略复盘:
- 哪个联赛命中率最高/最低?
- 哪个玩法命中率最高/最低?
- 高信心度推荐的命中率 vs 中信心度的命中率?
- 是否需要调整策略?(如「英冠命中率持续低于 40%,建议降低英冠场次的优先级」)
将策略复盘结论写入 MEMORY.md 的「策略调优记录」部分。
步骤 7:生成复盘报告
📋 {日期} 复盘报告
✅ 命中:
- [{联赛}] {主队} {比分} {客队} | 推荐:{推荐内容} → ✅ 命中
🔗 https://zq.titan007.com/analysis/{matchId}cn.htm
比分预测:{比分1} / {比分2} / {比分3} / {比分4} → {🎯精准/进球数正确/未中}
{若大小球有首选/次选:大小球覆盖:{✅覆盖命中/❌覆盖未中}(首选:{✅/❌/走水/赢半/输半};次选:{✅/❌/走水/赢半/输半};统计仅算首选)}
泊松 Top6:{命中/未中}(如命中:{比分} {概率}%)
{若该场有两套比分,多一行:整体Top3 {命中/未中};同方向Top3 {命中/未中}}
OU锚定:{启用/未启用}(line {X},λtot {X.XX}→{Y.YY},Δ{+/-X.XX};w=0.25){或 无记录(旧摘要)}
关键判断回顾:{当时的矛盾/风险信号与实际结果的对照}
❌ 未中:
- [{联赛}] {主队} {比分} {客队} | 推荐:{推荐内容} → ❌ 未中
🔗 https://zq.titan007.com/analysis/{matchId}cn.htm
比分预测:{比分1} / {比分2} / {比分3} / {比分4} → {🎯精准/进球数正确/未中}
{若大小球有首选/次选:大小球覆盖:{✅覆盖命中/❌覆盖未中}(首选:{✅/❌/走水/赢半/输半};次选:{✅/❌/走水/赢半/输半};统计仅算首选)}
泊松 Top6:{命中/未中}(如命中:{比分} {概率}%)
{若该场有两套比分,多一行:整体Top3 {命中/未中};同方向Top3 {命中/未中}}
OU锚定:{启用/未启用}(line {X},λtot {X.XX}→{Y.YY},Δ{+/-X.XX};w=0.25){或 无记录(旧摘要)}
关键判断回顾:{当时的矛盾/风险信号与实际结果的对照}
失误分析:{哪个环节判断错误、为什么错}
🔄 反事实分析:
- {比赛1}:推荐{推荐} → 实际{结果}。反向赔率 {X.XX},{反思}
- ...
💡 今日教训:
- {教训1:一句话概括} → 行动:{未来怎么做}
- {教训2}(如有)
- (无新发现则写「今日无新教训」)
📈 当日战绩:推荐 {N} 场,命中 {N} 场,命中率 {XX}%
📈 比分预测:精准命中 {N} 场,进球数正确 {N} 场
📈 泊松模型质量:Top 4 命中 {N}/{总N},Top 6 命中 {N}/{总N},λ 偏差 {偏高/偏低/正常}
📈 OU锚定效果(大小球盘口锚定,A方案):启用 {N} 场 / 未启用 {M} 场;大小球严格命中率 启用 {XX%} vs 未启用 {XX%}
📈 串关复盘:
- 组合A(2串1):{场次1} + {场次2} → {✅全中/❌场次X未中}(预期赔率 {XX})
- 组合B(...):...
📈 累计战绩:推荐 {N} 场,命中 {N} 场,命中率 {XX}%
📈 累计比分:精准命中 {N}/{总N}({XX}%),Top 6 命中 {N}/{总N}
📈 累计串关:推荐 {N} 组,命中 {N} 组({XX}%)
如果有策略复盘结论,追加:
🔧 策略观察:
- {结论1}
- {结论2}
步骤 8:写入记忆
每日记忆:将复盘报告写入 memory/{复盘日期}.md:
- 若该文件中已存在
## 赛后复盘 section → 替换该 section 的内容为本次复盘报告(同一复盘日只保留最新一次结果,不追加第二段)
- 若不存在 → 在文件末尾追加上述 section 及内容
## 赛后复盘
{完整复盘报告}
### 样本数据(结构化,供后续程序抽取)
> 仅记录“已在本次复盘中计算/展示过”的关键字段,不新增抓取步骤。
| matchId | 联赛 | 主队 vs 客队 | 比分 | 胜平负命中(首/次任一) | 亚盘命中 | 大小球严格(首选) | 大小球覆盖(首或次) | 比分命中 | 泊松Top6 | 两套比分命中(如有) | OU锚定(启用/未启用/无记录) | λtot(原→锚定后,如有) |
| ------ | ---- | ----------- | ---- | --------------------- | -------- | --------------- | ------------------ | -------- | --------- | ------------------ | -------------------------- | --------------------- |
| {matchId} | {联赛} | {主队} vs {客队} | {X:X} | {✅/❌} | {✅/❌/走水/赢半/输半/观望} | {✅/❌/走水/赢半/输半/观望} | {✅/❌/—} | {🎯/进球数正确/未中} | {✅/❌} | {整体Top3✅/❌;同方向Top3✅/❌/—} | {启用/未启用/无记录} | {X.XX→Y.YY/—} |
长期记忆:更新 MEMORY.md(与 MEMORY 中「累计战绩」「比分预测统计」「各玩法命中率」结构一致):
- 累计战绩:总数字 +「各联赛」表(按联赛累加,新联赛加行)
- 比分预测统计:总数字 +「各联赛」表(按联赛累加,新联赛加行)
- 各玩法命中率:胜平负、亚盘、大小球、进球数 四类表格(让球计入亚盘)
- 串关、泊松质量等其余统计项
- 如有新的策略结论,追加到「策略调优记录」
- 如有新的教训,追加到「关键教训」
注意 MEMORY.md 维护规则:
- 策略调优记录:不允许重复。新策略与已有条目主题相同时,合并更新原条目(补充新数据/案例、修正结论),不另起一条
- 关键教训:不允许重复。新教训与已有条目主题相同时,合并更新原条目(追加验证案例、强化或修正结论),不另起一条
步骤 9:推送
通过 messaging 工具将复盘报告推送给龙王。
特殊场景
比赛未全部完场
如果部分推荐比赛尚未完场(如凌晨场次):
- 先复盘已完场的
- 标记未完场的为「待复盘」,写入当日 memory:若该日 memory 中已存在
### 待复盘 子块 → 替换该子块内容为本次待复盘表格;若不存在 → 在 ## 赛后复盘 下追加该子块。格式如下:
### 待复盘
| 比赛 | 比赛ID | 推荐 | 原因 |
| ---- | ------ | ---- | ---- |
| {主队} vs {客队} | {matchId} | {推荐内容} | 比赛未完场 |
- 补追机制:后续每次复盘时,步骤 1 会自动检查前 3 天的「待复盘」场次并补上。超过 3 天仍未完场的(推迟/取消),按「取消」处理,将「待复盘」改为「已取消」
比赛取消/推迟
首次复盘(无历史数据)
- 正常计算当日统计
- 累计统计 = 当日统计
- 跳过策略复盘(数据不足)
输出
复盘报告(文本格式),已推送或已写入记忆。MEMORY.md 已更新。