中国象棋是什么

中国象棋是一款在浏览器中直接运行的纯前端人机对弈游戏,无需安装、无需后端,打开网页即可与电脑 AI 对弈。游戏完整实现象棋规则,棋盘采用 HTML5 Canvas 绘制木质风格界面,支持桌面与移动端触屏操作。

核心功能

  • 人机对弈:玩家可选择执红先行或执黑后手,AI 即时应招。
  • 三档 AI 难度:入门、业余、高手,对应搜索深度 2 / 3 / 4 层。
  • Minimax + Alpha-Beta 引擎:AI 基于 Minimax 搜索与 Alpha-Beta 剪枝,结合棋子价值与位置评估表决策。
  • 完整规则判定:马蹩腿、象塞眼、炮隔子吃、兵卒过河、九宫限制、将帅照面(飞将)等规则全部实现。
  • 终局判定:自动识别将军、将死与困毙(无棋可走),并弹出结算提示。
  • 走法提示:点选棋子后高亮显示所有合法落点,可吃子目标以红圈标出。
  • 中文棋谱:自动以「炮二平五」式中文记谱法记录双方着法,吃子附带标注。
  • 悔棋 / 认输 / 提示:支持悔棋(回退一回合两步)、一键认输,以及让 AI 推荐当前最佳走法。
  • 对局信息:实时显示当前回合、双方用时与总步数。
  • 本地音效合成:使用 Web Audio API 实时合成走子与吃子音效,可随时开关。
  • 响应式布局:桌面端棋盘居中、左右信息栏;窄屏自动堆叠,手机触屏也能流畅对弈。

使用方式

  1. 打开 中国象棋
  2. 在「设置」中选择执子方(执红先行 / 执黑后手)与 AI 难度。
  3. 点击己方棋子查看合法走法,再点击目标位置落子。
  4. 需要时使用「悔棋」「提示」按钮,或对局结束后点击「再来一局」。

用单文件 HTML 写一个能对弈的中国象棋 AI——从规则引擎到 Alpha-Beta 剪枝

一次「中国象棋 + 纯前端 + 自写搜索算法」的完整实践。零依赖、零构建,双击即玩。本文记录规则引擎、AI 搜索、Canvas 渲染的设计思路,以及布局调试中踩过的几个值得记住的坑。

WorkBuddy + GLM-5.2 开发的,花了 200 积分。开发出来第一个版本并没有花多少钱,问题是反复修改一些小问题,积分用量就上来了,感觉缓存并没有起作用。

一、需求与技术选型

需求很朴素:一款可以人机对弈的中国象棋 Web 应用

权衡后定的方案:

维度 选择 理由
形态 单文件 index.html 双击即可运行,无需构建、无需服务器,便于分享
技术栈 原生 HTML5 + CSS3 + ES6 零依赖,引擎/AI/UI 全在一个文件里也能保持清晰
棋盘渲染 Canvas 棋盘线条、楚河汉界、九宫斜线用 Canvas 绘制最直接
AI 算法 Minimax + Alpha-Beta 剪枝 经典、可控、纯前端可跑,难度由搜索深度决定

架构上坚持一点:引擎层(棋盘状态 + 走子规则 + AI)与 UI 层(渲染 + 交互)彻底解耦。引擎函数只操作棋盘数组,不碰 DOM,方便单独测试和替换。

二、棋盘数据结构

中国象棋是 10 行 9 列的交叉点棋盘。用一个二维数组表示:

坦克大战(HTML5)开发教程

本教程基于本工作区已实现的「坦克大战」源码(HTML5 Canvas 复刻红白机 Battle City)逐模块讲解。 读完后你将能独立从零搭建一个 60fps、数据驱动、可扩展 的俯视角坦克射击游戏,并理解其中每个模块的设计取舍。

配套源码入口:index.html,核心逻辑在 js/ 下 6 个文件,单元测试在 tests/tank.test.js

GitHub 源代码https://github.com/wang-junjian/tank-battle

1. 项目简介与技术栈

「坦克大战」是一款经典俯视角坦克射击游戏:玩家操控己方坦克在 13×13 的迷宫战场中移动、射击,摧毁敌方坦克并保护己方基地(老鹰)。

技术栈(零依赖、零构建步骤):

技术 用途
HTML5 Canvas 2D 全部战场渲染
原生 JavaScript(ES6 class) 游戏逻辑,不依赖任何框架
Web Audio API 实时合成音效与 BGM(无音频素材文件)
localStorage 最高分与配置持久化
node:test 引擎逻辑的单元测试(无需浏览器)

为什么选这套栈: 无打包、无依赖,双击即可运行;逻辑与渲染分离后,核心玩法甚至能在 Node 里跑测试。这对"快速做出可玩原型"极其友好。

2. 运行、调试与测试

2.1 本地运行

直接用浏览器打开 index.

坦克大战是什么

坦克大战是一款在浏览器中直接运行的纯前端俯视角坦克射击游戏,复刻经典街机玩法,无需安装、无需后端,打开网页即可开战。玩家操控坦克在 13×13 的战场上移动射击,目标是消灭全部敌军并保护基地(老鹰),支持键盘与触屏两种操作方式。

核心功能

  • 经典俯视角射击:方向键控制坦克移动,朝向即开火方向,空格 / J 发射子弹。
  • 3 个关卡:每关地图、敌军总数、刷新频率与敌人类型权重各不相同,难度逐关提升。
  • 四种敌军类型:普通、快速、装甲、智能坦克,智能坦克会追踪玩家位置。
  • 六种战场道具:火力升级、无敌护盾、强化基地、冻结敌军、全屏清除、奖励生命。
  • 火力成长系统:拾取星形道具可提升火力等级,最高等级可破坏钢墙。
  • 触屏虚拟按键:移动设备自动显示方向键与圆形射击按钮,手机也能玩。
  • 本地音频合成:使用 Web Audio API 实时合成 BGM、射击、爆炸、道具等音效,无外部资源。
  • 可自定义按键:支持在设置中重映射移动、射击、暂停、确认、重开等按键。
  • 画质与音量调节:提供低 / 中 / 高三档画质,独立开关音乐与音效,音量 0% ~ 100% 可调。
  • 本地进度保存:使用 localStorage 记录最高分与已解锁关卡,下次打开继续挑战。
  • 响应式 HUD:桌面端右侧信息栏显示关卡、剩余敌军、生命、得分与增益状态;窄屏自动堆叠。

使用方式

  1. 打开 坦克大战
  2. 在主菜单选择已解锁的关卡,点击「开始游戏」。
  3. 使用方向键移动坦克,空格 / J 射击;触屏设备使用屏幕上的虚拟按键。
  4. 消灭全部敌军即可过关;保护基地不被击毁,生命耗尽或基地失守则游戏结束。

CodeBuddy 官方插件市场 · 插件分类清单

数据来源:codebuddy-plugins-official 市场 manifest(共 207 个插件)

分类方式:基于插件 name / description 关键词的中文功能聚类(官方 category 字段缺失较多,故采用描述推断)。

分类概览:腾讯安全实验室:7 | 语言服务器 LSP:11 | 文档与办公:11 | 前端与 UI 设计:37 | 游戏开发:5 | 腾讯生态与 MCP 集成:16 | 工作流与生产力:77 | 内容创作与写作:7 | 系统与脚本开发:5 | 外部领域合集:31

腾讯安全实验室(7)

拆解 WorkBuddy:系统提示词如何拼装,模型清单如何定义

研究对象是 WorkBuddy 桌面客户端的安装包——更准确地说,是它解包后的 resources/cli/ 两个目录。我们想知道两件事:

(1)对话时「我」到底由什么拼成? (2)「我」能调用哪些模型、这些模型又从哪来?

答案出人意料地干净:它们分别落在两套声明式配置文件里——提示词模板库与产品配置文件。你此刻正在阅读的「我」,本质上就是这两套文件在运行时的一次实例化。

0. 为什么值得写

平时我们用 AI 助手,关注的是「它能不能帮我干活」。但如果你想知道「它是怎么被造出来的」,安装包本身就是最好的教材:没有编译混淆、没有黑盒,所有「性格」「能力边界」「可用武器」都白纸黑字写在那里。

这次我们顺着两条主线往下挖:

  • 主线 A —— 大脑(提示词模板)resources/templates/ 下的 19 个文件(约 2400 行),决定了「我是谁、能做什么、如何行动」。
  • 主线 B —— 武器库(模型配置)cli/product*.json 下的 5 个文件,声明了「我能调用哪些模型、怎么路由、怎么计费」。

一、主线 A:提示词模板体系("我"的大脑)

1.1 三层结构

resources/templates 不是一堆散落的提示词,而是一套以「角色」为主轴、以「模式」为运行时约束的模板工程体系,基于 Jinja2 风格语法({{ var }} 占位符 + {% if

WorkBuddy:iOA 渠道模型完整对照表

数据来源:cli/product.ioa.json(iOA 部署渠道覆盖层)
82 个模型条目,按路由代号(vendor)分组。

一、概览

  • 模型总数:82
  • 支持工具调用 (toolCall):67 / 82
  • 支持图像 (images):67 / 82
  • 支持推理 (reasoning):50 / 82
  • 仅推理 (onlyReasoning):44 / 82
  • 默认模型 (isDefault):1

路由代号(vendor)分布

路由代号 数量 说明
e 33 外部聚合(多为国内厂商模型)
f 22 首方/海外聚合
tencent 7 TACO 代码补全/轻量子模型通道(非对话模型,能力字段为 None)
j 7 特定海外模型
i 2 iOA 专属条目
None 11 未标注(auto/default 等特殊聚合项)

注意:vendor 是后端路由代号,并非明文厂商名;同一逻辑模型在不同渠道 vendor 可能不同(例如 minimax-m2.5 在基座是 f、在 cloudhosted 是 e)。下表「推测来源」列按模型 id 名称推断,仅供参考,非配置字段。

推理档位(reasoning.effort)分布

effort 档位 数量
medium 25
(无effort字段) 17
high 8

计费倍率(credits)分布

空值 = 未显式声明(按渠道默认计费,多为 x1.00)。

WorkBuddy 模型定义与配置研究

研究对象:/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/(WorkBuddy 应用解包目录) 核心结论:可用模型不是硬编码在程序里,而是由 cli/ 目录下一组声明式产品配置文件(product*.json 定义。机制为「一个基座 + 四个部署覆盖层」,运行时由环境变量选择渠道并合并生成最终模型清单。

一、模型定义的落点

模型定义全部集中在 cli/ 目录下的 5 个产品配置文件里,resources/ 目录中没有模型定义(那里是提示词模板、技能、插件)。

Agent 系统设计的核心思想

一套面向 Agent 应用设计者的系统化设计原则、架构模式与实战指南。

基于对 WorkBuddy(CodeBuddy Code)工作空间源码、系统提示词、文档与架构的深度分析提炼而成。

目录

  1. 概述:从 Chatbot 到 Agent 的范式跃迁
  2. 原则一:闭环执行架构
  3. 原则二:人格化身份体系
  4. 原则三:分层记忆系统
  5. 原则四:纵深防御安全模型
  6. 原则五:渐进式能力扩展
  7. 原则六:多模态工作模式
  8. 原则七:上下文精细管理
  9. 原则八:可组合的工具哲学
  10. 系统架构全景图
  11. 可复用的设计模式清单
  12. 设计决策框架
  13. 常见反模式

1. 概述:从 Chatbot 到 Agent 的范式跃迁

1.1 Chatbot 和 Agent 的本质区别

维度 Chatbot Agent
核心能力 理解并回答 理解、计划、执行、验证
与环境的交互 被动接收文本 主动感知文件系统、网络、工具
输出的性质 文本回答 实际行动(文件变更、API 调用、部署)
正确性保障 依赖训练数据 通过执行测试、编译、对比等方式自我验证
会话生命周期 一问一答,无持续性 跨多轮持久化,可中断恢复
用户角色 提问者 协作者/监督者

设计 Agent 系统,首先要完成这个认知跃迁:Agent 不是"更强的 Chatbot",而是一种全新的交互范式。

1.2 Agent 设计的核心张力

在设计 Agent 系统时,始终面临以下四对核心张力:

WorkBuddy 实战案例:设计创意

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

设计系统(Design System)

  • 场景设计系统
  • 模型Deepseek-V4-Flash

输入(宫崎骏的太空之城风格设计系统)

帮我建立一套完整的 Design System,包含颜色体系、字体层级、间距规则和基础组件规范文档,风格为宫崎骏的太空之城

输出

WorkBuddy 实战案例:代码开发

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

绘制架构图和流程图

输入

@file:open-ai-eco 研究这个项目,绘制架构图和流程图。

输出

WorkBuddy 实战案例:日常办公

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

截图重命名与分类

输入

把 截图 目录中的图像根据图像的内容进行重命名及文件夹分类。

输出

我先看看截图文件夹里有哪些图像,然后分析每张图的内容来重命名和分类。
截图文件夹有 11 张 PNG 图像。我需要逐一查看每张图的内容来判断如何命名和分类。我先读取这些图像。

我已经看完了全部 11 张截图,根据内容可以把它们分成三类。分类方案如下:

1. AI-概念图/

  • Claude-Code-上下文工程.png(Claude Code 的上下文工程结构图)
  • RAG-检索增强生成.png(ChatGPT / RAG 流程图)
  • Multi-Agent-ChatDev工作流.png(ChatDev 多智能体开发流程)
  1. Claude-Agent-SDK/ Claude-Agent-SDK-封面.

Claude Fable 实战指南:发现你的未知

原文:A field guide to Claude Fable 5: Finding your unknowns 作者:Thariq Shihipar(Anthropic 技术团队成员)

地图与领土

在使用 Claude Code 时,我常常想起地图与领土之间的区别。

地图,即待完成工作的表征,是我的提示词技能上下文——是我提供给 Claude 的东西。领土,则是工作需要实际发生的地方:代码库现实世界真实的约束条件

地图与领土之间的差距,就是我所说的未知(unknowns)。当 Claude 遇到一个未知时,它需要根据对我意图的最佳猜测来做出决策。工作量越大,Claude 可能遇到的未知就越多。

Claude Fable 是我遇到的第一个模型,其工作质量的瓶颈在于我澄清未知的能力

重要的是,仅仅提前规划并不总是足够的。你可能会在深入实现时发现未知,或者你的未知可能指向一个事实:你其实应该用完全不同的方式来解决问题。

我发现,使用 Fable 工作是一个迭代过程——在实现之前、之中和之后,不断发现自己的未知。

认识你的未知

你的未知是什么?当我带着问题来找 Claude 时,我倾向于将其分解为四种类型:

  • 已知的已知(Known Knowns):这本质上就是我的提示词中的内容。我告诉智能体我想要什么?
  • 已知的未知(Known Unknowns):我还有什么没搞清楚的,但我已经意识到我还没搞清楚?
  • 未知的已知(Unknown Knowns):有哪些事情如此显而易见,以至于我永远不会写下来,但看到时却能认出来?
  • 未知的未知(Unknown Unknowns):我完全没有考虑过什么?有哪些知识是我不知道自己不知道的?我知道某件事可以做得多好?

开源 AI 生态研究项目 Git 大文件 LFS 配置教程与团队开发指南

GitHub 仓库初始化

git init
git add .
git commit -m "first commit"

关联远程仓库并推送

git remote add origin https://github.com/wang-junjian/open-ai-eco.git
git branch -M main
git push -u origin main

视频没有使用 Git LFS

remote: warning: File public/videos/open-design-webprototype.mp4 is 84.20 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
remote: warning: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: warning: See https://gh.io/lfs for more information.

解决方案:

一、全局配置 public/videos/ 下所有文件走 Git LFS 1.

Andrej Karpathy 的 CLAUDE 编码准则

下面是 CLAUDE.md 文件的内容,用于改善 Claude Code 的行为,源自 Andrej Karpathy 的观察 关于 LLM 编码陷阱的总结。

CLAUDE.md

旨在减少大语言模型常见编码错误的行为准则。可根据项目特定说明按需合并。

权衡: 本准则偏向谨慎而非速度。对于琐碎任务,请自行判断。

1. 编码前先思考

不要假设。不要掩饰困惑。要呈现权衡。

实施之前:

  • 明确陈述你的假设。如果不确定,就提问。
  • 若存在多种解读,请呈现出来——不要默默选择一种。
  • 若有更简单的做法,请说出来。在必要时坚持己见。
  • 若某事不清楚,就停下来。指出困惑所在。提问。

2. 简单至上

用最少的代码解决问题。不添加任何推测性内容。

  • 不添加需求以外的功能。
  • 不为一次性代码创建抽象。
  • 不提供未要求的“灵活性”或“可配置性”。
  • 不对不可能发生的场景进行错误处理。
  • 如果你写了 200 行,而本可以 50 行完成,那就重写。

问问自己:“一位资深工程师会认为这过于复杂吗?” 如果会,就简化它。

3. 外科手术式的修改

只碰你必须改的。只清理你自己弄乱的。

编辑现有代码时:

  • 不要“改进”相邻的代码、注释或格式。
  • 不要重构没有坏的东西。
  • 即使你有不同做法,也要遵循现有风格。
  • 若注意到无关的无效代码,提出来——但不要删除。

当你的修改造成孤立代码时: 删除由你的修改导致的未使用的导入/变量/函数。

自我改进的 Harness 工程(Harness Engineering for Self-Improvement)

递归自我改进(recursive self-improvement, RSI) 的概念可以追溯到 I. J. Good (1965),他将"超智能机器"定义为一个能够在所有智力活动中超越人类、并设计出更好的机器来改进自身的系统。Yudkowsky (2008) 使用"递归自我改进"这一术语来描述一个特定的反馈循环:AI 利用其当前的智能来改进产生其智能的认知机制。

这种反馈循环在现代 AI 中可能意味着模型直接重写自身的权重,或者更广泛地说,模型改进了训练流水线部署系统,从而催生出一个在经济价值任务上表现更优的继任模型。AI 研究发展的速度在前沿实验室中已被证明正在急剧加速(AnthropicOpenAI)。

我特意提到 "部署系统",因为原始模型与真实世界环境之间的这一层,似乎与模型原始智能(即预训练后的评估)同等重要。Harness 是 AI 部署的重要组成部分,Claude Code 和 Codex 等成功的编码智能体产品已证明了这一点。Harness 是围绕基础模型的系统,负责编排执行、决定模型如何思考和规划、调用工具和执行动作、感知和管理上下文、存储产物以及评估结果。

本文将聚焦于 harness 工程相关的研究,以及它如何促进 RSI。