你好!
我一直在多个个人项目中使用Claude(Opus 4.8和5)和Gemini(主要用于图像),并在这个过程中学到了很多关于提示工程和AI辅助开发的知识。现在我想分享一些经验和成果。顺便说一句——开发游戏一直是我的目标之一,但我在艺术和设计方面非常糟糕,所以AI对我来说至少解决了一个巨大的瓶颈……
引发这一切的问题…… 在某个大型项目进行到深处时,我意识到自己大部分时间和上下文都浪费在让模型重新跟上进度上。每次对话我都要重复解释同样的事情,重新争论两轮前已经定下的决策,一遍又一遍地讲同样的故事。工作本身不是瓶颈,重新“入职”才是(以及我过去糟糕的上下文管理)。
提升我体验的方法…… 在阅读了关于提示工程和AI辅助开发的资料后,我最终采用了规范驱动开发(SDD)和EARS(需求语法的简易方法)方法论来编写规范需求。简单说,这两者追求的是同一件事——一致性。我这里说的一致性,不是指“模型今天写出了好代码”,而是指我们在第一轮对话中做出的决定,在第二十轮对话时仍然被遵守,因为它被写在了规范里,而不是存在于模型再也看不到的聊天历史中。
然后我把它放进了一个开发框架…… 经过足够的实验,我厌倦了手动将结果从一个项目拖到下一个项目,所以我构建了一个小型Electron工作台来运行整个流程。每个项目都有自己“思考”/“设计”/“构建”阶段,每个阶段将前一阶段的笔记或结果作为文件传递,而不是让我在旧的聊天历史中翻找。我发现最有用的部分是角色预设。该框架根据模式、模型已知的内容以及它应该关注的内容来决定代理(agent)的启动角色,例如:
思考: 我们来回交换想法。这个游戏或项目是什么,核心循环是什么,有哪些机制。此时完全没有代码,既没有仓库也没有图纸,只是和“某人”闲聊一个想法。
设计: 代理完全切换角色,通常模型也会切换。角色来自框架,而非模型。然后我们停止闲聊,开始更严肃的对话,涉及游戏设计文档(GDD)、调色板、游戏循环、资源、屏幕、用户体验……当然,对于我这样从未开发过游戏的人来说,这一阶段的感觉是“哦,原来游戏是这样设计的”,而代理在引导我完成这个过程方面非常有帮助。(当然,在这一步我也开始了新的对话会话,但预先注入了上下文,所以模型已经知道上一阶段我们在谈论什么)。
构建: 这里才是编码代理真正开始工作的地方。首先它将设计转化为有序的任务待办列表,然后逐一执行(但我之前必须检查规范,以防出现幻觉或误解)……所有这些任务都来自我们之前打磨和设计的会话,所以代理不是猜测或捏造,它只是在遵循设计并实现它。
所以SDD的五个阶段(需求、规范、验证、生成,然后是同步和维护)最终分散在我实际可以看到和操纵的三种模式中。如前所述,框架还为每个阶段预先注入上下文,护栏就在那里。当我告诉它“手机放置类游戏”并选择引擎时,引导提示(bootstrap prompts)会在对话开始前加载引擎特定的知识。每个阶段都有其自己的约束:代理可以接触什么,哪些内容必须一起变更(文档随代码一起移动,否则变更不算完成),以及在任务被视为完成之前必须通过哪些关卡。
最终结果 😄!
我很乐意发布这些内容并解释我对此的所有学习心得,因为这是我对自己工具亲身实践(dogfooding)的成果。我最终用这个工作流独立构建了一个放置类游戏,并前不久在Play Store上发布了。它从一个想法,经过设计,最终变成了现实。
该游戏使用Godot 4构建。美术是像素风格。正如我所说,我作为艺术家很糟糕,但我正在通过Aseprite练习像素画,所以大部分资源是通过一个叫PixelLab的服务生成的(通过其MCP),再加上Gemini生成的环境和一些敌人资源。
很多音频来自Strudel(https://strudel.cc/)。我为我的代理编写了一个关于它的技能,所以它实际上很了解这个工具,能够用它作曲而不是瞎猜。
这个游戏不是一件艺术品。但我认为它完成了它的使命,而且这是一个我乐意开始、动手实践、真正完成并成功发布的项目。
如果你想看看,它在Play Store上叫DeepFury: Idle Berserker,我还为它搭了一个网站:https://deepfury.navgradstudios.com.ar/
关于资源的一个重要提示,这可能会为你节省数小时的重新生成时间,那就是我们如何向AI请求它们。如果你想要AI生成的资源,不要用简单的句子向AI请求该资源。相反,让你的AI为另一个AI写提示词。就这么简单。没有比这更神奇的了。你的工作模型已经拥有上下文。它知道你的调色板,知道风格,知道这个资源是用来干什么的。所以你希望从它那里得到的是一个结构良好的英文提示词,带有清晰的锚点和参考。然后你将这个提示词交给图像模型。这就是我学到的实现资源一致性的方法。
关于上下文…… 尽量不要让上下文窗口使用超过30%或40%。超过这个限度,来回对话就会变得令人头疼。要么压缩,要么清理干净重新开始,并保持任务小而具体。以SDD方式进行构建极大地帮助了跨会话保持一致性。你完成一个小任务,清除上下文,立即开始下一个任务,模型已经为此做好了准备。
关于成本…… 除了每月100美元的Claude计划和PixelLab根据使用量大约9到10美元之外,其实没有太多开销。我搭了一个网站,(希望有一天)能成为一个游戏开发工作室。目前它通过Cloudflare隧道运行在我家里的树莓派上,这是免费的哈哈。
希望所有这些废话对某些人有帮助,随时欢迎反馈 :D
评论 (0)