AI编程:利用代码锚点提升大模型探索代码的能力。

这篇文章不说废话,只告诉你怎么做,你可以试试,不懂可以找我,但是这样真的好用。

TLDR

  1. 全局写一个注释规约,让大模型写代码的时候为代码增加锚点注释,你可以理解为为代码端增加tag,比如 规则:xxxx ;公式:xxxx
  2. 写一个技能或者指令或者一段prompt,让大模型先搜索锚点的特征,比如‘规则:’或者‘公式:’
  3. 使用这个技能搜索代码,或者告诉他代码有锚点,然后再写代码,探索代码,分析代码
  4. 这比gitnexus或者graphify做代码地图更简洁,高效,而且维护成本更低,一致性更容易维护。

思想和范式

  1. 在代码外面增加wiki,不如让代码变成wiki
  2. 利用外部工具,不如什么都不利用,只利用LLM本身
  3. 文档应该离代码足够近,而不是各自为政。

原文

在你用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);
    }

写一个探索代码的技能

image

他会拿到你想要的结果

be531f049fdd3d93a95fd365f71ed1df

声明

  1. 我不介意你拿我的分享去挣钱,因为我没有营销能力,不过希望你能分我点,因为我还有狠活。
  2. 如果你觉得我的实践重要,我愿意分享,而且我承认我为了挣钱才分享。
posted @ 2026-04-23 13:37  有泥土的路  阅读(14)  评论(0)    收藏  举报