作者:黑夜路人

时间:2025年7月

Kiro 快速介绍

Kiro是什么

Kiro 是亚马逊公司在2025年7月16日发布的AI IDE(AI驱动的集成化开发工具),Kiro的核心理念是帮助开发者从概念到开发高效交付。

开发者有过这样的经历:写了几个prompt,很快就构建出一个能运行的应用程序,感觉像变魔术一样。但当你真正想要将它部署到生产环境中时,却发现困难重重。

  • 模型在构建过程中做出了哪些假设?
  • 在引导Agent时做了很多决策,但这些决策有没有被记录?
  • 需求很模糊,代码是否合规无法判断?
  • 系统设计不透明,维护困难重重?

而擅长Spec-Driven Development(以需求为导向的开发)的Kiro,就是这些问题的方式之一。

Kiro 通过 Specs(Specification)和Hooks(自动化触发器)两大核心模式,简化开发流程。Kiro specs 先聊天,再构建,能将需求分解为用户故事、设计文档和技术任务,让开发目标明确且可追溯;Kiro hooks 先规划,再构建,优先创建需要文档和设计,通过事件驱动自动化,自动完成测试更新、文档刷新等重复性任务,提升开发效率并减少错误。Kiro 支持多种编程语言和插件,兼容 VS Code 设置,提供完整的 AI 编程体验。

Kiro正处于预览阶段,目前完全免费,用户可以免费使用Claude-Sonnet-4和Claude-Opus-4模型。

Image

Image

为什么亚马逊可以这么硬气的使用Claude模型,主要是因为它是Anthropic重要投资人之一。2023年9月,亚马逊向Anthropic注资12.5亿美元。2024年3月,亚马逊宣布对Anthropic追加27.5亿美元投资,总投资达40亿美元。2024年11月22日,亚马逊再次向Anthropic追加投资40亿美元,使其总投资额达到80亿美元。亚马逊通过AWS已累计向Anthropic投资超过80亿美元,是Anthropic最大的机构投资者之一。

Kiro的主要功能

  • 需求管理(Specs):将模糊需求拆解为具体用户需求,补充边界条件,生成开发指导手册,并保持需求与代码同步。
  • 自动化开发(Hooks):自动更新测试文件、刷新文档、扫描安全问题和校验代码规范。
  • 集成与扩展:支持 Model Context Protocol(MCP)连接专业工具,提供引导规则和代理聊天功能,满足多样化开发需求。
  • 兼容性与用户体验:基于 Code OSS构建,保留 VS Code 设置和插件,支持多平台和主流编程语言,无缝融入现有开发环境。
  • 预览代码修改:执行任务时,Follow按钮支持预览代码修改,把选择权交给用户。
  • 即时撤销修改:发现不对劲可立即点击Revert按钮撤销,避免错误。
  • Agentic Chat:结合上下文进行即时编程任务。

Image

Image

Kiro的应用场景

  • 快速原型开发:快速将概念转化为可运行的原型,适合初创团队或个人开发者快速验证想法。
  • 复杂系统开发:帮助团队从需求分析到设计、实现,再到部署,确保复杂系统的开发流程清晰、高效。
  • 安全应用开发:用 Kiro 的自动化触发器和最佳实践,快速开发安全应用,如加密文件共享系统。
  • 游戏开发:不擅长游戏开发的开发者,快速构建游戏逻辑和功能。
  • 团队协作开发:通过规格和自动化触发器,确保团队成员遵循相同的代码标准和开发流程,提升协作效率。

Kiro 快速使用

如何使用Kiro

  • 访问官网并下载:访问 kiro官网 kiro.dev ,下载适合操作系统的 Kiro 安装包。
  • 安装 Kiro:运行下载的安装程序,按照提示完成安装。
  • 注册与登录:打开 Kiro IDE,选择登录方式(如 Google 或 GitHub 账号),完成注册或登录。
  • 创建或导入项目:在 Kiro IDE 中创建新项目或导入现有代码库。
  • 使用 Kiro 的核心功能:
    • Specs:输入需求描述,Kiro 自动生成用户故事、设计文档和任务。
    • Hooks:设置自动化触发器,Kiro 在保存文件时自动执行任务,如更新测试文件或文档。
  • 开始开发:用 Kiro 的代码编辑和 AI 功能进行开发,逐步完成任务。
  • 提交代码:用 Kiro 的 Git 集成功能提交代码,自动化触发器自动进行安全和规范检查。

下载

地址:https://kiro.dev/downloads/

安装

安装过程非常明显可以看出来就是VSCode魔改来的,跟 Cursor/Windsurf/Trae 一样。

安装后打开主界面:

Image

个人推荐Google账户登录:(因为你可以无限制注册gmail账户 ^_^ )

Image

登录后,可以导入你的VSCode配置和扩展(特别是VSCode里安装了RooCode/AMP等都可以无缝导入):

Image

Image

注意,RooCode、Cline、AMP 等插件都能够正常导入,但是大概率Augment无法导入。

如果Augment这样的扩展无法导入,那么就手工导入就好了,在VSCode中如下操作:

Image

成功提示:

Image

把你VSCode中安装的Augment以VSIX方式导出下载到本地,会变成一个类似于下面文件名的文件:

augment.vscode-augment-x.xxx.x.vsix

Image

然后在Kiro中导入这个VSIX插件,按 Ctrl + Shif + P 键 ,搜索“VSIX”:

Image

选中刚才从VSCode中保存的VSIX文件:

Image

安装完成后,在Kiro中就会出现Augment插件了:

Image

不过,目前Augment还无法唤醒Kiro完成登录操作,估计因为Kiro IDE太新,还有兼容性方面的原因,可以再等等,上面只是告诉如何安装Augment,方便后续并行使用:

Image

模式说明

它核心主要是有两种模式:Vibe 和 Spec ,可以认为就是“氛围”模式和“规格”模式。

Image

Vibe(氛围模式),就是类似于标准的 Cursor/Winsurf 的模式,我们叫做聊天式编程,这个没什么好讲的。

Spec(规格模式),这个是Kiro的核心区别,就是把 需求、技术、设计等都规格化:

需求规格说明书(Requirements Specification)
描述软件系统 “需要做什么”,包括用户需求、功能需求、性能需求等。
例如:“用户可以上传图片并调整尺寸”、“系统响应时间不超过 2 秒”。

技术规格说明书(Technical Specification)
描述软件系统 “如何实现”,包括架构设计、数据结构、接口定义、算法逻辑等。
例如:“使用 REST API 实现用户认证”、“采用 MySQL 存储用户数据”。

设计规格说明书(Design Specification)
专注于软件的界面设计、交互流程和视觉规范。
例如:“登录页面包含用户名 / 密码输入框和登录按钮”、“主色调为蓝色 (#165DFF)”。

“Spec” 是Kiro 核心功能之一,它利用 AI 自动将开发者的自然语言描述转化为结构化的软件开发规范。

  • 自动生成需求细节:将模糊的需求(如 “添加评论系统”)拆解为具体的用户故事(如 “用户可以发布评论”、“作者可以删除恶意评论”)。
  • 补充技术细节:生成系统设计文档,包括数据库模式、API 接口、数据流图等。
  • 创建任务清单:将需求分解为可执行的开发任务,并为每个任务添加测试用例和验收标准。

对于Kiro的“spec” 价值:

  • 减少误解:清晰的规范能避免团队成员对需求或设计产生歧义。
  • 提高效率:开发人员可以直接根据规范编写代码,无需反复沟通。
  • 便于测试和维护:规范为测试提供了明确的标准,也为后续维护提供了文档支持。

我们后面重点介绍一下Spec模式,因为Vibe模式跟Cursor差不多,就不赘述,自行体验就可以了。

Spec 模式实战

假设我们的spec(需求规格如下,示例):

### 用户注册功能规格说明书

#### 1. 需求概述
用户可以通过邮箱和密码创建账户,并接收验证邮件。

#### 2. 功能细节
- **输入字段**:
  - 邮箱地址(格式验证)
  - 密码(至少8位,包含字母和数字)
  - 确认密码
  - 同意隐私政策(勾选框)

- **业务逻辑**:
  - 邮箱已注册时提示错误
  - 密码不一致时提示错误
  - 注册成功后发送验证邮件
  - 用户需点击邮件中的链接激活账户

#### 3. 技术实现
- **API 接口**:
  - POST /api/register
    - 请求参数:{ email, password, agreeTerms }
    - 响应:201(成功)或 400(错误)

- **数据库表**:
  - users 表:id, email, password_hash, is_verified, created_at

在Spec模式下,我们跟Kiro交互。

第一步:优化需求文档(生成用户故事,Requirement)

Image

然后它就会在 .kiro/specs 目录下面创建一个用户注册目录下面生产对应的需求文档:

Image

它针对我们上面模糊的需求文档明显做了很多的扩充工作,变成了一个个的用户故事,它扩充后的:

# 需求文档

## 介绍

用户注册功能允许新用户通过提供邮箱地址和密码来创建账户。系统将验证用户输入的信息,创建账户后发送验证邮件,用户需要通过邮件激活账户才能完成注册流程。

## 需求

### 需求 1

**用户故事:** 作为一个新用户,我希望能够使用邮箱和密码注册账户,以便我可以访问系统功能。

#### 验收标准

1. 当用户访问注册页面时,系统应当显示包含邮箱、密码、确认密码和隐私政策同意选项的注册表单
2. 当用户输入邮箱地址时,系统应当验证邮箱格式的有效性
3. 当用户输入密码时,系统应当验证密码至少包含8个字符且包含字母和数字
4. 当用户输入确认密码时,系统应当验证确认密码与原密码一致
5. 当用户未勾选隐私政策同意选项时,系统应当阻止注册并显示错误提示

### 需求 2

**用户故事:** 作为系统管理员,我希望防止重复邮箱注册,以便维护用户数据的唯一性。

#### 验收标准

1. 当用户使用已注册的邮箱地址注册时,系统应当返回错误信息"该邮箱已被注册"
2. 当用户使用未注册的邮箱地址时,系统应当允许继续注册流程
3. 系统应当在数据库中检查邮箱地址的唯一性

### 需求 3

**用户故事:** 作为一个新注册用户,我希望收到邮箱验证邮件,以便我可以激活我的账户。

#### 验收标准

1. 当用户成功提交注册信息时,系统应当创建未激活状态的用户账户
2. 当账户创建成功时,系统应当向用户邮箱发送包含激活链接的验证邮件
3. 当用户点击邮件中的激活链接时,系统应当将用户账户状态更新为已激活
4. 当用户尝试使用未激活账户登录时,系统应当提示"请先激活您的账户"

### 需求 4

**用户故事:** 作为开发者,我希望有清晰的API接口来处理用户注册,以便前端可以正确调用注册功能。

#### 验收标准

1. 当前端发送POST请求到/api/register端点时,系统应当接收包含email、password和agreeTerms字段的JSON数据
2. 当注册成功时,系统应当返回HTTP状态码201和成功消息
3. 当注册失败时,系统应当返回HTTP状态码400和具体的错误信息
4. 当服务器内部错误时,系统应当返回HTTP状态码500和通用错误消息

### 需求 5

**用户故事:** 作为系统架构师,我希望有合适的数据库结构来存储用户信息,以便支持用户管理功能。

#### 验收标准

1. 系统应当创建users表包含以下字段:id(主键)、email(唯一索引)、password_hash、is_verified、created_at
2. 当存储用户密码时,系统应当使用安全的哈希算法而不是明文存储
3. 当创建新用户记录时,系统应当自动设置created_at为当前时间戳
4. 当用户激活账户时,系统应当将is_verified字段更新为true

我们继续让它完成下一步。

第二步:进行技术设计(Design)

我们跟Kiro讲继续下一步,它会进入技术设计:

Image

然后它生成了 design 技术设计的文档,包括技术选型都补全了:

Image

如果对它产出的技术设计不满意,还可以互动迭代修改:

Image

Kiro 经过几轮迭代后生成的完整设计:

# 设计文档

## 概述

用户注册功能采用前后端分离的架构设计,使用RESTful API进行通信。后端负责业务逻辑处理、数据验证和存储,前端负责用户界面和用户体验。系统将实现安全的密码存储、手机号短信验证和用户状态管理。

## 架构

### 整体架构

```mermaid
graph TB
    A[前端注册页面] --> B[API网关]
    B --> C[用户注册服务]
    C --> D[SQLite数据库]
    C --> E[短信服务]
    E --> F[阿里云短信API]
    
    subgraph "后端服务"
        C
        G[验证中间件]
        H[密码加密服务]
        I[短信模板服务]
    end
    
    C --> G
    C --> H
    C --> I
```

### 技术栈选择

- **后端框架**: Node.js + Express.js
- **数据库**: SQLite
- **ORM**: Prisma
- **密码加密**: bcrypt
- **短信服务**: 阿里云短信服务 (Alibaba Cloud SMS)
- **验证库**: Joi
- **前端框架**: Next.js + React + TypeScript
- **构建工具**: Vite
- **状态管理**: Zustand
- **UI组件库**: ShadCN/UI + Tailwind CSS
- **HTTP客户端**: Axios
- **表单验证**: React Hook Form + Zod

## 组件和接口

### 后端组件

#### 1. 用户注册控制器 (UserRegistrationController)

```typescript
interface UserRegistrationController {
  register(req: Request, res: Response): Promise<Response>
  sendVerificationCode(req: Request, res: Response): Promise<Response>
  verifyPhone(req: Request, res: Response): Promise<Response>
}
```

**职责:**
- 处理注册请求
- 协调各个服务组件
- 返回适当的HTTP响应

#### 2. 用户服务 (UserService)

```typescript
interface UserService {
  createUser(userData: CreateUserDto): Promise<User>
  findUserByPhone(phone: string): Promise<User | null>
  activateUser(phone: string, code: string): Promise<boolean>
  generateVerificationCode(phone: string): Promise<string>
  validateVerificationCode(phone: string, code: string): Promise<boolean>
}
```

**职责:**
- 用户业务逻辑处理
- 用户数据操作
- 验证码管理

#### 3. 短信服务 (SmsService)

```typescript
interface SmsService {
  sendVerificationCode(phone: string, code: string): Promise<boolean>
  generateVerificationCode(): string
  validatePhoneFormat(phone: string): boolean
}
```

**职责:**
- 发送验证短信
- 生成验证码
- 手机号格式验证

#### 4. 验证中间件 (ValidationMiddleware)

```typescript
interface ValidationMiddleware {
  validateRegistrationData(req: Request, res: Response, next: NextFunction): void
  validatePhoneFormat(phone: string): boolean
  validatePasswordStrength(password: string): boolean
}
```

**职责:**
- 输入数据验证
- 格式检查
- 业务规则验证

### 前端组件

#### 1. 注册表单组件 (RegistrationForm)

```typescript
interface RegistrationFormProps {
  onSubmit: (data: RegistrationData) => void
  onSendCode: (phone: string) => void
  loading: boolean
  errors: ValidationErrors
  codeSent: boolean
}
```

**职责:**
- 用户输入收集
- 实时表单验证
- 错误信息显示
- 验证码发送触发

#### 2. Zustand状态管理 (RegistrationStore)

```typescript
interface RegistrationStore {
  formData: RegistrationData
  loading: boolean
  errors: ValidationErrors
  submitStatus: 'idle' | 'code-sent' | 'success' | 'error'
  codeSent: boolean
  setFormData: (data: Partial<RegistrationData>) => void
  setLoading: (loading: boolean) => void
  setErrors: (errors: ValidationErrors) => void
  sendVerificationCode: (phone: string) => Promise<void>
  verifyAndRegister: (data: RegistrationData) => Promise<void>
  reset: () => void
}
```

**职责:**
- 全局状态管理
- API调用协调
- 用户反馈处理

### API接口设计

#### 发送验证码接口

**端点:** `POST /api/send-verification-code`

**请求格式:**
```json
{
  "phone": "13800138000"
}
```

**响应格式:**

成功响应 (200):
```json
{
  "success": true,
  "message": "验证码已发送,请查收短信",
  "data": {
    "phone": "13800138000",
    "expiresIn": 300
  }
}
```

错误响应 (400):
```json
{
  "success": false,
  "message": "发送失败",
  "errors": [
    {
      "field": "phone",
      "message": "手机号格式不正确"
    }
  ]
}
```

#### 注册接口

**端点:** `POST /api/register`

**请求格式:**
```json
{
  "phone": "13800138000",
  "password": "SecurePass123",
  "verificationCode": "123456",
  "agreeTerms": true
}
```

**响应格式:**

成功响应 (201):
```json
{
  "success": true,
  "message": "注册成功,账户已激活",
  "data": {
    "userId": "uuid-string",
    "phone": "13800138000"
  }
}
```

错误响应 (400):
```json
{
  "success": false,
  "message": "注册失败",
  "errors": [
    {
      "field": "phone",
      "message": "该手机号已被注册"
    }
  ]
}
```

## 数据模型

### 用户表 (users)

```sql
CREATE TABLE users (
  id TEXT PRIMARY KEY,
  phone VARCHAR(20) UNIQUE NOT NULL,
  password_hash VARCHAR(255) NOT NULL,
  is_verified BOOLEAN DEFAULT FALSE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_users_phone ON users(phone);
```

### 验证码表 (verification_codes)

```sql
CREATE TABLE verification_codes (
  id TEXT PRIMARY KEY,
  phone VARCHAR(20) NOT NULL,
  code VARCHAR(6) NOT NULL,
  expires_at DATETIME NOT NULL,
  used BOOLEAN DEFAULT FALSE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_verification_codes_phone ON verification_codes(phone);
CREATE INDEX idx_verification_codes_code ON verification_codes(code);
```

### 数据模型接口

```typescript
interface User {
  id: string
  phone: string
  passwordHash: string
  isVerified: boolean
  createdAt: Date
  updatedAt: Date
}

interface VerificationCode {
  id: string
  phone: string
  code: string
  expiresAt: Date
  used: boolean
  createdAt: Date
}

interface CreateUserDto {
  phone: string
  password: string
  verificationCode: string
  agreeTerms: boolean
}

interface RegistrationData {
  phone: string
  password: string
  confirmPassword: string
  verificationCode: string
  agreeTerms: boolean
}
```

## 错误处理

### 错误类型定义

```typescript
enum ErrorCodes {
  PHONE_ALREADY_EXISTS = 'PHONE_ALREADY_EXISTS',
  INVALID_PHONE_FORMAT = 'INVALID_PHONE_FORMAT',
  WEAK_PASSWORD = 'WEAK_PASSWORD',
  PASSWORD_MISMATCH = 'PASSWORD_MISMATCH',
  TERMS_NOT_AGREED = 'TERMS_NOT_AGREED',
  SMS_SEND_FAILED = 'SMS_SEND_FAILED',
  INVALID_VERIFICATION_CODE = 'INVALID_VERIFICATION_CODE',
  CODE_EXPIRED = 'CODE_EXPIRED',
  CODE_ALREADY_USED = 'CODE_ALREADY_USED',
  TOO_MANY_ATTEMPTS = 'TOO_MANY_ATTEMPTS'
}
```

### 错误处理策略

1. **输入验证错误**: 返回400状态码,包含具体字段错误信息
2. **业务逻辑错误**: 返回400状态码,包含业务相关错误消息
3. **系统错误**: 返回500状态码,记录详细日志但只返回通用错误消息
4. **短信发送失败**: 记录错误但不阻止用户注册,提供重发机制

### 全局错误处理中间件

```typescript
interface ErrorHandler {
  handleValidationError(error: ValidationError): ErrorResponse
  handleBusinessError(error: BusinessError): ErrorResponse
  handleSystemError(error: SystemError): ErrorResponse
  logError(error: Error, context: RequestContext): void
}
```

## 测试策略

### 单元测试

1. **用户服务测试**
   - 用户创建逻辑
   - 手机号唯一性检查
   - 密码加密验证
   - 验证码生成和验证

2. **验证中间件测试**
   - 手机号格式验证
   - 密码强度验证
   - 必填字段检查

3. **短信服务测试**
   - 短信发送功能
   - 验证码生成
   - 阿里云API调用

### 集成测试

1. **API端点测试**
   - 注册流程完整测试
   - 错误场景测试
   - 边界条件测试

2. **数据库集成测试**
   - 用户数据持久化
   - 约束条件验证
   - 事务处理

### 端到端测试

1. **用户注册流程**
   - 表单填写和提交
   - 短信验证码接收和验证
   - 账户激活确认

2. **错误处理流程**
   - 重复手机号注册
   - 无效输入处理
   - 网络错误处理

### 测试工具

- **单元测试**: Jest + Supertest
- **集成测试**: Jest + Test Database
- **端到端测试**: Cypress
- **API测试**: Postman/Newman

## 安全考虑

### 密码安全

1. **密码加密**: 使用bcrypt进行密码哈希,salt轮数设置为12
2. **密码策略**: 最少8位,包含字母和数字
3. **密码传输**: 仅通过HTTPS传输

### 验证码安全

1. **验证码生成**: 使用crypto.randomInt生成6位数字验证码
2. **验证码过期**: 设置5分钟过期时间
3. **一次性使用**: 验证后立即标记为已使用
4. **阿里云短信安全**: 使用AccessKey和AccessSecret进行API认证

### 输入验证

1. **SQL注入防护**: 使用参数化查询
2. **XSS防护**: 输入数据清理和转义
3. **CSRF防护**: 实现CSRF令牌验证

### 速率限制

1. **注册限制**: 每IP每小时最多5次注册尝试
2. **短信发送限制**: 每手机号每小时最多3次验证码发送
3. **验证尝试限制**: 每验证码最多5次验证尝试

## 性能优化

### 数据库优化

1. **索引策略**: 在phone和verification_code字段上创建索引
2. **SQLite优化**: 启用WAL模式提高并发性能
3. **查询优化**: 使用高效的查询语句和预编译语句

### 缓存策略

1. **验证码缓存**: 使用内存缓存活跃的验证码
2. **手机号检查缓存**: 缓存最近检查的手机号存在性结果
3. **静态资源缓存**: 前端资源使用CDN和浏览器缓存

### 异步处理

1. **短信发送**: 使用消息队列异步发送短信
2. **日志记录**: 异步写入日志文件
3. **数据库写入**: 使用事务批量处理

第三步:制定实施计划(Task)

下一步就是生成实施计划,就是生成执行中需要的Task:

Image

检查没问题,最后生产的 task.md 内容如下:

# 实施计划

- [ ] 1. 项目初始化和基础配置

  - 在kiro_test目录下创建前后端分离的项目结构(frontend/backend目录)
  - 配置后端Node.js + Express.js + TypeScript开发环境
  - 配置前端Next.js + React + TypeScript + Vite开发环境
  - 安装和配置Tailwind CSS、ShadCN/UI组件库
  - 配置Zustand状态管理
  - 设置基础中间件(CORS、JSON解析、错误处理)
  - _需求: 需求1.1, 需求4.1_

- [ ] 2. 数据库设计和初始化
  - 在后端项目中配置Prisma ORM连接SQLite数据库
  - 创建用户表和验证码表的Prisma schema定义
  - 生成并运行数据库迁移文件
  - 在手机号字段上创建唯一索引
  - 编写数据库连接测试和基础查询功能
  - _需求: 需求5.1, 需求5.2, 需求5.3, 需求5.4_

- [ ] 3. 阿里云短信服务集成
  - 安装阿里云短信SDK依赖包
  - 创建短信服务类,实现发送验证码功能
  - 实现6位数字验证码生成逻辑
  - 实现手机号格式验证功能
  - 编写短信服务的单元测试用例
  - _需求: 需求3.1, 需求3.2_

- [ ] 4. 用户数据访问层实现
  - 创建用户数据访问层(UserRepository类)
  - 实现用户CRUD操作方法
  - 实现根据手机号查询用户功能
  - 实现用户激活状态更新功能
  - 编写用户数据访问层单元测试
  - _需求: 需求2.1, 需求2.2, 需求5.1_

- [ ] 5. 验证码数据访问层实现
  - 创建验证码数据访问层(VerificationCodeRepository类)
  - 实现验证码存储和查询功能
  - 实现验证码过期检查和清理功能
  - 实现验证码使用状态更新功能
  - 编写验证码数据访问层单元测试
  - _需求: 需求3.1, 需求3.2, 需求3.3_

- [ ] 6. 用户业务逻辑服务实现
  - 创建用户业务逻辑服务(UserService类)
  - 实现用户注册业务逻辑
  - 实现密码加密和验证功能(使用bcrypt)
  - 实现手机号唯一性检查逻辑
  - 编写用户服务层单元测试
  - _需求: 需求1.1, 需求2.1, 需求2.2, 需求2.3_

- [ ] 7. 验证码业务逻辑服务实现
  - 创建验证码业务逻辑服务(VerificationCodeService类)
  - 实现验证码生成、存储和验证完整流程
  - 实现验证码过期时间管理(5分钟过期)
  - 实现验证码一次性使用逻辑
  - 编写验证码服务层单元测试
  - _需求: 需求3.1, 需求3.2, 需求3.3_

- [ ] 8. 请求数据验证中间件
  - 创建输入数据验证中间件(使用Joi库)
  - 实现手机号格式验证规则
  - 实现密码强度验证规则(至少8位,包含字母和数字)
  - 实现必填字段检查和错误消息返回
  - 编写验证中间件单元测试
  - _需求: 需求1.2, 需求1.3, 需求1.4, 需求1.5_

- [ ] 9. 发送验证码API接口实现
  - 创建POST /api/send-verification-code路由处理器
  - 集成手机号验证和短信发送功能
  - 实现发送频率限制(每手机号每小时最多3次)
  - 返回标准化JSON响应格式
  - 编写API接口集成测试用例
  - _需求: 需求3.1, 需求3.2_

- [ ] 10. 用户注册API接口实现
  - 创建POST /api/register路由处理器
  - 集成注册数据验证和用户创建流程
  - 实现验证码校验和用户激活逻辑
  - 实现重复手机号注册检查
  - 编写注册API集成测试用例
  - _需求: 需求1.1, 需求1.2, 需求1.3, 需求1.4, 需求1.5, 需求2.1, 需求2.2, 需求3.3, 需求4.2, 需求4.3_

- [ ] 11. 全局错误处理中间件
  - 实现全局错误捕获和处理中间件
  - 创建标准化错误响应格式
  - 实现不同类型错误的分类处理
  - 实现错误日志记录功能
  - 编写错误处理中间件测试用例
  - _需求: 需求4.2, 需求4.3, 需求4.4_

- [ ] 12. 前端Zustand状态管理store
  - 创建用户注册相关的Zustand状态store
  - 实现表单数据状态管理
  - 实现API调用状态管理(loading、error、success状态)
  - 实现验证码发送状态和倒计时管理
  - 编写状态管理逻辑单元测试
  - _需求: 需求1.1, 需求3.1_

- [ ] 13. 注册表单UI组件开发
  - 使用ShadCN/UI组件创建注册表单
  - 实现手机号输入框和实时格式验证
  - 实现密码和确认密码输入框
  - 实现验证码输入框
  - 实现隐私政策同意复选框
  - 使用Tailwind CSS进行样式美化
  - _需求: 需求1.1, 需求1.2, 需求1.3, 需求1.4, 需求1.5_

- [ ] 14. 验证码发送功能组件
  - 实现发送验证码按钮组件
  - 实现60秒倒计时功能和按钮禁用状态
  - 集成Zustand store的验证码发送方法
  - 实现发送成功/失败的Toast提示
  - 编写验证码发送组件交互测试
  - _需求: 需求3.1, 需求3.2_

- [ ] 15. 表单验证和提交逻辑
  - 使用React Hook Form + Zod实现客户端表单验证
  - 实现实时输入验证和错误提示显示
  - 集成用户注册API调用功能
  - 实现注册成功/失败的用户反馈
  - 处理各种API错误场景的UI展示
  - _需求: 需求1.2, 需求1.3, 需求1.4, 需求1.5, 需求2.1, 需求3.3_

- [ ] 16. 注册页面组件整合
  - 创建完整的用户注册页面组件
  - 集成表单组件、状态管理和API调用
  - 实现页面布局和响应式设计
  - 实现加载状态、成功状态和错误状态的UI
  - 添加页面标题和SEO优化
  - _需求: 需求1.1, 需求4.1_

- [ ] 17. HTTP客户端封装和配置
  - 使用Axios创建HTTP请求客户端
  - 实现请求和响应拦截器
  - 封装注册相关的API调用方法
  - 实现请求错误处理和重试机制
  - 编写API客户端功能测试
  - _需求: 需求4.1, 需求4.2, 需求4.3_

- [ ] 18. 端到端功能测试
  - 使用Cypress编写用户注册流程端到端测试
  - 测试完整的注册流程(输入→发送验证码→验证→注册成功)
  - 测试各种错误场景的处理(重复手机号、验证码错误等)
  - 测试表单验证和用户交互反馈
  - 验证数据库中用户数据的正确性
  - _需求: 需求1.1, 需求1.2, 需求1.3, 需求1.4, 需求1.5, 需求2.1, 需求2.2, 需求2.3, 需求3.1, 需求3.2, 需求3.3_

- [ ] 19. 安全加固和性能优化
  - 实现API请求速率限制中间件
  - 配置CORS和安全请求头
  - 优化SQLite数据库查询性能和索引
  - 实现前端代码分割和懒加载优化
  - 配置生产环境安全设置
  - _需求: 所有安全和性能相关需求_

如果你对执行计划不满意,可以点击更新重新找大模型生成 (使用UPdate tasks):

Image

第四步:按照实施计划进行最终编程开发(Code)

执行实施计划:

指定某一项进行执行,在task.md文件打开它在每个section上面都有一个 Start task 按钮,点击即可执行这个环节中的任务:

Image

也可以直接指令,然后从头开始一个个执行:

Image

约定好执行以后,它就会像 Cursor/Winsurf/Augment 一样去执行任务:

Image

会生成对应的项目目录结构和一些基本配置等:

Image

会自动生成对应的项目README,在中间也包含了项目任务进展:

# 用户注册系统

基于手机号短信验证的用户注册功能,采用前后端分离架构。

## 技术栈

### 后端
- Node.js + Express.js + TypeScript
- SQLite + Prisma ORM
- 阿里云短信服务
- bcrypt 密码加密
- Joi 数据验证

### 前端
- Next.js + React + TypeScript
- Vite 构建工具
- Zustand 状态管理
- Tailwind CSS + ShadCN/UI
- React Hook Form + Zod

## 项目结构

```
kiro_test/
├── backend/          # 后端服务
│   ├── src/         # 源代码
│   ├── prisma/      # 数据库配置
│   └── package.json
├── frontend/         # 前端应用
│   ├── src/         # 源代码
│   └── package.json
└── README.md
```

## 快速开始

### 后端服务

```bash
cd backend
npm install
npm run dev
```

### 前端应用

```bash
cd frontend
npm install
npm run dev
```

## 开发进度

- [x] 项目初始化和基础配置
- [ ] 数据库设计和初始化
- [ ] 阿里云短信服务集成
- [ ] 用户数据访问层实现
- [ ] 验证码数据访问层实现
- [ ] 用户业务逻辑服务实现
- [ ] 验证码业务逻辑服务实现
- [ ] 请求数据验证中间件
- [ ] 发送验证码API接口实现
- [ ] 用户注册API接口实现
- [ ] 全局错误处理中间件
- [ ] 前端Zustand状态管理store
- [ ] 注册表单UI组件开发
- [ ] 验证码发送功能组件
- [ ] 表单验证和提交逻辑
- [ ] 注册页面组件整合
- [ ] HTTP客户端封装和配置
- [ ] 端到端功能测试
- [ ] 安全加固和性能优化

## 环境配置

### 后端环境变量

复制 `.env.example` 为 `.env` 并配置:

```env
DATABASE_URL="file:./dev.db"
PORT=3001
ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
```

### 前端环境变量

复制 `.env.example` 为 `.env.local` 并配置:

```env
NEXT_PUBLIC_API_URL=http://localhost:3001
```

## 功能特性

- 📱 手机号注册
- 🔐 短信验证码验证
- 🛡️ 密码安全加密
- ⚡ 实时表单验证
- 🎨 现代化UI设计
- 📊 完整的错误处理
- 🧪 全面的测试覆盖

## 作者

老黑

package.json文件

{
  "name": "user-registration-backend",
  "version": "1.0.0",
  "description": "用户注册功能后端服务",
  "main": "dist/index.js",
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "test": "jest",
    "test:watch": "jest --watch",
    "db:generate": "prisma generate",
    "db:migrate": "prisma migrate dev",
    "db:studio": "prisma studio"
  },
  "keywords": ["用户注册", "Express", "TypeScript", "Prisma", "SQLite"],
  "author": "老黑",
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.2",
    "cors": "^2.8.5",
    "helmet": "^7.1.0",
    "bcrypt": "^5.1.1",
    "joi": "^17.11.0",
    "prisma": "^5.7.1",
    "@prisma/client": "^5.7.1",
    "@alicloud/dysmsapi20170525": "^3.0.0",
    "@alicloud/openapi-client": "^0.4.6",
    "dotenv": "^16.3.1",
    "express-rate-limit": "^7.1.5"
  },
  "devDependencies": {
    "@types/express": "^4.17.21",
    "@types/cors": "^2.8.17",
    "@types/bcrypt": "^5.0.2",
    "@types/node": "^20.10.5",
    "typescript": "^5.3.3",
    "tsx": "^4.6.2",
    "jest": "^29.7.0",
    "@types/jest": "^29.5.8",
    "ts-jest": "^29.1.1",
    "supertest": "^6.3.3",
    "@types/supertest": "^6.0.2"
  }
}

执行过程中也有需要确认的时候:

Image

如果执行过程中,某些代码你发现写的不对,那么就可以执行撤销操作:

Image

如果使用过程中上下文特别长,会要求你压缩上下文然后导入到新会话:

Image

Image

然后Summary之后的session就可以继续执行,它会先读取task的进展:

Image

中间如果它停止或者是某些 task.md 没有顺利完成,那么就需要人工让它更新 task.md 和按照对应步骤进行执行:

Image

Image

然后经过一些“继续”和task的更新,然后终于能够走到最后完成步骤:

Image

在所有代码完成以后,还需要让它跟需求、设计等进行比对,看是否完整实现了:

Image

它会给出最终的报告:

Image

Kiro的不足

执行过程中,非常容易发生错误,需要各种重试:

Image

或者是模型访问的人太多:

Image

各种奇怪错误,比如文件写不成功啥的:

Image

目前任务执行完成了,但是没有更新task.md文档,导致如果开始新会话会不知道实际执行到了什么地方:

Image

必须主动出发才会进行更新:

Image

指令遵从性不是太好,比如要求中文,后面就是不改:

Image

Kiro 使用总结

优势

  1. 1. 独特的Spec-Driven开发模式

  • 结构化需求管理:Kiro最突出的特点是将模糊需求自动分解为结构化的用户故事、验收标准和技术任务,这解决了传统AI IDE中需求不明确、开发目标模糊的问题
  • 完整的开发流程:从需求分析 → 技术设计 → 任务规划 → 代码实现,形成了闭环的开发工作流
  • 可追溯性强:每个功能都有明确的需求来源和设计依据,便于后期维护和团队协作

  1. 2. 强大的AI能力

  • 免费使用Claude-4模型:得益于亚马逊对Anthropic的80亿美元投资,用户可以免费使用最先进的Claude Sonnet-4和Opus-4模型
  • 智能任务分解:能够将复杂项目分解为具体的、可执行的开发任务
  • 上下文理解能力强:在整个开发过程中保持对项目需求和设计的理解

  1. 3. 良好的兼容性和用户体验

  • VS Code生态兼容:基于VS Code OSS构建,可以无缝导入VS Code的配置和大部分插件
  • 多模式支持:既有传统的Vibe聊天模式,也有创新的Spec规格模式
  • 代码预览和撤销:提供Follow预览和Revert撤销功能,给用户更多控制权

  1. 4. 完整的项目管理

  • 自动生成文档:自动创建README、技术设计文档、API文档等
  • 进度跟踪:通过task.md清晰显示项目进展
  • 会话压缩:支持长对话的上下文压缩和恢复

不足

  1. 1. 稳定性问题

  • 频繁出错:使用过程中经常遇到各种错误,需要多次重试
  • 服务不稳定:模型访问人数过多时容易出现服务不可用
  • 文件操作问题:存在文件写入失败等技术故障

  1. 2. 任务执行和状态管理缺陷

  • 任务状态不同步:任务完成后不自动更新task.md,导致状态不一致
  • 会话恢复困难:新会话时难以准确了解实际执行进度
  • 手动干预频繁:需要人工触发状态更新和任务继续

  1. 3. 指令遵从性问题

  • 语言偏好不稳定:即使要求使用中文回复,后续对话仍可能切换回英文
  • 用户意图理解偏差:在某些情况下可能误解用户指令

  1. 4. 产品成熟度

  • 预览阶段局限:作为预览版本,功能还不够完善
  • 插件兼容性:部分VS Code插件(如Augment)导入后无法正常工作
  • 错误处理机制:对异常情况的处理还需要改进

总体评价

Kiro最大的创新在于Spec-Driven Development理念,这确实解决了当前AI辅助编程中的一个重要痛点——需求模糊和开发过程不可控。它通过结构化的方式将"魔术般"的AI编程变得透明和可管理,这对于企业级开发和团队协作具有重要意义。

然而,作为一个预览版产品,Kiro在稳定性和用户体验方面还有待改进。频繁的错误和不稳定的服务体验可能会影响用户的使用积极性。

对于开发者而言,Kiro值得尝试,特别是对于需要规范化开发流程的团队项目。但在关键项目中使用时,建议做好备份和应急方案。


【想要讨论AI编程和AI技术加群,请去WX公众号:黑夜路人技术】

Logo

助力合肥开发者学习交流的技术社区,不定期举办线上线下活动,欢迎大家的加入

更多推荐