跳到主要内容

219 篇博文 含有标签「iCoding」

个人简介

查看所有标签

需求文档可执行验收标准

· 阅读需 9 分钟
Quany
软件工程师

一、什么是可执行验收标准?

可执行验收标准是将需求转化为可测试、可自动化的具体规格。它使用特定格式(通常是Given-When-Then)来描述功能的行为,可以直接转换为自动化测试用例。

二、可执行验收标准的好处

  1. 明确性:消除需求歧义
  2. 可测试性:直接转换为测试用例
  3. 自动化:支持BDD(行为驱动开发)
  4. 一致性:开发、测试、产品理解一致
  5. 可追踪:需求与测试直接对应

三、常用格式

1. Gherkin语言(Given-When-Then)

最常用的格式,被Cucumber、SpecFlow等工具支持。

Feature: 用户登录功能
作为一个已注册用户
我想要登录系统
以便访问我的个人资料

Scenario: 使用正确的用户名和密码登录
Given 用户已注册且账户有效
When 在登录页面输入正确的用户名"admin"和密码"123456"
And 点击登录按钮
Then 应该跳转到用户主页
And 页面应显示欢迎信息"欢迎回来,admin"

Scenario: 使用错误的密码登录
Given 用户已注册
When 在登录页面输入用户名"admin"和错误密码"wrong"
And 点击登录按钮
Then 页面应显示错误消息"密码错误"
And 用户应该保持在登录页面

2. 表格格式

适合参数化场景和数据驱动测试。

Scenario Outline: 用户登录验证
Given 用户"<username>"已注册
When 输入用户名"<username>"和密码"<password>"
And 点击登录按钮
Then 登录结果应为"<result>"

Examples:
| username | password | result |
| admin | 123456 | 成功 |
| admin | wrong | 密码错误 |
| unknown | 123456 | 用户不存在 |
| | 123456 | 用户名为空 |

四、在需求文档中的具体实现

示例需求文档结构

# 需求文档:用户管理系统

## 1. 概述
- 目标:实现用户注册、登录、资料管理功能
- 范围:Web端用户管理模块
- 优先级:P0
- 预估工时:5人日

## 2. 功能需求

### 2.1 用户登录功能
**需求描述**:已注册用户可以通过用户名和密码登录系统

**验收标准**

| ID | 描述 | 优先级 | 状态 |
|----|------|--------|------|
| UC-001 | 用户使用正确的用户名和密码登录 | P0 | 待办 |
| UC-002 | 用户使用错误的密码登录 | P0 | 待办 |
| UC-003 | 用户使用不存在的用户名登录 | P1 | 待办 |

**可执行验收标准**

#### UC-001: 成功登录
```gherkin
Feature: 用户登录
Scenario: 使用正确的用户名和密码登录
Given 用户"testuser"已注册且账户状态为"active"
And 用户在登录页面
When 输入用户名"testuser"
And 输入密码"Test@123"
And 点击"登录"按钮
Then 应该跳转到首页"/dashboard"
And 页面应显示欢迎消息"欢迎回来,testuser"
And 导航栏应显示"注销"按钮
And 应该记录登录日志
And Cookie中应设置有效的sessionId

UC-002: 密码错误

Feature: 用户登录
Scenario: 使用错误的密码登录
Given 用户"testuser"已注册
And 用户在登录页面
When 输入用户名"testuser"
And 输入密码"WrongPassword123"
And 点击"登录"按钮
Then 页面应显示错误提示"用户名或密码错误"
And 输入框应清空密码字段
And 登录按钮应重新可用
And URL应保持不变
And 不应创建会话

2.2 用户注册功能

可执行验收标准

Feature: 用户注册
Scenario Outline: 新用户注册验证
Given 用户访问注册页面
When 填写注册信息:
| 字段 | 值 |
| 用户名 | <username> |
| 邮箱 | <email> |
| 密码 | <password> |
| 确认密码 | <confirm> |
And 点击"注册"按钮
Then 应该<result>

Examples: 有效注册
| username | email | password | confirm | result |
| alice | alice@test.com | Pass123! | Pass123! | 显示成功消息并跳转到登录页面 |

Examples: 无效注册
| username | email | password | confirm | result |
| ab | alice@test.com | Pass123! | Pass123! | 提示"用户名长度至少3个字符" |
| alice | invalid-email | Pass123! | Pass123! | 提示"邮箱格式不正确" |
| alice | alice@test.com | 123456 | 123456 | 提示"密码必须包含字母和特殊字符"|
| alice | alice@test.com | Pass123! | Different | 提示"两次输入的密码不一致" |

五、最佳实践

1. 编写原则

# ✅ DO - 好的做法
Scenario: 用户成功下单
Given 用户已登录
And 购物车中有商品"iPhone 15"
When 用户点击"立即购买"
And 选择"微信支付"
And 点击"确认支付"
Then 应跳转到订单详情页面
And 订单状态应为"已支付"
And 应发送订单确认邮件
And 应扣减商品库存

# ❌ DON'T - 避免的做法
Scenario: 用户买东西
Given 有东西
When 弄一下
Then 搞定了

2. 原子性原则

每个场景应该只测试一个具体功能点。

# ❌ 不好 - 包含多个不相关的验证
Scenario: 综合验证
Given 用户登录
When 修改个人资料
And 下订单
Then 资料应该更新
And 订单应该创建

# ✅ 好 - 单一职责
Scenario: 修改个人资料
Given 用户已登录
When 修改邮箱为"new@email.com"
And 点击保存
Then 应显示"保存成功"
And 用户邮箱应更新为"new@email.com"

3. 使用背景(Background)

避免重复的Given步骤。

Feature: 购物车管理

Background: 用户已登录且有商品
Given 用户"testuser"已登录
And 商品"iPhone 15"存在
And 商品"MacBook Pro"存在

Scenario: 添加商品到购物车
When 用户将商品"iPhone 15"添加到购物车
Then 购物车中应有1件"iPhone 15"

Scenario: 从购物车移除商品
Given 购物车中有商品"iPhone 15"
When 用户从购物车移除"iPhone 15"
Then 购物车应为空

六、完整示例模板

# 需求文档模板

## 1. 功能名称
[功能简要描述]

### 1.1 用户故事
**作为** [角色]
**我想要** [功能]
**以便** [价值/目标]

### 1.2 功能描述
[详细描述功能]

### 1.3 验收标准
| ID | 描述 | 优先级 | 状态 | 测试负责人 |
|----|------|--------|------|------------|
| AC-001 | [标准1] | P0 | 待办 | [姓名] |
| AC-002 | [标准2] | P1 | 待办 | [姓名] |

### 1.4 可执行验收标准
```gherkin
Feature: [功能名称]
[可选的背景描述]

@smoke @P0
Scenario: [场景1描述]
Given [前置条件]
When [操作步骤]
Then [预期结果]

@regression @P1
Scenario: [场景2描述]
Given [前置条件]
When [操作步骤]
Then [预期结果]

Scenario Outline: [参数化场景]
Given [前置条件]
When [操作步骤]
Then [预期结果]

Examples:
| 参数1 | 参数2 | 预期结果 |
| val1 | val2 | result1 |
| val3 | val4 | result2 |

1.5 技术约束

  • [约束1]
  • [约束2]

1.6 非功能需求

类型要求
性能响应时间 < 2秒
安全性密码加密存储
兼容性支持 Chrome 90+

## 七、在开发流程中的使用

### 1. 需求评审阶段
```yaml
步骤:
1. 产品经理编写验收标准草稿
2. 开发、测试、产品一起评审
3. 修正不清晰或不可测试的标准
4. 确定验收条件的优先级

产出物:
- 评审通过的验收标准
- 明确的需求优先级

2. 开发实现阶段

步骤:
1. 开发根据验收标准实现功能
2. 测试根据验收标准编写自动化测试
3. 运行自动化测试验证实现

产出物:
- 实现的功能代码
- 自动化测试脚本
- 测试执行报告

3. 验收测试阶段

步骤:
1. 执行自动化验收测试
2. 手动验收(如有需要)
3. 确认所有验收标准已满足
4. 产品经理签字确认

产出物:
- 验收测试报告
- 验收确认单

八、工具支持

1. 文档工具

  • Confluence + Xray:需求与测试管理
  • JIRA + Zephyr:需求跟踪与测试管理
  • Azure DevOps:完整的DevOps工具链

2. BDD工具

  • Cucumber:Java/Ruby/JavaScript
  • SpecFlow:.NET平台
  • Behat:PHP平台
  • Behave:Python平台

3. 自动化测试框架

// Cucumber + Selenium 示例
const { Given, When, Then } = require('@cucumber/cucumber');
const { By, until } = require('selenium-webdriver');

Given('用户已登录', async function() {
await this.driver.get('http://localhost:3000/login');
await this.driver.findElement(By.id('username')).sendKeys('testuser');
await this.driver.findElement(By.id('password')).sendKeys('password');
await this.driver.findElement(By.id('login-btn')).click();
});

When('用户搜索{string}', async function(keyword) {
await this.driver.findElement(By.id('search')).sendKeys(keyword);
await this.driver.findElement(By.id('search-btn')).click();
});

九、指标和度量

1. 覆盖率指标

需求覆盖率: 95%  # (有验收标准的需求数 / 总需求数) * 100%
测试通过率: 98% # (通过的验收测试数 / 总验收测试数) * 100%
自动化率: 85% # (可自动化验收标准数 / 总验收标准数) * 100%

2. 质量门禁

验收标准:
- 所有P0级验收标准必须100%通过
- 整体验收标准通过率不低于95%
- 关键业务场景必须包含自动化测试

文档质量:
- 每个需求必须包含可执行验收标准
- 验收标准必须经过三方评审
- 验收标准必须清晰、可测试

十、常见错误和避免方法

1. 避免实现细节

# ❌ 不好 - 包含实现细节
When 点击class为"btn-primary"的按钮
Then 应该设置localStorage中的token

# ✅ 好 - 关注业务行为
When 点击登录按钮
Then 用户应该成功登录

2. 避免重复步骤

# ❌ 不好 - 重复步骤
Scenario: 测试A
Given 打开浏览器
And 访问登录页面
# ... 其他步骤

Scenario: 测试B
Given 打开浏览器
And 访问登录页面
# ... 其他步骤

# ✅ 好 - 使用Background
Background:
Given 打开浏览器
And 访问登录页面

Scenario: 测试A
# ... 测试步骤

Scenario: 测试B
# ... 测试步骤

3. 保持独立性

# ❌ 不好 - 场景间有依赖
Scenario: 创建订单
Given 用户登录
When 创建订单
Then 订单创建成功

Scenario: 查看订单
# 依赖于上一个场景创建的订单
When 查看订单列表
Then 应该看到订单

# ✅ 好 - 每个场景自包含
Scenario: 查看订单
Given 用户已登录
And 系统中存在用户"testuser"的订单
When 用户查看订单列表
Then 应该看到订单

总结

在需求文档中增加可执行验收标准的价值:

  1. 对齐期望:确保所有干系人对需求理解相同
  2. 自动化基础:直接转换为自动化测试
  3. 文档即测试:需求文档本身就可以执行
  4. 持续反馈:在开发过程中持续验证
  5. 质量保证:明确的验收条件确保交付质量

通过实施可执行验收标准,团队可以显著提高需求质量、减少返工、加快交付速度,并建立持续质量保证的机制。

微信公众号

微信公众号

不同permission-mode(如acceptEdits、plan等)在实际使用中的适用场景和注意事项?

· 阅读需 6 分钟
Quany
软件工程师

Claude Code 的 permission-mode 参数提供了不同级别的权限控制模式,每种模式适用于不同的开发场景和安全需求。以下是各模式的详细适用场景、注意事项及对比分析。

一、permission-mode 各模式详解

1. plan 模式(默认推荐)

核心机制:Claude 会展示所有操作计划(如文件修改、命令执行),但不会自动执行,需要用户手动确认每个操作。

适用场景

  • 初次使用或不确定场景:当对 Claude 的代码修改能力存疑时,先查看计划再决定
  • 关键代码修改:涉及核心业务逻辑、数据库操作、生产环境配置等敏感修改
  • 团队协作环境:确保所有修改都经过人工审核,避免误操作影响他人
  • 学习/教学场景:让学生理解 AI 的修改意图和逻辑

注意事项

  • 需要频繁手动确认,可能影响开发流畅度
  • 对于大量重复性操作(如批量重命名、格式化)效率较低
  • 建议配合快捷键(如 Cmd+Enter 快速确认)提升效率

典型使用命令

claude --permission-mode plan
# 或启动后使用:/permission-mode plan

2. acceptEdits 模式

核心机制自动接受文件编辑操作(如代码修改、文件创建),但其他操作(如执行命令、网络请求)仍需确认。

适用场景

  • 日常开发工作流:代码重构、bug 修复、功能开发等常规编码任务
  • 信任 Claude 的代码修改能力:经过验证确认 Claude 的修改质量可靠
  • 快速迭代场景:需要频繁修改代码但不想频繁确认
  • 个人项目开发:风险可控的环境下提升效率

注意事项

  • 必须确保有版本控制(Git),以便回滚错误修改
  • 建议先在小范围测试,确认修改逻辑正确后再推广使用
  • 对于关键文件(如配置文件、数据库迁移脚本)仍建议手动确认
  • 可能意外覆盖未保存的手工修改

典型使用命令

claude --permission-mode acceptEdits

3. acceptAll 模式

核心机制自动接受所有操作,包括文件编辑、命令执行、网络请求等。

适用场景

  • 高度信任环境:如沙盒环境、测试环境、个人开发机
  • 自动化脚本场景:与 CI/CD 集成,自动执行代码优化任务
  • 批量处理任务:需要执行大量命令或操作时
  • 演示/原型开发:快速验证想法,不关心具体执行细节

注意事项

  • 风险极高:可能执行危险命令(如 rm -rf)、意外修改系统文件
  • 强烈不推荐在生产环境或重要项目中使用
  • 必须配合严格的权限配置(permissions.allow 白名单)
  • 建议仅在容器化环境或虚拟机中使用

典型使用命令

claude --permission-mode acceptAll

4. ask 模式(传统模式)

核心机制:对每个操作都弹出确认对话框,无论类型。

适用场景

  • 最高安全级别需求:金融系统、医疗系统等对安全性要求极高的场景
  • 审计合规要求:需要记录所有操作的场景
  • 完全不信任环境:使用第三方 AI 工具或不确定来源的代码

注意事项

  • 开发体验最差:频繁中断,严重影响效率
  • 仅适用于极端安全场景
  • 实际使用中很少采用,通常用 plan 模式替代

典型使用命令

claude --permission-mode ask

二、各模式对比总结

模式文件编辑命令执行网络请求安全级别开发效率推荐场景
plan需确认需确认需确认⭐⭐⭐⭐⭐⭐⭐默认推荐,安全第一
acceptEdits自动需确认需确认⭐⭐⭐⭐⭐⭐⭐⭐日常开发,平衡安全与效率
acceptAll自动自动自动⭐⭐⭐⭐⭐沙盒/自动化,高风险
ask需确认需确认需确认⭐⭐⭐⭐⭐极端安全场景

三、实际使用建议

1. 渐进式采用策略

  • 新手阶段:使用 plan 模式,熟悉 Claude 的操作模式
  • 日常开发:切换到 acceptEdits 模式,配合 Git 版本控制
  • 特定任务:临时切换到 acceptAll 处理批量任务,完成后立即切换回安全模式

2. 安全配置组合

无论使用哪种模式,都应配置 permissions.allow 白名单:

{
"permissions": {
"allow": [
"Edit(src/**/*.js)", // 限制文件操作范围
"Bash(git status)", // 只允许特定命令
"Bash(npm run build)"
],
"deny": [
"Bash(rm -rf *)", // 明确禁止危险操作
"Edit(secrets/**/*)"
]
}
}

关键原则:权限模式控制"是否自动执行",权限配置控制"能执行什么"。两者结合才能实现真正的安全控制。

3. 环境隔离策略

  • 个人开发机:可使用 acceptEdits 模式
  • 生产环境/团队项目:建议使用 plan 模式或严格的白名单
  • CI/CD 流水线:使用 acceptAll 但限制在容器内执行,并配置最小权限

4. 常见陷阱与规避

  • 陷阱1:在 acceptEdits 模式下误修改配置文件 → 解决方案:将配置文件加入 deny 列表
  • 陷阱2acceptAll 模式下执行了危险命令 → 解决方案:使用容器隔离,或配置严格的 allow 列表
  • 陷阱3:忘记切换回安全模式 → 解决方案:在 .claude/settings.json 中设置默认模式为 plan

5. 模式切换技巧

  • 命令行启动时指定claude --permission-mode acceptEdits
  • 会话中动态切换:输入 /permission-mode plan 即可切换
  • 查看当前模式:输入 /permission-mode 查看状态

四、场景化使用示例

场景1:日常功能开发

# 启动时使用 acceptEdits 模式,提升效率
claude --permission-mode acceptEdits

# 配合权限配置,限制操作范围
# 在 .claude/settings.json 中配置:
{
"permissions": {
"allow": [
"Edit(src/**/*.ts)",
"Edit(src/**/*.vue)",
"Bash(git add *)",
"Bash(npm run dev)"
]
}
}

场景2:代码审查/学习

# 使用 plan 模式,查看所有修改建议
claude --permission-mode plan

# 对每个修改建议进行人工确认
# 适合代码重构、性能优化等需要谨慎处理的场景

场景3:自动化脚本

# 在 CI/CD 流水线中使用 acceptAll 模式
# 但必须配合容器隔离和严格权限
docker run --rm -v $(pwd):/app claude-code \
--permission-mode acceptAll \
--allowedTools "Edit,Bash(npm run build)"

五、总结建议

  1. 默认使用 plan 模式:安全第一,适合大多数场景
  2. 个人项目可尝试 acceptEdits:配合 Git 版本控制,效率提升明显
  3. 绝对避免在生产环境使用 acceptAll:除非有完善的隔离和审计机制
  4. 权限配置是核心:无论使用哪种模式,都必须配置 permissions.allow 白名单
  5. 根据场景灵活切换:不同任务使用不同模式,不要一成不变

记住:权限模式只是控制"是否自动执行",真正的安全防线在于权限配置的白名单机制。建议从 plan 模式开始,逐步建立对 Claude 的信任,再根据实际需求调整模式。

微信公众号

微信公众号

claude code 如何制作stitch的设计内容

· 阅读需 4 分钟
Quany
软件工程师

Claude Code 本身不直接生成 Stitch 的设计内容(如设计稿、原型图等视觉素材),但可以通过工作流整合,利用 Stitch 生成设计原型后,再用 Claude Code 将其转换为代码实现。以下是完整的操作流程和替代方案:


一、核心工作流:Stitch + Claude Code 协作模式

标准流程(推荐)

第1步:用 Stitch 生成设计原型

第2步:将 Stitch 输出喂给 Claude Code

  • 方式1:直接复制 HTML 代码 → 粘贴到 Claude Code 对话中,要求优化或转换为框架代码
  • 方式2:使用截图 + 设计规范 → 上传截图,同时提供 Stitch 生成的颜色、字体等设计 token
  • 方式3:通过 MCP 集成(需配置)→ 设置 Stitch MCP 服务器,让 Claude Code 直接读取设计数据

第3步:Claude Code 生成生产代码

  • 基于 Stitch 的设计输入,让 Claude Code 生成 React/Vue/Next.js 等框架代码
  • 提示词示例:
    请基于这个 Stitch 生成的设计原型(见截图/HTML),将其转换为一个完整的 Next.js 页面组件。保持原设计风格,使用 Tailwind CSS 实现响应式布局。

关键提示技巧

  1. 提供完整上下文:不要只给截图,同时提供:

    • 颜色色号(如 #FFD500
    • 字体系统(字体族、大小、字重)
    • 间距尺度(如 Tailwind 的 p-4m-6
    • 组件样式细节(圆角、阴影、边框)
  2. 迭代优化:首版代码通常不完美,通过精准反馈持续优化:

    按钮的悬停效果需要更明显,请将背景色从 #f0f0f0 改为 #e0e0e0,并添加 1px 边框
  3. 生成风格指南:让 Claude Code 基于 Stitch 设计输出一份 STYLE_GUIDE.md,作为后续开发的标准参考


二、替代方案(无需 Stitch)

如果无法访问 Stitch 或想简化流程,Claude Code 也支持直接生成设计内容,但效果和 Stitch 不同:

方案1:纯文本描述生成 UI

  • 优势:无需外部工具,完全在 Claude Code 内完成
  • 劣势:视觉质量依赖提示词精度,容易有"AI味"
  • 提示词示例
    请设计一个现代简约风格的登录页面,包含:
    - 左侧品牌 logo 和 slogan
    - 右侧表单(邮箱、密码、记住我、登录按钮)
    - 使用柔和的蓝色系配色
    - 响应式布局,在移动端堆叠排列
    输出完整的 HTML + CSS 代码

方案2:图片分析 + 代码生成

  • 上传参考图(如 Dribbble 设计稿、网站截图)
  • 让 Claude Code 分析并复刻设计
  • 注意:此方法对复杂布局识别有限,需多次迭代

方案3:使用 Figma MCP 集成

  • 配置 Figma MCP 服务器(需 Figma Dev Mode)
  • Claude Code 可直接读取 Figma 设计文件
  • 生成代码的还原度更高,但配置较复杂

三、常见问题与解决方案

问题场景原因解决方案
Stitch 无法访问国内网络限制使用科学上网,或改用方案1/2
生成代码质量差提示词不精确提供具体设计规范(色号、字体、间距数值)
布局响应式问题未指定断点明确要求"响应式设计",或指定移动端/桌面端尺寸
组件样式不一致缺乏设计系统先让 Claude Code 生成 STYLE_GUIDE.md,后续开发参照执行

四、总结:选择建议

  • 如果需要高质量设计原型 → 优先用 Stitch 生成,再交给 Claude Code 转代码
  • 如果追求快速原型 → 直接用 Claude Code 描述生成(质量要求不高时)
  • 如果已有 Figma 设计稿 → 配置 Figma MCP,跳过 Stitch 环节
  • 如果无法访问 Stitch → 用方案1/2,或寻找其他设计工具(如 V0.dev、Bolt)

重要提醒:无论哪种方式,Claude Code 生成的代码都需要人工审查和优化,特别是交互逻辑、性能优化、代码结构等方面。AI工具是辅助,不是完全替代。


补充说明:如果您的"stitch设计内容"指的是其他含义(如刺绣图案、数据缝合等),请补充说明具体需求,我会重新为您解答。

微信公众号

微信公众号

几个问题的思考

· 阅读需 10 分钟
Quany
软件工程师

在AI编程时代,人的角色定位正在经历从 "执行者"到"架构师" 的根本性转变。这不仅是技能的重塑,更是价值重心的迁移:

核心价值层:不可替代的人类特质

1. 意图翻译官 将模糊的业务需求、人性洞察转化为精确的技术目标。AI擅长"怎么做",但"为什么做"和"做什么"仍是人类主战场——理解CEO深夜邮件里的焦虑、感知用户没说出口的痛点、权衡商业伦理与增长。

2. 系统架构师 AI能生成代码片段,但难以处理跨系统的复杂权衡:在性能、成本、可维护性、扩展性之间的多维博弈。这需要对业务生命周期、技术债的复利效应、组织能力的深层理解。

3. 异常处理者 当系统出现AI训练数据之外的边缘案例、伦理困境或黑天鹅事件时,人类提供最后的判断锚点。AI处理"大概率",人类守住院线——特别是涉及生命安全、社会公平的决策。

4. 创造力催化剂 用AI作为认知外骨骼,而非替代品。人类提出"如果让用户像玩游戏一样完成报税"的突破性假设,AI负责实现细节。真正的创新发生在人机对话的张力中。

能力迁移:从编码到编辑

  • 代码审查 → 意图审查:不只是检查漏洞,更要问"这段AI生成的代码是否真正解决了问题本质"
  • 写函数 → 编故事:用叙事能力定义产品愿景,让AI在故事框架下生成技术细节
  • 调试代码 → 调试假设:当AI输出不如预期时,反思的是商业假设而非语法错误

警惕两个陷阱

⚠️ 过度依赖陷阱:把AI当神谕,丧失批判性思维
⚠️ 技能空心化:只做AI的"提示词工程师",忽视底层原理理解

建议定位

短期(1-3年):成为"AI配对程序员",精通提示工程+代码审查,但更要深入业务
中期(3-5年):进化为"领域架构师",在某个垂直领域(医疗、金融、教育)建立AI无法替代的深度认知
长期:做"技术人类学家",思考科技如何服务人性,而非让人类适应技术

最终,AI编程时代最好的定位是:保持人的主体性,让AI成为扩展你智慧的工具,而非定义你价值的主宰。代码可以被生成,但意义、判断与责任,永远需要人的肩膀来承担。


绝对需要,且比以往更关键。

AI编程时代,架构师不再是"搭架子"那么简单,而是成为 "AI的导航系统和刹车系统" 。没有架构师设定的框架,AI会像没有图纸的3D打印机——高效产出大量相互冲突的代码碎片。

为什么架子不可替代?

1. AI的致命短板:缺乏系统级意图理解

  • AI能完美实现"按用户ID查订单",但无法理解"金融系统必须保证审计追踪与性能的平衡"
  • 架构师的架子定义了质量属性(安全、性能、可扩展性)这些AI无法自行推导的约束条件

2. 技术债的复利效应

  • 让100个AI Agent自由编码,3个月后得到的是一个"代码热带雨林":茂密、复杂、充满未知依赖
  • 架构师设的架子是债务控制的契约:服务边界、接口规范、数据流方向,防止AI在局部最优中陷入全局灾难

AI时代的"架子"新内涵

传统架构师:画分层图 → 定技术栈 → 写开发规范
AI时代架构师:定义意图边界 → 建立AI可验证的约束 → 设计人机协作的治理流程

具体交付物:

  • 意图描述层:用DSL或结构化Prompt定义"用户服务必须支持灰度发布"、"支付模块延迟小于50ms",让AI在明确约束下生成
  • AI可执行的架构契约:不是PDF文档,而是可自动校验的Schema、依赖规则、代码生成模板
  • 风险防火墙:为AI划定禁区(如核心交易算法)、设置人类审查触发点(如涉及PII数据处理)
  • 演化罗盘:定义系统演进的方向性原则(如"向事件驱动架构迁移"),防止AI短视优化

没有架构师的AI编程 = ?

真实场景:

  • 周一:10个开发用AI各生成10个微服务
  • 周三:服务间调用关系变成蜘蛛网,发现5个AI选择了不兼容的序列化协议
  • 周五:全团队停工,花3周时间重构——而架构师搭架子只要2天

数据印证: MIT 2024年研究显示,在无架构约束下使用AI编程,长期维护成本反比传统开发高40%——因为AI不理解"现在省事的方案为何未来会坑人"。

架构师的新操作范式

不是画完图就交差,而是:

  1. 意图编码:将架构决策转化为AI可理解的"元提示"(Meta-Prompt)
  2. 动态调校:持续分析AI生成代码的架构漂移度,自动触发重构建议
  3. 人机仲裁:当AI的优化建议与架构原则冲突时,做出基于业务生命周期的权衡

一句话总结

AI是强大的工人,但架构师是唯一能看懂整个工地图纸、知道哪块砖会压垮未来的人。 在AI+软件工程中,架构师不搭架子,就等于让自动驾驶汽车在没有地图的原始森林里狂奔——速度越快,灾难越大。


AI+软件工程:人机协作的"四阶十二步法"

基于当前最佳实践,AI时代的软件工程流程应从人编码转向人定义、AI实现、人验证意图驱动架构。这不是简单叠加AI工具,而是重构整个价值流。

核心原则:文档即代码,意图即架构

关键转变:传统流程中代码是核心资产,新流程中结构化文档(Spec)成为驱动AI的"元代码",代码退化为可再生的副产品。


阶段一:意图定义(人类主导)

1. 需求精译与意图编码

  • 人类输出:不是PRD文档,而是 AI可执行的意图描述(结构化Markdown、DSL)
  • 工具:用AI辅助需求分析,但人类必须定义验收标准的确定性约束(如"支付接口P99延迟 50ms")
  • 交付物intent.md(业务目标)+ constraint.md(技术约束)

2. 架构契约设计

  • 人类输出:架构决策记录(ADR)+ AI可验证的架构约束Schema
  • 关键动作:定义服务边界、接口契约、数据流方向,转化为AI能理解的治理规则(如"跨服务调用必须使用事件驱动")
  • 交付物architecture-contract.json

3. 任务原子化拆解

  • 人类输出:将需求拆分为AI友好的单意图任务(每个任务可独立验证)
  • 黄金法则:任务颗粒度 = 一个AI会话可完成的独立功能单元
  • 交付物tasks.md(带依赖关系的任务清单)

阶段二:AI实现(AI主导,人类监督)

4. 上下文工程与知识注入

  • AI输入:任务 + 架构契约 + 相关领域知识库(RAG)
  • 人类动作:构建项目的"数字记忆"——代码知识库、设计决策、历史Bug
  • 工具:Context7、DeepWiki等上下文管理工具

5. 代码生成与自验证

  • AI动作:生成代码 + 自解释的验证逻辑(单元测试+集成测试草案)
  • 人类干预点:关键算法、安全敏感代码必须人工Review,其他信任但需验证
  • 交付物:代码 + 测试套件 + implementation-report.md(AI说明实现逻辑)

6. 持续集成与自动审查

  • 流程:代码提交 → AI自动Review(架构合规性、安全扫描)→ 人类抽查
  • 关键:将架构契约转化为可执行的CI规则(如自动检测服务间循环依赖)
  • 工具:AI增强的SonarQube、GitHub Copilot Workspace

阶段三:人机仲裁(人类决策)

7. 架构漂移检测

  • 人类动作:每日运行架构健康度检查,对比生成代码与架构契约
  • 工具:AI自动识别"代码实现是否偏离设计意图",标记需要人工仲裁的冲突
  • 输出architecture-drift-report.md

8. 质量监护与伦理审查

  • 人类主导:AI无法覆盖的领域——业务正确性、伦理合规、用户体验
  • 关键场景:金融风控规则、医疗诊断建议、用户隐私保护必须人工终审
  • 流程:AI生成测试用例 → 人类补充边界案例 → AI执行验证

9. 意图校准循环

  • 触发条件:当AI输出与人类意图偏差>阈值时,启动意图重定义
  • 动作:不是让AI重写代码,而是人类修正意图描述,让AI重新对齐
  • 核心:问题永远在定义层,不在执行层

阶段四:演化治理(人机共管)

10. 自动化文档同步

  • 机制:代码变更 → AI自动更新API文档、架构图、运维手册
  • 原则文档与代码单源真相,避免传统"代码实现已变,文档还是去年版本"
  • 交付物:自动生成的docs/目录,与代码同版本管理

11. 预测性运维与自愈

  • AI动作:日志分析 → 故障预测 → 自动生成修复代码 → 人类审批后部署
  • 人类角色:从"救火队员"转为风险决策者(批准AI的修复方案或否决不合理的建议)
  • 工具:AI驱动的可观测性平台

12. 知识飞轮构建

  • 闭环:生产问题 → AI根因分析 → 更新知识库 → 优化下次代码生成
  • 人类价值:标注高质量训练数据,建立领域专属的AI增强体系
  • 终局:每个项目积累的数据成为组织的核心资产,而非代码

成熟度等级对照

等级特征人类角色AI角色
L1AI单点辅助编码+让AI补全智能提示
L2AI参与全流程架构+审查AI产出代码/测试生成
L3AI主导,人类监督战略决策+风险把关端到端实现
L4自主演化系统设定演化目标自驱动迭代(未来)

关键成功要素

文档强制化:无文档不编码,无契约不生成
小步快跑:每个任务必须可独立验证,拒绝"AI一次性生成整个系统"
人类守住院线:架构、安全、伦理三大红线不可交由AI
工具链集成:让AI在CI/CD管道中无缝流转,而非孤立的聊天窗口

最终形态:这不是AI取代人的流程,而是人类从"手艺人"升级为"指挥家",用意图和判断力驾驭AI的算力洪流。代码不再是资产,定义代码的意图体系才是未来最核心的技术资产

微信公众号

微信公众号

Cloudflare Tunnel

· 阅读需 4 分钟
Quany
软件工程师

Cloudflare Tunnel(零暴露,快速上线)详解

Cloudflare Tunnel(原 Argo Tunnel)是 Cloudflare Zero Trust 架构的核心组件,它通过出站连接模型实现服务的公网暴露,彻底消除了传统方案中端口开放、公网 IP 依赖等安全风险,同时具备分钟级部署的极致效率。


核心优势:零暴露架构

1. 无公网 IP,无端口开放

  • 原理:在服务器上运行 cloudflared 守护进程,主动建立到 Cloudflare 边缘网络的出站加密隧道。外部请求无法直接访问源站,只能经 Cloudflare 边缘节点通过隧道转发。
  • 安全价值:攻击者无法扫描到源站 IP 和开放端口,DDoS 攻击被 Cloudflare 全球网络吸收,源站完全隐身。

2. 默认 HTTPS,证书自动管理

  • Cloudflare 自动为域名签发并续期 SSL 证书,外部访问全程加密,无需手动配置 Let's Encrypt 等证书服务。

3. 身份验证集成

  • 可配合 Cloudflare Access 实现 OAuth、MFA 等多因素认证,构建零信任访问控制体系。

快速上线:5 分钟部署实战

根据真实配置实践,完整部署流程仅需 5 个核心步骤:

步骤 1:安装 cloudflared

# 下载最新版本(支持 Linux/Windows/macOS)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared && sudo mv cloudflared /usr/local/bin/
cloudflared --version

步骤 2:认证并创建隧道

# 浏览器授权选择域名
cloudflared tunnel login

# 创建命名隧道(自动生成凭证文件)
cloudflared tunnel create my-tunnel
# 输出隧道 ID:167e64e3-17b5-4bf8-bd7b-f7691f658416

步骤 3:配置路由规则

创建配置文件 /etc/cloudflared/config.yml

tunnel: my-tunnel
credentials-file: /etc/cloudflared/167e64e3-17b5-4bf8-bd7b-f7691f658416.json
ingress:
# HTTP 服务示例
- hostname: app.yourdomain.com
service: http://localhost:8080
# SSH 服务示例
- hostname: ssh.yourdomain.com
service: ssh://localhost:22
# 兜底规则(必需)
- service: http_status:404

步骤 4:配置 DNS 记录

# 自动创建 CNAME 记录指向隧道
cloudflared tunnel route dns my-tunnel "app.yourdomain.com"
cloudflared tunnel route dns my-tunnel "ssh.yourdomain.com"

步骤 5:启动服务

# 创建 systemd 服务(推荐生产环境)
sudo tee /etc/systemd/system/cloudflared.service > /dev/null <<'EOF'
[Unit]
Description=cloudflared tunnel
After=network-online.target
[Service]
ExecStart=/usr/local/bin/cloudflared --config /etc/cloudflared/config.yml tunnel run
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now cloudflared

完成! 等待 1-2 分钟,访问 https://app.yourdomain.com 即可看到内网服务。


技术架构对比


适用场景

  • 家庭服务器/NAS 远程访问:无需公网 IP 或动态域名
  • 开发测试环境:快速将本地服务暴露给协作方
  • 企业内网应用发布:配合 Zero Trust 实现员工安全访问
  • 混合云架构:打通多云与本地数据中心

性能与成本

  • 免费额度:个人用户免费套餐足够使用,包含无限隧道数量和充足流量
  • 网络加速:自动利用 Cloudflare Argo Smart Routing,通过私有骨干网传输,延迟通常低于传统 CDN 回源
  • 协议优化:支持 HTTP/2、QUIC 等现代协议,连接复用减少握手开销

最佳实践

  1. Docker 部署(推荐):

    services:
    cloudflared:
    image: cloudflare/cloudflared
    restart: always
    command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
  2. 多服务隔离:为不同服务创建独立子域名,便于权限管理

  3. 监控告警:配置 Cloudflare 仪表板监控隧道状态

  4. 安全加固:对敏感服务启用 Cloudflare Access 身份验证

Cloudflare Tunnel 通过颠覆性的出站连接模型,实现了真正的零暴露安全架构,其快速上线能力让个人开发者和企业都能在分钟级完成生产环境的部署,是现代内网穿透和零信任架构的首选方案。

微信公众号

微信公众号

如何自建FRP

· 阅读需 6 分钟
Quany
软件工程师

自建FRP能让你安全地将内网服务暴露到公网,非常适合远程访问、开发调试等场景。下面是一份清晰的搭建指南。

🎯 理解核心概念

FRP的工作方式依赖于两个核心组件:

  • 服务端 (frps):需要安装在一台拥有公网IP地址的服务器上(例如云服务商的云服务器)。它作为流量中转的“门户”或“交通枢纽”。
  • 客户端 (frpc):安装在你内网中需要被访问的设备上(如家里的NAS、办公电脑)。它负责与公网上的服务端建立连接,并将内网服务的流量转发出去。

简单来说,当外网用户想要访问你内网的服务时,请求先发送到公网服务器上的frps,然后frps通过已建立的连接将请求转发给内网设备上的frpc,最终送达目标服务。

🛠️ 搭建操作指南

第一步:配置FRP服务端 (frps)

  1. 下载与安装 通过SSH连接到你的公网服务器,使用 wgetcurl 命令从FRP的GitHub发布页下载最新版本的二进制包,然后解压。请根据你的服务器操作系统选择正确的版本。

    # 进入一个合适的目录,例如 /opt
    cd /opt
    # 下载(版本号请替换为最新版)
    sudo wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
    # 解压
    sudo tar -zxvf frp_0.61.1_linux_amd64.tar.gz
    # 进入解压后的目录
    cd frp_0.61.1_linux_amd64
  2. 编辑配置文件 关键的步骤是配置服务端,主要修改 frps.toml 文件。以下是一个基础配置示例:

    [common]
    # 服务端监听的端口,客户端将通过此端口连接
    bindPort = 7000
    # 如果您希望通过网页查看frp状态,可以启用仪表盘
    dashboard_addr = "0.0.0.0"
    dashboard_port = 7500
    dashboard_user = "admin" # 请设置一个安全的用户名
    dashboard_pwd = "your_secure_password" # 请设置一个强密码
    # 强烈建议设置token认证,提升安全性
    auth.method = "token"
    auth.token = "a_very_long_and_secure_secret_token"

    如果需要穿透HTTP/HTTPS服务,可能还需要配置 vhostHTTPPortvhostHTTPSPort 等参数。

  3. 启动服务与设置开机自启 为了管理方便,建议将frps配置为系统服务(如使用systemd)。

    • 创建一个service文件,例如 /etc/systemd/system/frps.service
    • 使用 sudo systemctl daemon-reload 重新加载配置。
    • 使用 sudo systemctl start frps 启动服务。
    • 使用 sudo systemctl enable frps 设置开机自启。
  4. 配置防火墙 务必在服务器的防火墙(如iptables、firewalld)以及云服务商的安全组规则中,放行frps服务配置中使用的端口(例如上面的7000和7500端口)。

第二步:配置FRP客户端 (frpc)

  1. 下载客户端软件 在内网设备上下载并解压与服务端相同版本的FRP软件包。

  2. 编辑配置文件 客户端的配置文件是 frpc.toml。你需要告诉它如何连接到服务端,以及映射哪些服务。

    [common]
    # 填写你公网服务器的IP地址或域名
    serverAddr = "your_server_public_ip"
    serverPort = 7000
    # 此处的token必须与服务端配置的token完全一致
    auth.method = "token"
    auth.token = "a_very_long_and_secure_secret_token"

    # 下面开始定义具体的代理规则
    # 示例1:映射内网的SSH服务(22端口)
    [[proxies]]
    name = "ssh-to-my-pc"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    # 在公网服务器上使用这个端口来访问内网SSH
    remotePort = 6000

    # 示例2:映射内网的Web服务(例如在3000端口)
    [[proxies]]
    name = "web-app"
    type = "tcp" # 简单的TCP代理,对于HTTP服务也可使用"http"类型以获得更多功能
    localIP = "127.0.0.1"
    localPort = 3000
    remotePort = 6001
  3. 启动客户端 在内网设备上,进入FRP目录,执行启动命令:

    ./frpc -c ./frpc.toml

    同样,也可以将frpc配置为系统服务或后台进程,以确保稳定运行。

🔒 重要安全提醒

自建服务意味着你需要自己负责安全,以下几点至关重要:

  • 使用强令牌:配置文件中的 auth.token 是首要的安全屏障,务必使用长且复杂的随机字符串,并定期更换。
  • 最小化端口开放:在服务器防火墙和云服务商安全组中,只开放frp服务所必需的端口,关闭所有不必要的端口。
  • 关注日志:定期检查frps和frpc的日志输出,留意是否有异常连接尝试。
  • 考虑TLS加密:对于传输敏感数据的场景,FRP支持TLS加密通信,建议在配置中启用。

💎 进阶配置与故障排查

成功完成基础搭建后,你可能还需要了解一些进阶配置和问题处理方法。

  • 使用域名(虚拟主机):如果你拥有一个域名,可以配置FRP,让不同的子域名(如 panel.your-domain.com)指向内网中不同的Web服务,这比直接使用IP地址和端口号更优雅、易用。
  • 常见问题排查
    • 连接失败:首先确认服务端防火墙和安全组规则已正确放行所有相关端口(如 bindPort, dashboard_port, 以及客户端配置的 remotePort 等)。这是最常见的问题。
    • 检查配置:确保客户端配置中的 serverAddr(公网服务器IP)和 serverPort 准确无误。
    • 核对认证信息:再三确认客户端和服务端的 auth.token 完全一致。
    • 查看日志:通过服务端和客户端的日志输出(使用 sudo systemctl status frps 或直接运行程序查看输出),可以获取非常详细的错误信息,这是定位问题的关键。

希望这份指南能帮助你顺利搭建自己的FRP服务!如果你在具体操作中遇到更细致的问题,比如如何为特定服务(如Windows远程桌面)配置代理,我很乐意提供进一步的建议。

微信公众号

微信公众号

Cursor 与 Serena 的组合

· 阅读需 4 分钟
Quany
软件工程师

Cursor 与 Serena 的组合,被广泛认为是一次质的飞跃,它将一个优秀的AI编辑器(Cursor)与一个强大的“IDE大脑”(Serena)相结合,彻底改变了AI辅助编程的体验。其核心关系可以概括为:Cursor 是灵敏的“外卖骑手”,负责与用户交互和最终交付;而 Serena 是智慧的“中央厨房”,负责深度分析代码库并提供精准的解决方案

以下表格清晰地展示了两者如何分工协作:

角色组件职责分工核心价值
🚴 Cursor前端交互与呈现:提供聊天界面、代码编辑、快捷键操作等用户体验。优秀的“最后一公里”交付,让用户能方便地发出指令并接收结果。
🧠 Serena后端分析与执行:通过语言服务器协议(LSP)深度理解项目结构,提供符号级检索、精准编辑、依赖分析等能力。让AI真正“读懂”项目,从文本生成器升级为项目级编码代理(Coding Agent)。

🔧 核心能力与工作原理

Serena 的强大之处在于它为AI赋予了类似IDE的智能。

  • 符号级语义检索:Serena 提供的工具(如 find_symbol, find_referencing_symbols)允许AI查找的是代码中的“实体”(如函数、类、变量),而不仅仅是字符串。这意味着AI能精准定位一个函数的定义及其在所有文件中的引用,避免手动Ctrl+F的遗漏和错误。
  • 精准“手术刀式”编辑:与传统AI工具经常替换整个文件不同,Serena 支持 insert_before_symbolreplace_symbol_body 等操作,允许AI进行精准的插入或替换,像做外科手术一样修改代码,极大提升了修改的安全性和可控性。
  • 项目级上下文理解:Serena 在项目加载时会进行“Onboarding”,分析代码结构并生成记忆(存储在 .serena/memories/ 目录下)。后续的对话可以复用这些记忆,使得AI能像一位逐渐熟悉你项目的新队友,越来越了解项目的架构和规范。

🚀 实际应用场景

当你组合使用Cursor和Serena时,可以这样高效地完成复杂任务:

  • 安全的重构:你可以指令AI“将项目中的 fetchDataV1 函数重命名为 fetchDataV2,并更新所有引用处”。Serena会利用其重构能力安全地完成重命名,并确保所有依赖关系同步更新。
  • 跨文件功能添加:指令“为我的React项目添加一个用户个人资料页面”。AI会通过Serena分析现有路由、组件和API,自动创建新组件、在合适的位置添加路由、并生成相关的样式和逻辑代码。
  • 精准的Bug修复:指令“修复登录功能中密码错误时提示信息不显示的问题”。AI会定位到登录相关的代码文件,分析逻辑流,并精准地插入或修改错误处理代码。

⚙️ 配置指南

配置过程主要分为三步:

  1. 安装uv包管理器:Serena推荐使用uv来管理运行环境。可以通过一条命令安装:
    # Windows (PowerShell)
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    # macOS/Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
  2. 启动Serena MCP服务器:在终端中运行以下命令,启动Serena服务。
    uvx --from git+https://github.com/oraios/serena serena-mcp-server
  3. 在Cursor中配置MCP:在Cursor的设置中,找到MCP Servers配置项,添加以下配置并重启Cursor。
    {
    "mcpServers": {
    "serena": {
    "command": "uvx",
    "args": ["--from", "git+https://github.com/oraios/serena", "serena-mcp-server"]
    }
    }
    }

💎 组合优势总结

总而言之,Cursor+Serena的组合带来了以下颠覆性优势:

  • 从“辅助”到“协作”:AI不再是简单的补全工具,而是能深度参与项目开发、理解上下文的协作伙伴。
  • 质变的效率提升:对于中型及以上规模的项目,尤其是进行重构、二次开发或添加复杂功能时,该组合能带来数倍的效率提升,避免了大量手动查找和复制粘贴的工作。
  • 显著的Token节约:通过符号级操作和项目记忆,避免了让AI反复阅读大量文件内容来获取上下文,从而节省了大量Token消耗。

希望这份解读能帮助您全面了解Cursor与Serena这个强大的组合。如果您在配置或使用中遇到任何具体问题,我很乐意提供进一步的帮助。

微信公众号

微信公众号

节约使用cursor

· 阅读需 8 分钟
Quany
软件工程师

想让 Cursor 这个强大的 AI 编程助手既高效又省钱,核心在于理解其运作机制并掌握一些关键技巧。下面我为你整理了一份从基础到进阶的实用指南。

💸 理解 Cursor 的计费方式

首先,清楚钱花在哪里是节约的第一步。Cursor 的计费主要基于以下两种模式之一:

  • 按交互次数计费:在某些版本中,你与 AI 的一次问答(你提问,AI 一次回答)被视为一次交互。每个计费周期通常有免费的交互额度,用完后需要付费或使用慢速队列 。
  • 按 Token 计费:这是更本质的计费单位。Token 是 AI 处理文本的基本单位,可以理解为字符或单词。总消耗 = 输入 Token + 输出 Token + 上下文 Token。你提供给 AI 的提示、AI 生成的代码/文本、以及对话历史中所有需要被 AI“记住”的内容都会消耗 Token 。

基于以上计费原理,可以采取以下节约策略。

🧠 优化你的提问方式

高效的提问能显著减少来回沟通的次数和无效输出。

  • 需求明确具体:避免模糊的指令。与其说“帮我写个函数”,不如详细说明技术栈、具体功能、约束条件等 。
    • 不推荐帮我写代码
    • 推荐用React Hooks实现一个计数器组件,要求具备增加、减少、重置功能,使用TypeScript编写,状态通过useState管理
  • 分阶段处理复杂任务:对于大型功能,不要试图在一个对话中完成。将其拆分为设计、核心功能实现、异常处理、优化等阶段,分步进行。这比一次性请求能节省大量 Token 。
  • 先要方案,再要代码:对于复杂逻辑,可以先开启 Plan Mode 或直接提示 AI 先给出实现计划和方案。你确认方案可行后,再让它生成代码,避免在错误方向上浪费额度 。

🔧 善用工具与控制上下文

上下文管理是控制 Token 消耗的关键,因为对话历史越长,消耗的 Token 越多。

  • 精准引用上下文:使用 @ 符号精确地告诉 AI 需要关注哪些文件、文档或过去的对话 (@file, @docs, @past chats),而不是让 AI 自动加载可能不相关的全部上下文 。
  • 管理对话长度:避免所有对话都在一个窗口中进行。为不同的、复杂的任务开启新的独立对话框,以保持每个对话的上下文简洁,减少幻觉和 Token 浪费 。
  • 活用 NotePads:对于冗长的需求文档或接口说明,可以先将内容整理到 NotePads 中。在新对话中直接 @NotePads,就能让 AI 基于所有内容生成代码,避免在对话框中粘贴大量文本 。
  • 配置 .cursorignore 文件:将项目中不需要被 AI 索引的文件(如 node_modules, 构建产物、日志文件等)忽略掉,可以减少 AI 构建索引时的负担和无关上下文的干扰 。

⚙️ 精细配置与模型选择

  • 选择合适的模型:Cursor 提供多种 AI 模型。对于简单的代码补全、行内修改(Ctrl/Cmd + K),默认的 gpt-4o-mini 等较轻量模型通常足够且便宜。处理复杂架构设计时,再切换至 Claude 3.5/3.7 等更强但更贵的模型 。
  • 智能配置 Project Rules:Project Rules 是指导 AI 行为的项目规范,但它本身也会作为上下文消耗 Token 。
    • 模式选择:对于个人或小型项目,建议使用 Selective Apply(选择性应用)模式,仅在需要时通过 @rules 触发相关规则,这比 Always Apply(始终应用)模式更节省 Token 。
    • 规则优化:将规则分级,只将最关键的规定(如安全规则、基础命名规范)设为核心规则。同时,尽量使用简洁的语言编写规则 。

下面的表格对比了不同规则应用模式的优缺点 :

应用模式优点缺点适用场景
Always Apply保证代码一致性固定 Token 开销,可能包含不相关规则团队协作、企业级项目
Selective Apply按需使用,灵活性强,节省 Token可能忘记应用规则个人项目、预算有限时

💎 核心省钱口诀

总结一下,最核心的节约心法如下:

口诀具体做法
问题质量 > 问题数量花时间构思精准的提示词,一次性把需求说清楚。
手动控制 > 自动加载主动使用 @ 引用,而非依赖 AI 自动猜测上下文。
任务拆分 > 一蹴而就将大任务拆成小步骤,分而治之。
合适模型 > 最强模型根据任务难度匹配模型,好钢用在刀刃上。
人工校验 > 盲目信任始终检查 AI 生成的代码,避免错误修改导致更多成本。

希望这些技巧能帮助你更高效、更经济地使用 Cursor。如果你对某个特定功能(比如 Rules 的详细配置或 Agent 模式的高级用法)有进一步兴趣,我很乐意提供更具体的介绍。

编写高效的 Project Rules 确实是一门平衡艺术,既要让 AI 精准产出高质量代码,又要避免不必要的资源消耗。下面这个表格总结了高效 Rules 的四大核心原则,你可以先快速了解其精髓。

原则核心目标对代码质量的影响对 Token 节省的贡献
最小化 (Minimization)规则精炼、专注、可执行避免模糊指令,提高生成代码的准确性和一致性减少每次请求携带的冗余信息,直接降低 Token 消耗
结构化 (Structured)规则模块化、分层次、有边界让 AI 在特定场景下获得最相关的指导,减少“幻觉”和错误实现规则的“按需加载”,避免不相关的规则占用上下文
精准引用 (Explicitness)明确告诉 AI“何时用何规则”确保 AI 在正确的时机遵循正确的规范,输出稳定可靠通过 RuleType 等机制精确控制上下文,避免整个规则库被全部发送
一致性 (Consistency)保持代码风格和架构的统一提升代码的可维护性和可读性,便于团队协作和后续开发减少因风格不一致导致的返工和重复生成,间接节省 Token

🛠️ 编写高质量规则的具体方法

掌握了核心原则后,我们来看看如何将它们付诸实践。

  1. 使用命令式、否定式语言 规则的本质是指令,而非建议。使用果断、明确的语气,能显著提高 AI 的服从度 。

    • 不推荐 (模糊、解释型)“建议优先使用函数式组件。”
    • 推荐 (命令式)“使用 React 函数式组件和 Hooks。”
    • 推荐 (否定式)“禁止绕过 Repository 层直接操作数据库。”
  2. 采用新的 .cursor/rules/ 目录结构 放弃传统的单一 .cursorrules 文件。现在更推荐的做法是在项目根目录创建 .cursor/rules/ 文件夹,然后将规则分门别类地存放在不同的 .mdc 文件中 。这样做的好处是结构清晰,便于维护,并能更好地与 RuleType 配合实现精准引用。

  3. 善用 RuleType 实现精准控制 在每个 .mdc 文件的顶部,你可以通过 YAML front matter 定义 RuleType,这是实现 Token 节省的关键 。

    • Always:始终生效的通用规则,如项目核心行为、通用代码风格。
    • Apply to Specific Files:仅当编辑特定类型文件(如 *.py)时才生效,专用于语言或框架规则。
    • Apply Manual:仅在聊天中通过 @规则文件名 显式引用时才生效,适合不常用的特定规则。

💾 最大化节省 Token 的实战技巧

  1. 利用 Cache Read 机制 在同一对话中,AI 对已读过的内容(包括规则文件)的后续读取成本会大幅降低 。因此,应将相关任务放在同一个对话中完成,而不是每个小任务都开启新对话。

  2. 规则内容本身要精炼

    • 避免解释性语言:规则中不要写“为什么”,只写“做什么”和“不做什么” 。
    • 多用示例代码:对于复杂的模式或规范,一个简短的代码示例比大段文字描述更有效且更省 Token 。
  3. 将规则文件纳入版本控制 这不仅便于团队协作,还能确保所有成员和 AI 都基于同一套最新的规则进行开发,避免因规则不一致导致的重复修改和 Token 浪费 。

🔍 验证规则是否生效

编写规则后,需要进行测试。你可以尝试让 AI 做一个明显违反规则的操作(例如:“给这个函数添加功能,先不用写测试”)。如果 AI 拒绝执行并提醒你需要遵守测试规则,说明规则已成功生效 。

希望这份指南能帮助你打造出既高效又经济的 Project Rules。如果你在实践过程中遇到具体问题,比如针对某个特定框架的规则编写,我很乐意提供更进一步的探讨。

微信公众号

微信公众号

电脑智能化

· 阅读需 3 分钟
Quany
软件工程师

实现通过 Email 与 Claude Code 对话的核心方案是使用开源工具 Claude Code Remote。它通过邮件收发机制实现远程控制,非常适合长任务监控和移动办公场景。

核心实现原理

该工具采用 邮件中继 方式工作:

  1. 任务完成通知:本地 Claude Code 执行完任务后,自动发送结果邮件到你的邮箱
  2. 指令回复:你直接回复该邮件,在正文中写入新指令
  3. 自动执行:监控服务检测到白名单邮箱的回复后,自动将指令发送给 Claude Code
  4. 循环交互:重复上述流程,实现连续的远程对话

完整配置步骤

前期准备

  • Node.js 18+ 环境
  • 一个支持 IMAP/SMTP 的邮箱(如 Gmail、Outlook)
  • tmux 终端复用工具

安装配置

# 克隆项目
git clone https://github.com/JessyTsui/claude-code-remote
cd claude-code-remote

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env

编辑 .env 文件,填入邮箱配置和白名单:

EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
ALLOWED_SENDERS=your-phone-email@gmail.com,your-colleague@company.com

启动服务

需要 两个终端窗口 配合运行:

终端 1:启动邮件监控服务

npm run relay:pty
# 显示 "🚀 Claude Code Remote is running! 📧 Monitoring emails..." 即成功

终端 2:在 tmux 中启动 Claude Code

# 创建新会话
tmux new-session -s my-claude-session

# 在 tmux 中正常启动 Claude
claude

使用流程演示

  1. 发起任务:在 tmux 的 Claude 界面输入指令

    分析当前目录下所有 Python 文件的复杂度
  2. 接收通知:任务完成后,邮箱收到标题为 "Claude Code Remote Task Complete [#ABC123]" 的邮件

  3. 回复指令:直接回复邮件,正文写:

    把结果生成一个 Markdown 报告,保存到 reports/ 目录
  4. 自动执行:回到 tmux 窗口,会看到 Claude 自动接收新指令并执行

  5. 持续交互:可无限循环回复邮件,直到任务完成


关键特性与优势

特性说明
客户端兼容支持所有邮件客户端(网页版、手机 App、桌面应用)
安全机制发送者白名单验证 + 会话隔离 + 自动超时
连续对话支持多轮指令,保持上下文连贯
网络要求无需公网 IP 或内网穿透,有邮箱即可控制
场景适配适合长任务监控、远程开发、团队协作

注意事项

  1. 邮箱安全:建议使用应用专用密码而非主密码
  2. Token 消耗:每次邮件交互都会消耗 Claude API 额度,重度使用月费约 $100-200
  3. 超时设置:长时间未操作的会话会自动失效,需重新启动
  4. 环境分离:生产环境建议单独配置 .env.production 文件

该方案已验证可行,多个开发者正在使用。如需更轻量级的实现,也可以基于 Python 编写简易邮件监控脚本调用 Claude API,但完整功能推荐使用 Claude Code Remote 项目。

微信公众号

微信公众号