Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid overcomplication, make surgical changes,surface assumptions, and define verifiable success criteria.
——https://github.com/forrestchang/andrej-karpathy-skills/blob/main/skills/karpathy-guidelines/SKILL.md
文章目录
- 1. **识别隐含假设**
- 2. **显化这些假设的方法**
- 3. **在LLM编码中的重要性**
- 4. **实际例子**
在软件开发和LLM编码指南的上下文中,“surface assumptions”(显化假设)指的是将代码中隐含的、未明确说明的假设和前提条件明确地暴露出来、文档化并验证的过程。
具体来说,这包括:
1.识别隐含假设
- 代码中那些"理所当然"但未明确说明的前提条件
- 对输入数据格式、范围、有效性的假设
- 对外部系统行为、API响应的预期
- 对时间、资源、性能的隐含预期
2.显化这些假设的方法
- 文档化:在代码注释、README或设计文档中明确写出关键假设
- 断言(Assertions):在代码中添加运行时检查来验证假设
- 类型检查:使用强类型系统来捕获类型相关的假设
- 单元测试:编写测试用例来验证这些假设是否成立
- 日志记录:记录关键假设的验证结果
3.在LLM编码中的重要性
- 减少幻觉:LLM容易基于错误的假设生成代码,显化假设可以减少这种情况
- 提高可维护性:其他开发者(包括未来的自己)能清楚了解代码的依赖条件
- 便于调试:当假设被违反时,可以快速定位问题根源
- 增强鲁棒性:通过验证假设,代码能够更好地处理边界情况和异常
4.实际例子
# 不好的做法 - 隐含假设defcalculate_average(numbers):returnsum(numbers)/len(numbers)# 好的做法 - 显化假设defcalculate_average(numbers):""" 计算数字列表的平均值 假设: 1. numbers 是一个非空列表 2. numbers 中的所有元素都是数字类型 3. 不会发生除零错误(由非空假设保证) 如果假设被违反,将抛出明确的异常 """ifnotnumbers:raiseValueError("输入列表不能为空")ifnotall(isinstance(n,(int,float))forninnumbers):raiseTypeError("所有元素必须是数字类型")returnsum(numbers)/len(numbers)在LLM编码指南中强调"surface assumptions",是为了帮助开发者(包括使用LLM辅助编程的开发者)创建更健壮、可维护和可理解的代码,避免因隐含假设导致的常见错误和维护问题。
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ