AI编程:利用代码锚点提升大模型探索代码的能力。
这篇文章不说废话,只告诉你怎么做,你可以试试,不懂可以找我,但是这样真的好用。
TLDR
- 全局写一个注释规约,让大模型写代码的时候为代码增加锚点注释,你可以理解为为代码端增加tag,比如 规则:xxxx ;公式:xxxx
- 写一个技能或者指令或者一段prompt,让大模型先搜索锚点的特征,比如‘规则:’或者‘公式:’
- 使用这个技能搜索代码,或者告诉他代码有锚点,然后再写代码,探索代码,分析代码
- 这比gitnexus或者graphify做代码地图更简洁,高效,而且维护成本更低,一致性更容易维护。
思想和范式
- 在代码外面增加wiki,不如让代码变成wiki
- 利用外部工具,不如什么都不利用,只利用LLM本身
- 文档应该离代码足够近,而不是各自为政。
原文
在你用AI编程的时候,AI可能很难快速探索到你的代码,往往需要翻阅很多代码。
一些解决方案是利用 gitnexus 或者graphify 这样的工具,但是我告诉你实际上不用,在代码里写上锚点,做好一份业务索引即可。
结果是:可以在40秒钟之内找到业务关键逻辑,代码坐标,这些只需要很少的token,我是这么做的:
原理很简单:把业务规则直接写在代码注释里,用固定前缀标记。
// 规则:xxx
// 公式:xxx = xxx
AI只需要两步:
第一步:锚点搜索
grep pattern="规则:.*关键词|公式:.*关键词"
第二步:验证代码
打开锚点所在文件,确认代码实现与注释一致。
为什么好用
| 方案 | Token消耗 | 定位精度 | 依赖 |
|---|---|---|---|
| 读大量代码 | 高(几千行) | 低(需人工过滤) | 无 |
| GitNexus/Graphify | 中(索引维护) | 高 | 工具+索引 |
| 锚点搜索 | 低(几行) | 高(直达) | 无 |
本质是:注释 = 索引。代码作者最懂业务,让作者标注关键点,AI只负责搜索和验证。
下面来点具体的
在AGENTS.md 增加注释规约
## 锚点机制(第一优先级)
> **目的**:让AI快速定位业务规则和计算公式,便于代码理解和维护。
### 格式
| 锚点 | 格式 | 用途 |
| -- | --------------- | ---- |
| 公式 | // 公式:xxx=xxx| 计算公式 |
| 规则 | // 规则:xxx | 业务规则 |
> **重要**:锚点必须使用单行 `//` 形式,不混合到 `/** */` 中。
### 使用时机
| 场景 | 是否需要 | 原因 |
| --------- | ---- | ------ |
| 有计算公式需要注释 | ✅ | 帮助AI定位 |
| 有业务规则需要注释 | ✅ | 帮助AI定位 |
| 代码本身已清晰 | ❌ | 不要生搬硬套 |
让大模型把代码整理或者写成这样
// 业务效果:
// 场景 需求量 采购量 调拨量 旧结果 新结果
// 场景1 1000 200(生效合同) 0 已采购 ❌ 待采购 ✅
// 场景2 1000 1000(生效合同) 0 已采购 ✅ 已采购 ✅
// 场景3 1000 500 500 待采购 ❌ 已采购 ✅
/**
* 判断采购是否完成
* <p>
* 场景:采购计划变更时,判断物料需求是否采购完成
* <br>
* 流程:计算需求量 → 计算生效采购量 → 计算调拨量 → 判断是否完成
* </p>
*/
private boolean isPurchaseCompleted(MaterialRequest request) {
var demandQty = request.getQuantity().getDemandQty();
var transferQty = request.getQuantity().getTransferQty();
// 规则:需求量 > 0 才判断采购完成
if (demandQty == null || !NumberUtil.isGreater(demandQty, BigDecimal.ZERO)) {
return false;
}
// 规则:只有合同生效的采购计划才计入完成数量
var allPurchaseSchedules = materialPurchaseScheduleRepository.findByRequestId(request.getId());
var effectivePurchaseQty = allPurchaseSchedules.stream()
.filter(p -> p.getStatus() == MaterialPurchaseScheduleStatus.CONTRACT_EFFECTIVE)
.map(MaterialPurchaseSchedule::getEffectiveQty)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 公式:totalQty = effectivePurchaseQty + transferQty
var totalQty = NumberUtil.add(
effectivePurchaseQty,
transferQty != null ? transferQty : BigDecimal.ZERO
);
// 规则:totalQty >= demandQty 视为采购完成
return NumberUtil.isGreaterOrEqual(totalQty, demandQty);
}
写一个探索代码的技能

他会拿到你想要的结果

声明
- 我不介意你拿我的分享去挣钱,因为我没有营销能力,不过希望你能分我点,因为我还有狠活。
- 如果你觉得我的实践重要,我愿意分享,而且我承认我为了挣钱才分享。
浙公网安备 33010602011771号