Game Assistant Walkthrough
使用时机
- 用户表达要开始玩游戏并打开攻略助手,或明确要求下载/更新攻略。
- 常见触发语:
- 我要玩游戏了
- 打开攻略
- 开始游戏
- 启动攻略助手
- 下载攻略
- 下载XXX攻略
- 更新攻略
- 打开XXX攻略
- 我要玩XXX游戏了
目标
- 先识别用户意图:
下载攻略或打开攻略。 - 两种意图都可复用同一套游戏名获取机制(原话提取、游戏检测、联网补全映射)。
- 当意图为
下载攻略时,只执行下载与导入,不启动game_client.py。 - 当意图为
打开攻略且原话明确给出游戏名时,直接启动game_client.py --walkthrough-game-name {game_name}。 - 当意图为
打开攻略且原话未明确给出游戏名时,按原流程检测后启动game_client.py。 - 只要最终得到
process和game_name,都必须写入(或更新)detected_processes.json,不能仅在“联网补全”分支写入。
意图分流规则
- 若用户原话包含
下载攻略、下载XXX攻略、更新攻略等下载/更新诉求,判定为下载攻略。 - 若用户原话包含
打开攻略、我要玩游戏了、开始游戏、启动攻略助手等开启助手诉求,判定为打开攻略。 - 当同一句里同时出现下载与打开含义时,优先按用户的下载诉求执行,即先判定为
下载攻略。 - 若用户原话属于
打开XXX攻略、我要玩XXX游戏了这类“打开攻略 + 明确游戏名”表达,进入“打开攻略-直启分支”。
识别用户原话中的游戏名
- 优先读取 skill 参数里的用户原话。
- 如果原话清楚表达了目标游戏名,则直接使用,不运行检测。
- 可接受的明确表达包括但不限于:
下载黑神话悟空攻略帮我下载黑神话悟空的攻略更新一下黑神话悟空攻略- 仅移除动作词和尾部的
攻略、的攻略、图文攻略等固定修饰,不要擅自改写游戏名。 - 如果原话里没有明确游戏名,或游戏名提取后仍明显为空,再进入“游戏检测”步骤。
打开攻略-直启分支(新增)
触发条件:
- 意图已判定为
打开攻略。 - 用户原话可稳定提取出明确
game_name,典型如:打开XXX攻略、我要玩XXX游戏了。
执行规则:
- 命中该分支时,不运行
detect_game_with_retries.py。 - 直接启动客户端并传参:
python ./scripts/game_client.py --walkthrough-game-name XXX
- 其中
XXX必须替换为从用户原话提取到的game_name。 - 若提取失败或结果为空,则回退到“游戏检测”流程。
游戏检测
在当前 skill 目录执行检测命令(该脚本内部会执行 game_detection.py,并按 1 秒间隔最多重试 5 次):
python ./scripts/detect_game_with_retries.py
解析标准输出 JSON,重点读取 process、name。
分支规则:
process为null:表示process在 5 次内始终为空,直接结束 skill,不启动game_client.py。process不为null 并且 name为null或空:表示process非空但name为空,进入“联网补全游戏名”。name不为null且不为空:表示name已存在,直接作为后续动作所需的游戏名。
联网补全游戏名(必须由 agent 完成)
- 使用 agent 的联网能力(如网页检索/浏览)搜索:
{process} 对应的游戏名。 - 禁止写脚本调用搜索引擎 API。
- 选择最可信的中文游戏名(优先官方名称或高可信来源交叉验证)。
- 若无法可靠确定游戏名,结束 skill,不要猜测写入。
- 联网补全得到
game_name后,进入下方“写入 detected_processes.json(统一规则)”步骤。
写入 detected_processes.json(统一规则)
适用时机:只要当前已经拿到 process(非空)和最终 game_name(非空),无论 game_name 来源于“原话提取”“检测结果 name”“联网补全”,都执行以下写入。
- 不再在 skill 内手动读写 JSON,统一调用脚本:
python ./scripts/append_detected_process.py "{process}" "{game_name}"
- 由该脚本负责以下行为:
- 目标文件为当前 skill 目录上层目录的
detected_processes.json。 - 若文件不存在则创建,并以空对象
{}初始化。 - 以 JSON 对象映射写入:
{"process_name": "game_name"}。 - 若 key 已存在则更新为最新
game_name。 - 若原文件内容为空或 JSON 非法,按空对象
{}处理后再写入。
- 目标文件为当前 skill 目录上层目录的
- 该步骤在两种意图下都必须执行:只要
process和最终game_name都非空,就先调用写入脚本,再进入后续动作。
动作执行
首先需要确保python环境的已安装这些依赖库:tkinter、pillow、keyboard、pyaudio、pyperclip、pystray、beautifulsoup4。
当你已经得到最终 game_name 后,按意图执行:
- 当意图为
下载攻略:只下载并导入,不启动客户端。
python ./scripts/download_and_import_walkthrough.py "{game_name}"
- 当意图为
打开攻略且命中“打开攻略-直启分支”:直接按带参命令启动客户端。
python ./scripts/game_client.py --walkthrough-game-name "{game_name}"
- 当意图为
打开攻略且未命中“打开攻略-直启分支”:按原流程启动客户端。
python ./scripts/game_client.py
补充约定:
- 下载目录固定为当前目录下的
walkthrough/。 - 导入时
instance_id使用最终的game_name。 json_path使用walkthrough/{safe_game_name}/text_images.json。
完成条件
- 当意图为
下载攻略:已完成攻略下载并成功导入;或 - 当意图为
打开攻略:成功启动game_client.py;或 process连续 5 次检测为空并按规则结束。
微信扫一扫