第7章 AI驱动的全栈项目实战-代码和提示词-林子雨编著《AI编程》

大数据学习路线图

林子雨编著《AI编程》(访问教材官网

7.2.4 Docker与Docker Compose

本章开发和运行项目主要使用以下两个命令:

# 启动所有服务(-d表示后台运行)- 本章最常用命令
docker compose up -d

# 停止并删除所有容器 - 本章最常用命令
docker compose down

其他常用辅助命令:

# 实时查看所有服务日志
docker compose logs -f

# 在指定容器中执行命令(如进入user-service容器)
docker compose exec user-service bash

# 查看所有容器状态
docker compose ps

# 重新构建并启动(当Dockerfile或代码有变化时)
docker compose up -d --build

# 仅查看某个服务的日志
docker compose logs -f user-service

7.3.1 初始化项目环境

(2)在项目根目录下新建目录“.TRAE/rules”,在“.TRAE/rules”目录下创建两个规则文件js-code-style.md和python-code-style.md,写入代码规范。读者在实践过程中,可以直接从教材官网下载这些文件并复制到自己的项目中,不需要自己手动撰写规则。
js-code-style.md和python-code-style.md这两个文件请从教材官网的下载专区(百度网盘)中的“代码”目录下下载。

(3)在命令行终端(比如,Git Bash终端)执行“npx superpowers-zh --tool TRAE”,为当前项目安装Superpowers插件(备注:Superpowers插件是为每个项目单独安装的,虽然前面章节已经为其他项目安装过Superpowers插件,但是,这里也需要再次执行安装命令)。

(4)在Git Bash终端中执行命令“git init”在项目根目录下初始化 Git 仓库,初始化后,会生成一个隐藏目录“.git”,可以在Git Bash终端中执行“ls -all”命令看到这个隐藏目录。参考6.3节的教程,执行“pre-commit install”命令配置pre-commit钩子,确保每次提交代码前都执行代码规范检查。然后,直接把6.3节中的“.pre-commit-config.yaml”文件复制到本项目根目录下,并执行如下命令把该文件也纳入Git版本管理:

git add .pre-commit-config.yaml 
git commit -a -m '添加pre-commit钩子的配置'

下面是该项目的根目录下的AGENTS.md的内容:

## 项目背景

打造一个活动平台,用户可以在平台上发布活动,也可以在这个平台上报名活动。

## 功能需求

1. 用户可以在这个平台上发布活动,也可以在这个平台上报名活动
2. 发布活动的人,就是这个活动的管理员,管理可以设置报名人数上限,可以查看哪些人报名了这个活动
3. 没有登录的用户也可以查看有哪些活动,但是不能报名活动,登录的用户可以看到自己报名的活动列表
4. 为了页面美观,需要支持活动海报的上传和修改,所有页面都是用中文展示,活动页面显示活动海报,活动名称,活动开始时间,活动地点,活动人数上限,报名人数,活动还剩下多少名额

## 技术栈

1. 使用微服务架构,只使用Python生态的技术栈
2. 为了尽可能贴近真实,需要引入网关和服务发现
3. 使用SQLite数据库即可,图片也使用SQLite数据库存储
4. 前端使用React和TailwindCSS
5. 使用docker compose,便于一键启动所有微服务
6. 跨平台,可以在Windows、macOS、Linux上运行

7.3.2 需求对齐过程

接下来采用第5章介绍的Superpowers七步法进行功能开发。由于现在AI越来越智能,越来越喜欢“抢活干”(没有经过用户确认就自动进入下一步工作),因此,需要在提示词中,要求AI严格按照流程进行开发。在当前项目中,请在TRAE的智能体交互界面的对话框中输入如下提示词并提交:

严格遵循Superpowers七步法串行开发本项目,无确认绝不主动推进、不超前写代码、不跳过任何一个步骤。 

固定流程顺序,缺一不可,仅完成当前步骤,等待我确认后再进入下一环。 

1. 需求对齐时调用 /skill:brainstorming 苏格拉底追问敲定全部开发需求,输出需求文档,待确认 
2. 环境隔离 /skill:using-git-worktrees 建立Git工作树/独立开发分支,确定项目目录,待确认 
3. 任务拆解 /skill:writing-plans 拆分细粒度开发任务,明确文件、逻辑、校验方式,待确认 
4. 逐任务开发 /skill:subagent-driven-development 单任务完成后自检复盘,不批量编写,待确认(特别注意,任务开发的时候使用/skill:test-driven-development 进行开发TDD开发,开发完成以后应该会有很多测试) 
5. TDD测试 /skill:test-driven-development 先写测试用例再实现代码,完成功能校验,待确认 
6. 代码评审 /skill:requesting-code-review 排查漏洞、规范、性能问题并优化,待确认 
7. 项目收尾 /skill:finishing-a-development-branch 完成整合、持久化、整理交付,流程结束 

1.输出首行标注当前所处步骤 
2.每步结束统一话术:本步骤完成,请确认进入下一步 
3.未收到确认指令,仅限完善当前内容,禁止输出后续内容与代码 
4.严禁自主提速、合并步骤、提前完成开发 

现在开始第1步,逐条澄清本项目的需求,本项目的基本要求已经写入到AGENTS.md文件中。

7.3.3 微服务开发与验证

这个过程中,AI会执行一系列命令,过程中可能需要用户确认,只需要根据提示选择即可。比如,AI会询问“是否要创建Worktree”,用户需要选择同意创建Worktree,然后,AI会执行下面的命令创建工作树,并切换到feature/mini-activity-platform分支(你的TRAE中由AI自动创建的分支名称可能不同),如下所示:

git worktree add .worktrees/mini-activity-platform -b feature/mini-activity-platform

接下来进入最后一步,将代码合并到主干分支。AI会提交所有的更改,并合并代码到主干分支。

git merge feature/mini-activity-platform --no-ff -m "Merge feature/mini-activity-platform into main"

7.3.4 功能验证

在TRAE的智能体交互界面的对话框中,输入以下提示词并提交,AI将会启动服务并调用API进行验证:

使用docker compose启动所有服务,并使用curl将所有API都测试一遍,确保所有API都是正确运行的。

使用第6章介绍的方法论,通过Playwright Test进行前端页面验证。在TRAE的智能体交互界面的对话框中,输入以下提示词并提交:

你是资深测试开发(TS+Playwright Test),根据FastAPI源码生成可直接运行端到端测试: 
  1. 识别全部路由、请求方式、参数; 
  2. 解析Pydantic模型,组装正常/异常请求体; 
  3. 采用Playwright内置request发起请求。 

  ### 规范:基于Playwright Test,断言状态码+返回关键字段,代码放tests目录。 
  输出:在当前目录下创建一个e2e目录,生成端到端测试代码,并给出执行方式。

7.3.5 人工审查

AI生成代码以后,需要进行人工审核,发现可能存在的错误。比如,在人工审查环节,发现了一个架构不一致的问题,则可以在TRAE的对话框中输入如下提示词并提交:

项目设计文档中计划使用Consul作为服务发现组件,但实际代码中似乎未启用Consul服务发现功能。需要确认:1) 是否需要启用Consul;2) 启用Consul的修改复杂度;3) 若不启用Consul,服务发现相关配置的作用是什么。

AI会给出分析结果,并给出几种解决方案供用户选择,比如用户选择使用“方案一”,则可以在对话框中输入如下提示词并提交:

使用方案一,请修改,请确保修改以后的所有测试都能通过。

7.3.7 运行项目与效果展示

项目开发完成后,如何运行它?非常简单,只要在TRAE的智能体交互界面的对话框中输入如下提示词并提交,就可以顺利启动程序:

你是一个资深的SRE,擅长处理计算机网络问题、容器部署问题和环境问题。你会根据不同的操作系统,明智地选择最适合的容器运行环境,例如,windows下你会选择rancher desktop; mac下你会选择colima;linux下你会选择podman。

现在,要求你根据项目要求,按步骤启动服务:
* 初始化测试数据
* 使用docker compose启动服务,必须使用docker启动服务
* 检查所有服务启动成功,API可用

你可能会遇到网络问题,当你会明智地选择可访问的网络资源资源,例如,下载rancher desktop,你会从https://mirrors.aliyun.com/github/releases/rancher-sandbox/rancher-desktop/v1.19.3/ 这里下载。 拉取docker镜像,你会优先选择https://docker.m.daocloud.io , 如果访问失败你还会尝试 https://docker.1ms.run 。 

因为你选择了不同的镜像源,因此,你还会修改Dockerfile和docker-compose.yml文件,指定镜像地址,如FROM docker.m.daocloud.io/library/python:3.11-slim ;     image: docker.m.daocloud.io/library/consul:1.15。