# ai-tools **Repository Path**: iktaogitee/ai-tools ## Basic Information - **Project Name**: ai-tools - **Description**: ai-tools - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-15 - **Last Updated**: 2025-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI辅助编程工具使用指南 ## 1. 前端 ### 1.1 设计稿转静态页面 #### 1.1.1 移动端H5、小程序类型 - 使用 [https://code.fun/](https://code.fun/) - 操作步骤: 1. 设计师上传axure文件至该平台 2. 使用codefun自动生成静态页面代码 3. 根据需要进行代码调整和优化 #### 1.1.2 APP类应用 - 使用 [https://www.imgcook.com/](https://www.imgcook.com/) - 操作步骤: 1. 直接上传应用截图 2. 平台自动生成flutter布局代码 3. 下载并集成到项目中 #### 1.1.3 PC端页面 - 使用Excel宏将表格数据转为JSON格式,再用AI生成页面 - 操作步骤: 1. 在Excel中使用以下宏将表格数据转为JSON: ```vba Function BuildRow(rng As Range, rowNum As Long) As String Dim json As String: json = "{" Dim colNum As Long Dim fieldCount As Long: fieldCount = 1 For colNum = 1 To rng.Columns.Count Dim cell As Range Set cell = rng.Cells(rowNum, colNum) ' 强制生成所有字段(包括空值) json = json & """col" & fieldCount & """:" If Not IsEmpty(cell) Then If IsNumeric(cell.Value) Then json = json & cell.Value Else json = json & """" & Replace(cell.Value, """", "\""") & """" End If Else json = json & "null" ' 空值处理 End If If colNum < rng.Columns.Count Then json = json & "," End If fieldCount = fieldCount + 1 Next BuildRow = json & "}" End Function Sub GenerateFlatJSON() Dim selectedRange As Range Set selectedRange = Selection Dim json As String: json = "[" Dim rowNum As Long For rowNum = 1 To selectedRange.Rows.Count json = json & BuildRow(selectedRange, rowNum) & "," Next ' 清理末尾逗号 If Right(json, 1) = "," Then json = Left(json, Len(json) - 1) json = json & "]" ' 输出到新工作表 Dim ws As Worksheet Set ws = Sheets.Add ws.Range("A1").Value = json ws.Columns("A").ColumnWidth = 100 ws.Columns("A").WrapText = True End Sub ``` 2. 将生成的JSON数据提供给AI,要求其根据模板页面样式生成代码 3. 根据Excel表头结构,AI会生成对应的页面布局和数据绑定 ### 1.2 功能实现 #### 1.2.1 代码编写:使用Cursor的Agent模式 参照[3. Cursor相关](#3-cursor相关)中的使用说明,使用Cursor的Agent模式可以极大提升代码编写效率。以下是一个实际应用案例: ##### AI交互示例:实现高端消费力甄别阶段控制表页面 下面是一个实际AI交互示例,展示如何通过提供"[PG020102:【高端消费力甄别阶段】调研过程阶段记录及控制表](#pg020102高端消费力甄别阶段调研过程阶段记录及控制表)"文档,让AI参考模板页面样式实现新页面。 **用户提问示例:** ``` 我需要实现一个"高端消费力甄别阶段调研过程阶段记录及控制表"页面,以下是详细的需求文档和接口说明。请参考我们项目中已有的表格组件和样式,实现这个页面。 [这里粘贴PG020102文档内容,具体内容详见附录] 我希望你能: 1. 先生成页面的整体流程图 2. 根据接口文档设计数据模型 3. 实现页面布局和表格 4. 处理接口交互逻辑 5. 添加必要的错误处理 ``` **AI回复与实现过程:** 1. **流程分析与图表生成** 首先,AI会分析文档并生成流程图: ```mermaid graph TD A[页面加载] --> B[调用高端消费力甄别阶段控制接口] B --> C{接口返回成功?} C -->|是| D[解析数据] C -->|否| E[显示错误信息] D --> F[渲染表格] F --> G[表格数据展示] subgraph 数据处理流程 D --> D1[处理用户基本信息] D --> D2[处理产品列表信息] D --> D3[计算消费力甄别结论] end ``` 2. **数据模型设计** AI会根据接口文档设计合适的数据模型: ```typescript // 数据模型设计示例 interface PurchasingPowerControlItem { fdId: number; status: number; remark: string; isDelete: number; creator: string; createTime: string; modifiedBy: string; modifiedByTime: string; cityId: number; gender: number; // 0-女性;1-男性 maritalStatus: number; // 0-未婚;1-已婚 questionNumber: string; ageRangeId: number; screenshotUploadCount: number; submitStatus: number; // 0-未提交;1-成功;2-失败;3-结束 phoneNumber: number; infoControlConclusion: number; // 0-不控制,1-控制 productList: Answer[]; } interface Answer { fdId: number; status: number; remark: string; isDelete: number; creator: string; createTime: string; modifiedBy: string; modifiedByTime: string; questionId: number; questionNumber: string; brandId?: number; seriesId?: string; userId: string; brandPositioning?: number; // 1-高端;2-高端,非高端;3-非高端 seriesPositioning?: number; // 1-高端;3-非高端 } ``` 3. **实现代码片段** 接下来,AI会提供实现代码,包括: - 页面布局组件 - 数据获取逻辑 - 表格渲染 - 交互处理 4. **测试与优化** AI会提供单元测试代码和边界条件处理建议,确保页面在各种情况下都能正常工作。 #### 1.2.2 前端开发通用 Rules for AI 在与AI交互时,建议始终提供以下角色定位和规则,以获得最佳的开发体验: ``` 你是一个资深全栈工程师与软件架构师,精通js、python、dart、java等主流开发语言,具有以下专长: 1. 前端架构设计与工程化 2. 组件库开发与维护 3. 性能优化与用户体验 4. 跨端开发(Web/Mobile/Desktop) 5. 微前端架构 6. 前端自动化测试 7. CI/CD流程优化 8. 前端安全最佳实践 9. 大规模应用状态管理 10. 前端监控与日志系统 请遵循以下规则进行前端开发: 1. 总是用中文回答; 2. 根据用户提供的md文档以及初始模板,进行整个项目的开发; 3. 以测试驱动的方式进行开发,需要考虑各种边界条件,mock数据进行测试; 4. 代码编写前,先生成该功能的流程图,确认流程图无误后再进行代码的实现; 5. 应该按照设计规范文档,进行UI设计,除非用户主动提出,不要使用任何规范之外的配色和设计; 6. 每一轮对话结束前,将项目进度写入readme.md文档,便于下次开启新对话时agent知道如何继续项目的开发,每次开启新对话时,应该读取readme.md文档了解项目开发进度; 7. 每个文件代码不应该超过500行,注释要明确,方便人类和ai进行阅读; 8. 项目使用的依赖需要依照基础项目的配置文件,如package.json文件,以及用户提供的项目文档,如需求其他依赖,应当询问用户; 9. 每一轮对话完成前,应当启动项目,如果不能启动,则解决所有报错,直到能启动为止; 10. 使用browser-tools这个mcp sever获取浏览器的控制台日志,并解决所有错误日志; 11. 遵循组件化开发原则,将UI拆分为可复用的组件,每个组件应有单一职责; 12. 使用语义化命名,变量和函数名应清晰表达其用途,避免使用模糊的命名如temp、data等; 13. CSS应采用模块化方案(如CSS Modules、Styled Components),避免全局样式污染; 14. 状态管理遵循单向数据流原则,明确状态来源和变更逻辑; 15. 所有用户输入必须进行验证和消毒,防止XSS和注入攻击; 16. 实现响应式设计,确保页面在不同设备和屏幕尺寸下正常显示; 17. 优化首屏加载性能,实现懒加载、代码分割等优化手段; 18. 使用虚拟列表或分页处理大量数据展示,避免一次性渲染过多DOM元素; 19. 添加适当的加载状态和错误处理,提升用户体验; 20. 所有API调用应集中管理,实现请求拦截和统一错误处理; 21. 针对关键交互和视图进行单元测试和集成测试,确保功能稳定性; 22. 对于复杂的表单,实现分步骤填写或使用表单库管理状态和验证; 23. 针对国际化需求,使用i18n解决方案,避免硬编码文本; 24. 添加适当的注释和文档,特别是对于复杂的业务逻辑或特殊的实现方式; 25. 使用ESLint、Prettier等工具保持代码风格一致,并在提交前进行代码格式化。 ``` #### 1.2.3 调试:使用BrowserTools MCP Server [点击查看BrowserTools的详细安装和配置步骤](#331-browsertools) BrowserTools可以将AI代码编辑器和代理直接嵌入到您的Web浏览器中,提供高效的调试和更流畅的开发体验。 ##### 使用BrowserTools进行调试 通过BrowserTools,AI可以访问: - 控制台日志和错误 - XHR网络请求/响应 - 截图功能 - 当前选择的DOM元素 您可以简单地告诉Cursor或任何带有MCP集成的AI代码编辑器: - "你能检查控制台和网络日志,看看哪里出了问题吗?" - "UI看起来有些不对劲,你能截个图吗?" - "你能编辑当前选中的元素来执行x, y和z操作吗?" ##### 常见问题解决 如果遇到问题,请参考[BrowserTools安装指南](#331-browsertools)中的常见问题解决部分。 ### 1.3 总结 本部分提供了前端AI辅助编程的全面指南,从设计稿转代码到功能实现和调试,涵盖了主流工具和最佳实践。通过合理使用这些AI工具,开发团队可以显著提高开发效率、减少重复工作,并确保代码质量。 建议根据项目特性选择合适的工具组合,并持续关注AI编程工具的更新,以获取最新功能和改进。 ## 2. 后端 ### 2.1 JAVA后端 #### 2.1.1 Cursor开发SpringBoot环境配置 ##### 基础配置 1. **settings.json配置**: 按快捷键`Ctrl+Shift+P`,输入`settings.json`,添加或修改以下配置: ```json { "maven.executable.path": "D:\\Program Files\\apache-maven-3.2.5\\bin\\mvn.bat", "java.configuration.maven.userSettings": "D:\\Program Files\\apache-maven-3.2.5\\conf\\settings.xml", "maven.terminal.useJavaHome": true, "java.jdt.ls.java.home": "D:\\java\\jdk1.8.0_111", "java.configuration.runtimes": [ { "name": "JavaSE-1.8", "path": "D:\\java\\jdk1.8.0_111" } ], "java.import.gradle.java.home": "D:\\java\\jdk1.8.0_111" } ``` 配置说明: - `maven.executable.path`:Maven可执行文件的路径,用于运行Maven命令 - `java.configuration.maven.userSettings`:Maven用户配置文件的路径 - `maven.terminal.useJavaHome`:使用Java_HOME环境变量 - `java.jdt.ls.java.home`:Java语言服务器使用的JDK路径 - `java.configuration.runtimes`:配置可用的Java运行时环境 - `java.import.gradle.java.home`:Gradle构建使用的JDK路径 2. **安装必要插件**: 在Cursor扩展市场搜索并安装以下插件: - **Java Extension Pack** - 包含Language Support(语法高亮/补全) - Debugger(断点调试) - Maven for Java(依赖管理) - **Spring Boot Extension Pack** - 集成Spring Initializr(项目生成) - Boot Dashboard(服务管理) - Properties支持(配置提示)等框架级功能 - **Language Support for Java(TM) by Red Hat** - 提供全面的Java语言支持 - **Spring Initializr Java Support** - 可视化创建Spring Boot项目 - **YAML** - 为application.yml提供智能提示,需关联Spring Boot元数据 - **Lombok Annotations Support** - 自动生成Getter/Setter等样板代码 - **Dependency Analytics** - 依赖漏洞扫描,提高项目安全性 - **MybatisX** - MyBatis增强插件,提供以下功能: - 快速在Mapper接口和XML文件间跳转 - XML中的SQL自动补全和语法检查 - 自动生成Mapper接口方法的XML映射 - 数据库表到Java实体类的代码生成 - Param注解引用的智能提示 ##### 启动项目及调试 1. **Maven依赖安装**: - 在项目根目录打开终端,运行以下命令安装依赖: ```bash mvn clean install -DskipTests ``` - 如果需要跳过单元测试并强制更新依赖: ```bash mvn clean install -U -DskipTests ``` - **Cursor中的可视化Maven依赖管理**: Cursor提供了多种可视化管理Maven依赖的方法: a. **使用Maven扩展面板**: - 点击左侧活动栏中的"Maven"图标打开Maven面板 - 展开项目可以看到项目依赖、生命周期、插件等 - 右键点击"Dependencies"节点,选择"Add Dependency"添加新依赖 - 在弹出的搜索框中输入依赖名称,可以从Maven中央仓库搜索并选择版本 b. **通过POM文件编辑器**: - 打开项目的`pom.xml`文件 - Cursor会提供XML智能提示和自动补全 - 在``标签内开始输入``,编辑器会提供智能补全 - 输入依赖的groupId时,编辑器会自动提示可用的选项 c. **使用依赖分析器**: - 安装"Dependency Analytics"插件后 - 右键点击`pom.xml`文件,选择"Show Dependencies" - 可以查看依赖关系图,识别冲突和过时的依赖 - 使用"添加依赖"按钮可以搜索并添加流行的依赖项 d. **通过命令面板快速操作**: - 按下`Ctrl+Shift+P`打开命令面板 - 输入"Maven"查看所有Maven相关命令 - 选择"Maven: Add a Dependency"可以搜索和添加依赖 - 选择"Maven: Execute Commands..."可以执行Maven生命周期命令 e. **依赖版本更新检查**: - 右键点击`pom.xml`文件 - 选择"Maven > Check for Updates" - Cursor会检查并列出可更新的依赖,允许选择性更新 2. **配置launch.json文件**: 在项目的`.vscode`目录下创建或编辑`launch.json`文件: ```json { "version": "0.2.0", "configurations": [ { "type": "java", "name": "Current File", "request": "launch", "mainClass": "${file}" }, { "type": "java", "name": "YourApplicationName", "request": "launch", "mainClass": "com.example.demo.YourApplication", "console": "internalConsole", "projectName": "your-project-name" } ] } ``` 示例配置(根据实际项目修改): ```json { "version": "0.2.0", "configurations": [ { "type": "java", "name": "Current File", "request": "launch", "mainClass": "${file}" }, { "type": "java", "name": "CodeGenerator", "request": "launch", "mainClass": "com.hwagain.yuyue.questionnaire.CodeGenerator", "projectName": "hwagain-yuyue-questionnaire-biz" }, { "type": "java", "name": "HwagainYuyueQuestionnaireApplication", "request": "launch", "mainClass": "com.hwagain.yuyue.questionnaire.HwagainYuyueQuestionnaireApplication", "console": "internalConsole", "projectName": "hwagain-yuyue-questionnaire-biz" } ] } ``` 3. **启动和调试项目**: - **方法一**:通过Run/Debug按钮 1. 在主应用类(包含`main`方法的类)文件上右键 2. 选择"Run Java"或"Debug Java" - **方法二**:通过Debug面板 1. 切换到Debug视图(侧边栏Debug图标) 2. 在下拉菜单中选择配置好的启动项(如"HwagainYuyueQuestionnaireApplication") 3. 点击绿色的启动按钮或按F5开始调试 - **方法三**:通过命令行启动 ```bash mvn spring-boot:run ``` 4. **断点调试技巧**: - 在代码行号前单击设置断点 - 使用Debug模式启动应用 - 使用Debug工具栏的控制按钮(继续、单步执行、单步跳过等) - 在"变量"面板中监视变量的值变化 - 使用"调用堆栈"面板分析程序执行路径 5. **常见问题解决**: - 如遇到端口被占用,可在`application.properties`或`application.yml`中修改服务器端口: ```properties server.port=8081 ``` - 如果项目无法识别,可以尝试刷新Maven项目: 右键点击`pom.xml`文件,选择"Maven -> Reload project" - Java语言服务器无响应时,可以重启Java语言服务器: 按`Ctrl+Shift+P`,输入并选择"Java: Restart Java Language Server" #### 2.1.2 JAVA开发通用 Rules for AI 使用AI进行Java开发时,建议提供以下角色定位和规则,帮助提高开发效率和代码质量: ``` 你是一个资深Java架构师与全栈开发专家,具有以下专长: 1. Spring Cloud微服务架构设计 2. DDD领域驱动设计实践 3. 分布式系统设计与实现 4. 高并发与高可用架构 5. 数据库设计与优化 6. 缓存架构与性能调优 7. 消息队列与异步处理 8. 安全架构与认证授权 9. DevOps与自动化部署 10. 系统监控与故障排查 请遵循以下规则进行后端Java开发: 1. 总是用中文回答; 2. 根据用户提供的md文档以及初始模板,进行整个项目的开发; 3. 以测试驱动的方式进行开发,需要考虑各种边界条件,mock数据进行测试; 4. 代码编写前,先生成该功能的流程图,确认流程图无误后再进行代码的实现; 5. 根据数据库文档,创建本地测试数据库,密码为【123456】; 6. 每一轮对话结束前,将项目进度写入readme.md文档,便于下次开启新对话时agent知道如何继续项目的开发,每次开启新对话时,应该读取readme.md文档了解项目开发进度; 7. 每个文件代码不应该超过500行,注释要明确,方便人类和ai进行阅读; 8. 项目使用的依赖需要依照基础项目的pom文件,以及用户提供的项目文档,如需求其他依赖,应当询问用户; 9. 每一轮对话完成前,应当启动项目,如果不能启动,则解决所有报错,直到能启动为止; 10. 编写代码时实现合理的分层架构,严格遵循MVC、DDD或其他指定的架构模式; 11. 所有数据库操作必须在service层添加事务控制; 12. 关键业务功能必须进行单元测试,测试覆盖率不低于80%; 13. 数据校验应当在Controller层使用javax.validation注解进行,不要在Service层重复验证; 14. 遵循RESTful API设计规范,包括合适的HTTP方法、状态码和统一的响应结构; 15. 使用统一异常处理机制,所有自定义异常继承自同一基类,配合全局异常处理器返回一致的错误格式; 16. 敏感信息(如密码、令牌)不应明文存储,使用合适的加密算法; 17. 代码生成器生成的代码应当只用于基础CRUD操作,核心业务逻辑需手动实现; 18. 遵循Java命名规范:类名使用PascalCase,方法和变量使用camelCase,常量使用SNAKE_CASE; 19. 对于大型查询,优先使用分页查询并添加合适的索引; 20. 日志记录应当分级别(INFO、WARN、ERROR等)使用,避免过度日志和敏感信息泄露。 ``` #### 2.1.3 开发案例 对于写代码来说,背景就是「整个代码库」,问题就是指令,比如「为xx接口,新增一个xx字段的查询条件」 Cursor的强大在于它可以很好的理解代码库,当你在 在 Composer 里面 @Codebase 它就理解了整个代码库。既如此那么在使用Cursor只剩下一个问题了:「描述问题,下达指令」 ##### 2.1.3.1 案例一 产品需求:为某个列表新增两个时间查询 需求分析:需要被查询的2个字段,字段A数据库是时间,字段B数据库是日期,前端产品要求传递日期范围 那么就要在Controller的Query里面新增4个日期的接受字段,传递到Service的时候字段A相关的要转成时间,同时在XML里面加上对应的查询 3. 对话 1. @Codebase @DmsPatientPackageController.java 需要对 findPatientPackageWithPage 新增 created 和 expiryDate的范围查询, created前端传递的是日期格式,数据库是时间格式,需要在 @DmsPatientPackageViewServiceImpl.java 进行转换, 2. @Codebase 1、我习惯让开始叫From,结束叫To, 2、日期转成时间的时候开始要是00:00:00,结束要是 23:59:59, 3、你需要帮我完善SQL对这几个字段的处理 @PatientPackageMapper.xml 3. @Codebase createdTo 改为 createdDateTo,createdFrom 改为 createdDateFrom, createdBeginTime 改为 createdFrom, createdEndTime 改为 createdTo,expiryBeginDate 改为 expiryDateFrom,expiryEndDate 改为 expiryDateTo 在第一次对话的时候,从Controller到Xml 的代码就写完了,后面的都是简单的调优了。 ##### 2.1.3.2 案例二 对话 @Codebase @OrderController.java 在订单里面加一个排行榜接口。在 @OrderViewServiceImpl.java 的实现中,先获取非【终止】,近一年的全部订单,再从订单里面找出前5名的菜单,返回的字段:选项id、选项名称、选择次数 @Codebase 在fm_item里面加了一个字段side_dish,格式是[{"sideDishId": 5, "quantity": 1}, {"sideDishId": 2, "quantity": 0.2}],sideDishId是@SideDish.java里面的id,帮我完成这个字段的添加,且在@Menu.java和@MenuVO.java里面返回一个字段,List sideDishs,里面是拼接好的结果,比如sideDishId=5的name是洗发水,结果就是洗发水1瓶。 核心逻辑就是对话,讲清楚你的需求,如果它生成的不对,再反馈给它改就好了。 ##### 2.1.3.3 案例三 对话 @Codebase 将XXX接口文档.md 生成的对象、mvc层文件作为上下文 根据`XXX接口文档.md`自动生成符合Spring MVC规范的四层架构代码: - 实体类(Model) - REST控制器(Controller) - 业务服务层(Service Interface & Impl) - 数据访问层(Mapper Interface & XML) - 根据HTTP方法自动选择注解: GET → @GetMapping POST → @PostMapping - 参数绑定自动化: 路径参数 → `@PathVariable` 查询参数 → `@RequestParam` JSON请求体 → `@RequestBody` #### 2.1.4 使用Cursor中的Agent调用内部公共服务 在使用Cursor进行Java开发时,可以高效地利用AI Agent来协助内部公共服务的调用。本节提供详细指南,帮助您正确提示Agent完成这一任务。 ##### 2.1.4.1 提示Agent的基本方法 ###### 初始化会话 在Cursor中启动新会话时,首先向Agent提供必要的上下文信息: 1. **项目概述**:简明扼要描述项目背景和目标 2. **技术栈**:列出项目使用的主要技术和框架 3. **内部服务清单**:提供需要调用的内部服务列表 示例提示: ``` 我正在开发一个电商平台的订单管理系统,使用Spring Boot + MyBatis Plus技术栈。 需要调用以下内部服务: 1. 用户服务(user-service) - 用于获取用户信息和权限验证 2. 商品服务(product-service) - 用于获取商品信息和库存 3. 支付服务(payment-service) - 用于处理支付和退款 这些服务都已在项目的application.yml中配置好了服务地址和认证信息。 请帮我实现订单创建功能,需要调用这些内部服务。 ``` ###### 提供服务接口文档 为了让Agent精确了解如何调用服务,提供详细的接口文档: ``` 用户服务接口: GET /api/users/{userId} 请求参数: userId(路径参数) 响应格式: { "id": 123, "username": "张三", "phone": "13800138000", "level": 2 } 商品服务接口: GET /api/products/{productId} 请求参数: productId(路径参数) 响应格式: { "id": 456, "name": "iPhone 15", "price": 6999.00, "stock": 100 } POST /api/products/deduct-stock 请求体: { "productId": 456, "quantity": 2 } 响应格式: { "success": true, "message": "库存扣减成功" } ``` ##### 2.1.4.2 引导Agent正确实现服务调用 ###### 步骤1: 查看项目配置 先让Agent查看项目中的配置文件,了解服务地址和认证信息: ``` 请查看 src/main/resources/application.yml 文件,了解各个内部服务的配置,包括地址和认证方式。 ``` Cursor会帮Agent读取相关文件,获取服务配置信息。 ###### 步骤2: 引导创建服务客户端 明确指示Agent创建必要的服务客户端类: ``` 请帮我创建用户服务的Feign客户端,包括: 1. 配置类UserServiceFeignConfig 2. 客户端接口UserServiceClient 3. Fallback处理类UserServiceFallback 客户端需要包含获取用户信息、验证用户权限的方法,并妥善处理异常情况。 ``` ###### 步骤3: 指导实现服务集成 给Agent提供服务集成的具体需求和预期结果: ``` 现在请实现OrderServiceImpl类,在创建订单时需要: 1. 调用用户服务验证用户是否存在 2. 调用商品服务检查商品库存 3. 如果用户和库存都验证通过,创建订单并调用商品服务扣减库存 4. 实现完整的事务管理和异常处理 请确保添加适当的日志记录,并在服务调用失败时提供有意义的错误信息。 ``` ##### 2.1.4.3 高级提示技巧 ###### 提供代码骨架 为了让Agent更准确地实现代码,可以提供基本的代码骨架: ``` 我已经创建了OrderServiceImpl类的基本结构,请帮我完善服务调用部分: @Service @RequiredArgsConstructor @Slf4j public class OrderServiceImpl implements OrderService { private final UserServiceClient userServiceClient; private final ProductServiceClient productServiceClient; private final OrderRepository orderRepository; @Override @Transactional(rollbackFor = Exception.class) public OrderDto createOrder(CreateOrderRequest request) { // TODO: 1. 调用用户服务验证用户 // TODO: 2. 调用商品服务检查库存 // TODO: 3. 创建订单 // TODO: 4. 调用商品服务扣减库存 return null; } } ``` ###### 增量引导 对于复杂的服务调用,采用增量引导策略,逐步完善实现: ``` 现在请先实现用户服务调用部分,包括: 1. 从userServiceClient获取用户信息 2. 验证用户状态是否正常 3. 添加适当的异常处理 ``` 待Agent完成后,继续下一步引导: ``` 用户服务调用看起来不错。现在请实现商品服务调用部分,包括: 1. 检查商品库存 2. 如果库存充足,调用扣减接口 3. 实现重试机制,处理可能的并发问题 ``` ##### 2.1.4.4 处理常见问题 ###### 2.1.4.4.1 服务调用异常 如果Agent生成的代码没有妥善处理服务调用异常,可以这样引导: ``` 我注意到服务调用部分缺少足够的异常处理。请改进代码,针对以下情况添加处理逻辑: 1. 用户服务不可用(连接超时) 2. 用户不存在 3. 商品库存不足 4. 商品服务幂等性冲突 每种异常应有明确的日志记录和对应的业务处理逻辑。 ``` ###### 2.1.4.4.2 配置外部化 如果Agent将服务地址硬编码在代码中,可以这样纠正: ``` 我看到服务地址被硬编码在了代码中,这不是最佳实践。请修改代码: 1. 将所有服务URL和参数移到application.yml配置文件中 2. 使用@Value或@ConfigurationProperties注入这些配置 3. 确保支持不同环境(dev/test/prod)的配置切换 ``` ##### 2.1.4.5 实际案例与最佳实践 ###### 完整的服务调用示例 下面是一个完整的服务调用实现示例,可以直接提供给Agent作为参考: ```java @Service @RequiredArgsConstructor @Slf4j public class OrderServiceImpl implements OrderService { private final UserServiceClient userServiceClient; private final ProductServiceClient productServiceClient; private final OrderRepository orderRepository; @Value("${service.retry.max-attempts:3}") private int maxRetryAttempts; @Override @Transactional(rollbackFor = Exception.class) public OrderDto createOrder(CreateOrderRequest request) { // 1. 调用用户服务验证用户 UserDto user = getUserWithCircuitBreaker(request.getUserId()); // 2. 调用商品服务检查库存 ProductDto product = getProductWithCircuitBreaker(request.getProductId()); if (product.getStock() < request.getQuantity()) { throw new InsufficientStockException("商品库存不足"); } // 3. 创建订单 Order order = new Order(); order.setUserId(user.getId()); order.setProductId(product.getId()); order.setProductName(product.getName()); order.setQuantity(request.getQuantity()); order.setTotalAmount(product.getPrice().multiply(new BigDecimal(request.getQuantity()))); order.setStatus(OrderStatus.CREATED); order.setCreateTime(LocalDateTime.now()); Order savedOrder = orderRepository.save(order); log.info("订单创建成功: {}", savedOrder.getId()); // 4. 调用商品服务扣减库存 deductStockWithRetry(request.getProductId(), request.getQuantity(), savedOrder.getId()); return OrderMapper.INSTANCE.toDto(savedOrder); } private UserDto getUserWithCircuitBreaker(Long userId) { CircuitBreaker circuitBreaker = circuitBreakerFactory.create("getUserById"); try { return circuitBreaker.run( () -> userServiceClient.getUserById(userId), throwable -> { log.error("调用用户服务失败", throwable); if (throwable instanceof FeignException.NotFound) { throw new UserNotFoundException("用户不存在: " + userId); } throw new ServiceCallException("用户服务调用失败", throwable); } ); } catch (Exception e) { log.error("获取用户信息失败: {}", userId, e); throw e; } } private ProductDto getProductWithCircuitBreaker(Long productId) { CircuitBreaker circuitBreaker = circuitBreakerFactory.create("getProductById"); try { return circuitBreaker.run( () -> productServiceClient.getProductById(productId), throwable -> { log.error("调用商品服务失败", throwable); if (throwable instanceof FeignException.NotFound) { throw new ProductNotFoundException("商品不存在: " + productId); } throw new ServiceCallException("商品服务调用失败", throwable); } ); } catch (Exception e) { log.error("获取商品信息失败: {}", productId, e); throw e; } } private void deductStockWithRetry(Long productId, Integer quantity, Long orderId) { Retry retry = Retry.of("deductStock", RetryConfig.custom() .maxAttempts(maxRetryAttempts) .waitDuration(Duration.ofMillis(500)) .retryOnResult(response -> response != null && !response.isSuccess()) .retryOnException(e -> !(e instanceof ProductNotFoundException)) .build()); try { DeductStockRequest request = new DeductStockRequest(); request.setProductId(productId); request.setQuantity(quantity); request.setOrderId(orderId); DeductStockResponse response = retry.executeCallable(() -> { log.info("尝试扣减商品[{}]库存,数量: {}, 订单: {}", productId, quantity, orderId); return productServiceClient.deductStock(request); }); if (!response.isSuccess()) { throw new StockDeductionException("库存扣减失败: " + response.getMessage()); } log.info("商品[{}]库存扣减成功,数量: {}, 订单: {}", productId, quantity, orderId); } catch (Exception e) { log.error("扣减库存失败", e); throw new StockDeductionException("库存扣减失败", e); } } } ```` ###### 提示模板 最后,提供一个通用的提示模板,用于引导Agent实现服务调用: 我需要在[项目名称]中实现[功能描述],需要调用以下内部服务: 1. [服务名称1]: [服务描述] - 接口: [接口路径] - 参数: [参数描述] - 返回: [返回值描述] 2. [服务名称2]: [服务描述] - 接口: [接口路径] - 参数: [参数描述] - 返回: [返回值描述] 服务配置位于[配置文件路径]。 请帮我实现以下内容: 1. 创建必要的Feign客户端接口 2. 实现服务调用逻辑,包括异常处理和重试机制 3. 添加适当的日志记录和监控指标 4. 确保事务一致性和错误恢复 具体业务逻辑是: [详细描述业务流程和规则] #### 2.1.5 IDEA与Cursor联动 许多开发者习惯于在IntelliJ IDEA中开发和调试Java后端项目,同时又希望利用Cursor强大的AI代码生成能力。通过合理的工具组合,可以在两个IDE之间实现无缝切换,既保留IDEA的强大调试和重构功能,又能享受Cursor的AI辅助编程能力。 ##### 2.1.5.1 Open in Cursor插件 Open in Cursor是一个IntelliJ IDEA插件,它允许您直接从IDEA中选择文件并在Cursor中打开它们。 ##### 使用方式 在 Cursor 中打开当前项目,并且在 3 秒以后打开当前的活跃文件。 入口在 菜单栏 -> 工具 -> Open In Cursor,设置在 设置 -> 工具 -> Open In Cursor。 ##### 2.1.5.2 最佳实践 1. **分工合作模式**: - 在IDEA中进行项目结构组织、复杂调试和性能分析 - 在Cursor中进行代码生成、重构建议和文档编写 2. **协同开发流程**: - 在IDEA中设计整体架构和框架 - 在Cursor中快速实现具体业务逻辑 - 回到IDEA进行单元测试和集成测试 3. **使用技巧**: - 对于复杂的业务逻辑,先在IDEA中设计接口和测试用例 - 使用Open in Cursor打开相关文件,让AI实现具体实现类 - 实现完成后回到IDEA运行测试验证 这种联动方式结合了两个工具的优势,既保留了IDEA强大的Java开发环境,又能充分利用Cursor的AI辅助能力,大大提高了开发效率。 ### 2.2 更多内容敬请期待... ## 3. Cursor相关 ### 3.1 Cursor竞品比较 目前市面上主要的AI编程助手包括:Trae、Roo Code、Windsurf、Copilot和通义灵码。以下是它们的优缺点分析: #### 1. Trae **优点:** - 可以免费使用Claude-3.7 Sonnet模型 - 无需信用卡即可使用 **缺点:** - 使用Claude-3.7 Sonnet需要排队等待 - 软件功能还不完善 - 用户界面体验较差 #### 2. Roo Code **优点:** - 基于开源项目Cline开发 - 支持自定义接入大模型API接口 - 扩展性好 **缺点:** - 部分接口存在兼容性问题 - 使用API进行开发成本较高 - 稳定性有待提高 #### 3. Windsurf **优点:** - 基本实现了Cursor的所有功能 - 更适合开发大型项目 - Pro版本费用比Cursor便宜 **缺点:** - 没有免费使用的方案 - Pro会员额度依然不够日常开发使用 - 社区支持相对较少 #### 4. Copilot **优点:** - Pro版本费用较为合理 - 与GitHub深度集成 - 代码建议准确度高 **缺点:** - Agent模式还不够完善 - Claude-3.7 Sonnet的每月使用额度尚未公布 - 对非GitHub项目的支持较弱 #### 5. 通义灵码 **优点:** - 可以与IntelliJ IDEA深度集成 - 本地化支持好 - 响应速度快 **缺点:** - 仅支持国内模型 - 没有Agent模式 - 代码生成质量相对较低 #### 6. Augment Code **优点:** - 基于Claude 3.7 Sonnet模型,代码理解和生成能力强 - 提供世界领先的代码库上下文引擎,能更准确理解大型代码库 - 可以与vscode和IDEA深度集成 **缺点:** - 目前仍处于早期阶段,功能不如其他成熟产品完善 - 价格相对较高 ### 3.2 Cursor 0.48版本免费使用方案 #### 3.2.1 使用linux.do的Cursor Pool(推荐) **为什么选择Cursor Pool?** - 无需修改本地设备标识,更加安全稳定 - 由社区维护的资源池,持续更新 - 可以稳定使用Claude-3.7 Sonnet模型,无需担心封号风险 - 简单的操作流程,一次配置长期有效 **具体步骤** **第一步:注册linux.do账号** 1. 访问[linux.do](https://linux.do/)网站 2. 完成注册并验证邮箱 3. 登录你的账号 **第二步:提升论坛等级** 1. 在论坛中积极参与讨论,回复至少5个有实质内容的帖子 - 简单的"谢谢"、"顶"等回复不会有效提升等级 - 确保回复内容与主题相关,有一定价值 2. 持续活跃直到账号等级达到1级(一般只需3-5个有价值的回复) 3. 在"个人资料"中确认自己的等级已达到1级 **第三步:访问Cursor Pool专用帖子** 1. 等级达到1级后,访问这个帖子:[https://linux.do/t/topic/519588](https://linux.do/t/topic/519588) 2. 仔细阅读帖子中的最新指南和使用说明 **第四步:配置并使用Cursor Pool** 1. 按照帖子中的指南配置Cursor客户端 2. 连接到社区提供的资源池 3. 无需更换账号,直接使用高级功能 **注意事项** - 请遵守社区规则和资源池使用限制 - 如遇使用问题,可在帖子中咨询或参考最新回复 - 资源池配置可能会定期更新,请关注原帖获取最新信息 ### 3.3 推荐的MCP Servers #### 3.3.1 BrowserTools BrowserTools是一个强大的浏览器调试工具,它可以让AI助手直接访问浏览器的控制台日志、网络请求、截图等功能。这对于前端开发和调试特别有用。 主要功能: - 控制台日志和错误监控 - 网络请求/响应分析 - 页面截图 - DOM元素选择和操作 - 性能分析 - SEO审计 - 可访问性检查 ##### 需求条件 - 本机已安装NodeJS - Google Chrome或Chromium内核的浏览器 - MCP客户端应用(如Cursor, Windsurf, RooCode, Cline, Continue, Zed, Claude Desktop) **注意**:Model Context Protocol (MCP)是Anthropic模型特有的。使用Cursor等编辑器时,确保启用Agent并选择Claude 3.7 Sonnet作为模型。 ##### 安装步骤 **步骤1:安装Chrome扩展** 官方Chrome扩展正在等待Google扩展市场的批准。目前,您可以通过以下方式安装: 1. 从GitHub克隆仓库: ```bash git clone https://github.com/AgentDeskAI/browser-tools-mcp.git ``` **步骤2:加载未打包的扩展** 1. 打开Chrome的"管理扩展程序"窗口 2. 启用"开发者模式" 3. 点击"加载已解压的扩展程序" 4. 导航到之前下载的chrome扩展文件夹(确保已解压)并点击"选择" 5. 完成后,您应该能在扩展列表中看到BrowserToolsMCP **步骤3:在Cursor中设置BrowserTools MCP工具** 1. 进入Cursor设置 2. 转到"功能"(Features),滚动到MCP Servers部分,点击"添加新MCP服务器"(Add new MCP server) 3. 给它一个唯一名称(如browser-tools),设置类型为"command",命令设置为: ``` cmd /c npx @agentdeskai/browser-tools-mcp ``` 4. 确认MCP服务器已连接。您应该看到所有工具都已列出,工具名称旁边有一个绿色圆圈。 **步骤4:运行BrowserTools服务器** 从终端在任意目录中运行以下命令,聚合Chrome扩展的日志并设置截图捕获的websockets: ```bash npx @agentdeskai/browser-tools-server ``` **注意**:browser-tools-server在端口3025上运行。确保终止在此端口上运行的任何进程。 **步骤5:打开Chrome开发者控制台** 右键点击任何网页,选择"检查"打开Chrome开发工具。打开后,日志将可供MCP客户端访问。 您可以导航到BrowserTools面板来: - 手动捕获截图 - 定义保存截图的路径(默认为:Downloads/mcp-screenshots) - 清除所有保存的日志 - 修改日志大小限制/截断 **注意**:每次刷新页面时,日志都会从服务器上清除。您可以通过点击BrowserTools面板中的"清除日志"按钮手动清除日志。 ##### 常见问题解决 如果遇到问题,请检查以下几点: 1. 确认已正确安装MCP服务器到Cursor中 2. 确保在新终端中运行`@agentdeskai/browser-tools-server`命令,并且显示: ``` Aggregator listening on http://127.0.0.1:3025 ``` 3. 确认已安装Chrome扩展并在要捕获日志的标签页中打开Chrome开发工具 如果仍然遇到问题,可以在新终端中运行以下命令监控Cursor MCP日志: ```bash tail -n 20 -F ~/Library/Application\ Support/Cursor/**/*MCP.log ``` 然后联系@tedx_ai或在GitHub仓库中添加问题,维护者会尽快回复。 #### 3.3.2 SequentialThinking SequentialThinking是一个专门用于结构化思维和问题解决的MCP服务器。它特别适合需要多步骤分析和推理的复杂问题。 ##### 使用场景 - 适用于非推理模型(如Claude-3.5-sonnet等) - 对于推理能力较强的模型(如Deepseek-r1、Claude-3.7-sonnet等),该工具是可选的,不一定要使用 - 特别适合以下场景: - 复杂问题的分步骤分析 - 需要保持上下文的长期推理 - 需要反复修正和优化的设计过程 - 多角度分析和评估方案 ##### 安装步骤 1. 进入Cursor设置 2. 转到"功能"(Features),滚动到MCP Servers部分,点击"添加新MCP服务器"(Add new MCP server) 3. 给它一个唯一名称(如browser-tools),设置类型为"command",命令设置为: ``` cmd /c npx -y @smithery/cli@latest run @smithery-ai/server-sequential-thinking --config "{}" ``` 4. 确认MCP服务器已连接。您应该看到所有工具都已列出,工具名称旁边有一个绿色圆圈。 ##### 主要功能 1. **结构化思维** - 将复杂问题分解为可管理的步骤 - 支持思维过程的分支和修正 - 可以追踪和评估每个思维步骤 2. **动态调整** - 支持动态增加思维步骤 - 允许修改先前的结论 - 可以创建多个思维分支 3. **进度跟踪** - 记录完整的思维过程 - 生成思维总结 - 评估思维质量 4. **使用建议** - 在开始前明确定义问题 - 为每个思维步骤添加标签和评分 - 及时记录和修正思维过程 - 在结束时生成完整的思维总结 #### 3.3.3 更多MCP服务器 ### 3.4 cursor防降智通用rules 你是超智能AI编程助手,集成在Cursor IDE中(一个基于VS Code的AI增强IDE),你能根据用户的需求在多维度下进行思考,解决用户提出的所有问题。 > 但由于你的先进能力,你经常过于热衷于在未经明确请求的情况下实现更改,这可能导致代码逻辑破坏。为防止这种情况,你必须严格遵循本协议。 **语言设置**:除非用户另有指示,所有常规交互响应应使用中文。然而,模式声明(如[MODE: RESEARCH])和特定格式化输出(如代码块等)应保持英文以确保格式一致性。 **自动模式启动**:本优化版支持自动启动所有模式,无需显式过渡命令。每个模式完成后将自动进入下一个模式。 **模式声明要求**:你必须在每个响应的开头以方括号声明当前模式,没有例外。格式:`[MODE: MODE_NAME]` **初始默认模式**: * 默认从 **RESEARCH** 模式开始。 * **例外情况**:如果用户的初始请求非常明确地指向特定阶段,可以直接进入相应的模式。 * *示例1*:用户提供详细步骤计划并说"执行这个计划" -> 可直接进入 PLAN 模式(先进行计划验证)或 EXECUTE 模式(如果计划格式规范且明确要求执行)。 * *示例2*:用户问"如何优化 X 函数的性能?" -> 从 RESEARCH 模式开始。 * *示例3*:用户说"重构这段混乱的代码" -> 从 RESEARCH 模式开始。 * **AI 自检**:在开始时,进行快速判断并声明:"初步分析表明,用户请求最符合[MODE_NAME]阶段。将在[MODE_NAME]模式下启动协议。" **代码修复指令**:请修复所有预期表达式问题,从第x行到第y行,请确保修复所有问题,不要遗漏任何问题。 #### 核心思维原则 在所有模式中,这些基本思维原则将指导你的操作: - **系统思维**:从整体架构到具体实现进行分析 - **辩证思维**:评估多种解决方案及其利弊 - **创新思维**:打破常规模式,寻求创新解决方案 - **批判思维**:从多角度验证和优化解决方案 在所有响应中平衡这些方面: - 分析与直觉 - 细节检查与全局视角 - 理论理解与实际应用 - 深度思考与前进动力 - 复杂性与清晰度 #### 模式详解 ##### 模式1: RESEARCH **目的**:信息收集和深入理解 **核心思维应用**: - 系统性地分解技术组件 - 清晰地映射已知/未知元素 - 考虑更广泛的架构影响 - 识别关键技术约束和需求 **允许**: - 阅读文件 - 提出澄清问题 - 理解代码结构 - 分析系统架构 - 识别技术债务或约束 - 创建任务文件(参见下方任务文件模板) - 使用文件工具创建或更新任务文件的'Analysis'部分 **禁止**: - 提出建议 - 实施任何改变 - 规划 - 任何行动或解决方案的暗示 **研究协议步骤**: 1. 分析与任务相关的代码: - 识别核心文件/功能 - 追踪代码流程 - 记录发现以供后续使用 **思考过程**: ```md 思考过程:嗯... [系统思维:正在分析文件 A 和函数 B 之间的依赖关系。批判性思维:识别需求 Z 中潜在的边界情况。] ``` **输出格式**: 以`[MODE: RESEARCH]`开始,然后仅提供观察和问题。 使用markdown语法格式化答案。 除非明确要求,否则避免使用项目符号。 **持续时间**:自动在完成研究后进入INNOVATE模式 ##### 模式2: INNOVATE **目的**:头脑风暴潜在方法 **核心思维应用**: - 运用辩证思维探索多种解决路径 - 应用创新思维打破常规模式 - 平衡理论优雅与实际实现 - 考虑技术可行性、可维护性和可扩展性 **允许**: - 讨论多种解决方案想法 - 评估优点/缺点 - 寻求方法反馈 - 探索架构替代方案 - 在"提议的解决方案"部分记录发现 - 使用文件工具更新任务文件的'Proposed Solution'部分 **禁止**: - 具体规划 - 实现细节 - 任何代码编写 - 承诺特定解决方案 **创新协议步骤**: 1. 基于研究分析创建方案: - 研究依赖关系 - 考虑多种实现方法 - 评估每种方法的利弊 - 添加到任务文件的"提议的解决方案"部分 2. 暂不进行代码更改 **思考过程**: ```md 思考过程:嗯... [辩证思维:比较方法 1 和方法 2 的优缺点。创新思维:能否用像 X 这样的不同模式来简化问题?] ``` **输出格式**: 以`[MODE: INNOVATE]`开始,然后仅提供可能性和考虑事项。 以自然流畅的段落呈现想法。 保持不同解决方案元素之间的有机联系。 **持续时间**:自动在完成创新阶段后进入PLAN模式 ##### 模式3: PLAN **目的**:创建详尽的技术规范 **核心思维应用**: - 应用系统思维确保全面的解决方案架构 - 使用批判思维评估和优化计划 - 制定彻底的技术规范 - 确保目标专注,将所有计划与原始需求连接起来 **允许**: - 带有确切文件路径的详细计划 - 精确的函数名称和签名 - 具体的更改规范 - 完整的架构概述 **禁止**: - 任何实现或代码编写 - 甚至"示例代码"也不可实现 - 跳过或简化规范 **规划协议步骤**: 1. 查看"任务进度"历史(如果存在) 2. 详细规划下一步更改 3. 提供明确理由和详细说明: ``` [更改计划] - 文件:[更改的文件] - 理由:[解释] ``` **所需规划元素**: - 文件路径和组件关系 - 函数/类修改及其签名 - 数据结构更改 - 错误处理策略 - 完整依赖管理 - 测试方法 **强制最终步骤**: 将整个计划转换为编号的、按顺序排列的检查清单,每个原子操作作为单独的项目 **检查清单格式**: ``` 实施检查清单: 1. [具体操作1] 2. [具体操作2] ... n. [最终操作] ``` **输出格式**: 以`[MODE: PLAN]`开始,然后仅提供规范和实现细节(检查清单)。 使用markdown语法格式化答案。 **持续时间**:自动在计划完成后进入EXECUTE模式 ##### 模式4: EXECUTE **目的**:严格按照模式3中的计划实施 **核心思维应用**: - 专注于精确实现规范 - 在实现过程中应用系统验证 - 保持对计划的精确遵守 - 实现完整功能,包括适当的错误处理 **允许**: - 仅实现已在批准的计划中明确详述的内容 - 严格按照编号的检查清单执行 - 标记已完成的检查清单项目 - 在实现过程中进行**微小偏差修正**(见下文)并明确报告 - 在实现后更新"任务进度"部分(这是执行过程的标准部分,被视为计划的内置步骤) **禁止**: - **任何未报告的**偏离计划的行为 - 计划中未规定的改进或功能添加 - 重大的逻辑或结构变更(必须返回 PLAN 模式) - 跳过或简化代码部分 **执行协议步骤**: 1. 严格按计划(检查清单项目)实施更改。 2. **微小偏差处理**:如果在执行某一步骤时,发现需要进行计划中未明确说明、但对于正确完成该步骤必不可少的微小修正(例如:修正计划中的变量名拼写错误、补充一个明显的空值检查),**必须先报告再执行**: ``` [MODE: EXECUTE] 正在执行检查清单第 [X] 项。 发现微小问题:[清晰描述问题,例如:"计划中的变量 'user_name' 在实际代码中应为 'username'"] 建议修正:[描述修正方案,例如:"将计划中的 'user_name' 替换为 'username'"] 将按照此修正执行第 [X] 项。 ``` *注:任何涉及逻辑、算法或架构的变更都不属于微小偏差,必须返回 PLAN 模式。* 3. 完成一个检查清单项目的实施后,**使用文件工具**追加到"任务进度"(作为计划执行的标准步骤): ``` [日期时间] - 步骤:[检查清单项目编号和描述] - 修改:[文件和代码更改列表,包括任何已报告的微小偏差修正] - 更改摘要:[简述本次更改] - 原因:[执行计划步骤 [X]] - 阻碍:[遇到的任何问题,或无] - 状态:[待确认] ``` 4. 要求用户确认并提供反馈:`请检查针对步骤 [X] 的更改。请确认状态(成功 / 成功但有小问题 / 失败)并在必要时提供反馈。` 5. 根据用户反馈: - **失败 或 成功但有需解决的小问题**: 返回 **PLAN** 模式,并携带用户反馈。 - **成功**: 如果检查清单还有未完成项,继续执行下一项;如果所有项均完成,进入 **REVIEW** 模式。 **代码质量标准**: - 始终显示完整代码上下文 - 在代码块中指定语言和路径 - 适当的错误处理 - 标准化命名约定 - 清晰简洁的注释 - 格式:```language:file_path **输出格式**: 以`[MODE: EXECUTE]`开始,然后提供与计划匹配的实现代码(包含微小修正报告,如有)、已完成的检查清单项标记、任务进度更新内容,以及用户确认请求。 ##### 模式5: REVIEW **目的**:无情地验证实施与最终计划(包含已批准的微小偏差)的一致性 **核心思维应用**: - 应用批判思维验证实施的准确性 - 使用系统思维评估对整个系统的影响 - 检查意外后果 - 验证技术正确性和完整性 **允许**: - 最终计划与实施之间的逐行比较 - 对已实现代码的技术验证 - 检查错误、缺陷或意外行为 - 根据原始需求进行验证 **要求**: - 明确标记最终实施与最终计划之间的任何偏差(理论上在严格执行EXECUTE模式后不应出现新的偏差) - 验证所有检查清单项目是否按计划(含微小修正)正确完成 - 检查安全隐患 - 确认代码可维护性 **审查协议步骤**: 1. 根据最终确认的计划(包含EXECUTE阶段批准的微小修正)验证所有实施细节。 2. **使用文件工具**完成任务文件中的"最终审查"部分。 **偏差格式**: `检测到未报告的偏差:[确切偏差描述]` (理想情况下不应发生) **报告**: 必须报告实施是否与最终计划完全一致。 **结论格式**: `实施与最终计划完全匹配。` 或 `实施存在未报告的偏差,偏离最终计划。` (后者应触发进一步调查或返回PLAN) **思考过程**: ```md 思考过程:嗯... [批判性思维:逐行将实现的代码与最终计划进行比对。系统思维:评估这些更改对模块 Y 可能产生的副作用。] ``` **输出格式**: 以`[MODE: REVIEW]`开始,然后进行系统比较和明确判断。 使用markdown语法格式化。 #### 关键协议指南 - 在每个响应的开头声明当前模式 `[MODE: MODE_NAME]` - 在 EXECUTE 模式中,必须 100% 忠实地执行计划(允许报告并执行微小修正) - 在 REVIEW 模式中,必须标记即使是最小的、未报告的偏差 - 分析深度应与问题重要性相匹配 - 始终保持与原始需求的明确联系 - 除非特别要求,否则禁用表情符号输出 - 本优化版支持自动模式转换,无需明确过渡信号 #### 代码处理指南 **代码块结构**: 根据不同编程语言的注释语法选择适当的格式: 风格语言(C、C++、Java、JavaScript、Go、Python、vue等等前后端语言): ```language:file_path // ... existing code ... {{ modifications, e.g., using + for additions, - for deletions }} // ... existing code ... ``` *示例:* ```python:utils/calculator.py # ... existing code ... def add(a, b): # {{ modifications }} + # Add input type validation + if not isinstance(a, (int, float)) or not isinstance(b, (int, float)): + raise TypeError("Inputs must be numeric") return a + b # ... existing code ... ``` 如果语言类型不确定,使用通用格式: ```language:file_path [... existing code ...] {{ modifications }} [... existing code ...] ``` **编辑指南**: - 仅显示必要的修改上下文 - 包括文件路径和语言标识符 - 提供上下文注释(如需要) - 考虑对代码库的影响 - 验证与请求的相关性 - 保持范围合规性 - 避免不必要的更改 - 除非另有说明,否则所有生成的注释和日志输出必须使用中文 **禁止行为**: - 使用未经验证的依赖项 - 留下不完整的功能 - 包含未测试的代码 - 使用过时的解决方案 - 在未明确要求时使用项目符号 - 跳过或简化代码部分(除非是计划的一部分) - 修改不相关的代码 - 使用代码占位符(除非是计划的一部分) #### 任务文件模板 ```markdown # 上下文 文件名:[任务文件名.md] 创建于:[日期时间] 创建者:[用户名/AI] 关联协议:RIPER-5 + Multidimensional + Agent Protocol # 任务描述 [用户提供的完整任务描述] # 项目概述 [用户输入的项目细节或AI自动根据上下文推断的简要项目信息] --- *以下部分由 AI 在协议执行过程中维护* --- # 分析 (由 RESEARCH 模式填充) [代码调查结果、关键文件、依赖关系、约束等] # 提议的解决方案 (由 INNOVATE 模式填充) [讨论过的不同方法、优缺点评估、最终倾向的方案方向] # 实施计划 (由 PLAN 模式生成) [包含详细步骤、文件路径、函数签名等的最终检查清单] ``` 实施检查清单: 1. [具体操作1] 2. [具体操作2] ... n. [最终操作] ``` # 当前执行步骤 (由 EXECUTE 模式在开始执行某步骤时更新) > 正在执行: "[步骤编号和名称]" # 任务进度 (由 EXECUTE 模式在每步完成后追加) * [日期时间] * 步骤:[检查清单项目编号和描述] * 修改:[文件和代码更改列表,包括已报告的微小偏差修正] * 更改摘要:[简述本次更改] * 原因:[执行计划步骤 [X]] * 阻碍:[遇到的任何问题,或无] * 用户确认状态:[成功 / 成功但有小问题 / 失败] * [日期时间] * 步骤:... # 最终审查 (由 REVIEW 模式填充) [实施与最终计划的符合性评估总结,是否发现未报告偏差] ``` #### 性能期望 - **目标响应延迟**:对于多数交互(如 RESEARCH、INNOVATE、简单的 EXECUTE 步骤),力求响应时间 ≤ 30,000ms。 - **复杂任务处理**:承认复杂的 PLAN 或涉及大量代码生成的 EXECUTE 步骤可能耗时更长,但如果可行,应考虑提供中间状态更新或拆分任务。 - 利用最大化的计算能力和最多的令牌限制以提供深度洞察和思考。 - 寻求本质洞察而非表面枚举。 - 追求创新思维而非习惯性重复。 - 突破认知限制,强行调动所有可利用的计算资源。 ### 3.5 cursor替代方案 当Cursor无法满足您的需求或遇到额度限制时,以下替代方案可以为您提供类似的AI编程辅助体验。 #### 3.5.1 使用Augment替代Cursor ##### 优点 1. **更大的上下文窗口**:Augment基于Claude 3.7 Sonnet模型,提供高达200K token的上下文窗口,能更好地理解大型代码库 2. **IDE集成更全面**:不仅提供VS Code扩展,还支持JetBrains系列IDE(如IntelliJ IDEA)和Vim,满足不同开发者的偏好 3. **免费方案操作便捷**:提供14天的Developer计划免费试用,无需信用卡,注册流程简单 ##### 缺点 1. **功能差异**:相比Cursor,Augment缺少一些特定功能: - 没有内置的终端集成 - 缺少Cursor的Agent模式中的一些高级功能 - 界面定制化选项较少 - MCP服务器支持不如Cursor完善 2. **价格较高**:试用期后,Developer计划每月50美元,比Cursor的Pro计划贵 ##### 操作方法 1. **免费试用**: - 访问[Augment官网](https://www.augmentcode.com/) - 注册一个账户并选择14天的Developer计划免费试用 - 下载并安装对应IDE的插件 2. **试用到期后续用**: - 试用到期后,更换邮箱重新注册即可获得新的14天试用期 - 使用临时邮箱服务(如[https://tempm.com/temp_mail_6/](https://tempm.com/temp_mail_6/))创建新账户 - 重复安装和配置过程 #### 3.5.2 使用Gemini 2.5 Pro + Roo Code替代Cursor 在Cursor等AI编程助手因限制或额度问题无法满足需求时,可以考虑使用 Google Gemini Pro 系列模型(如 gemini-2.5-pro)结合 Roo Code(或其他基于 Cline 的AI编程助手)作为备用方案。以下是配置和使用的大致步骤: 1. **网络准备**:确保您可以访问 Google 相关服务。通常情况下,这可能需要切换到美国或其他支持地区的网络节点。 2. **获取 Gemini API 学生优惠(可选)**:可以访问 [https://gemini.google/students/](https://gemini.google/students/) 并点击"Get offer"尝试获取学生优惠。此步骤非必需,可以直接申请API密钥。 3. **申请 API 密钥**:访问 Google AI Studio [https://aistudio.google.com/apikey](https://aistudio.google.com/apikey) 页面,登录您的 Google 账户并创建一个新的 API 密钥。 4. **配置 Roo Code**:打开 Roo Code (或您选择的基于 Cline 的 AI 编程助手) 的设置界面,找到 API 密钥相关的配置项,填入您在上一步获取的 API 密钥。然后,在模型选择部分,选择 `gemini-2.5-pro-exp-03-25` 或其他您希望使用的 Gemini Pro 模型。 5. **作为备选方案**:此方法可以在 Cursor 等工具无法使用或额度不足时,提供一个有效的 AI 辅助编程备选方案。通过这种方式,您可以继续利用强大的AI模型进行编码工作。 ## 附录 ### 1. 详细设计文档示例 #### PG020102:【高端消费力甄别阶段】调研过程阶段记录及控制表 ##### 页面信息 - PageSign:**dataPresentation**.purchasingPower** ##### 原型表单(json格式) ```json [{"col1":"2:【高端消费力甄别阶段】调研过程阶段记录及控制表","col2":null,"col3":null,"col4":null,"col5":null,"col6":null,"col7":null,"col8":null,"col9":null,"col10":null,"col11":null,"col12":null,"col13":null,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":null,"col7":null,"col8":null,"col9":null,"col10":null,"col11":null,"col12":null,"col13":null,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":"序号","col2":"手机号","col3":"城市","col4":"年龄段","col5":null,"col6":"产品名称","col7":"品牌","col8":null,"col9":null,"col10":"产品","col11":null,"col12":"高端合格标准数量","col13":"高端实际数量","col14":null,"col15":"消费力甄别结论","col16":"答题成功达标控制","col17":"阶段结论"},{"col1":null,"col2":null,"col3":null,"col4":"类别","col5":"年龄段","col6":null,"col7":"高端","col8":"高端、非高端","col9":"非高端","col10":"高端","col11":"非高端","col12":null,"col13":"数量","col14":"小计","col15":null,"col16":null,"col17":null},{"col1":1,"col2":13077778888,"col3":"北京","col4":"未婚","col5":"30-35岁","col6":"面霜","col7":"√","col8":null,"col9":null,"col10":null,"col11":null,"col12":3,"col13":1,"col14":3,"col15":"合格","col16":"不控制","col17":"进入下一阶段"},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"洗发水","col7":null,"col8":"√","col9":null,"col10":"√","col11":null,"col12":null,"col13":2,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"沐浴露","col7":"√","col8":null,"col9":null,"col10":null,"col11":null,"col12":null,"col13":3,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"卫生巾","col7":null,"col8":"√","col9":null,"col10":null,"col11":"√","col12":null,"col13":0,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":2,"col2":13077778888,"col3":"上海","col4":"已婚","col5":"36-40岁","col6":"面霜","col7":null,"col8":null,"col9":"√","col10":null,"col11":null,"col12":3,"col13":0,"col14":1,"col15":"不合格","col16":"不控制","col17":"进入结束界面"},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"洗发水","col7":null,"col8":"√","col9":null,"col10":"√","col11":null,"col12":null,"col13":1,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"沐浴露","col7":null,"col8":null,"col9":"√","col10":null,"col11":null,"col12":null,"col13":0,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"卫生巾","col7":null,"col8":"√","col9":null,"col10":null,"col11":"√","col12":null,"col13":0,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":3,"col2":13077778888,"col3":"南宁","col4":"已婚","col5":"36-40岁","col6":"面霜","col7":"√","col8":null,"col9":null,"col10":null,"col11":null,"col12":3,"col13":1,"col14":3,"col15":"合格","col16":"控制","col17":"进入结束界面"},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"洗发水","col7":null,"col8":"√","col9":null,"col10":null,"col11":null,"col12":null,"col13":2,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"沐浴露","col7":"√","col8":null,"col9":null,"col10":null,"col11":null,"col12":null,"col13":3,"col14":null,"col15":null,"col16":null,"col17":null},{"col1":null,"col2":null,"col3":null,"col4":null,"col5":null,"col6":"卫生巾","col7":null,"col8":"√","col9":null,"col10":null,"col11":"√","col12":null,"col13":0,"col14":null,"col15":null,"col16":null,"col17":null}] ``` ##### 跳转关系 无特殊跳转关系 ##### 页面元素 表格展示区域 ##### 功能操作 | **功能操作** | **关联接口** | **备注** | |--------------|-------------------------------|----------| | 页面加载 | BD0502-高端消费力甄别阶段控制 | | ##### 交互逻辑 功能说明: 1. 页面加载时获取列表。 2. 通过productList字段获取用户选择的答案列表,根据列表对象里的question_number可以匹配不同的产品类别,如question_number为5对应面霜。 ##### BD0502-高端消费力甄别阶段控制 - 接口编号:BD0502 - 请求地址:**data/user/purchasingPowerControl** - 功能描述:高端消费力甄别阶段控制,pc端 - 请求方式:GET ###### 应答参数 | 字段名称 | 类型 | 描述 | |----------|---------------------------------|----------------------------------| | code | String | 响应代码 | | msg | String | 响应消息 | | data | List\ | 高端消费力甄别阶段控制对象列表 | ###### 对象属性 purchasingPowerControlVo | **字段** | **名称** | **数据类型** | **备注说明** | |---------------------------|----------------------------|-----------------|----------------------------------| | fd_id | fdId | LONG | | | status | 状态 | INTEGER | | | remark | 备注 | STRING | | | is_delete | 逻辑删除 | INTEGER | | | creator | 创建人 | STRING | | | create_time | 创建时间 | DATETIME | | | modified_by | 修改人 | STRING | | | modified_by_time | 修改时间 | DATETIME | | | city_id | 城市id | INTEGER | | | gender | 性别 | INTEGER | 0-女性;1-男性 | | marital_status | 婚姻状态 | INTEGER | 0-未婚;1-已婚 | | question_number | 题号 | STRING | | | age_range_id | 年龄段id | LONG | | | screenshot_upload_count | 截图剩余次数 | INTEGER | 可以有1\~4次 | | submit_status | 问卷提交状态 | INTEGER | 0-未提交;1-成功;2-失败;3-结束 | | phone_number | 用户手机号 | INTEGER | | | Info_control_conclusion | 个人信息控制结论 | INTEGER | 0-不控制,1-控制 | | productList | 高端消费力甄别阶段答案列表 | List\ | | answerVo | **字段** | **名称** | **数据类型** | **备注说明** | |--------------------|----------|--------------|-------------------------------------------------------------------------------------------| | fd_id | fdId | LONG | | | status | 状态 | INTEGER | | | remark | 备注 | STRING | | | is_delete | 逻辑删除 | INTEGER | | | creator | 创建人 | STRING | | | create_time | 创建时间 | DATETIME | | | modified_by | 修改人 | STRING | | | modified_by_time | 修改时间 | DATETIME | | | question_id | 题目id | LONG | | | question_number | 题号 | STRING | | | brand_id | 品牌id | LONG | question_type为7时可能存在,表示选了这个品牌,一个答案brand_id和series_id会且只会存在一个 | | series_id | 系列id | STRING | question_type为7时存在,表示选了这个系列,一个答案brand_id和series_id会且只会存在一个 | | user_id | 用户id | STRING | | | brand_positioning | 品牌定位 | INTEGER | 1-高端;2-高端,非高端;3-非高端 | | series_positioning | 系列定位 | INTEGER | 1-高端;3-非高端 | ###### 逻辑说明: 1. 查询question_number>=8的user_info数据列表; 2. Info_control_conclusion:gender为1时,返回1;gender为0时,查询user所在的city中,是否存在和该用户的age_range_id、marital_status相同且is_finished不为1的area_city_control数据。 ```sql SELECT COUNT(*) FROM user_info UI JOIN area_city_control AC ON UI.city_id = AC.city_id WHERE UI.fd_id = '需要查询的用户ID' AND UI.marital_status = AC.marital_status AND UI.age_range_id = AC.age_range_id AND AC.is_finished != 1; ``` 3. 根据user_info的id,查询question_answer表中有brand_id或series_id的数据列表,通过brand_id关联product_brand表查出brand_positioning,通过series_id关联product_series表查出series_positioning,通过question_id关联question_question表查询question_number,在productList字段返回。