Previous
Day 18 · Tool Safety and Permission Boundaries
Next
Day 20 · Weekly Review 4: Tool-Based Agent Demo
工具与 MCP
Day 1960 minutesAI Agent 动手实践

Day 19 - Coding Agent Basics

今日目标

能设计「修复测试脚本失败」的 Coding Agent 完整流程,说清代码库上下文与测试闭环。

学习安排

时间模块做什么
0-10 分钟核心概念通读当天术语表,圈出 3 个你最想在工作里用上的概念。
10-25 分钟阅读输入精读当天章节重点,只抓问题、思路、结论。
25-45 分钟实践任务动手完成输出模板,必须产出一份可复用产物。
45-55 分钟追问与反思回答追问练习,标记卡住的概念。
55-60 分钟复盘与作业整理自检清单,定下明天要复习的一点。

核心概念

术语中文解释应用场景
coding agent编码代理:能读写代码、运行测试、修复问题的 Agent,代码是它最重要的工具自动修复 CI 上失败的测试脚本
codebase context代码库上下文:Agent 需要理解的项目结构、依赖、约定与相关文件定位测试文件、理解被测模块
patch补丁:Agent 生成的代码改动,合入前应经过 review修复断言错误后输出 diff
diff差异:改动以增删行的形式呈现,便于审查与回滚在 PR 里查看 Agent 改了什么
regression risk回归风险:改动破坏既有功能的可能性修改公共工具函数后跑全部相关用例
test loop测试闭环:改代码 -> 跑测试 -> 看结果 -> 再改的循环修复后重跑失败用例并确认通过
code review代码审查:人对 Agent 改动的人工检查环节等待测试负责人 review 变更
auto-merge policy自动合并策略:什么条件下允许 Agent 改动免 review 直接合入仅文档或测试数据改动可自动合并
repo map仓库地图:项目文件结构与模块关系的索引,帮助 Agent 快速定位从失败用例名定位到 test_login.py
sandbox沙箱:隔离的运行环境,Agent 在其中安全执行代码与测试容器里跑 pytest,无法触碰生产数据

阅读重点

  • 对应章节:第 5 章「Coding Agent 与代码生成」。
  • 关注点:
  • 代码是能创造新工具的工具:Coding Agent 可以写工具来扩展自己的能力。
  • 代码库上下文:不理解项目结构的 Agent 只会盲改,改错地方的概率极高。
  • 生产级 Coding Agent 工作流:测试闭环、patch、review、合入策略。
  • 为什么必须运行测试:模型生成的代码不能只靠「看起来对」。
  • 补充材料:
  • Anthropic 官方 coding agent 资料(Claude Code 与 agentic coding 工作流)。
  • 开源 coding agent(如 OpenHands)的设计文档与评测方式。

理解检查

  • Coding Agent 和普通代码生成(一次生成一段代码)有什么区别?
  • 为什么代码库上下文很重要?没有它,Agent 最可能在哪个环节出错?
  • 为什么必须运行测试?「看起来正确」和「验证过」差在哪里?
  • Agent 生成的 patch 是否可以直接自动合并?什么条件下可以?

实践任务

背景:你们的回归测试脚本在 CI 上失败,你想设计一个 Coding Agent 流程来自动修复,但必须保证「改得对、改得少、可回退」。

步骤:

  • 按 7 步设计流程:读取失败日志、定位测试文件、理解项目结构、修改代码、运行测试、输出变更说明、等待人工 review。
  • 每一步写清:输入、输出、检查点(做对没有)。
  • 为「运行测试」设计范围:先跑失败用例,再跑同文件相关用例,最后跑冒烟集。
  • 标注每一步失败时的处理方式。

产出:一份 coding_agent_flow.md,含 7 步流程骨架与每步的失败处理。

输出模板

Coding Agent 流程: 修复测试脚本失败
1. 读取失败日志
   输入: [CI 日志地址或文件]
   输出: [失败用例、错误信息、堆栈]
   检查: [错误类型是否明确;失败时 -> 报告人工,不猜测]
2. 定位测试文件
   输入: [失败用例名]
   输出: [测试文件路径 + 相关行号]
   检查: [文件存在、可读;失败时 -> 用 repo map 重试一次]
3. 理解项目结构
   输入: [测试文件]
   输出: [被测模块、依赖、代码约定]
   检查: [改动边界是否清楚;不清楚 -> 只读不改]
4. 修改代码
   输入: [定位结果 + 修复假设]
   输出: [patch / diff]
   检查: [改动最小化、不碰无关文件]
5. 运行测试
   输入: [patch]
   输出: [失败用例 + 相关用例结果]
   检查: [原失败用例通过且无新失败;否则回到第 4 步]
6. 输出变更说明
   输入: [修复过程记录]
   输出: [根因、改动内容、验证结果]
7. 等待人工 review
   输入: [变更说明 + diff]
   输出: [review 结论: 合入 / 打回]

示范输出

Coding Agent 流程: 修复 test_force_logout 失败
1. 读取失败日志
   输入: ci_logs/job_4521.txt
   输出: test_login.py::test_force_logout FAILED,AssertionError: assert '登录成功' not in response.text
2. 定位测试文件
   输出: tests/api/test_login.py 第 42 行断言
3. 理解项目结构
   输出: 被测模块 app/services/auth.py;依赖 fixtures/login_fixture.py;约定: 接口返回 JSON,code=0 表示成功
4. 修改代码
   修复假设: 后端新增 force_logout 状态码,成功响应里不再有「登录成功」文案
   输出 patch:
   - 断言改为兼容 code=0 与文案两种成功形态
   - 不触碰其他断言与文件
5. 运行测试
   pytest tests/api/test_login.py -k force_logout -> 1 passed
   pytest tests/api/ -> 42 passed,无回归
6. 输出变更说明
   根因: 接口返回结构调整;改动: 断言兼容新旧结构;验证: 42 个用例全部通过
7. 等待人工 review
   提交 PR,等待测试负责人 review 后合入

追问练习

  • 如何降低 Coding Agent 引入回归的风险?除了跑测试还有哪些手段?
  • Agent 改了 5 个文件才修好 1 个用例,你会打回吗?依据什么判断?
  • 测试断言本身写错了,Agent 怎么识别「该改代码」而不是「该改测试」?
  • auto-merge policy 该怎么定?哪些类型的改动允许免 review?

常见误区

  • 把代码生成当 Coding Agent:不读上下文、不跑测试的生成只是一次性补全。
  • 只跑失败的那一条用例:相关用例不跑,回归风险完全没被覆盖。
  • 让 Agent 改测试来「通过」:测试被改坏比代码改坏更难发现。
  • patch 直接合入:没有 review 与回滚路径,出问题无法收场。

进阶扩展

  • 生产级 Coding Agent:沙箱执行、并行测试、快照与回滚。
  • 评估 Coding Agent:用真实失败 issue 做 eval,比较修复成功率与改动规模。
  • 合入策略与保护:code review 规则、auto-merge 白名单、危险文件只读。

今日作业

  • 完成 coding_agent_flow.md 流程设计(7 步 + 每步检查点)。
  • 用你手头一个真实失败用例走一遍流程,写出伪步骤。
  • 为 auto-merge policy 定 3 条规则。
  • 明天开始前,解释为什么「运行测试」是闭环的关键。

自检清单

Previous
Day 18 · Tool Safety and Permission Boundaries
Next
Day 20 · Weekly Review 4: Tool-Based Agent Demo