AI AgentTechnical Deep Dive

Agent 与代码开发:从补全助手到可控交付流

发布时间2026/02/05
分类AI Agent
预计阅读9 分钟
作者吴长龙
*

AI 写代码最有价值的部分,不是“一键生成”,而是把检索、分析、修改、验证这些开发动作组织成一条可控的工作流。

01.写代码这件事,真正耗时的往往不是“敲代码”

很多人第一次体验 AI Coding,会把注意力放在“它生成代码快不快”。但真实开发里,更耗时的通常是这些环节:

  • 找上下文:相关文件在哪,入口在哪,改动范围多大
  • 搞清约束:有哪些类型、接口、测试、历史实现必须兼容
  • 验证风险:改完会不会引入回归,哪些地方需要补测试
  • 收敛结果:最后怎样把改动组织成可审阅、可回滚、可交付的提交

所以从工程角度看,AI 最有价值的地方不是“替你写完所有代码”,而是把一串原本需要频繁切换上下文的动作串起来。

这也是为什么“AI 编程助手”和“代码 Agent”不完全一样。

02.从补全到 Agent,中间差了一层任务编排

代码补全类工具擅长的是局部生成,例如:

  • 当前函数怎么补完
  • 这个类型怎么定义
  • 这段报错怎么修

但 Agent 更适合处理的是跨文件、跨步骤的问题,例如:

  • 根据报错定位可能的根因
  • 搜索仓库里相关实现并给出修改方案
  • 执行改动后跑验证命令
  • 汇总结果,说明哪些地方改了、哪些风险还在

一个更贴切的区分是:

方式适合解决的问题
补全助手单点生成、当前文件内的小改动
仓库问答帮你理解模块关系、调用链、配置来源
代码 Agent在明确约束下完成“搜索-修改-验证-总结”的闭环

如果只是想加一个小函数,没必要启动复杂 Agent。反过来,如果任务涉及多个文件和验证步骤,只靠补全就会变得非常脆弱。

03.代码 Agent 最适合做的四类任务

1. 仓库定位

比如:

  • “这个页面的数据是从哪里来的?”
  • “用户登录态是在哪一层注入的?”
  • “这个组件为什么会重复渲染?”

这类任务的关键不是生成,而是搜索、归纳和解释。Agent 可以帮助我们快速建立代码地图。

2. 小到中等范围改动

这类任务通常有清晰边界,例如:

  • 新增一个字段
  • 调整一个组件行为
  • 修复一处已知 bug
  • 重构一个局部模块

前提是:文件范围可控,验收方式明确。

3. 代码审查辅助

Agent 非常适合做第一轮风险扫描,例如:

  • 有没有漏掉空值判断
  • 是否破坏了类型契约
  • 有没有明显的回归风险
  • 测试覆盖是否不足

它不能替代正式 review,但能让评审更快进入关键问题。

4. 验证与总结

改完代码后,让 Agent:

  • 跑 lint / typecheck / test
  • 汇总失败点
  • 生成变更说明
  • 标出还需要人工确认的地方

这一段对交付质量的帮助,通常比“多生成 200 行代码”更大。

04.一个更实际的 AI Coding 流程

下面这套流程更接近真实仓库中的可用方式:

第一步:先缩小问题范围

不要直接说“帮我优化这个项目”。更有效的输入通常是:

  • 改动目标
  • 涉及页面或模块
  • 预期行为
  • 不能破坏的约束
  • 验收方式

比如:

把博客详情页目录改成只展示 h2 和 h3,保持现有样式不变,修改后跑 typecheck。

这种任务定义对 Agent 很友好,因为边界和验收都清楚。

第二步:让 Agent 先做探索,再做修改

好的代码 Agent 不应该一上来就写。它应该先回答:

  • 入口文件在哪里
  • 相关类型和依赖在哪
  • 有没有相似实现可以复用
  • 当前仓库有没有特殊约束

这一步本质上是在做“局部建模”,避免盲改。

第三步:把修改和验证绑在一起

如果只生成补丁,不验证,最后还是要人工补做大量收尾工作。

更稳妥的方式是要求 Agent 在同一条任务流里完成:

  • 修改代码
  • 运行校验
  • 报告结果

这一步能大幅减少“看起来改好了,实际上跑不通”的情况。

05.一个简单的任务执行器骨架

下面这个例子不是完整产品,而是说明代码 Agent 在系统内部可以怎么组织:

python snippetpython
from dataclasses import dataclass, field


@dataclass
class CodingTask:
    goal: str
    constraints: list[str]
    files_touched: list[str] = field(default_factory=list)
    findings: list[str] = field(default_factory=list)
    changes: list[str] = field(default_factory=list)
    verification: list[str] = field(default_factory=list)


def run_coding_agent(task: CodingTask, repo_tools) -> CodingTask:
    # 1. 搜索相关代码
    task.findings.extend(repo_tools.search_code(task.goal))

    # 2. 读取上下文,生成修改方案
    plan = repo_tools.propose_patch(task.goal, task.constraints)

    # 3. 应用修改
    changed_files = repo_tools.apply_patch(plan)
    task.files_touched.extend(changed_files)
    task.changes.append(f"已修改 {len(changed_files)} 个文件")

    # 4. 跑校验
    verify_result = repo_tools.run_checks(["lint", "typecheck"])
    task.verification.append(verify_result)

    return task

这个骨架里最重要的不是实现细节,而是顺序:

  • 先建上下文
  • 再改
  • 改完立刻验证

只要这个顺序是稳定的,工具实现换成 IDE 插件、命令行代理或者 CI 机器人都可以。

06.哪些事情不要轻易全权交给 Agent

高风险改动

例如权限、计费、订单、隐私数据处理。这类改动可以让 Agent 帮忙做分析和草拟,但最终决策和验收不该自动化。

缺乏验收标准的开放式重构

“帮我把这个仓库架构优化一下”通常就是灾难起点。没有清晰目标时,Agent 只能猜,而不是工程化推进。

依赖隐式知识的改动

有些改动强依赖团队约定、历史背景、灰度流程、外部系统行为。这些知识不在代码里,Agent 很难完全补齐。

07.提升效果的三个关键做法

让上下文尽量结构化

与其丢一句“修一下这个 bug”,不如明确:

  • 复现方式
  • 预期行为
  • 怀疑范围
  • 校验命令

这会直接提升输出稳定性。

控制每次改动的范围

小步修改比大面积生成更适合真实项目。一次只做一个目标,能让问题更容易回溯,也更方便 review。

永远保留人工验收

Agent 可以替你做很多事,但“是否合并、是否上线、是否真的符合业务预期”仍然需要人来兜底。

尤其在多人协作里,AI 更像一个高效率执行同伴,而不是一个能脱离上下文独立负责结果的人。

08.总结

AI Coding 真正有价值的方向,不是追求一键写完整个系统,而是把开发过程中的高频机械动作组织成稳定流程:

  • 搜索和理解上下文
  • 生成小范围改动
  • 自动跑验证
  • 输出可审阅的结论

当你把它当成“可控交付流”的组成部分,而不是“全自动程序员”,它在真实工程里的价值会更大,也更容易长期用下去。