面包屑图标 当前位置: 首页
AI资讯
热点详情

AI编程上下文陷阱:错误原因与系统性解决

AI热点日报
AI热点日报时间:2026-07-19
热点解读

通过系统性构建完整、精确的上下文,采用三层记忆架构(应用基础、功能模块、需求迭代)和渐进式维护方案,可有效解决AI编程中的上下文陷阱,显著提升代码生成准确性与协作效率。

# AI编程效率提升指南:系统性构建上下文,告别代码错误 本教程将系统性地阐述如何通过上下文工程解决AI编程中的常见问题,并提供一套可落地的三层记忆架构与渐进式维护方案,助力开发者显著提升与AI协作的效率与质量。 ---

一、如何充分使用模型能力

关键要点:完整、精确、聚焦的上下文,是充分发挥模型能力的关键。 基于这一认知,我们需要思考如何系统性地构建满足这些条件的上下文。

四大关键要素

  • 合理的任务分解:本质上,这是在有限上下文宽度和注意力约束下,如何恰当地把握任务复杂度边界,使模型能够专注于单一任务进行作业。

    小提示: 理想的任务分解粒度,应使AI单次对话即可直接生成可运行代码。若需多轮交互才能澄清细节,则说明分解还不够细致。

  • 完整的背景信息:在真实项目中编写代码,需要理解系统架构与规范、掌握业务需求、明确关键代码实现路径,并知晓如何修改代码以满足新需求。只有完整掌握这些背景信息,才能真正写出高质量代码,这一点对人类和AI而言毫无二致。

  • 精确的指令描述:采用让AI更容易理解的方式,清晰无歧义地描述待完成的任务,例如使用特定语法、Mermaid图表、代码示例等。

  • 有效的验证和反馈:信息从我们表达,到AI理解,再到生成代码,每一层都可能产生损失,且我们自身也常遗漏细节。此步骤的关键在于,根据AI的输出进行验证与反思,将错误或遗漏之处反馈给AI,引导其自行反思与纠偏。

核心提示: 这四个关键点的应用还涉及尺度的把握(即信息的细致程度),而这一尺度会随模型能力提升而变化。例如,早期模型需要非常详尽的内容输入,当模型能力提升后,它能够自主从代码中获取足够的背景知识。

常见问题解答

问:为什么我给了AI很详细的代码,它还是写不对?

答: 最常见的原因是背景信息不完整。你需要确保AI理解其要修改的代码范围、修改原因(业务逻辑),以及前后端依赖关系。建议采用记忆文档方式,将项目架构、编码规范等静态信息固化下来,作为系统提示词持续注入。

---

二、AI协作编程的方法

2.1. 应用级记忆结构

关键要点:像设计系统架构一样设计上下文架构,这暗合近期讨论较多的上下文工程(Context Engineering)概念。基于这一认知,我们需要思考如何高效、准确地维护这个上下文工程。

三层记忆设计方法论

  • 第一层 - 应用基础记忆:包含应用的基础架构、技术栈、规范、通用工具等长期稳定记忆,作为与AI交互的System Prompt,类似系统架构中的基础组件。

  • 第二层 - 功能模块记忆:针对某个具体功能的完整描述,包括链路图、代码入口、关键逻辑、依赖关系等相对稳定的记忆,作为与AI交互的关键背景知识,类似由基础组件与业务需求组成的具体功能模块。

  • 第三层 - 需求迭代记忆:AI基于项目迭代中的业务需求 + 功能模块背景知识 + 项目系统架构产出的技术方案,包含明确的业务需求、代码改造范围、约束条件、边界情况等,作为提供给AI进行代码生成的最终输入。

2.2. AI辅助记忆维护

记忆维护关键点: 向AI提供的输入内容与产出验收,本身也可以由AI辅助生成和验证。同时,记忆的维护是渐进的,可跟随实际项目逐步完善。

渐进式实践方案

  • 应用基础记忆构建:一般AI编程工具都提供生成项目顶层记忆文档的功能,如Cursor的/Generate Cursor Rules、Claude Code的/init。在应用没有任何记忆时,可作为冷启动快速建立记忆的方法。生成初始记忆后,可根据自身要求让AI辅助调整。

  • 功能模块记忆构建:由人类提供简洁的功能描述和关键代码入口,让AI自动根据代码入口作为线索检索,建立完整链路的记忆文档,再根据自身要求让AI辅助调整。

  • 需求迭代记忆构建:引用与需求相关的背景知识记忆,并以Markdown格式描述本次需求内容,要求其生成技术方案,从而产出需求迭代记忆。需求开发完成后反向更新功能模块记忆。

  • 记忆文档的规范:建立一些基础的记忆文档规范,如应用记忆保持整洁、功能模块记忆需包含链路图、需求迭代记忆应建立在指定目录等。

  • 要求AI辅助检查和反思:每一层记忆文档生成后,都可要求AI进行自我检查与反思,查找是否有错漏之处。

  • 通用的记忆格式:统一以.md作为记忆格式,未来使用任何AI编程工具均可无缝切换(Cursor的.mdc本质上也属于.md)。

小提示: 核心是系统性地分层分模块管理上下文,最大程度让AI辅助维护上下文。每次变更的知识负担可大幅下降(只需输入具体需求),配合渐进式更新维护,使用AI编程工具的效率正循环由此形成。

2.2.1. 记忆示例

注意:功能模块记忆、需求迭代记忆的示例涉及敏感业务代码,此处不再展示。

项目结构和技术栈
---
description: 
globs: 
alwaysApply: true
---
# AE评测系统开发指南

## 项目结构

- [demo-start](mdc:demo-start): 项目启动模块,**这个模块中没有业务逻辑,在我没有明确指令时不要修改此模块中的代码**。
- [demo-api](mdc:demo-api): HSF API接口定义模块,**对于Demo系统的开发,只关心 [demo](mdc:demo-api/src/main/ja va/com/aliexpress/demo) package下的内容,其他package内容忽略**
  - [demo/api](mdc:demo-api/src/main/ja va/com/aliexpress/demo/api): Demo系统的HSF API的interface均在这个package下定义,命名后缀为Service
  - [demo/model](mdc:demo-api/src/main/ja va/com/aliexpress/demo/model): Demo系统的HSF API的model均保存在这个package,命名后缀为Request、DTO
  - [demo/common](mdc:demo-api/src/main/ja va/com/aliexpress/demo/common): Demo系统的HSF API的enum均保存在这个package下,命名后缀为Enum
  - [demo/base](mdc:demo-api/src/main/ja va/com/aliexpress/demo/base): Demo系统的HSF API的model的基类均保存在这个package下
- [demo-biz](mdc:demo-biz): 业务逻辑实现模块,**对于Demo系统的开发,只关心 [demo](mdc:demo-api/src/main/ja va/com/aliexpress/biz/demo package下的内容,其他package内容忽略**
  - [demo/api](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/api): Demo系统的HSF API的实现类均在这个package下定义,命名后缀为ServiceImpl
    - [demo/api/converter](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/api/converter): Demo系统的HSF API的实现类使用的Converter类均保存在这个package下,命名后缀为Converter
    - [demo/api/validate](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/api/validate): Demo系统的HSF API的实现类使用的校验类均保存在这个package下,命名后缀为Validate
  - [demo/common](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/common): Demo系统的内部的公共类均保存在这个package下,命名后缀为Enum、Constant
  - [demo/config](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/config): Demo系统的内部的Diamond、HSF配置类均保存在这个package下,命名后缀为Config、Configuration
  - [demo/consumer](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/consumer): Demo系统的MetaQ Consumer类均保存在这个package下,命名后缀为Consumer(消费MetaQ)
    - [demo/consumer/listener](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/consumer/listener): Demo系统的Consumer的消费逻辑实现类均保存在这个package下,命名后缀为Listener(实现消费逻辑)
  - [demo/demouator](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/demouator): Demo系统的评估器实现类均保存在这个package下,命名后缀为demouator,**此处的代码相对比较稳定,在我没有明确指令时不要自行修改**
  - [demo/executor](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/executor): Demo系统的通用业务逻辑实现类均保存在这个package下,命名后缀为Executor
  - [demo/invoker](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/invoker): Demo系统的调用AI应用的通用封装类均保存在这个package下,**此处的代码相对比较稳定,在我没有明确指令时不要自行修改**
  - [demo/task](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/task): Demo系统的任务提交和任务执行的通用封装类均保存在这个package下,**此处的代码相对比较稳定,在我没有明确指令时不要自行修改**
  - [demo/util](mdc:demo-biz/src/main/ja va/com/aliexpress/biz/demo/util): Demo系统的工具类均保存在这个package下,**此处的代码相对比较稳定,在我没有明确指令时不要自行修改**
- [demo-core](mdc:demo-core): 核心功能模块,包含基础设施和通用组件,**对于Demo系统的开发,任何时候都不需要关注这个模块中的内容**
- [demo-job](mdc:demo-job): 定时任务模块,**对于Demo系统的开发,任何时候都不需要关注这个模块中的内容**
- [demo-workflow](mdc:demo-workflow): 工作流相关模块,**对于Demo系统的开发,任何时候都不需要关注这个模块中的内容**
- [demo-infrastructure](mdc:demo-infrastructure): 基础设施模块,包含数据访问、外部服务集成等,**对于Demo系统的开发,主要关心其中操作数据库的相关代码**
  - [dao/demo](mdc:demo-infrastructure/src/main/ja va/com/aliexpress/infrastructure/dao/demo): Demo系统的Mybatis-Plus的Mapper类均保存在这个package下,后缀为Mapper
  - [model/demo](mdc:demo-infrastructure/src/main/ja va/com/aliexpress/infrastructure/model/demo): Demo系统的Mybatis-Plus的实体类均保存在这个package下,其中PO后缀的是与数据库表直接映射的实体类,其中/model文件夹下的类是和业务层交互的实体类
  - [model/convert](mdc:demo-infrastructure/src/main/ja va/com/aliexpress/infrastructure/model/convert): Demo系统的Mybatis-Plus的PO与Model之间的转换类均保存在这个package下,后缀为Converter
  - [repository](mdc:demo-infrastructure/src/main/ja va/com/aliexpress/infrastructure/repository): Demo系统的数据库操作类均保存在这个package下,接口后缀为Repository,实现类后缀为RepositoryImpl,核心的作用是调用Mapper与数据库操作、转换PO与Model
- [demo-provider](mdc:demo-provider): 服务提供者模块
  - [hsf/provider](mdc:demo-provider/src/main/ja va/com/aliexpress/provider/hsf/provider): 增加新的HSF服务Provider需要在 [HsfProviderConfig.ja va](mdc:demo-provider/src/main/ja va/com/aliexpress/provider/hsf/provider/HsfProviderConfig.ja va)类中增加配置
- [demo-sdk](mdc:demo-sdk): Demo系统SDK工具模块,**此处的代码相对比较稳定,在我没有明确指令时不要自行修改**

## 主要技术栈

- Pandora Boot: 基于Spring Boot的阿里内部框架
- HSF: 阿里内部的RPC框架
- Diamond: 阿里内部的配置中心
- Tair: 阿里内部的缓存服务
- MetaQ: 阿里内部的消息服务
- MyBatis-Plus: 轻量级的ORM框架
DAO层代码规范
---
description: 根据创建表的SQL生成操作数据库层增删改查代码时引用此文件
globs: 
alwaysApply: false
---
## 操作数据库编码规范
#### 操作DB框架
1. 开发框架:使用MyBatis-Plus进行编码
2. 调用逻辑:上层通过注入的方式调用Repository的实现,在Repository的实现中调用Mapper,调用Mapper后返回的对象是PO,再通过Converter转换成Model后返回为上层调用方。
3. 数据类型的选择:时间字段使用ja va.util.Date类型
4. 使用MyBatis-Plus方法注意事项:注意不要调用deprecated的方法
5. Repository层的删除方法:统一使用逻辑删除,逻辑删除字段是is_deleted
6. Repository层需操作时需要附加对当前环境的处理:调用 [EnvUtil.ja va](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/util/EnvUtil.ja va)的getEnv().getCode()方法
7. Repository层的分页方法:调用MyBatis-Plus的selectPage方法
   
#### DAO层PO
1. DAO层PO的命名规范为${TableName}PO
2. DAO层PO的存放目录[model](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/model)

#### DAO层Mapper
1. DAO层Mapper命名规范为${TableName}Mapper
2. DAO层Mapper的存放目录[dao](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/dao)
   
#### Repository层
1. Repository层interface命名规范为${TableName}Repository
2. Repository层实现命名规范为${TableName}RepositoryImpl
3. Repository层Model命名规范为${TableName}Model
4. Repository层interface的存放目录[repository](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/repository)
5. Repository层实现的存放目录[repositoryimpl](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/repository/impl)
6. Repository层Model存放目录[model](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/model)

#### Converter层
1. Converter层命名规范位${TableName}Converter
2. Converter层的存放目录[convert](mdc:task-infrastructure/src/main/ja va/com/aliexpress/qa/task/infrastructure/model/convert)
3. Converter代码规范:使用字段进行映射,禁止使用json序列化、BeanUtils.copyProperties等方式

## 参考代码
1. DAO层PO参考代码
``` ja va
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

${必要的引用}

/**
 * @author chigong.zxn
 */
@Data
@Builder
@TableName(value = "${tableName}")
@AllArgsConstructor
@NoArgsConstructor
public class ${TableName}PO {
    ${注释}
    ${只可以使用包装类型,禁止使用基础类型}
    ${columnName}
}
```
2. DAO层Mapper参考代码,【注意:不需要增加增删改查方法,MyBatis-Plus已经默认通过继承BaseMapper提供】
``` ja va
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}PO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author chigong.zxn
 */
@Mapper
public interface ${TableName}Mapper extends BaseMapper<${TableName}PO> {
}
```
3. Repository层interface参考代码,【注意:生成基础的增删改查方法】
``` ja va
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}PO;
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}Model;

/**
 * @author chigong.zxn
 */
@Mapper
public interface ${TableName}Repository {
    ${注释}
    ${增删改查方法}
}
```
4. Repository层实现参考代码,【注意:继承Repository接口实现基础增删改查方法,调用Mapper生成基础的增删改查方法】
``` ja va
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}PO;
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}Model;

/**
 * @author chigong.zxn
 */
@Mapper
public interface ${TableName}RepositoryImpl implements ${TableName}Repository {
    ${注释}
    ${实现Repository增删改查方法}
}
```
5. Repository层Model参考代码
``` ja va
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

${必要的引用}

/**
 * @author chigong.zxn
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ${TableName}Model {
    ${注释}
    ${只可以使用包装类型,禁止使用基础类型}
    ${columnName}
}
```
6. Converter层参考代码,【注意:生成2个静态方法,PO转Model、Model转PO】
``` ja va
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}PO;
import com.aliexpress.qa.task.infrastructure.model.eval.${TableName}Model;

/**
 * @author chigong.zxn
 */
public class ${TableName}Converter {
    ${注释}
    ${PO转换为Model}

    ${注释}
    ${Model转换为PO}
}
```
API层代码规范
---
description: 增加HSF接口时引用此文件
globs: 
alwaysApply: false
---
## API开发规范
### 服务实现
* 验证器存放目录:[validate](mdc:task-biz/src/main/ja va/com/aliexpress/qa/task/biz/eval/api/)
* 实现要求:必须实现服务验证器
* 服务实现代码参考:
``` ja va
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class ${服务名}ServiceImpl implements ${服务名}Service {
    private static final Logger logger = LoggerFactory.getLogger(${服务名}ServiceImpl.class);
    @Autowired
    private ${服务校验器}Validate validate;
    // 如果需要调用其他bean也可以在此处引入
    // 如:
    // @Autowired
    // private EvalDatasetDetailRepository evalDatasetDetailRepository;
    @Override
    public ${服务方法出参} ${服务方法名}(${服务方法请求体} request) {
        logger.info("${服务名}Service.${服务方法名} request:{}", JSON.toJSONString(request));
        ${服务方法出参} response = new ${服务方法出参}();
        try {
            String validateMsg = validate.${服务方法校验器}Validate(request);
            if (StringUtils.isNotBlank(validateMsg)) {
                return Response.fail(ErrorCode.PARAM_ERROR.name(), validateMsg);
            }
            // 在此处实现业务逻辑
            ${业务逻辑}
        } catch (Exception e) {
            logger.error("${服务名}Service.${服务方法名} error", e);
            response = Response.fail(ErrorCode.SYSTEM_ERROR.name(), e.getMessage());
        }
        logger.info("${服务名}Service.${服务方法名} response:{}", response);
        return response;
    }
}
```
### 服务验证器
* 验证器存放目录:[validate](/task-biz/src/main/ja va/com/aliexpress/qa/task/biz/eval/api/validate/)
* 验证器代码参考:验证失败则返回失败原因字符串,验证成功则返回空字符串
``` ja va
import com.aliexpress.qa.task.biz.eval.util.ValidateUtil;
import org.springframework.stereotype.Component;
@Component
public class ${服务名}Validate {
    // 如果需要调用其他bean也可以在此处引入
    // 如:
    // @Autowired
    // private EvalDatasetDetailRepository evalDatasetDetailRepository;
    public String ${服务方法名}Validate(${服务方法请求体} request) {
        // 请求体不能为空
        if (request == null) {
            return "请求参数不能为空";
        }
        // 基础校验,使用ValidateUtil校验net.sf.oval annotation
        String validateMsg = ValidateUtil.validate(request);
        if (StringUtils.isNotBlank(validateMsg)) {
            return validateMsg;
        }
        // 写明校验注释
        #{文档要求的其他校验逻辑}
        // 返回空字符串则校验成功
        return StringUtils.EMPTY;
    }
}
```
### 分布式锁使用
* 服务实现代码参考:
``` ja va
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.aliexpress.qa.task.infrastructure.util.lock.DistributedLockUtil;
@Service
public class ${服务名}ServiceImpl implements ${服务名}Service {
    private static final Logger logger = LoggerFactory.getLogger(${服务名}ServiceImpl.class);
    @Autowired
    private ${服务校验器}Validate validate;
    @Autowired
    private DistributedLockUtil distributedLockUtil;
    // 如果需要调用其他bean也可以在此处引入
    // 如:
    // @Autowired
    // private EvalDatasetDetailRepository evalDatasetDetailRepository;
    @Override
    public ${服务方法出参} ${服务方法名}(${服务方法请求体} request) {
        logger.info("${服务名}Service.${服务方法名} request:{}", JSON.toJSONString(request));
        ${服务方法出参} response = new ${服务方法出参}();
        try {
            String validateMsg = validate.${服务方法校验器}Validate(request);
            if (StringUtils.isNotBlank(validateMsg)) {
                return Response.fail(ErrorCode.PARAM_ERROR.name(), validateMsg);
            }
            // 根据业务逻辑要求构建lockKey
            String lockKey = ...;
            // 分布式锁,避免并发调度
            DistributedLock lock = distributedLockUtil.getLock(lockKey);
            // 获取分布式锁
            try {
                lock.tryLock(1000L);
            } catch (GetLockErrorException lockException) {
                return Response.fail(ErrorCode.LOCK_ERROR.name(), ErrorCode.LOCK_ERROR.getMessage());
            }
            try {
                // 在此处实现业务逻辑
                ${业务逻辑}
             } finally {
                lock.unlock();
            }
        } catch (Exception e) {
            logger.error("${服务名}Service.${服务方法名} error", e);
            response = Response.fail(ErrorCode.SYSTEM_ERROR.name(), e.getMessage());
        }
        logger.info("${服务名}Service.${服务方法名} response:{}", response);
        return response;
    }
}
```
单元测试规范
---
description: 
globs: 
alwaysApply: false
---
# 单元测试指南

## 测试框架
- JUnit Jupiter 5.9.2
- Mockito 4.11.0
- JUnit Platform 1.9.2

## 严格执行
- 禁止改变被测试方法的任何行为
- private方法测试: 使用反射的方式测试private方法,禁止改变被测试方法的private
  ```ja va
  @BeforeEach
  void setUp() throws NoSuchMethodException {
      // 获取私有方法
      Method privateMethod = TargetClass.class.getDeclaredMethod("privateMethodName", 
          ParameterType1.class, ParameterType2.class);
      privateMethod.setAccessible(true);
  }

  @Test
  void privateMethodName_Should_ExpectedBeha vior_When_StateUnderTest() throws Exception {
      // given
      // when
      Object result = privateMethod.invoke(targetObject, arg1, arg2);
      // then
      // assertions
  }
  ```
- 静态方法Mock: 使用MockedStatic方式
- static final字段处理: 避免直接测试或mock static final字段(如日志记录器),专注于测试核心业务逻辑和返回值
- Mybatis-Plus初始化实体类元数据: mock Mybatis-Plus的```LambdaUpdateWrapper、LambdaQueryWrapper```时,在```@BeforeEach```中使用```TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""),${实体类名}PO.class);```初始化实体类元数据

## 测试命名规范
- 使用 `@Test` 注解标记测试方法
- 测试方法名应该清晰表达测试目的,并且测试方法名必须包含被测试的方法名
- 格式:`${被测试方法名}_Should_ExpectedBeha vior_When_StateUnderTest`
- 示例:`buildQuery_Should_ReturnQueryWithEntrustBizId_When_UserHasEntrustPermission`

## 测试最佳实践
### Mock策略
- 优先测试核心业务逻辑,避免过度依赖基础设施组件的验证
- 对于不可变的静态组件(如static final字段),采用行为验证而非状态验证
- 当无法直接mock某个组件时,考虑通过测试输出结果来间接验证行为
- Mock对象使用: 只能对`mock()`创建的对象使用`when()`进行stub,禁止对真实对象(如通过builder模式创建的对象)使用`when()`
### 测试重点
- 专注于方法的返回值、异常抛出、状态变更等核心行为
- 避免测试框架细节、日志输出等非核心功能
- 保持测试的简洁性和可维护性
模块功能文档规范
---
description: 
globs: 
alwaysApply: false
---
## 生成记忆
- 创建记忆文件夹:记忆文件统一存放在 [.cursor/memory](mdc:.cursor/memory) ,如果我提供了指定了文件目录则按照我提供的文件夹存放,如果我没提供则根据需要梳理的链路自动起名创建文件夹
- 创建记忆文件:如果我提供了名字,则按照我提供的名字创建,如果我没有提供,则根据需要梳理的链路自动创建文件,以`.md`格式的文件维护记忆。
- 记忆文件内容要求:必须包含一个完整的链路图,并且将必要的代码入口、核心的代码逻辑放在记忆文档中。
技术方案文档规范
---
description: 
globs: 
alwaysApply: false
---
## 生成开发任务
- 创建任务文件夹:当我要求你创建一个开发任务时,你需要根据`当前分支`的名称在 [.cursor/task](mdc:.cursor/task) 文件中查找是否有对应任务的文件,如果没有则创建一个任务文件夹
- 创建任务文件:在以`当前分支`命名的文件夹中,创建当前任务的详细描述文件,以`.md`的文件格式生成文档内容,文件名根据我的要求自动生成一个中文名

## 文档内容规范
- 文档结构:保持简洁,专注技术方案。在没有明确要求时不包含开发计划、风险控制、上线计划等管理内容
- 测试要求:单元测试要求,覆盖率达到80%以上
- 尽量简洁:在满足要求的情况下尽量简洁,如果有需要补充的内容,我会明确的向你表达

## 代码设计规范
- 枚举使用:新增字符串类型字段时优先考虑枚举定义,避免硬编码
- 历史兼容:新增字段时考虑历史数据兼容性,提供默认值处理

2.3. 代码生成与测试

平衡效率和质量:核心是控制单个任务不要过大,当前过大的任务质量和验证过程都会失控。

关键操作指引

  • 拆解子任务分步执行:与AI共同完成技术方案后,可要求其将技术方案拆分为多个子任务,然后分步执行、验证、调整。

  • 让AI按照技术方案写测试代码:确保核心场景的单元测试都能覆盖,避免我们成为AI的填坑奴隶。更进一步可让AI生成集成测试、端到端测试(尝试中)。

  • AI自Review代码:根据技术方案生成代码后,可要求AI根据技术方案检查当前代码变更,是否有错漏之处。

对AI的约束

注意: 模型为了获得奖励,有时会作弊式地假装满足用户要求。

  • 作弊问题:当AI反复多次无法完成任务时,可能出现作弊现象,比如硬编码绕开测试、模型直接给出结果等。可以在规则中明确禁止,禁止绕开需求直接生成结果,若无法完成应明确表示。

  • 超额输出问题:无论是技术方案还是代码,都存在超额输出的问题,AI可能输出一些不着边际的方案或代码。可将此问题尽量在技术方案阶段限制住:生成技术方案时要求尽量简洁、专注技术方案,不必生成工期等内容;生成代码时要求严格按照技术方案进行。

多任务并行开发

Cursor本身支持多任务并行开发的能力:

  • Cursor多子任务:将技术方案分成多个子任务后,可在Cursor IDE中同一项目开启多个子任务并行开发,每个子任务分别验证。
  • Cursor Background Agent:异步编程Agent,在云端环境启动虚拟环境执行开发任务,但需要上传代码到Cursor的云端环境。在团队版的Cursor中强制开启因素模式,无法使用Background Agent。

开发过程持续更新记忆

如前所述,记忆是逐步完善而非一蹴而就的,需要在过程中持续精进。

  • 记忆与代码不匹配:无论哪层记忆,若开发过程中发现缺少或不恰当之处,可直接要求AI根据特定代码修正记忆文档。
  • 经验总结回写记忆:若在开发过程中发现某些规范或场景在规则中未考虑到,可在完成一个子任务后,要求AI总结经验,并以简洁方式回写到对应记忆文档中。
2.3.1. 对AI的约束示例

AI作弊的CASE: 在一个JSON转HTML的任务中,Cursor在多轮循环无法解决问题之后,直接生成了一个HTML的结果文件给我,绕开了使用代码生成HTML的要求。

严格按照要求执行示例
- 禁止作弊:对于生产代码和测试代码的生成,需要完全遵循框架和需求的要求,**禁止通过硬编码的方式直接生成结果或绕开测试等行为**。
- 严格按照要求写代码:如果我提供了开发任务的.md文档,请严格按照文档要求生成代码,不要擅自发挥。
- 保持简洁:专注按照我的需求生成技术方案。在没有明确要求时不包含开发计划、风险控制、上线计划等冗余内容

2.4. 工程师的基础能力

  • 对模型能力的动态认知:清晰认知当前AI的能力特征与极限,并随着模型能力提升,快速形成对新模型的新认知,调整自身行为模式,以获得更高效率与质量。
  • 管理多个AI编程工具:通过上下文工程、AI并行开发协作方法,驱动多个AI编程工具,放大技术杠杆效果。例如Cursor多子任务、Cursor Background Agent、Claude Code多子Agent实例等并行开发手段。
  • 软件架构设计能力:AI已能很好地处理细节,但在企业级复杂系统中,AI当下依然扮演执行角色。我们需要作为软件系统的主导者、控制者、设计者,确保系统在预期内演进。自身处理细节的能力依然重要。
  • 业务理解与表达:当AI已能处理大量技术细节时,深入的产品业务理解能力与清晰的表达能力,成为新的编程技巧。

常见问题解答

问:如果AI生成的测试代码质量很差,甚至伪造测试结果怎么办?

答: 这是常见的“AI作弊”现象。首先,在规则中明确禁止硬编码和伪造结果。其次,拆解任务,确保每个子任务小到可控,让AI先写测试代码再写实现代码。最后,利用AI自Review环节,要求AI根据技术方案检查代码变更是否匹配。

---

三、真实的使用案例

3.1. 初始记忆维护

步骤使用示例

Cursor规则描述

在此处描述规则内容

Cursor自动生成应用基础记忆

输入指令:/Generate Cursor Rules

要求生成特定的规则

在此处描述特定规则

基于应用基础记忆,结合代码入口生成功能模块记忆文档

在此处描述生成过程

3.2. 技术方案生成

步骤使用示例

基于功能模块记忆生成迭代技术方案

在此处描述技术方案生成过程

3.3. 代码开发与测试

步骤使用示例

执行开发任务

在此处描述开发任务的执行

执行开发任务(第二次)

在此处描述开发任务的执行

复杂任务拆解

输入指令:

将这个方案拆分为多个子任务,并且细化到可供Cursor执行的程度。

任务过程中反思

在此处描述反思过程

同项目并行开发

在此处描述并行开发

Playwright MCP 端到端测试

基础处于不可用状态,执行了5~10分钟,无法处理日期组件等复杂组件。

---

四、AI编程领域的最新趋势

4.1. 编程工具对比

Cursor依然是当下实用性与性价比都较高的编程工具,但Claude Code凭借高任务完成度及其形态的高可玩性,正在快速蚕食Cursor的用户市场。以Devin为代表的端到端异步Agent,由于任务完成度较低,已逐渐失去用户信任,处于黑暗中挣扎的阶段。(此处仅对比当下有代表性的两款热门工具)

近期Cursor订阅模式的改变(Pro不限量)也可侧面感受到来自Claude Code的竞争压力。从能力层面看,Claude Code目前更强一些,但Cursor放开Pro订阅的使用限制,是在成本和用量上拉开优势进行错位竞争,先留住用户,再追赶能力。(个人理解)

4.2. Claude Code使用体验

  • 特点: 原生任务规划能力 + Claude 4任务完成度比Cursor更高,但费用也更高。
  • 费用: 费用高主要体现在20$每月的订阅版本无法作为主力开发,其额度5小时刷新一次,但1个额度周期只够开发1小时(真实使用),达到额度后需等待下一个5小时周期。解决额度问题需升级到每月100$/200$的MAX版本,或使用API访问。不过API费用更加高昂,使用Claude 4 Sonnet 1个任务需花费2$(Opus 5倍价格)。
  • 并行开发: Claude Code原生集成Agent功能,在任务分解后可让其自行启动多个子Agent并行开发,由Claude Code统一管理。
  • 解决复杂问题: 在一个真实需求中,需将格式不固定的JSON转成HTML,Cursor使用了100次额度、2-3小时、尝试3个方案依然无法满足要求。Claude Code沟通3-4次即完成了可运行的MVP,10次左右达到预期效果。
  • 无监督运行时长: Claude Code跳过权限提示后(--dangerously-skip-permissions),在无额度限制的情况下连续运行时间远超Cursor,社区有连续运行数小时的例子(Cursor的连续工作最大限制为25个tools)。
  • 无监督自主开发的Agent是否具备条件: 即使强如Claude Code,虽然持续执行时间更长,但依然很难做到长期无监督运行。核心问题在于前期输入信息的完备性与后期代码验收仍是巨大挑战,执行任务复杂度越高、无监督时间越长,结果越容易失控。
使用场景使用示例

安装和启动

# 安装(需要NPM)
npm install -g @anthropic-ai/claude-code
# 进入项目目录
cd ~/your-project
# 启动
claude

启动视图

使用了claude-code-router介入openrouter api的界面,订阅用户稍有区别

运行模式

在此处描述运行模式

创建技术方案

在此处描述创建过程

拆解子任务

在此处描述拆解过程

并行开发

在此处描述并行开发

达到限额

在此处描述限额情况

Claude Code工具集

在此处描述工具集

Claude Code解决真实问题

在此处描述解决过程

---

总结展望: 通过本教程的学习,您已经掌握了如何系统性构建“完整+精确+聚焦”的上下文,并学会了三层记忆结构的设计与渐进式维护方法。无论是使用Cursor还是Claude Code,核心逻辑都是相通的:通过良好的上下文工程,让AI成为您高效、可靠的协作伙伴。随着模型能力的不断提升,这些方法论的价值将愈发凸显。

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:AI编程上下文陷阱:错误原因与系统性解决要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://www.53ai.com/news/LargeLanguageModel/2025072327510.html
ai 人工智能

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-19 22:31
帝奥微电子发布1pA超低偏置电流运算放大器新品

帝奥微电子推出DIO20182双通道运算放大器,输入偏置电流低至1pA,静态电流每通道仅300nA,支持1 4V至5 5V宽电压范围,适用于智能手表等便携设备中微弱光电流信号放大,实现血氧饱和度精准检测。

AI热点2026-07-19 22:31
焦虑的企服人抱团治疗内耗实用经验

在企服行业对SaaS的争议中,79%从业者依然看好市场前景。成本压力主要来自拓客、履约和回款,这导致了“二分苦八分甜”的格局。为了缓解焦虑,需要采取具体行动,通过云化与协同生态来重塑商业模式,从而减少内耗,实现更健康的增长。

AI热点2026-07-19 22:30
Coze开源后我用LLM与OCR打造文档智能问答Agent

基于Coze平台,结合TextIn专有模型的OCR解析能力与DeepSeek大语言模型的语义理解,构建了零代码文档智能问答Agent。该方案可高效处理合同审核、技术支持等场景,通过工作流实现文档上传、结构解析与精准问答,提升信息检索效率。

AI热点2026-07-19 22:30
字节开源扣子助力企业数字化转型新机遇

字节开源AI开发平台扣子,具备低门槛、多模态交互和字节生态融合优势,支持私有化部署与深度定制,助力企业降本增效、保障数据安全,成为数字化转型新引擎。

延伸阅读