mcpField
C
chess-best-move

chess-best-move

github.com/letta-ai其他15247 次安装4 周前更新
代码仓库

关于 chess-best-move

这项技能指导从棋盘图片重建局面并求出合法走法,涵盖识别、局面校验、着法分析和输出格式检查。

主要功能

  1. 01识别棋盘网格与棋子位置
  2. 02校验棋子数量和 FEN
  3. 03目视比对重建棋盘
  4. 04检查候选着法是否合法
  5. 05遵循指定着法格式

适用场景

  1. 01分析图片中的棋局
  2. 02求解前验证重建局面
  3. 03查找满足目标的全部着法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letta-ai/skills --skill chess-best-move

安装后在 Claude Code 中输入/chess-best-move确认已加载。

详细介绍

国际象棋最佳着法

概述

本技能提供一种系统化方法,用于分析国际象棋棋盘图像并确定最佳着法。重点在于采用恰当的图像分析技术,避免一些常见陷阱,例如根据熟悉的棋题模式进行匹配,而不是分析实际局面。

核心工作流程

第 1 步:了解任务要求

开始分析前:

  1. 完整阅读任务要求,明确以下内容:

    • 预期的输出格式(例如,以空格分隔还是以换行分隔的着法)
    • 是否可能有多个获胜着法
    • 要求的着法记谱法(例如 g2g4、Ng4 或 g4)
    • 解答的任何限制条件
  2. 留意任务是否提到:

    • “多个获胜着法”——准备输出所有有效解答
    • 特定的着法记谱格式——严格遵循该格式
    • 时间限制(N 步将杀)——核实着法数
第 2 步:图像分析(关键阶段)

首选方法:系统化识别

不要尝试将图像与已知棋题进行匹配。应当:

  1. 先识别棋盘网格

    • 确定 8x8 网格的边界
    • 判断棋盘方向(a1 位于哪个角)
    • 保存显示已识别网格线的调试图像,以便核验
  2. 系统地识别棋子位置

    • 逐一分析全部 64 个格子
    • 对于每个有棋子的格子,确定:
      • 颜色(白方/黑方)
      • 棋子类型(王、后、车、象、马、兵)
    • 使用代数记谱记录结果(例如“白王位于 e1”)
  3. 验证识别结果

    • 棋子总数必须 ≤32(如果识别出的棋子更多,则说明识别有误)
    • 双方各必须恰好有 1 个王
    • 双方各最多可以有 8 个兵、2 个车、2 个象、2 个马和 1 个后(升变棋子除外)
    • 如果验证失败,应在继续之前改进识别方法
第 3 步:验证局面

计算着法前:

  1. 根据识别出的棋子构建 FEN 记谱

    • 逐格构建局面字符串
    • 如果可以确定,则包含易位权
    • 如果相关,则包含吃过路兵目标格
  2. 验证 FEN 有效性

    • 使用国际象棋库(python-chess)验证局面
    • 检查局面是否合法(不存在不可能的配置)
    • 如果 FEN 无效,则重新检查识别步骤
  3. 进行视觉核验

    • 根据构建的 FEN 生成棋盘示意图
    • 与原始图像进行视觉比对
    • 如果两者不匹配,则迭代改进识别结果
第 4 步:计算着法

确认局面无误后:

  1. 使用国际象棋引擎或库

    • python-chess 可以枚举合法着法并检查是否将死
    • 对于“最佳着法”任务,可考虑使用 Stockfish 进行评估
    • 对于“N 步将杀”任务,枚举所有可以将杀的着法
  2. 如有要求,找出所有获胜着法

    • 如果任务提到多个解答,则找出所有有效着法
    • 确认每个候选着法都能达成指定目标
  3. 输出前验证着法

    • 确认每个着法在该局面中都合法
    • 确认每个着法都能达成目标(将杀等)
第 5 步:输出格式

严格遵循预期的输出格式:

  1. 检查任务对格式的具体要求

  2. 常见格式:

    • 以空格分隔:g2g4 e2e4
    • 以换行分隔:每个着法单独占一行
    • 标准代数记谱:Nf3、exd5
    • 长代数记谱:e2e4、g1f3
  3. 如果有多个有效着法,则按指定格式全部列出

需要避免的常见陷阱

1. 根据已知棋题进行模式匹配

**错误做法:**识别几个棋子后,就尝试与“著名棋题”数据库进行匹配。

**失败原因:**大多数局面都是独一无二的。即使几个棋子与某道已知棋题相符,完整局面也很可能不同。

**正确做法:**始终根据实际图像进行分析,不要先入为主。

2. 忽略检测失败

错误做法: 当检测结果不可能成立(例如棋子超过 40 个)时,仍使用不完整的数据继续操作。

失败原因: 错误输入导致错误输出。检测有误会导致着法错误。

正确做法: 如果检测结果不可能成立,就重新设计检测算法。检测通过验证之前,不要继续操作。

3. 确认偏误

错误做法: 只寻找支持预设观点的证据,同时忽略相矛盾的证据。

示例: 检测到 h5 和 f7 上有棋子后,立即得出“Legal's Mate”的结论,却没有检查其他格子。

正确做法: 考虑所有检测到的棋子。解决方案必须涵盖整个局面。

4. 循环验证

错误做法:

  1. 假设图像显示的是局面 X
  2. 在局面 X 上测试着法 M
  3. 确认 M 在局面 X 上有效
  4. 得出 M 正确的结论

失败原因: 这并不能证明实际图像的内容。

正确做法: 根据图像分析得出的局面进行验证,而不是依据假设的局面。

5. 遗漏输出要求

错误做法: 任务要求给出多个着法时,只输出一个着法。

正确做法: 完成输出前重新阅读任务要求。留意“所有制胜着法”或“多个解法”等表述。

6. 跳过棋子类型检测

错误做法: 只检测哪些格子被占据,不识别格子上的棋子类型。

失败原因: 不知道棋子类型就无法计算有效着法。计算兵的着法必须先知道它是兵。

正确做法: 检测必须识别每个被占据格子上的棋子颜色和类型。

验证清单

提交解决方案前,请确认:

  • 检测得到的棋子数量有效(总数 ≤32,每方各有 1 个王)
  • FEN 是根据检测结果构建的(而非假设得出)
  • 已验证局面合法
  • 视觉比较确认检测结果与图像相符
  • 已在检测得到的局面上测试所有候选着法
  • 着法实现了指定目标(将死等)
  • 输出格式完全符合任务要求
  • 如果存在多个着法,已全部列出

技术实现说明

推荐库
  • 图像处理: OpenCV、PIL/Pillow
  • 国际象棋逻辑: python-chess(处理 FEN、着法验证、将死检测)
  • 引擎分析: Stockfish(通过 python-chess UCI 接口)
检测策略
  1. 使用颜色阈值分离浅色和深色格子
  2. 使用轮廓检测查找棋子形状
  3. 考虑将棋子模板与已知棋子图像进行匹配
  4. 始终生成调试可视化结果以验证准确性
调试方法

检测失败时:

  1. 保存显示以下内容的中间图像:
    • 检测到的网格线
    • 识别出的格子边界
    • 带标签的检测棋子位置
  2. 先在已知局面上测试检测算法
  3. 根据对调试输出的目视检查,逐步改进

评论

支持 Markdown