请务必阅读 何时使用 Devin 和 如何有效指示 Devin 获取更多关键提示。
添加新的 API 端点
良好做法为什么这种方式有效:
糟糕做法为什么这种方式失败:
“创建一个新的端点
/users/stats,返回一个 JSON 对象,其中包含用户总数以及平均注册年龄。使用我们在 PostgreSQL 中现有的 users 表。你可以参考 statsController.js 中的 /orders/stats 端点了解响应结构。确保新的端点被纳入 StatsController.test.js 测试套件覆盖范围。”- 清晰指定了路由和预期响应格式
- 引用了现有代码作为模板
- 明确了数据源(users 表)
- 包含测试覆盖要求
糟糕做法为什么这种方式失败:
- 未具体说明需要包含哪些统计信息
- 未提及数据源
- 未参考现有模式
- 缺少测试要求
用于展示数据的前端功能
良好做法为什么这种方式有效:
糟糕做法为什么这种方式失败:
“在
UserProfileComponent 中添加一个下拉框,展示用户角色列表(admin、editor、viewer)。使用 DropdownBase 的样式。当选择某个角色后,调用现有 API 设置该用户角色。通过检查选择结果是否更新了数据库中的用户角色来进行验证。有关如何正确编写测试,请参考你的知识库。”- 指明了具体组件
- 列出了要包含的具体角色
- 引用了已有样式组件
- 定义了用户交互流程
- 包含验证步骤
糟糕做法为什么这种方式失败:
- “用户友好”是主观概念
- 未提到具体 UI 组件
- 用户交互流程不清晰
- 验证标准含糊不清
更多示例
良好示例
编写单元测试
“为 AuthService 的 login 和 logout 方法添加 Jest 测试,确保这两个函数的测试覆盖率至少达到 80%。参考
UserService.test.js 作为示例。实现完成后,运行 npm test -- --coverage,并确认覆盖率报告中这两个函数的覆盖率都大于 80%。同时确认在有效和无效凭证情况下测试都能通过,并且 logout 能正确清除会话数据。”UserService.test.js),并且范围明确,包含具体的验证步骤。迁移或重构现有代码
“将
logger.js 从 JavaScript 迁移到 TypeScript。我们已经有 tsconfig.json 和用于验证的 LoggerTest.test.js 测试套件。确保能够无错误编译通过,并且不要修改现有配置!迁移完成后,通过以下方式验证:1)运行 tsc 确认没有类型错误;2)运行 npm test LoggerTest.test.js 执行测试套件,确保所有测试通过;3)检查代码库中所有现有的 logger 方法调用在迁移后仍然可以正常工作且没有类型错误。”tsconfig.json)和测试套件用于即时反馈,还有具体的编译和验证步骤。更新 API 或数据库查询
“我们将从 pg 切换到 sequelize(请阅读 https://sequelize.org/api/v6/identifiers)。请将 UserModel 的查询更新为使用 Sequelize 方法。参考
OrderModel 了解在当前代码库中的实现方式。实现完成后,通过以下方式验证:1)运行 npm run test:integration UserModel.test.js,检查所有集成测试是否通过;2)在包含 1000 个用户的测试数据集上检查执行时间,确认查询性能没有下降;3)运行 npm run test:e2e user-flows.test.js,验证所有 CRUD 操作在端到端流程中仍然保持数据完整性。”OrderModel.js)。提供了文档链接以便 Devin 知道需要查阅,同时包含具体的性能和功能验证步骤以及精确的测试命令。不佳示例
开放式代码审查
为什么不佳? 这个请求过于笼统,而且要求 Devin 在单个会话中完成太多任务。Devin 在会话时间过长时可能会变得困惑。
视觉设计类任务
为什么不佳? 这是一个主观的视觉需求。Devin 无法像人类一样“看见”,也无法在细节上做到完全一致。它并未针对这类用例进行优化。
高度复杂且模糊的项目
为什么不佳? 这是一个非常庞大且缺乏结构的任务,需要进行架构决策和权衡取舍。更好的做法是将复杂项目拆分为多个阶段:
- 让 Devin 分析你的代码库
- 让 Devin 提出具体的架构方案
- 为实现每个部分创建单独的会话
