基于LLM Wiki的分层规则驱动游戏开发系统
核心理念:AI 编码的效率,不在算法之精准,而在多智能体协同之无冲突;智能体的精度,不在模型之强弱,而在框架约束之恰如其分。
本文构建一套**从用户规则 → 项目规则 → Skill → 上下文管理 → 自带Agent → Cursor三层规则**的完整规范体系,让零编程游戏开发落地为可复用的工程化工具。
目录
规则分层总览
用户规则(User Rules)
项目规则(Project Rules)
Skill(可复用能力模块)
上下文管理(Context Management)
自带Agent设置(Built-in Agents)
Cursor三层规则(Three-tier Rules in Cursor)
LLM Wiki 集成与反馈进化
完整部署示例
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中,确保所有智能体都遵循用户偏好,核心代码如下:
asyncfunctionloadUserRules(userId){constuserRulesPath=path.join(USER_RULES_DIR,`${userId}.json`);if(awaitfs.exists(userRulesPath)){returnJSON.parse(awaitfs.readFile(userRulesPath));}returndefaultUserRules;}// 在调用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或相对路径,不依赖外部CDN3.3 项目规则加载
在协调器(Orchestrator)启动时,会为每个项目创建一个隔离的规则上下文,根据Agent角色分发对应的规则,确保规则精准作用于目标智能体,核心代码如下:
classProjectRuleContext{constructor(projectPath){this.rules=this.loadAllRules(projectPath);}getRulesForAgent(agentRole){// 根据Agent角色返回相关规则if(agentRole==='Programmer')returnthis.rules.tech_stack+this.rules.coding_style;if(agentRole==='Designer')returnthis.rules.game_design;returnthis.rules.all;}}4. Skill(可复用能力模块)
Skill 是跨项目的原子能力单元,类似可调用的函数,封装了特定场景下的完整能力(如平台跳跃机制设计、任务拆解等)。每个Skill包含触发词、输入参数、输出格式和关联规则,存储在中心仓库 `/skills/`,可被多个项目引用,提升开发效率。
4.1 Skill 结构
# skills/platformer_jump_skill.yamlname:platformer_jump_skilldescription:为平台跳跃游戏生成跳跃机制的提示词和设计建议triggers:-"跳跃手感"-"跳跃高度"-"跳跃机制"parameters:-name:jump_typetype:enumoptions:[fixed,variable]default:variable-name:air_controltype:booleandefault:trueoutput:format:markdowncontent:|## 跳跃机制设计 类型:{jump_type} 空中控制:{air_control} 推荐提示词:请实现{ jump_type == "variable" ? "按得越久跳越高" : "固定高度" }的跳跃...rules_applied:-总是先询问跳跃类型再生成代码-可变跳跃需包含计时器逻辑4.2 Skill 调用方式
在对话中,用户或系统可通过 `@skill 技能名称` 的方式调用Skill,后端解析后会自动执行技能逻辑,并将输出结果注入到当前会话上下文中,核心代码如下:
// 解析消息中的 @skill 指令functionparseSkills(text){constskillRegex=/@skill\s+([a-zA-Z0-9_]+)/g;letmatch;while((match=skillRegex.exec(text))!==null){constskillName=match[1];constskill=loadSkill(skillName);if(skill){// 执行Skill,返回结果替换 @skill 占位符text=text.replace(`@skill${skillName}`,executeSkill(skill));}}returntext;}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前,系统会动态构建上下文,整合各层级信息,确保智能体获取所需的全部约束和信息,核心代码如下:
asyncfunctionbuildContext(sessionId,userInput,stage){constsession=sessions.get(sessionId);constprojectId=session.projectId;// 1. 会话历史(最近10轮,避免上下文过长)constrecentHistory=session.history.slice(-10);// 2. 项目设计文档当前版本(从Wiki读取)constdesignDoc=awaitreadWikiFile(projectId,'ALIGNMENT.md');// 3. 当前阶段的任务清单(如果存在)consttasks=awaitreadWikiFile(projectId,'tasks.json');// 4. 匹配的规范(基于用户输入的关键词)constrelevantSpecs=awaitmatchSpecs(userInput);// 5. 用户规则constuserRules=awaitloadUserRules(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和对应的项目规则,确保输出符合约束,核心代码如下:
asyncfunctionrunAgent(agentName,input,context){constagentConfig=getAgentConfig(agentName);constsystemPrompt=awaitreadFile(agentConfig.system_prompt_file);constprojectRules=loadProjectRulesForAgent(agentConfig.rules_scope);constfullPrompt=`${systemPrompt}\n\n【项目规则】\n${projectRules}\n\n【输入】\n${input}`;constresponse=awaitcallLLM(agentConfig.model,fullPrompt,context);returnresponse;}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,*.htmlalwaysApply:true---# Canvas游戏开发规范1. 必须使用 `requestAnimationFrame` 实现游戏循环。 2. 碰撞检测使用AABB算法,不允许使用第三方库。 3. 所有游戏状态变量统一定义在 `gameState` 对象中。 4. 禁止使用 `eval` 和 `innerHTML` 动态生成代码。7.3 从本系统生成Cursor规则
系统可自动将项目规则(`.rules/`)和用户规则转换为Cursor规则文件,无需手动编辑,核心代码如下:
functiongenerateCursorRules(projectRules,userRules){letcursorRules=[];// 转换技术栈规则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/# 用户规则JSONprojects/{projectId}/ .rules/# 项目规则(git跟踪)sessions/# 会话记录specs/# 从反馈提炼的规范skills/# 项目级自定义Skillglobal_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),扩展工具的适用场景。