源自Andrej Karpathy观察的LLM编程陷阱总结,包含编码前思考、简约优先、手术刀式编辑、目标驱动验证四大原则。适用于代码编写、审查、重构等场景,帮助AI编码代理避免常见错误,提升代码质量。
【适用场景】
本技能适用于以下场景:
1. 代码编写与审查:在编写新代码、编辑现有代码、代码审查或重构时,作为行为准则加载。 2. 复杂需求澄清:当需求模糊、存在多种解释或涉及未知领域时,主动提出问题而非盲目猜测。 3. 代码简化判断:当代码过于复杂或存在过度设计时,主动建议更简单的方案。 4. 小任务快速处理:对于简单的修复(如 typo、一行代码改动),可直接执行而无需完整流程。
【操作步骤】
原则一:编码前先思考 在实现任何功能之前,必须: 1. 明确陈述所有假设,不确定时主动提问 2. 存在多种解释时,展示所有选项而非默默选择 3. 发现更简单方案时,主动提出并说明理由 4. 遇到不清晰之处,停止并明确说明疑问
示例: ``` 实施导出功能前,我需要确认: 1. 导出全部用户还是筛选后的用户?(涉及隐私) 2. 文件下载、API端点还是后台任务? 3. 包含哪些字段?部分字段可能涉及敏感信息 请问您偏好哪种方案? ```
原则二:简约优先 只实现解决问题所需的最小代码,不做投机性开发: - 不添加未请求的功能 - 不为单次使用的代码创建抽象 - 不添加未请求的"灵活性"或"可配置性" - 不处理不可能发生的错误场景 - 如果200行可以写成50行,重写它
原则三:精准手术刀式编辑 - 每次改动针对具体目标,不做大片区重构 - 优先小步提交,便于回滚和问题定位 - 改动前说明改了什么、为什么这样改
原则四:目标驱动的执行与验证 - 每一步都有明确目标,不为写代码而写代码 - 完成后验证结果是否符合预期 - 主动汇报完成状态和验证结果
何时跳过完整流程 以下情况可跳过上述流程,直接执行: - 用户明确说"快速做完即可" - 纯配置文件(YAML、JSON、env) - 用户确认是临时原型
【代码模板】
简约 vs 过度设计对比
过度设计示例: ```python
策略模式、抽象基类、配置系统...
用于一个折扣计算
class DiscountStrategy(ABC): @abstractmethod def calculate(self, amount: float) -> float: pass class PercentageDiscount(DiscountStrategy):50+ lines
```简约设计示例: ```python def calculate_discount(amount: float, rate: float) -> float: return amount * rate ```
假设声明模板 ``` 在开始之前,我需要确认以下几点假设: 1. [假设1] — 如果不对请纠正 2. [假设2] — 我计划这样处理 3. 更简单的方案是[方案],原因是[原因],您觉得呢? ```
【复盘要点】
1. 假设声明是红线:如果即将写代码但尚未陈述假设,则违反了本技能的核心准则。 2. 简约不等于简单:简约的设计是精确匹配需求,而非简陋。评估标准是"资深工程师是否认为过于复杂"。 3. 主动提问优于默默猜测:遇到模糊需求时,说出来比假设后返工更高效。 4. 权衡取舍要透明:当存在多种实现方案时,展示权衡利弊,让用户做决定。 5. 验证是最后一步:执行完成后必须验证结果,并主动汇报验证状态。
来源:GitHub https://github.com/interfluve-wav/andrej-karpathy-skills-hermes