基于LLM Wiki的分层规则驱动游戏开发系统
基于LLM Wiki的分层规则驱动游戏开发系统
核心理念:AI 编码的效率,不在算法之精准,而在多智能体协同之无冲突;智能体的精度,不在模型之强弱,而在框架约束之恰如其分。
本文构建一套**从用户规则 → 项目规则 → Skill → 上下文管理 → 自带Agent → Cursor三层规则**的完整规范体系,让零编程游戏开发落地为可复用的工程化工具。
目录
1. 规则分层总览
本系统通过6层规则体系,实现从用户偏好到编辑器行为的全链路约束,确保多智能体协同无冲突、开发流程标准化、成果可复用。各层级规则的核心信息如下表所示:
| 层级 | 名称 | 作用范围 | 存储位置 | 示例 |
|---|---|---|---|---|
| L1 | 用户规则 | 特定用户(跨项目) | 用户配置文件 | “我喜欢简洁的注释” |
| L2 | 项目规则 | 当前游戏项目 | 项目根目录 `.rules/` | “必须使用Canvas API” |
| L3 | Skill | 全局可复用能力 | 中心Skill仓库 | “平台跳跃任务拆解模板” |
| L4 | 上下文管理 | 动态会话 | 内存 + LLM Wiki | 当前设计文档片段 |
| L5 | 自带Agent | 固定角色智能体 | 系统预置 | 策划师Agent配置 |
| L6 | Cursor三层规则 | 编辑器级行为 | `.cursor/rules/` | 全局、项目、本地规则 |
设计原则:下层规则继承上层,但可以被上层覆盖;规则越具体,优先级越高。
2. 用户规则(User Rules)
用户规则定义个人偏好,适用于该用户创建的所有游戏项目,确保不同项目中保持一致的开发习惯。规则存储在 `~/llm_wiki/user_rules.json`,支持自定义配置和动态加载。
2.1 规则格式
{
"user_id": "alice@example.com",
"preferences": {
"language": "zh-CN",
"code_style": "2 spaces, no semicolons",
"complexity": "simple", // simple | moderate | complex
"feedback_mode": "auto", // auto | manual
"default_platform": "web",
"asset_level": "placeholder" // placeholder | ai_generated | professional
},
"custom_rules": [
"对于任何游戏,优先考虑单人模式,不要提联网功能。",
"所有提示词必须包含中文说明。",
"任务拆解粒度不超过15分钟。"
]
}
2.2 在系统中加载用户规则
后端启动时自动读取用户规则,并将其注入到LLM的system prompt中,确保所有智能体都遵循用户偏好,核心代码如下:
async function loadUserRules(userId) {
const userRulesPath = path.join(USER_RULES_DIR, `${userId}.json`);
if (await fs.exists(userRulesPath)) {
return JSON.parse(await fs.readFile(userRulesPath));
}
return defaultUserRules;
}
// 在调用LLM前注入用户规则
systemPrompt += `\n【用户规则】\n${JSON.stringify(userRules.custom_rules)}\n请遵守以上规则。`;
3. 项目规则(Project Rules)
项目规则针对具体游戏项目,用于约束该项目的技术选型、代码风格、设计规范等,所有参与该项目的Agent都会严格遵循。规则存储在项目根目录的 `.rules/` 文件夹中,支持按模块拆分管理。
3.1 目录结构
my_game_project/
.rules/
tech_stack.md # 技术栈约束
coding_style.md # 代码风格
game_design.md # 设计规范
tasks_format.md # 任务拆分格式
docs/
src/
...
3.2 示例:`tech_stack.md`
# 技术栈规则 (Project Rule)
1. 前端:HTML5 + Canvas API + Vanilla JavaScript (ES6+)
2. 禁止:React, Vue, jQuery, Phaser等任何第三方框架
3. 游戏循环:requestAnimationFrame,目标60FPS
4. 碰撞检测:轴对齐包围盒(AABB),不使用第三方物理库
5. 资源:所有图片/音效内嵌为base64或相对路径,不依赖外部CDN
3.3 项目规则加载
在协调器(Orchestrator)启动时,会为每个项目创建一个隔离的规则上下文,根据Agent角色分发对应的规则,确保规则精准作用于目标智能体,核心代码如下:
class ProjectRuleContext {
constructor(projectPath) {
this.rules = this.loadAllRules(projectPath);
}
getRulesForAgent(agentRole) {
// 根据Agent角色返回相关规则
if (agentRole === 'Programmer') return this.rules.tech_stack + this.rules.coding_style;
if (agentRole === 'Designer') return this.rules.game_design;
return this.rules.all;
}
}
4. Skill(可复用能力模块)
Skill 是跨项目的原子能力单元,类似可调用的函数,封装了特定场景下的完整能力(如平台跳跃机制设计、任务拆解等)。每个Skill包含触发词、输入参数、输出格式和关联规则,存储在中心仓库 `/skills/`,可被多个项目引用,提升开发效率。
4.1 Skill 结构
# skills/platformer_jump_skill.yaml
name: platformer_jump_skill
description: 为平台跳跃游戏生成跳跃机制的提示词和设计建议
triggers:
- "跳跃手感"
- "跳跃高度"
- "跳跃机制"
parameters:
- name: jump_type
type: enum
options: [fixed, variable]
default: variable
- name: air_control
type: boolean
default: true
output:
format: markdown
content: |
## 跳跃机制设计
类型:{jump_type}
空中控制:{air_control}
推荐提示词:请实现{ jump_type == "variable" ? "按得越久跳越高" : "固定高度" }的跳跃...
rules_applied:
- 总是先询问跳跃类型再生成代码
- 可变跳跃需包含计时器逻辑
4.2 Skill 调用方式
在对话中,用户或系统可通过 `@skill 技能名称` 的方式调用Skill,后端解析后会自动执行技能逻辑,并将输出结果注入到当前会话上下文中,核心代码如下:
// 解析消息中的 @skill 指令
function parseSkills(text) {
const skillRegex = /@skill\s+([a-zA-Z0-9_]+)/g;
let match;
while ((match = skillRegex.exec(text)) !== null) {
const skillName = match[1];
const skill = loadSkill(skillName);
if (skill) {
// 执行Skill,返回结果替换 @skill 占位符
text = text.replace(`@skill ${skillName}`, executeSkill(skill));
}
}
return text;
}
4.3 Skill 与 LLM Wiki 的联动
每次Skill执行后,系统会将其输入输出、用户反馈记录到LLM Wiki的 `/skills/logs/` 目录,用于后续分析优化Skill本身,实现能力的持续迭代。
5. 上下文管理(Context Management)
上下文管理负责维护会话状态、项目知识、临时记忆,确保多轮对话和Agent之间的信息不丢失、不冲突,为智能体决策提供完整、准确的依据。
5.1 三层上下文结构
| 层级 | 内容 | 生命周期 | 存储 |
|---|---|---|---|
| 会话层 | 当前对话历史、用户临时输入 | 单次会话 | 内存 |
| 项目层 | 设计文档、任务清单、代码版本 | 整个项目周期 | LLM Wiki (`/sessions/`) |
| 知识层 | 规范库、Skill定义、用户规则 | 持久化 | LLM Wiki (`/specs/`, `/skills/`) |
5.2 上下文注入策略
每次调用LLM前,系统会动态构建上下文,整合各层级信息,确保智能体获取所需的全部约束和信息,核心代码如下:
async function buildContext(sessionId, userInput, stage) {
const session = sessions.get(sessionId);
const projectId = session.projectId;
// 1. 会话历史(最近10轮,避免上下文过长)
const recentHistory = session.history.slice(-10);
// 2. 项目设计文档当前版本(从Wiki读取)
const designDoc = await readWikiFile(projectId, 'ALIGNMENT.md');
// 3. 当前阶段的任务清单(如果存在)
const tasks = await readWikiFile(projectId, 'tasks.json');
// 4. 匹配的规范(基于用户输入的关键词)
const relevantSpecs = await matchSpecs(userInput);
// 5. 用户规则
const userRules = await loadUserRules(session.userId);
return {
history: recentHistory,
design: designDoc,
tasks: tasks,
specs: relevantSpecs,
userRules: userRules,
stage: stage
};
}
5.3 上下文冲突解决
当不同来源的规则发生冲突时,遵循以下优先级(从高到低),确保规则执行的一致性:
用户规则 > 项目规则 > 会话层指令 > 知识层规范
6. 自带Agent设置(Built-in Agents)
系统内置5个专业Agent,覆盖游戏开发全流程(策划、架构、编码、测试等)。每个Agent拥有独立的角色定义、边界约束、提示词模板和允许使用的Skill列表,配置统一存储在 `config/agents.json`,支持灵活调整。
6.1 Agent配置示例
{
"agents": [
{
"name": "Planner",
"role": "游戏策划师",
"model": "doubao-1.5-pro",
"system_prompt_file": "prompts/planner_system.txt",
"allowed_skills": ["clarify_mechanic", "art_style_selector"],
"rules_scope": ["game_design.md"],
"output_format": "markdown",
"user_interaction": "must_confirm_before_next"
},
{
"name": "Architect",
"role": "架构师",
"model": "doubao-1.5-pro",
"system_prompt_file": "prompts/architect_system.txt",
"allowed_skills": ["task_decomposer", "mermaid_generator"],
"rules_scope": ["tech_stack.md", "tasks_format.md"],
"output_format": "markdown+mermaid",
"user_interaction": "auto_continue"
},
{
"name": "Programmer",
"role": "程序员",
"model": "deepseek-v3",
"system_prompt_file": "prompts/programmer_system.txt",
"allowed_skills": ["canvas_game_loop", "collision_aabb"],
"rules_scope": ["coding_style.md", "tech_stack.md"],
"output_format": "html+css+js",
"user_interaction": "silent"
},
{
"name": "QA",
"role": "测试官",
"model": "deepseek-r1",
"system_prompt_file": "prompts/qa_system.txt",
"allowed_skills": ["playtest_simulator", "performance_check"],
"rules_scope": ["test_report_format.md"],
"output_format": "markdown",
"user_interaction": "report_only"
}
]
}
6.2 Agent 调用流程
协调器根据用户需求,选择合适的Agent链并依次调用。每个Agent执行时,会自动加载其专属的system prompt、允许使用的Skill和对应的项目规则,确保输出符合约束,核心代码如下:
async function runAgent(agentName, input, context) {
const agentConfig = getAgentConfig(agentName);
const systemPrompt = await readFile(agentConfig.system_prompt_file);
const projectRules = loadProjectRulesForAgent(agentConfig.rules_scope);
const fullPrompt = `${systemPrompt}\n\n【项目规则】\n${projectRules}\n\n【输入】\n${input}`;
const response = await callLLM(agentConfig.model, fullPrompt, context);
return response;
}
7. Cursor三层规则(Three-tier Rules in Cursor)
Cursor编辑器提供三层规则机制,用于控制AI编码行为。本系统生成的最终提示词会自动适配该规则格式,便于用户直接复制到Cursor中使用,实现系统与编辑器的无缝对接。
7.1 Cursor三层规则定义
| 层级 | 文件名/位置 | 作用范围 | 示例内容 |
|---|---|---|---|
| 全局规则 | `~/.cursor/rules/global.mdc` | 所有项目 | “总是使用中文注释” |
| 项目规则 | `<项目根>/.cursor/rules/*.mdc` | 当前项目 | “使用Canvas API” |
| 本地规则 | `<项目根>/.cursor/rules/local/*.mdc` | 当前用户在该项目的覆盖 | “我的API Key: xxx” |
7.2 规则文件格式(`.mdc`)
Cursor规则采用Markdown + YAML Frontmatter格式,便于编辑和识别,示例如下:
---
description: 项目技术栈约束
globs: *.js,*.html
alwaysApply: true
---
# Canvas游戏开发规范
1. 必须使用 `requestAnimationFrame` 实现游戏循环。
2. 碰撞检测使用AABB算法,不允许使用第三方库。
3. 所有游戏状态变量统一定义在 `gameState` 对象中。
4. 禁止使用 `eval` 和 `innerHTML` 动态生成代码。
7.3 从本系统生成Cursor规则
系统可自动将项目规则(`.rules/`)和用户规则转换为Cursor规则文件,无需手动编辑,核心代码如下:
function generateCursorRules(projectRules, userRules) {
let cursorRules = [];
// 转换技术栈规则
if (projectRules.tech_stack) {
cursorRules.push(`
---
description: 技术栈约束
globs: *.js,*.html
alwaysApply: true
---
${projectRules.tech_stack}
`);
}
// 转换用户代码风格规则
if (userRules.preferences.code_style) {
cursorRules.push(`
---
description: 代码风格(用户偏好)
globs: *.js
alwaysApply: false
---
${userRules.preferences.code_style}
`);
}
// 写入 .cursor/rules/ 目录
writeCursorRules(cursorRules);
}
7.4 三层规则在开发中的实际效果
-
全局规则:保证所有项目的基本质量(如禁止 `eval`,避免安全风险)。
-
项目规则:确保当前游戏符合技术选型(如强制使用Canvas,避免框架依赖)。
-
本地规则:允许开发者临时覆盖规则(如调试时放宽性能要求,提升开发效率)。
本系统会将项目规则映射为Cursor的项目规则,用户规则部分映射为本地规则,实现开发流程的无缝衔接。
8. LLM Wiki 集成与反馈进化
LLM Wiki 是系统的知识底座,负责存储所有规则、会话记录、Skill和反馈日志,结合Obsidian实现可视化管理,同时通过反馈链路实现系统的自进化。
8.1 Wiki 结构(兼容Obsidian)
Wiki目录结构设计兼容Obsidian,支持双链、图谱视图等功能,便于规则的可视化管理和维护,结构如下:
/llm_wiki/
.cursor/ # Cursor全局规则会链接到这里
user_rules/ # 用户规则JSON
projects/
{projectId}/
.rules/ # 项目规则(git跟踪)
sessions/ # 会话记录
specs/ # 从反馈提炼的规范
skills/ # 项目级自定义Skill
global_skills/ # 全局Skill库
specs_index.json # 规范索引
8.2 反馈 → 规范 → 规则 的转化链路
系统通过闭环反馈机制,实现规则的持续优化,具体链路如下:
-
用户在某次对话中对智能体输出点击“不满意”(反馈)。
-
规范提炼Agent分析反馈内容,生成新的规范条目(存入 `specs/`)。
-
系统管理员(或自动机制)将高频、通用的规范,提升为项目规则或用户规则。
-
项目规则会自动同步到Cursor的项目规则文件中,影响后续代码生成。
8.3 Obsidian 双链与规则可视化
在Obsidian中打开 `/llm_wiki` 仓库后,可实现规则的可视化管理和快速关联:
-
每个规则文件(`.mdc` 或 `.md`)可相互链接,形成知识网络。
-
用 `[[项目规则/tech_stack]]` 引用技术栈规则,点击即可跳转查看。
-
用 `[[用户规则/alice]]` 查看特定用户的偏好设置。
-
支持图谱视图,直观查看规则之间的引用关系和层级关联。
注:Obsidian客户端可通过官网 https://obsidian.md/ 下载,打开 `/llm_wiki` 文件夹即可完成集成。
9. 完整部署示例
以下为系统的完整部署步骤和实际使用示例,帮助开发者快速上手,实现零编程游戏开发。
9.1 搭建步骤
-
克隆系统仓库(假设已有仓库,若需获取完整代码,可参考文末说明)。
-
安装依赖:在项目根目录执行命令 `npm install`,安装express、chokidar、openai等依赖。
-
配置用户规则:编辑 `config/default_user_rules.json`,设置默认的用户偏好和自定义规则。
-
配置项目规则:在目标游戏项目目录下创建 `.rules/` 文件夹,放入 `tech_stack.md`、`coding_style.md` 等规则文件。
-
启动服务:执行命令 `npm start`,启动后端服务。
-
Cursor配置:将项目根目录作为Cursor项目打开,系统会自动生成 `.cursor/rules/` 规则文件,无需手动配置。
注:GitHub仓库 https://github.com/example/llm-game-builder 目前解析失败,暂无法获取完整代码,后续可检查链接后重新获取。
9.2 示例:做一个“太空射击游戏”
用户规则(alice)
{"custom_rules": ["所有游戏必须支持键盘和触摸两种操作"]}
项目规则(space_shooter/.rules/tech_stack.md)
使用Canvas API,玩家飞船为三角形,敌人为圆形。
系统运行流程
-
用户输入:“做太空射击游戏”。
-
协调器加载用户规则(支持键盘+触摸)和项目规则(Canvas、飞船/敌人形状)。
-
策划师Agent提问:“射击方式是单发还是连发?”(根据规范自动澄清关键细节)。
-
用户回答后,架构师Agent拆分任务(如飞船绘制、敌人生成、碰撞检测等)。
-
程序员Agent生成代码,自动遵循项目规则中的“三角形飞船”“Canvas API”约束,同时满足用户规则的操作要求。
-
最终代码可直接复制到Cursor中,Cursor加载项目规则进一步辅助编码,确保代码符合规范。
结语
本文构建了一套从用户到编辑器、从规则到技能的完整AI辅助游戏开发规范体系。通过分层规则、Skill复用、上下文隔离、自带Agent以及Cursor三层规则的有机结合,实现了“零编程、高复用、自进化”的游戏开发工具,降低游戏开发门槛,提升开发效率。
后续工作
-
实现规则的可视化编辑界面(基于Obsidian插件开发)。
-
建立公共Skill市场,支持开发者上传、下载、分享可复用Skill。
-
支持更多的目标平台(如微信小游戏、Unity),扩展工具的适用场景。
更多推荐

所有评论(0)