人人都会AI编程

8.3 上下文控制技巧:精准传递代码信息

更新时间:2026-06-28

与 AI 结对编程时,最常见的挫败感是"AI 听不懂人话"。这通常不是因为 AI 太笨,而是你给的上下文太多或太少。以下是实战中验证有效的上下文控制方法:

1. 精准裁剪:只给"相关"代码

不要把整个 500 行的文件扔给 AI。提供当前函数加上它的直接依赖(入参类型、调用的子函数签名)即可。

糟糕示例:

"帮我优化这段代码" [粘贴整个 controller.js 文件]

正确做法:

"这是 calculatePrice 函数(第 45-60 行),它依赖的 DiscountRule 类型定义如下。当前性能瓶颈在双重循环,如何优化?"

2. 用注释作为"锚点"

在代码关键位置插入临时注释,告诉 AI 你的意图,这比在对话框里描述更有效。

def process_data(raw_data):
    # TODO: AI 请在这里添加空值检查,要求:不修改原数据结构,返回错误码 4001
    parsed = json.loads(raw_data)
    return transform(parsed)

AI 会优先处理带明确指令的注释区域,且理解这是增量修改而非重写。

3. 提供"骨架"而非"血肉"

对于复杂业务逻辑,给 AI 看接口定义和类型声明,比给实现代码更有用。

高效上下文:

// 当前接口定义
interface Order {
  items: LineItem[];
  coupon?: string;
  userTier: 'gold' | 'silver';
}

// 需要实现:calculateFinalPrice(order: Order): number
// 业务规则:gold 用户额外 95 折,coupon 和 userTier 折扣叠加

这比粘贴 200 行现有计算逻辑更能让 AI 理解你的架构意图。

4. 分阶段传递上下文

如果任务复杂,采用"背景 → 约束 → 具体任务"的三段式:

  1. 背景:"这是一个基于 DDD 架构的电商项目,这是聚合根的定义..."
  2. 约束:"数据库不能用事务,因为用了分库分表..."
  3. 任务:"请实现库存扣减的幂等性方案"

5. 利用文件元信息

主动说明文件路径和技术栈,弥补 AI 看不到项目结构的缺陷:

"这是 src/domain/order/OrderService.ts,NestJS 项目,使用 TypeORM。需要在 createOrder 方法中..."

常见陷阱

  • 给太多历史记录:不要说"昨天改了这个,然后影响了那个...",直接给当前代码状态
  • 假设 AI 知道业务术语:首次出现的缩写(如"需要兼容老系统的 OMS 接口")必须解释
  • 忽视错误上下文:报 Bug 时,提供具体错误行堆栈信息,而非只说"报错了"

核心原则:把 AI 当作一个刚入职的高级工程师——给他刚好能理解问题、又不被无关信息淹没的代码片段。