在 Code Agent(代码智能体) 的实际落地中,注意力机制(Attention)并不只是"Transformer 内部原理" ,而是被显式或隐式地工程化使用,直接影响效果、成本和可控性。下面从「能落地的实践视角」系统讲一下。
一句话总览
在 Code Agent 中,注意力机制的核心作用是:
把有限的上下文、算力和推理步骤,集中用在"当前最有价值的代码与信息"上。
一、上下文注意力:解决「代码太多,窗口不够」
1️⃣ 文件级 / 代码块级注意力(Context Routing)
问题
- 一个仓库几万行代码,LLM 上下文放不下
- 但 agent 只需要 和当前任务最相关的部分
实践做法
-
先做一层「注意力筛选」:
- 文件级:哪些文件最相关
- 代码块级:哪些函数 / class 最重要
-
再把筛选结果送进 LLM
常见实现
css
用户问题
↓
Embedding / 关键词 / 调用图
↓
Top-K 文件
↓
Top-K 函数
↓
LLM
📌 本质 :
这是 "显式注意力" ,不是模型自己算的,而是工程层帮它"代劳"。
2️⃣ Diff / Patch 注意力(编辑型 Agent 必备)
在 Cursor、Claude Code、Aider 这类工具中非常关键。
做法
-
高度关注:
- 最近修改的 diff
- 当前光标附近代码
- 报错栈涉及的函数
效果
- 避免模型"通读整个文件"
- 提升修改精准度,减少误伤
📌 Cursor 的「只改相关代码」能力,本质就是 diff-aware attention
二、任务级注意力:让 Agent 不"跑偏"
3️⃣ Planning Attention(计划阶段聚焦)
在 多步 Code Agent(ReAct / Plan-Execute) 中:
markdown
Plan:
1. 找到 Bug 位置
2. 分析原因
3. 修改代码
4. 补测试
注意力点
-
每一步只关注:
- 当前目标
- 当前输入(代码 / 日志 / 结果)
工程技巧
-
每步调用 LLM 时:
- 丢弃无关历史
- 只保留「计划 + 当前上下文」
📌 这是 "时间维度的注意力裁剪"
4️⃣ Error-driven Attention(错误驱动)
非常实用
当 agent 运行代码失败:
php
TypeError: xxx is not callable
at foo.py:123
注意力自动转移到
- 报错文件
- 报错行
- 调用链
实现方式
- 解析 traceback
- 构建「错误相关上下文」
- 强制覆盖原上下文
📌 这一步对 Code Agent 成功率提升非常大
三、工具 & 记忆注意力:选"该用的工具 / 记忆"
5️⃣ Tool Attention(工具选择)
Code Agent 往往有多个工具:
- read_file
- search
- run_tests
- run_code
- git_diff
注意力机制体现为
-
根据当前任务状态
-
决定:
- 用哪个工具
- 传哪些参数
📌 LLM 的 cross-attention:
prompt(任务) ←→ tool schema(能力)
6️⃣ Memory Attention(长期记忆不是全都重要)
在带 Memory 的 Code Agent 中:
- 历史修改习惯
- 项目约定
- 技术选型
做法
- 给记忆打标签 / embedding
- 每次只取与当前任务最相关的记忆
📌 否则 memory 会变成「噪音仓库」
四、模型层注意力:代码特有优化
7️⃣ 结构感知注意力(Code-aware Attention)
代码不同于自然语言:
- 强结构(AST)
- 强引用关系(调用 / import)
- 强局部性
实践方向
- AST-aware chunking
- 函数 / class 作为 attention 单位
- 调用图增强检索
📌 比"按 token 截断"好太多
8️⃣ 多模态注意力(代码 + 文档 + 测试)
成熟的 Code Agent 会同时关注:
- 代码
- README / 设计文档
- 单测
- 日志
Attention 分配示例
shell
当前是修 Bug:
60% 错误日志
30% 相关代码
10% 文档
这通常通过 prompt 结构 + 上下文配额控制 实现。
五、总结成一张表
| 层级 | 注意力作用 | 实际收益 |
|---|---|---|
| 上下文层 | 选对代码 | 不爆上下文 |
| 任务层 | 聚焦当前步骤 | 不跑偏 |
| 错误层 | 围绕报错 | 修复成功率↑ |
| 工具层 | 用对工具 | 推理效率↑ |
| 记忆层 | 取对记忆 | 个性化 |
| 结构层 | 理解代码结构 | 修改更准 |
关键结论(很重要)
Code Agent 的效果 ≠ 更大的模型
而是 = 更聪明的注意力分配
很多"看起来很智能"的代码 agent:
- 70% 是工程化 attention
- 30% 才是模型能力