为了账号安全,请及时绑定邮箱和手机立即绑定

我第一次做游戏时学到的东西

这篇帖子受到了AWS Game Builder Challenge的启发。用您选择的AWS服务来做一个游戏,无论你的技能水平如何都可以参加!

我们家人都喜欢玩游戏。我们玩棋盘游戏、密室逃脱派对游戏、逃脱房间游戏、游戏节目或竞赛,还有游戏之夜。我最喜欢的游戏节目之一是《密码》,我从中得到灵感,创作了一个名为“云密码游戏”的作品,并参加了11月举行的AWS游戏建造者挑战赛

在这篇博客文章中,我将分享一下我是如何制作这个游戏以及在过程中学到的一些东西。如果只是想要代码的话?直接在这里获取:here

咱们瞧一瞧!

玩游戏

通过云密码游戏,我想通过这个游戏测试一下自己对云和AWS的了解,我提供一个被称为密码的秘密单词,并通过一个词的提示来猜出这个密码。每猜对一个密码,就能得一分。

云密码游戏界面

开始做游戏

这个游戏是使用 AWS Amplify 构建和部署的,并通过 Amazon Bedrock Converse API 生成密码和线索。我不会详细讲解如何使用 Amplify 进行设置和部署的每一步,因为有一个非常棒的入门指南。我还在过去的博客文章 中展示了如何使用 Amazon Bedrock Converse API,所以在本文中不会在这里深入讨论这些细节。

但我正在使用一个新的(对我来说的新)Amazon Titan Text G1 - Premier型号,这让我需要更多地了解如何为Titan文本模型编写提示。

提示工程

我很快发现,在使用Titan文本模型时,没有系统提示。但在和同事讨论这个问题时,我得知这其实还好,可以将上下文信息加入用户提示。我查阅了AWS Bedrock Titan Text 模型文档,并发现了一份专门针对Titan文本模型的指南提示工程指南

构建初始提示语

我从一个角色开始,一个精通AWS和云技术的节目主持人,并营造了用户与AI之间的对话氛围。

    假装你是AWS和云领域的专家,正在主持一个猜词游戏节目,给出一个秘密词,并提供一个字的提示让别人猜。用户只能猜测一个词来回应。

全屏模式,退出全屏

接下来,我添加了具体的、带有项目符号的指令:

    指南:
    - 秘密词应为1到4个字
    - 秘密词应基于AWS服务名称
    - 输出中不得对秘密词进行模糊处理或隐藏
    - 你生成的线索应代表秘密词
    - 线索必须仅为一个词
    - 线索应从难到易逐步变得简单
    - 你必须一次只分享一个线索
    - 绝不能重复过去的猜测
    - 每次交互时生成一个线索
    - 你必须仅以JSON格式回答
    - 回答问题时只能使用JSON格式
    - JSON输出或JSON输出后不得包含任何其他说明或信息

全屏,退出全屏

我包含了如何生成秘密单词和线索以及如何回应的规则,格式仅限 JSON。我为某些词如“必须”、“绝不”、“不要”添加了强调,以便模型能严格遵守。

请注意,我在整个提示中也将密码称为秘密词。我发现很多人对此感到困惑,认为这是一个不能因为安全原因而透露的真实密码,因此没有要求对“秘密词”进行模糊处理,并且没有提到“密码”这个词。简洁、清晰且具体,就这么说定了!

之后,我添加了更多关于如何格式化输出的细节。除了上面关于JSON格式的输出的说明外,我还具体说明了输出格式,以便另一端能够解析。

请按照下面的输出示例。
输出示例:
{
  “word”: "需要猜测的秘密词",
  “clue”: "线索X"
}

全屏模式 退出全屏

我也加了一个例子来展示我期望的样子。

示例:
{
  "单词": "AWS",
  "提示": "云服务"
}

点击此处进入全屏模式,点击此处退出全屏模式

在处理输出格式和示例时,我遇到了一个问题,即在上述链接的提示工程指南中,它显示了用反引号表示的JSON格式,我理解这意味着我也应该包含这些反引号。这导致了一团糟,模型在请求的JSON输出之后给出了额外的解释和上下文信息。这个问题花了很长时间才发现出来,但是一旦我删除了这些反引号,一切都变得正常了。

    ```json
    {{json content}}

点击进入全屏模式,点击退出全屏模式

最后来个请求:

生成那个秘密词语,并给它配上第一个线索。

切换到全屏 退出全屏

其中一种策略是在上述提示工程指南中提到的,即使用 `User:` 和 `Bot:` 来指示对话的回合流程。我在早期构建这个提示时尝试过这种方法,但模型经常搞不清楚下一步该做什么。我怀疑这是因为最初的指示不够具体。我可能在未来的版本中再看看这一点,不过目前这样也还凑合。你可以看到最终的提示在下面。

### 最后的提示

这里是初始化游戏的最后提示,附带密码和第一个线索。
假装你是一位精通AWS和云技术的游戏节目主持人,生成一个秘密单词并提供一个单词线索来猜测这个单词。用户将仅用猜测回应。

回应时请遵循以下指示。
指示:
- 秘密单词应为1到4个字
- 秘密单词应基于AWS服务名称
- 不要在输出中模糊秘密单词
- 线索应代表秘密单词
- 线索必须仅有一个字
- 线索应从难到易
- 每次提供一个新线索
- 从不重复生成已猜过的线索
- 每次互动时生成一个线索
- 仅以JSON格式回应
- 回应问题时不要使用其他格式
- JSON输出中不要包含任何额外的解释或信息

请遵循以下输出格式。
输出格式:
{
  “word”: "要猜的秘密单词",
  “clue”: "线索1"
}

示例:
{
  “word”: “AWS”,
  “clue”: “云”
}

生成秘密单词和第一个线索。

全屏模式 退出全屏

接着我在提交猜测时使用了这个提示:
我的猜测是:{guess}

生成下一个提示。**不要**改变秘密词语。**不要**使用之前的任何线索。


点击全屏模式;点击退出

在这里我提供了一些上下文(猜猜看)和指示。有时候秘密单词会变化,有时旧线索会被重复使用,所以我后面加了个小提示。

然后,我得把这个功能写进我的网页应用里。

### 编码时的辅助

之前我说过,我使用了 AWS Amplify 和 Amazon Bedrock Converse API 来实现这个游戏。和我们所有人一样,在编写代码的过程中,我也遇到了一些困难,我想分享一下我是怎么克服这些困难的。之前我写过关于使用生成式人工智能的经验,特别是 Amazon Q 开发者如何帮助我更高效地开发([这里](https://community.aws/content/2gQKqKLQqKmlvFsnp4zuCENKW8i/i-m-a-lazy-developer-here-s-how-amazon-q-is-enabling-me),[这里](https://community.aws/content/2i1vLMdryliLgpdceMy2N6o2LPn/a-practical-approach-to-using-generative-ai-in-the-sdlc),[这里](https://community.aws/content/2ihDE9A59SAbHwUqkLWhyl78Eax/simplify-your-unit-testing-with-generative-ai),以及 [这里](https://community.aws/content/2ihRGejp90hD6Cwxq5YO9czEMMM/how-an-ai-coding-companion-keeps-my-code-dry))。在整个开发过程中,我一直在用这些工具,但我发现 Amazon Q 开发者中的新功能特别有趣:CMD+i 快捷键,也称为内联聊天功能。

在我的编码过程中,我经常遇到关于语法的问题,如何以简单的方式表达某些逻辑,想要重构一段代码,或者生成一小段代码。通常,我会继续前进或最近我会转向或打开Amazon Q开发者聊天面板输入我的问题,然后复制粘贴结果。但在构建这个应用时,我使用了内联聊天来帮助我。我简化了代码块,学会了如何比较两个字符串的小写版本(因为我的IDE似乎认为我最初写的不正确),将整个`conversation`变量的内容输出到控制台,并使一个插值字符串能够编译。我真的问了“我怎么能让它编译通过呢?”,它给了我一个更新过的版本。结果发现需要对许多反引号进行转义。

内联聊天的工作方式是这样的:

1. 选中你想要编辑的代码段
2. 在 Mac 上按 ⌘ + i,在 Windows 上按 Ctrl + i(在 VS Code 或 JetBrains 中)
3. 在提示框里输入你的指令然后按回车键
4. Amazon Q Developer 会直接在你的代码中显示差异,你可以选择接受或拒绝这些改动。

这是选择代码并启动内联聊天后的样子。

选中文字和内联聊天提示的截图,如图所示。

然后接受或拒绝这个建议:

![截图显示了如何接受或拒绝建议的方法](https://imgapi.imooc.com/672ad7f7083e8b0a08000218.jpg)

这里真的很方便,我不用在Amazon Q开发者聊天面板和代码之间来回切换代码,复制更新代码片段。我可以直接在文本编辑器里写代码。这个功能特别适合更新代码(比如重构或修复代码块中的错误)时使用,同时也支持添加新代码。

更多用例示例,请查看内嵌聊天是如何工作的,请参阅[此处](https://aws.amazon.com/blogs/devops/amazon-q-developer-inline-chat/)。

### 为了将来

(注:此处使用了更口语化的表达,并保留了原文的格式和风格。)

这还存在一些改进的空间,而且我们肯定能在未来做出一些改进。下次我可能会想到以下几点:

* 添加认证(可在 [这里](https://docs.amplify.aws/react/build-a-backend/auth/set-up-auth/) 查看如何使用 Cognito 设置 Amplify 认证)
* 与其它用户比拼得分情况
* 优化密码提示和线索
* 更新界面(现在的界面还比较简单)

## 收尾

在这篇文章中,你已经了解了如何为Amazon Titan Text模型编写提示,以及如何使用Amazon Q Developer的新内联聊天功能。在这里可以获取这个游戏的代码[here](https://github.com/jennapederson/cloud-password-game)。

AWS 游戏构建挑战将持续至十一月底,你可以在此期间构建自己的游戏。请点击这里查看更多详情。了解更多详情,请点击 [这里](https://awsdevchallenge.devpost.com/)。

还没试过Amazon Q Developer?可以用Builder ID [这里](https://community.aws/builderid?trk=6f73c382-82fb-4650-936e-89cc26f49b15&sc_channel=el) 开始试试。

我希望这对你有用。如果你想了解更多这样的内容,点个赞👍,分享给你的朋友,或在下面留言💬。你还可以在我的[Instagram](https://www.instagram.com/jennanerdsout/)和[Youtube](https://www.youtube.com/@JennaPederson)上找到更多这样的内容。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消