AceAttorney

AIGameAssistant

"游戏攻略和知识查询助手。当玩家询问游戏攻略、通关方法、任务完成方式、游戏背景故事、游戏机制、角色信息等知识时调用此技能。"

AceAttorney 1 Updated 6d ago

Resources

11
GitHub

Install

npx skillscat add aceattorney/aigameassistant

Install via the SkillsCat registry.

SKILL.md

AIGameAssistant - 游戏攻略与知识查询助手

核心定位

帮助玩家获取游戏攻略和相关知识。所有回答必须基于脚本从权威游戏攻略站和百科网站查询到的真实内容,绝不编造信息。

开发者注意: 脚本实现规范、配置结构、解析器规则等详细内容见 DESIGN.md

功能范围

攻略查询

  • 通关攻略:主线剧情、支线任务、Boss 打法
  • 地图指引:位置导航、隐藏物品、收集要素
  • 玩法技巧:操作指南、配置建议、玩法心得
  • 数据信息:道具获取、装备强化、技能加点

知识查询

  • 游戏背景:世界观、剧情故事、角色背景
  • 机制解析:战斗系统、经济系统、养成系统
  • 资料查询:角色数据、敌人数据、物品数据
  • 历史信息:开发信息、更新日志、游戏评测

查询工具

walkthrough_search.py — 攻略查询

调用方式: 必须用 python <脚本路径> 执行,不可直接 ./脚本名(Windows 无 shebang 支持)。

# 并行全源搜索(默认模式)——所有源同时查询,NDJSON 格式输出
python scripts/walkthrough_search.py --game "游戏名" --keyword "攻略关键词"

# 单源直达(记忆命中 high 时使用——跳过其他源)
python scripts/walkthrough_search.py --game "游戏名" --keyword "攻略关键词" --source gamersky
python scripts/walkthrough_search.py --game "游戏名" --keyword "攻略关键词" --source archive
python scripts/walkthrough_search.py --game "游戏名" --keyword "攻略关键词" --source reddit
python scripts/walkthrough_search.py --game "游戏名" --keyword "攻略关键词" --source search

可用 source 值: all | gamersky | archive | reddit | search

并行模式搜索顺序--source all 或不指定 source):

全部源并行启动(20 秒总超时):
├─ 游民星空(中文攻略站)
│   ├─ 翻页合并(最多5页)
│   ├─ 内容清洗(去页脚噪音/导航)
│   └─ 图片懒加载修复(data-src → 真实截图)
├─ Archive.org 攻略书(官方攻略书扫描版)
├─ Reddit 社区(retrogaming/Gameboy/nds/3DS/PSP等9个子板)
└─ DuckDuckGo 搜索引擎兜底(优先游民/游侠/B站等攻略站)

等待所有源完成 → 输出 NDJSON(每行一个源的 JSON 结果)
超时源 → {"success": false, "error": "timeout"}

返回格式(NDJSON): 每行一个 JSON 对象,包含 success, source, url, title, content, images (真实URL), archive_id (如有)

wiki_search.py — 百科查询

python scripts/wiki_search.py --game "游戏名" --topic "知识主题"

搜索顺序:

Step 1: Wiki 路由匹配(config/wikis/ 目录下按游戏 slug 组织的独立配置文件)
Step 2: 通用 Wiki(Wikipedia → 萌娘百科 → Wikibooks)
Step 3: Reddit 社区
Step 4: DuckDuckGo 搜索引擎兜底

数据源配置: config/sources.json(攻略源/百科源/代理/功能开关)
游戏 Wiki 路由: config/wikis/<game-slug>.json(每个游戏一个独立文件,英文 slug 命名)

name_resolve.py — 游戏名称补全

python scripts/name_resolve.py --game "玩家输入的原始名称"

功能:将口语/简称/别名补全为攻略站使用的规范名称。

工作流程

  1. 先查 memory/NAMES.json 映射表
  2. 命中 → 直接返回规范名称(含中文全称、英文全称、简写等变体)
  3. 未命中 → 调用搜索引擎搜索,返回候选名称列表(按搜索排名排序)
  4. AI 从候选列表中选出最准确的规范名称,去重合并
  5. AI 将确认的名称写入 memory/NAMES.json(含所有变体)

NAMES.json 结构示例:

{
  "老头环": {
    "name_zh": "艾尔登法环",
    "name_en": "Elden Ring",
    "aliases": ["ELDEN RING", "老头环", "法环"],
    "source": "search_engine",
    "confidence": "confirmed"
  }
}

调用时机: 在调用 walkthrough_search.py 或 wiki_search.py 之前,必须先完成名称补全。流程:

用户输入 → 查 NAMES.json → 
  ├─ 命中 → 拿规范名 → 继续搜索
  └─ 未命中 → name_resolve.py → AI 确认 → 写入 NAMES.json → 继续搜索

记忆体系——越用越好的关键

记忆体系替代缓存: 本项目不依赖缓存机制。每次查询都是实时搜索,确保攻略内容始终最新。记忆体系通过路由优化让重复查询依然快速——INDEX 命中后单源直达,无需全链路搜索。

三层渐进披露

memory/
├── INDEX.md              ← Layer 1: 路由索引(每次查询前必读)
├── NAMES.json            ← Layer 1: 名称映射表(查询前先查)
├── sources/               ← Layer 2: 源详述(INDEX 指向后才读)
│   ├── gamersky.md       游民星空
│   ├── archive_org.md    Archive.org 攻略书
│   ├── reddit.md         Reddit 社区
│   ├── search.md         DuckDuckGo 兜底
│   └── fandom.md         Fandom/专有Wiki(wiki_search 路由)
└── queries/               ← Layer 3: 原始日志(追溯时读)
    └── YYYY-MM-DD.md

INDEX.md 设计原则

只做路由,不存数据。 INDEX 里每条记录只包含:游戏 → 关键词 → 路由 → 质量 → 指向哪个源文件。

路由列的值必须是以下之一:

  • gamersky / archive / reddit / search → 调 walkthrough_search.py --source <路由>
  • wiki→fandom / wiki→52poke → 调 wiki_search.py(让路由表自动匹配)

数据本身(攻略书ID、截图数、具体评价)写在 sources/*.md 中,不在 INDEX 里重复。

工作流

1. 玩家提问

2. AI 先读 memory/INDEX.md(几十行,秒读)
   → 命中: 宝可梦 | 宝石海星 | wiki→52poke | high | sources/fandom.md
   → 决策: 调 wiki_search.py --game "宝可梦" --topic "宝石海星"

3. INDEX 未命中 → 全链路搜索
   → 并行搜全部源 → 收集所有结果
   → 追加 INDEX(只要路由+质量)+ sources/*.md(数据细节)+ queries/今天.md

4. INDEX 命中但 quality=low
   → 跳过,选其他路由或全搜

读取规则

  • 每次查询前先读 memory/INDEX.md
  • INDEX 命中 high → --source <路由> 直达
  • INDEX 命中 low → 跳过,全搜或换路由
  • INDEX 未命中 → 并行全搜,搜完追加三层记忆
  • 需要具体数据时(archive_id、截图数等)再去读 memory/sources/*.md

写入规则

不是每次查询都更新所有文件。 按以下规则分层写入:

INDEX.md — 每次新查询组合都更新

  • 条件: 出现新的「游戏+关键词+路由」组合(无论质量)
  • 写入: 追加一行路由记录(游戏、关键词、路由、质量、指向源文件)
  • 如果同一组合已有记录但质量变了 → 更新质量列
  • 不写数据细节(下载量、字符数等),那是对应源文件的活

sources/<源名>.md — 只在有新数据时更新

  • 条件: 查询返回了新的细节信息(如新的 archive_id、新的高下载量攻略书、源的行为变化)
  • 写入: 追加记录行到对应源文件
  • 如果同一游戏+关键词已有记录 → 评估是否需要更新质量或备注
  • 不需要更新的情况: 结果和上次完全一样、纯查询无新发现

queries/YYYY-MM-DD.md — 每次查询都追加

  • 条件: 无条件,每次查询结束都写一行
  • 写入: 搜索链(命中了哪些源)+ 最终结果摘要
  • 用途: 追溯排查用

记忆质量维护

每次更新记忆体系时,执行以下检查:

  • 扫描 INDEX 中所有 quality=unrated 且超过 5 次查询仍未打分的条目
  • 在适当时候向用户提问,请求确认该条目的质量
  • AI 初次写入 INDEX 时使用 quality=unrated,用户反馈后升级为 high/medium/low
  • 持续未被反馈的条目 → 提议删除,避免记忆库堆积垃圾数据

质量等级

  • high: 可直接使用,无需继续搜索(仅用户确认后可设为 high)
  • medium: 内容可用但不够完整
  • low: 不可用(视频攻略、空页、错误),下次跳过此路由
  • unrated: AI 初判,尚未经用户确认

路由类型说明

  • gamersky: walkthrough 源,中文攻略站
  • archive: walkthrough 源,Archive.org 攻略书
  • reddit: walkthrough 源,Reddit 社区
  • search: walkthrough 源,DuckDuckGo 兜底
  • wiki→fandom: wiki 源,Fandom 等路由表命中
  • wiki→52poke: wiki 源,神奇宝贝百科路由命中

多源结果整合(重要)

当并行搜索返回多个源的结果时,不应分别独立回复,而应整合为一份综合攻略:

整合原则

  1. 去重合并: 同一信息出现在多个源中,只保留最清晰的一份
  2. 互补补全: 不同源提供不同角度的信息,合并成完整攻略
  3. 矛盾标注: 如果两个源的信息互相矛盾,保留双方观点并标注分歧,让玩家自行判断
  4. 语言统一: 中英文源的结果统一为用户提问语言
  5. 来源透明: 每个信息片段标注来自哪个源

整合流程

并行搜索 → 收集所有 NDJSON 结果 →
├─ 分析各源内容的重叠和互补关系
├─ 合并相同信息,保留互补信息
├─ 标注矛盾(有则标注,无则跳过)
└─ 输出整合攻略 + 各源链接

Archive.org 攻略书处理

当 walkthrough 返回 archive_id 时,用 archive_extract.py 下载攻略书文本到本地:

python scripts/archive_extract.py --archive-id "{archive_id}"

脚本自动完成:格式选择(DjVuTXT 优先)→ 检查缓存 → 下载 → 写入 downloads/{archive_id}.txt → 返回文件信息 + 元数据。

下载完成后,AI 需要读取 downloads/{archive_id}.txt 并用语义理解(非关键词字符串匹配)来查找相关攻略内容:

  • 文件 < 100KB: 使用 Read 工具读取全文

  • 文件 ≥ 100KB: 使用 grep 找到相关段落,再用 Read 工具读取前后上下文

  • 返回内容已写入本地文件,AI 读取后语义理解并回复玩家

  • 始终标注来源为 "Internet Archive + 攻略书名"

  • 脚本失败则告知玩家去 Archive.org 在线查看

攻略验证——用 Wiki 校准攻略准确性

当 walkthrough 返回的攻略内容包含具体的游戏数据声明时(装备名、技能名、Boss名、属性数值等),用 wiki_search 做交叉验证:

验证时机

  • BD/Build 攻略(装备推荐、技能组合)
  • Boss 攻略(阶段机制、弱点属性)
  • 收集攻略(物品位置、掉落条件)
  • 任何包含「必须用XX」「XX属性+100」等具体数值的内容

验证流程

1. walkthrough 返回攻略 → AI 提取其中的数据声明
   eg: "用寒冰弹+元素集中,堆到 100% 暴击率"

2. wiki_search 查关键数据
   → wiki_search --game "游戏名" --topic "寒冰弹"
   → wiki_search --game "游戏名" --topic "元素集中"
   → 验证: 技能是否存在?数值是否匹配?组合是否可能?

3. 判断
   ├─ wiki 数据一致 → high 信心,直接返给玩家
   ├─ wiki 数据矛盾 → medium,标注潜在问题
   └─ wiki 无数据 → 不做额外标记,保留原质量评级

记忆记录

  • 验证通过: INDEX 记录 quality=high(需用户最终确认),备注"wiki验证一致"
  • 验证失败: INDEX 记录 quality=low,备注具体的矛盾点

查询类型分发

当玩家问题同时包含攻略和知识需求(如「艾尔登法环玛莉卡背景故事和打法」),按以下决策树判断:

玩家提问
├─ 仅含攻略关键词(怎么打/怎么过/BOSS/通关/任务/流程/收集)→ walkthrough_search
├─ 仅含知识关键词(背景/故事/世界观/角色介绍/设定/属性/数据)→ wiki_search
├─ 两者都有 → 两个脚本都调用,并行执行
└─ 无法判断 → 默认两个都调用

环境与配置

依赖已内置在 vendor/,解压即用。代理、安装、脚本特性详见 references/setup.md

严格规范

核心原则

  1. 只返回查询结果: 所有回答必须基于脚本查询返回的真实内容
  2. 不编造信息: 绝不允许自行编造攻略或知识内容
  3. 透明来源: 必须明确告知玩家信息的来源网站
  4. 多源整合: 并行搜索多个源时,整合为一份综合攻略而非分别回复

查询结果处理

找到结果时

  • 整理并返回查询到的攻略或知识内容
  • 多源结果整合为一份综合攻略,标注冲突
  • 标注信息来源和来源页面 URL
  • 若查询结果包含图片,使用 Markdown 格式展示

未找到结果时

  • 明确告知玩家未找到相关信息
  • 建议玩家尝试更精确的游戏名称或更换关键词
  • 如果多次换关键词仍无结果,建议到项目 GitHub 提交 issue,注明游戏名称和查询内容
  • 绝不使用"根据我的了解"等措辞进行编造

使用流程

1. 需求识别

区分玩家需要的是攻略还是知识(参见「查询类型分发」章节的决策树):

  • 攻略类: "怎么通关"、"Boss怎么打"、"任务怎么做"
  • 知识类: "背景是什么"、"某个角色是谁"、"系统怎么玩"
  • 混合类: 两者都有 → 两个脚本都调用

2. 游戏名称补全(必须首先执行)

  • 先查 memory/NAMES.json 映射表
  • 命中 → 使用映射表中的规范名称
  • 未命中 → 运行 name_resolve.py → AI 从候选列表确认规范名称 → 写入 NAMES.json

3. 查记忆(重要——越用越快的关键)

每次查询前必须先读 memory/INDEX.md

  • 命中 high → 直接调对应源 --source <路由>,跳过其他源
  • 命中 low → 跳过该源,走并行全搜
  • 未命中 → 并行全链路搜索,搜完后追加记忆

4. 执行查询

  • INDEX 命中 high: 单源直达 + wiki 交叉验证(如适用)
  • INDEX 未命中或命中 low: 并行全源搜索
  • 混合查询: walkthrough 和 wiki 两个脚本并行调用
  • 等待所有源完成,收集 NDJSON 结果
  • 如果内容含具体数据声明(技能/装备/数值)→ 用 wiki_search 交叉验证
  • 整合多源结果为一份综合攻略,标注来源和矛盾
  • 更新三层记忆(INDEX + sources + queries)

使用示例

详见 references/examples.md。包含:攻略查询、知识查询、混合查询、Archive.org 查询、未找到结果的处理。

禁止行为(红线——违反任何一条即为失败)

  • 禁止在未查询的情况下声称了解某游戏内容
  • 禁止编造攻略步骤或游戏知识
  • 禁止使用"我记得"、"据我所知"、"一般来说"等编造性措辞
  • 禁止混合多个查询结果编造新内容
  • 禁止忽略查询错误强行返回内容
  • 禁止自行猜测游戏名称,必须通过 name_resolve.py 或搜索引擎补全
  • 禁止在 Archive.org OCR 文本中使用关键词字符串搜索,必须使用语义理解
  • 🛑 禁止使用任何自带搜索/web fetch/browser 工具自行获取攻略内容——所有攻略查询必须通过本技能的脚本完成
  • 🛑 脚本返回全部 success: false 时,禁止自行搜索补救——必须直接告知用户未找到,绝不越俎代庖
  • 🛑 禁止自行翻译英文攻略中的游戏专有名词(技能名、道具名、BOSS名)——翻译会引入错误译名,必须保留原文名称

展示规范

文本内容

  • 使用 Markdown 格式组织回复
  • 保留攻略/知识原文的层级结构(标题、列表等)
  • 提供原始页面链接供玩家查看完整内容
  • 多源整合时保持各源内容完整,避免信息丢失

图片内容

  • 查询结果包含图片时,按原文位置嵌入图片
  • 附上图片的说明文字(caption)
  • 无法加载图片时保留文字描述

来源标注

  • 每条回复末尾标注信息来源网站名称
  • 提供原始页面的完整 URL
  • 多源整合时,每个信息片段标注对应的来源
  • 来源类型示例:
    • 游民星空 → "来源:游民星空" + 原始链接
    • Fandom/52poke → "来源:Castlevania Fandom Wiki" + 页面链接
    • Archive.org → "来源:Internet Archive (攻略书名)" + 下载/查看链接
    • Reddit → "来源:Reddit r/子板名" + 帖子链接
    • 搜索引擎 → 额外标注"来源:搜索引擎"

Categories