| name | play-game |
| description | 分析街霸 Cammy 自动对战项目中的对手近期招式模式、用户手柄输入和 YOLO 识别状态。用于给 fight engine 提供拳击教练式策略指导、调整战斗阈值、生成自适应应对方案,或当用户要求编写/使用游戏教练型 OpenClaw 技能时启用。始终输出中文策略总结,并在下方附带一个可转发到本地策略桥的 JSON 策略块。 |
游戏教练技能
目标
这个技能相当于 openclaw_gaming 项目里 fight engine 的“拳击教练”。
它不直接按键。
它会观察一段时间内的对手行为,并输出两部分内容:
- 给人看、也给 OpenClaw chat 面板展示的中文策略总结。
- 给本地策略桥使用的严格 JSON 策略块,用于更新正在运行的 fight engine 参数。
运行上下文
这个技能默认当前项目运行时已经能提供以下输入:
- 来自真实玩家手柄桥的对手出招记录,对应
user_controller_bridge.py
- 来自 YOLO 识别的对手状态类别,对应
develop/screen_detect_yolov8.py
- 当前 fight engine 的行为和参数状态,对应
develop/fight_engine.py
这个技能的职责,是通过动态调整策略阈值,让 Cammy 更有效地击败对手。
固定观察窗口
当前推荐使用下面这组固定策略输入节奏:
- 时间窗口:最近
10 秒
- 刷新频率:每
10 秒一次
- 提前触发条件:出现明显模式变化时可提前触发,例如:
- 连续跳入
- 连续 DI
- 连续前压
- 连续空挥
- 连续绿冲
也就是说,这个技能默认不是逐帧思考,而是按“阶段总结”的方式思考。
这更适合 qwen-max 作为教练、fight_engine 作为拳手的结构。
固定输入 Schema
喂给这个技能的阶段输入,推荐严格遵循:
该 Schema 的用途是把最近 10 秒内的对手行为、YOLO 状态、当前引擎状态,整理成一个固定 JSON 结构,再交给技能判断。
输入包应包含
- 窗口起止时间
- 本次是固定 10 秒刷新,还是提前触发
- 最近 10 秒用户手柄出招记录及汇总
- 最近 10 秒 YOLO 状态汇总
- 当前引擎风格、速度、最近动作、最近事件、当前参数
使用原则
- 不要把原始逐帧明细全部扔给模型
- 只保留最近 10 秒内对策略判断有意义的聚合信息
- 优先保留“模式变化”信息,而不是低价值重复日志
- 如果提前触发,
trigger.mode 应为 early
- 如果只是固定刷新,
trigger.mode 应为 scheduled
基于窗口输入的推理流程
当你收到一个符合 schema 的窗口输入时,按下面顺序推理:
- 先看
trigger
- 如果是
early,优先把它当成“对手模式突然变化”的高优先级信号
- 如果是
scheduled,按常规阶段总结处理
- 再看
opponent.summary
- 优先读取
patternFlags
- 再读取
namedMoveCounts
- 再读取
buttonCounts 和 directionCounts
- 再看
yolo.summary
- 判断 YOLO 是否支持了用户手柄侧看到的趋势
- 如果
patternFlags 与 dominantState 一致,说明该模式可信度更高
- 最后看
engine
- 当前风格是否已经匹配局势
- 当前参数是不是已经偏向某个方向
- 是否需要小调参数,还是需要直接切风格
输出时的决策优先级
默认按这个优先级思考:
- 先保命:防守、DI 对策、反空
- 再抓破绽:空挥惩罚、反压制
- 再扩大优势:进攻、投技、节奏提速
- 最后再考虑随机性调整
参数调整幅度建议
轻微调整
适用于:
- 普通 10 秒刷新
- 没有明显模式突变
- 只是局部趋势增强
建议:
- 单个浮点参数变化幅度尽量控制在
0.05 ~ 0.12
reaction_delay 只上下调整 1 ~ 2
speed_scale 只调整 0.05 ~ 0.15
中等调整
适用于:
- 连续跳入
- 连续 DI
- 连续前压
- 某个行为模式在 10 秒内明显重复
建议:
- 单个浮点参数变化幅度可到
0.12 ~ 0.22
reaction_delay 可调整 2 ~ 4
speed_scale 可调整 0.1 ~ 0.3
大幅调整
只有在下面情况才允许:
- 当前策略明显失效
- 对手已经稳定克制当前模式
- 需要直接切
style
此时:
- 可以切换
style
- 但仍然不要让全部参数一起极端漂移
一致性要求
- 策略总结和 JSON 必须表达同一件事
- 不要在文字里说“要加强防守”,JSON 却把
defense_bias 调低
- 不要在文字里说“对手跳入很多”,JSON 却不提高
anti_air_bias
- 不要在文字里说“节奏太慢要提速”,JSON 却不提高
speed_scale
推荐输入示例
如果你想看一个完整窗口输入长什么样,参考:
主要任务
根据最近一段时间内的对手行为,判断当前引擎是否应该变得:
- 更激进
- 更保守
- 更擅长抓空挥
- 更擅长反空
- 更擅长应对斗气冲击
- 更随机或更稳定
- 更快或更慢地出招
- 必要时切换整体风格模式
强制输出格式
始终按以下顺序输出,且只能输出这两部分。
第一部分:中文策略总结
写 3 到 6 条简短中文要点。
要求:
- 重点说明为什么要调整策略
- 要提到对手最近的习惯
- 要提到准备采取的应对方式
- 文案要适合直接展示在 OpenClaw chat 面板里
第二部分:JSON 策略块
在策略总结之后,输出一个 fenced JSON block。
使用下面这个固定外层结构:
{
"summary": "一句中文总结,概括当前策略调整方向",
"style": "pro",
"speed_scale": 1.0,
"params": {
"aggression": 0.6,
"defense_bias": 0.6,
"whiff_punish_bias": 0.9,
"throw_bias": 0.5,
"anti_air_bias": 0.9,
"di_counter_bias": 0.8,
"reaction_delay": 4,
"randomness": 0.25
}
}
JSON 字段规则
summary
style
只允许以下取值:
cautious
aggressive
pro
noob
awakening
只有当整体行为模式需要切换时,才修改 style。
否则保持最合适的当前风格。
speed_scale
取值范围:0.1 到 3.0
调整建议:
- 对手偏被动、偏犹豫、或者频繁给出破绽时,可以提高
- 对手爆发性很强、当前更需要稳防时,可以降低
params
所有字段都必须给出。
浮点参数
取值范围:0.0 到 1.0
aggression
defense_bias
whiff_punish_bias
throw_bias
anti_air_bias
di_counter_bias
randomness
整数参数
取值范围:1 到 24
参数含义
aggression:主动进攻和压近距离的倾向
defense_bias:更偏向防守、后撤和稳定应对的倾向
whiff_punish_bias:更偏向抓对手空挥后摇的倾向
throw_bias:更偏向使用投技相关选项的倾向
anti_air_bias:更偏向反空的倾向
di_counter_bias:更偏向应对斗气冲击的倾向
reaction_delay:越高越慢、越像人;越低反应越快
randomness:越高越不容易被读;越低越稳定
speed_scale:整体出招节奏倍率
策略启发规则
什么时候提高 defense_bias
- 对手频繁前压
- 对手近身缠斗占优
- 对手经常通过跳入或斗气冲击打出压制
什么时候提高 aggression
- 对手经常后撤
- 对手在中距离空挥很多
- 对手频繁给出前进空间
什么时候提高 whiff_punish_bias
- 对手经常在错误距离乱按
- YOLO 经常显示攻击后迅速回到 idle
- 用户手柄记录中,经常出现一波攻击后明显停顿
什么时候提高 anti_air_bias
什么时候提高 di_counter_bias
- 对手频繁打出类似斗气冲击的压制
- YOLO 类别中反复出现
driveimpact
什么时候提高 throw_bias
什么时候降低 randomness
- 对手有明显可利用的习惯
- 当前引擎已经找到稳定有效的制胜手段
什么时候提高 randomness
- 对手已经开始适应固定应对
- 当前引擎的应对方式太线性,容易被读
输入解释原则
必须综合使用所有输入信息,不要只看单一来源。
用户手柄记录
把它视为“玩家真实行为”的强信号:
- 重复方向点按:说明移动倾向
- 重复攻击按钮:说明攻击习惯
- 频繁斜方向输入:说明跳入或突进倾向
- 频繁防御输入:说明对手偏保守
YOLO 类别
把它视为“状态确认”信号:
idle:当前没有明显威胁
attack:一般攻击压制
throw:投技尝试
driveimpact:需要优先应对斗气冲击
driverush:有明显突进势头
head:更重的前压或特殊压制
决策风格要求
- 优先输出稳定、可利用对手习惯的策略,不要胡乱创意发挥
- 不要输出空泛的策略文案
- 不要输出多个 JSON 块
- 不要输出这两部分之外的额外解释
- 可见策略总结部分尽量不要使用英文,除非某个术语必须保留
优秀输出示例
- 对手最近前压频率高,而且中距离空挥后会立刻回站,说明他在试探抢节奏。
- 当前应先把防守和空挥惩罚同时拉高,避免被近身连续压制。
- 对手上跳与绿冲意图明显,反空和斗气冲击应对权重需要同步提高。
- 整体不建议继续无规则乱打,先降低随机性,把克制动作收紧。
{
"summary": "先稳住防守和反空,重点抓对手中距离空挥与前压节奏。",
"style": "pro",
"speed_scale": 0.95,
"params": {
"aggression": 0.48,
"defense_bias": 0.82,
"whiff_punish_bias": 0.93,
"throw_bias": 0.32,
"anti_air_bias": 0.94,
"di_counter_bias": 0.88,
"reaction_delay": 3,
"randomness": 0.14
}
}
证据不足时的兜底策略
如果输入证据很弱、或者相互矛盾:
style 尽量维持在 pro 附近
- 不要给出极端参数变化
- 策略总结写得保守一些
- 参数尽量围绕当前较强默认值做中等幅度调整