让 Agent 编辑你的代码
本教程带你走完完整的 Agent 编辑循环:编写代码、引入 bug、让 Agent 诊断并修复、验证结果。你将体验 Zerolang 的结构化诊断和图优先设计如何让 Agent 辅助开发变得可靠。
前置条件:已安装 Zerolang(zero --version 正常工作)。不需要 Agent 框架,你可以手动跟随操作。
时间:约 20 分钟
第一步:写一个有 Bug 的程序
创建文件 agent-demo.0:
pub fn main(world: World) -> Void raises {
let greeting: String = "hello"
check world.out.write(message)
}
这个程序有一个 bug:message 没有声明。应该是 greeting。
第二步:让编译器诊断
用 JSON 输出运行编译器:
zero check --json agent-demo.0
输出是结构化 JSON:
{
"schemaVersion": 1,
"ok": false,
"diagnostics": [
{
"severity": "error",
"code": "NAM003",
"message": "unknown identifier 'message'",
"path": "agent-demo.0",
"line": 3,
"column": 27,
"length": 7,
"expected": "visible local, parameter, function, or builtin",
"actual": "no visible symbol named 'message'",
"help": "declare the name before using it",
"fixSafety": "behavior-preserving",
"repair": {
"id": "manual-review",
"summary": "Inspect the diagnostic fields and choose a repair manually."
},
"related": []
}
]
}
注意:以上仅展示诊断相关字段。完整的
zero check --json输出还包含顶层的graph、compileTime、targetReadiness和safetyFacts对象。
Agent 读取这些信息就能知道:
- 什么问题:标识符
message不存在 - 在哪里:第 3 行,第 27 列
- 为什么:从未声明
- 怎么修:在使用前声明名称
- 安全性:
behavior-preserving— 可以安全自动修复
第三步:请求修复计划
Agent 向编译器请求类型化修复计划:
zero fix --plan --json agent-demo.0
编译器返回结构化的修复元数据。fixSafety 标签告诉 Agent 是否可以自主应用修复:
format-only— 仅改变格式,可以安全应用behavior-preserving和local-edit→ 可以安全应用api-changing→ 提议变更,但需要确认requires-human-review→ 停下来,询问人类
第四步:应用修复
Agent 会以编程方式应用修复。本教程中,手动修复:
pub fn main(world: World) -> Void raises {
let greeting: String = "hello"
check world.out.write(greeting)
}
第五步:验证修复
zero check --json agent-demo.0
{
"schemaVersion": 1,
"ok": true,
"diagnostics": []
}
ok: true — 程序干净了。
第六步:检查 ProgramGraph
现在通过图来查看程序:
zero graph dump --json agent-demo.0
输出包含节点(声明、表达式、类型)、边(调用、数据流)和元数据。这就是 Agent 看到的:不是原始文本,而是结构化的语义事实。
关键字段:
moduleIdentity— 模块标识graphHash— 内容哈希,程序语义改变时会变化validation— 图验证状态counts— 节点和边的计数nodes— 程序中的每个声明、表达式和类型edges— 节点之间的关系(调用、导入、数据流)