0


用亚马逊AI代码开发助手Amazon Q Developer开发小游戏(下篇)

快用人工智能帮程序员写代码、开发游戏!今天小李哥继续介绍亚马逊推出的国际前沿人工智能AI代码开发助手Amazon Q Developer。目前该代码助手在Hugging Face代码生成权威测试集SWE-bench中排名第一,可以根据我们的需求生成整个代码项目,并可以帮助我们解释代码、提供架构设计方案、编写代码测试案例、提供漏洞扫描和修复建议、基于我们GitHub代码库中的历史代码生成新的代码段。

在本系列上篇文章中我们分享了一个猜词小游戏的Java源代码项目,并且通过AI编码助手自动发现Bug,并自动替换代码修复Bug,接下来我们将利用该AI编码助手发现游戏的新功能。该猜词小游戏的游戏截图如下图,游戏规则是:玩家在游戏中有五次猜词机会,目标是猜测一个六个字母的单词。每次猜测后,玩家在游戏界面中会收到单词位置对应的+ ? X 占位符反馈信息。其中+ 字符表示该位置的字母正确,? 字符表示字母在单词中但位置错误,X 字符表示字母不在单词中。通过不断的反馈和尝试,最终猜测出正确的单词。

方案所需基础知识

什么是Amazon Q Developer?

Amazon Q Developer 是一款由亚马逊云科技推出的AI驱动的软件开发助手,用于帮助开发者重新构想整个软件开发生命周期的体验,使得在亚马逊云科技或其他平台上构建、保护、管理和优化代码的过程变得更加快捷。其中比较亮点的功能是Amazon Q Developer Agent,它一个特性开发代理,该代理可以在集成到VSCode等开发环境(IDE)中,通过该工具开发者只需要通过自然语言输入,就可以自动生成定制化代码项目、修复代码bug和漏洞以及单元测试。当开发者输入特定代码需求后,软件开发代理会分析开发者的代码库并制定实现代码计划。开发者可以接受该计划,或者要求代理对其进行迭代优化之前的项目版本。在计划被确认接受后,代理会自动生成基于开发者需求的代码更改。

Amazon Q Developer 通过生成式人工智能(AI)为所有开发者提供目前性能最佳的代码生成工具,目前Amazon Q Developer在SWE-bench排行榜上名列第一。SWE-bench是一个测试系统自动解决GitHub代码问题的开发工具评估数据集。接下来小李哥就会介绍如何开始使用软件开发代理开发游戏、概述代理的工作原理等。

本实践包括的内容

1. 在IDE中通过文字描述向AI编码助手输入需要开发的新功能

2. 通过AI编码助手自动生成基于开发需求的新代码

本实践包括的内容

源代码分享

  1. 首先小李哥在这里将分享部分项目源代码,其中游戏控制器代码如下:
package com.example.qwords.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
import com.example.qwords.model.Word;
import com.example.qwords.model.GameStatus;
import com.example.qwords.service.WordSelectionService;
 
import io.micrometer.core.lang.Nullable;
import lombok.extern.log4j.Log4j2;
 
@Controller
@Log4j2
public class GameController {
 
    private WordSelectionService wordBank;
    private String selected;
    private Word word;
 
    @GetMapping("/game")
    public String index(@RequestParam String user, Model model) {
 
        wordBank = new WordSelectionService();
        selected = wordBank.getWord();
        word = new Word(selected);
 
        log.info(user);
 
        int attempts = getAttempts(model);
 
        String result = "";
 
        //Set View Attributes
        model.addAttribute("word", word.getWord());
        model.addAttribute("message", "Make your first guess!");
        model.addAttribute("attempts", attempts);
        model.addAttribute("result", result);
        model.addAttribute("status", GameStatus.INPROGRESS);
 
        return "game";
    }
 
    @PostMapping("/game")
    public String makeGuess(String guess, int attempts, Model model) {
 
        String result = word.getInfo(guess);
        attempts = addAttempt(attempts);
        
        model.addAttribute("result", result);
        model.addAttribute("attempts", attempts);
        model.addAttribute("guess", guess);
 
        if (word.isCorrect(guess.toCharArray())) {
            model.addAttribute("message", "Congratulations! You guessed correctly");
            model.addAttribute("status", GameStatus.SUCCESS);
        } else {
 
            if (attempts >= 5) {
                model.addAttribute("message", "Sorry, you've reached the maximum number of attempts.");
                model.addAttribute("status", GameStatus.FAILED);
            } else {
                model.addAttribute("message", "Try again. Your next guess:");
                model.addAttribute("status", GameStatus.INPROGRESS);
            }
        }
 
        return "game";
    }
 
    private int getAttempts(Model model) {
        Integer attempts = (Integer) model.getAttribute
        ("attempts");
        return (attempts != null) ? attempts : 0;
    }
 
    private int addAttempt(@Nullable Integer attempt) {
        return attempt + 1;
    }
 
}

单词选择服务模块代码如下:

package com.example.qwords.service;
 
import com.example.qwords.repository.WordList;
 
public class WordSelectionService {
 
    private WordList wordlist;
    private String selectedWord;
 
    public WordSelectionService() {
 
        this.wordlist = new WordList();
        this.selectedWord = wordlist.getRandomWord();
    }
 
    public String getWord() {
        return this.selectedWord;
    }
}

随机单词生成模块如下:

package com.example.qwords.repository;
import java.util.ArrayList;
import java.lang.Math;
 
public class WordList {
 
    private ArrayList<String> wordlist;
 
 
    public WordList() {
        this.wordlist = new ArrayList<String>();
        this.wordlist.add("animal");
        this.wordlist.add("bakery");
        this.wordlist.add("cracks");
 
    }
    
    public String getRandomWord() {
        int randomIndex = (int) (Math.random() * wordlist.size());
        return this.wordlist.get(randomIndex);
    }
 
 
}

2.确认已经在VS Code IDE运行环境中安装了进行实操实验的必要依赖项

  • Amamzon CLI
  • Visual Studio Code 的 Amazon Q 扩展
  • Git
  • Java - Amazon Corretto -- 版本 8 和17
  • Maven

通过需求生成开发计划

  1. 接下来我们在IDE内沉浸式体验Amazon Q的代码生成能力。我们的开发需求是想提升单词生成游戏的难度。我们通过单击 VSCode IDE 导航栏左侧的图标打开 Amazon Q 聊天窗格。通过选择 '+' 图标创建一个新的聊天窗口。

  1. 在聊天窗口里输入 /dev 并选择弹出的 /dev 选项来触发功能开发。

  2. 接下来我们通过自然语言写一段功能开发需求如下,在对Amazon Q输入的功能开发需求需要具体、清晰。我们输入的示例为:作为用户,我希望能够在开始游戏前选择猜测单词的难度。难度决定了被猜测单词的长度。游戏应该有 3 个难度级别:初级为 5 个字符长度、中级为 6 个字符长度、高级为 7 个字符长度

As a user, I'd like to be able to select the difficulty of the word I'm guessing before starting a game. The difficulty changes the length of the word being guessed. The 3 levels of the game should be: Beginner with a 5 character word length, Intermediate with a 6 character word length and Advanced with a 7 character word length

输入需求后点击回车开始生成功能开发计划

6.Amazon Q 将根据我们输入的功能描述,生成一个详细的开发计划,这个计划我看了之后还是觉得十分震撼的。计划包含了实现需求需要代码改动的每个步骤,包括了文件路径、改动具体的内容、以及功能单元测试案例,如图所示:

  1. 如果我们对该开发计划不满意,我们还可以通过自然语言提示对计划进行更新。如我们想将不同猜词难度的单词添加到WordList Class中,我们可以输入:
words to the WordList class for each difficulty level

将项目计划开发新功能代码

  1. 下面我们就让Amazon Q根据需求开发计划生成新的功能代码,我们点击在项目计划右下角的Generate code按钮。

  1. Amazon Q将基于我们现有的Java项目自动填入、更新代码,实现新的功能需求,并且会生成一个代码被修改的文件列表。

  1. 单击某个被修改的文件,进入后可以查看文件中代码被修改的内容。开发者可以根据需要对代码审阅,并进行进一步的自定义修改。

  1. 在修改完成后,我们再次构建和运行我们的游戏代码,就可以看到Amazon Q根据我们需求生成的新游戏功能了
mvn clean package
java-jar target/QWordsService-0.0.1.jar
  1. 在这里我也分享其他几个可以用Amazon Q给这个猜词游戏添加的新功能,大家可以自己设计自然语言提示词生成代码,如:
  • 添加前端框架: 使用现代框架如 React、Angular 或 Vue.js 创建更具交互性和视觉吸引力的前端。
  • 使用基础设施作为代码 (IaC) 进行部署: 添加 IaC 配置以使其可以快速部署到 AWS。
  • 多语言支持: 可以添加一个功能,让用户选择他们想要在其中玩 Q-Words 的语言,使其更易于全球受众访问。
  • 用户统计跟踪: 该应用程序可以维护每个用户的统计数据,如平均猜测次数、胜利次数、连胜次数等,将体验游戏化并鼓励持续参与。
  • 文本到语音集成: 可以结合语音反馈,朗读单词、定义或说明,以帮助更喜欢听觉学习的用户。
  • 可定制单词列表: 可以允许用户创建和分享他们自己基于特定主题或类别的单词列表,以便练习。
  • 多人模式: 可以添加多人模式,让用户可以在竞争性的 Q-Words 游戏中挑战朋友或随机对手。

以上就是利用亚马逊AI代码开发/生成工具-Amazon Q Developer开发猜词小游戏的下篇内容。欢迎大家关注小李哥的亚马逊云科技AI服务深入调研系列,关注小李哥未来不要错过更多国际前沿的AWS云开发/云架构方案。


本文转载自: https://blog.csdn.net/m0_66628975/article/details/141885765
版权归原作者 佛州小李哥 所有, 如有侵权,请联系我们删除。

“用亚马逊AI代码开发助手Amazon Q Developer开发小游戏(下篇)”的评论:

还没有评论