AI编程实战:从零到一搭建全栈项目

大家好,我是Java烘焙师。今天不聊架构,介绍一下AI编程。

趁着假期和业余时间,研究了一下AI编程,并用Kiro、OpenCode,从零搭建了一个完整可运行的全栈项目,包括Java后端、前端页面、微信小程序。AI编程效率是真高,全程没怎么写代码,而是告知AI需求是什么、哪些地方要优化、哪里有bug。
实现的功能是:定期抓取Epic游戏商城的限时免费游戏,并生成json、HTML文件,部署到Cloudflare pages,用户可在页面上查看和搜索游戏。

效果

访问地址:https://free-games-website.pages.dev

web页面
web页面

H5页面
demo_h5

后台管理页面
后台管理页面

微信小程序页面风格类似H5页面,但因个人不能做游戏相关的微信小程序,所以无法上架。

github代码统计:
github统计

架构和流程

image

采用Jamstack架构,后端服务预渲染好前端页面,部署到CDN,无需购买云服务器、存储资源。

  • 在家里的PC或树莓派上运行后端服务,定时抓取Epic游戏商城rest API,保存游戏详情至DB,并输出预渲染的前端文件至本地
  • crontab任务定时检测是否有git变更,有则把前端文件push到Github
  • Github自动触发流程,部署至静态页面托管服务Cloudflare pages
  • 用户查看pages.dev页面(Cloudflare免费二级域名)

主流程代码

很神奇的是,AI自己找到了Epic游戏商城的API,访问后解析到了字段格式,并写出了正确的DTO类。
以下是主流程代码片段:

    /**
     * Executes the complete crawling workflow:
     * 1. Fetch data from Epic API
     * 2. Parse JSON response
     * 3. Save games to database
     * 4. Generate static files for CDN deployment
     * 5. Log task execution
     * 
     * @return CrawlerResult containing statistics and errors
     */
    @Transactional
    public CrawlerResult crawlEpicGames() {
        log.info("Starting Epic Games crawl task");
        
        CrawlerTask task = new CrawlerTask();
        task.setStartTime(LocalDateTime.now());
        task.setStatus(CrawlerTask.TaskStatus.RUNNING);
        task.setGamesCrawled(0);
        
        // Log task start
        logCrawlerTask(task);
        
        CrawlerResult result = new CrawlerResult();
        
        try {
            // Step 1: Fetch data from Epic API
            String jsonResponse = epicCrawler.fetchFreeGames();
            
            // Step 2: Parse JSON response
            List<Game> games = parseEpicResponse(jsonResponse);
            result.setTotalFetched(games.size());
            
            log.info("Parsed {} games from Epic API", games.size());
            
            // Step 3: Save games to database
            int savedCount = gameService.batchSaveGames(games);
            
            // Note: batchSaveGames handles deduplication internally
            // We can't easily distinguish new vs updated without querying before each save
            // For simplicity, we report total saved count
            result.setNewGames(savedCount);
            result.setUpdatedGames(0);
            
            // Step 4: Generate static files for CDN deployment
            if (result.getTotalFetched() > 0) {
                log.info("Generating static files after successful crawl");
                boolean staticGenerated = staticPageService.generateStaticFiles();
                if (staticGenerated) {
                    log.info("Static files generated successfully");
                } else {
                    log.warn("Failed to generate static files");
                }
            }
            
            // 5. Log task execution
            // Update task status to SUCCESS
            task.setEndTime(LocalDateTime.now());
            task.setStatus(CrawlerTask.TaskStatus.SUCCESS);
            task.setGamesCrawled(result.getTotalFetched());
            task.setNewGames(result.getNewGames());
            
            log.info("Crawl task completed successfully: {} games saved, {} new games, {} errors", 
                savedCount, result.getNewGames(), result.getErrors().size());
            
        } catch (Exception e) {
            // Handle fatal errors
            String errorMsg = "Crawl task failed: " + e.getMessage();
            log.error(errorMsg, e);
            
            result.addError(errorMsg);
            
            task.setEndTime(LocalDateTime.now());
            task.setStatus(CrawlerTask.TaskStatus.FAILED);
            task.setErrorMessage(errorMsg);
        }
        
        // Log final task status
        logCrawlerTask(task);
        
        return result;
    }

AI编程助手

借助AI编程助手,可以实现从零搭建项目、辅助阅读源代码、日常开发。

AI编程助手和大语言模型,多到眼花缭乱,下面是一些常见的:

  • AI编程助手:Claude code、Github copilot、cursor、Kiro、OpenCode、codex、百度文心快码、阿里通义灵码、字节trae
  • 大模型:deepseek、qwen、kimi、minimax、glm、gpt、claude、gemini

我的核心诉求是:编码能力强、不依赖特定LLM模型、能免费使用。简单比较后,范围锁定在Kiro和OpenCode了。

Kiro

Kiro是Amazon推出的AI编程助手,包括桌面版和命令行版。官网地址:https://kiro.dev
以下是我在使用中发现的主要特点:

  • 编程模式:同时支持spec规范驱动模式、vibe氛围编程模式。其中spec模式注重需求定义、项目技术设计,明确后再开始编码任务,会根据提示词生成需求文档requirements.md、技术设计文档design.md、任务拆解文档tasks.md,适合需求明确的项目、或新增复杂功能,文档清晰详细、任务拆解得当、单测覆盖全;而vibe模式注重快速探索、日常小迭代。实测spec模式相比vibe模式更耗费token
    kiro_mode

image

  • 能感知整个项目上下文,生成全栈代码;也可指定文件、或具体行数,提出修改要求
    kiro_workspace

  • 持续迭代:借助Kiro生成项目代码、读取外部接口并生成类定义、修复bug、重构优化、给出上线部署步骤

  • 功能强大:内置本地文件搜索、读写、执行命令、下载外部文件等功能。还支持扩展,连接MCP server,比如让LLM调用postman

  • 不依赖特定LLM模型:默认自动选择,也可手动选择claude、deepseek等模型
    kiro_model

  • 免费额度:注册首月赠送500积分,每月有固定的50免费积分

OpenCode

OpenCode是一个开源的AI编程助手,也包括命令行版和桌面版。官网地址:https://opencode.ai
跟Kiro相比的主要差异是:

  • vibe coding代表,claude code的开源平替,适合快速实现demo
  • 开源社区维护:不受制于具体厂家,强调供应商中立
  • 有限时免费额度:一般是LLM供应商推出新模型时、为了评估效果而加入活动

我在Windows电脑上安装了WSL环境和Debian操作系统,以便在Windows上获得原生的OpenCode CLI体验,以下是截图:

opencode_cli
opencode_model

实战步骤

我一开始用OpenCode生成了可用的demo,然后又用Kiro重新实现了一遍,发现Kiro整体上更胜一筹,在需求理解、项目技术设计、代码质量、文档详实程度上都更好,极少需要人工介入改bug,可能跟Kiro的spec模式、以及LLM模型有关。所以后续会优先用Kiro,把OpenCode作为备选。

  • 描述功能需求、技术栈:给出需求内容、技术栈的提示词,如果有不明确的,Kiro会询问确认
  • 调试至可用:在Intellij idea中打开Kiro生成的工程目录,修改配置文件,连接本地MySQL,启动应用程序
  • 持续迭代,修复bug,重构优化:如避免重复计数、本地化支持(语言、币种)、抽象静态文件生成类
  • 总结skill:总结Java web+前端技术栈项目的skill,方便后续复用(相当于可复用的prompt模板,不用每次都重新耗费token)

更进一步

  • AI全天候工作:借助内网穿透,在外也可远程连接家里的服务器(如树莓派)。当Kiro的autopilot选项打开时,给它提新需求、或修改意见,它可以自主修改代码
  • 合规用法:不要在公司项目中使用外部AI编程工具,而是主动询问聊天式AI、不提供敏感信息,得到代码片段

感悟

  • AI极大提升效率:一个晚上搭环境、跑通流程,再加一个晚上修bug,再加几个晚上完善功能、发布上线。一人公司变得可行了,AI擅长用前人的经验来实现功能。自己做好架构师、项目管理的角色,指挥、监督AI做好后端、前端(web前端、H5前端、客户端、小程序)、QA、运维等多角色的工作
  • AI短期内代替不了人的创造力:如果发现了日常工作生活中的痛点,或者有好的idea,就去做吧
  • 关于OpenClaw:有编程技能,优先用AI编程助理,而非OpenClaw。因为易有安全隐患、token耗费大,可能出现费了九牛二虎之力做出不能用的玩具的情况,不过好处就是OpenClaw可以自主迭代,能用好也不错

你有什么想法呢?欢迎交流探讨。

posted @ 2026-03-24 08:22  Java烘焙师  阅读(248)  评论(0)    收藏  举报