端到端编码 Agent:缝合整条赛道 本节摘要:Agent Harness 赛道的回报。本节把门链、沙箱、评估套件、OTel span 缝成一个能修真实(小、夹具规模)bug 的多文件 Python 项目编码 Agent。Agent 是确定性策略而非 LLM——这个替换让本节可复现,并证明外壳一直是有趣的部分。契约一致:真模型在策略缝处插进去。多数 Agent demo 各自孤立工作(沙箱单跑、评估单跑、span 单跑),看着都行,一组合缝就露:门链说 ALLOW 但沙箱因链没预料的原因拒绝;评估记 pass 但 OTel span 说门拒了 Agent 声称用过的工具;计数器该 +1 却 +2。本节是整条赛道的集成测试。
本节摘要:Agent Harness 赛道的回报。本节把门链、沙箱、评估套件、OTel span 缝成一个能修真实(小、夹具规模)bug 的多文件 Python 项目编码 Agent。Agent 是确定性策略而非 LLM——这个替换让本节可复现,并证明外壳一直是有趣的部分。契约一致:真模型在策略缝处插进去。多数 Agent demo 各自孤立工作(沙箱单跑、评估单跑、span 单跑),看着都行,一组合缝就露:门链说 ALLOW 但沙箱因链没预料的原因拒绝;评估记 pass 但 OTel span 说门拒了 Agent 声称用过的工具;计数器该 +1 却 +2。本节是整条赛道的集成测试。
对应原课程:Phase 19 · Lesson 29 ·
end-to-end-coding-task-demo(原英文phases/19-capstone-projects/29-end-to-end-coding-task-demo/docs/en.md)。本节属「Agent Harness 深度构建赛道」第十节(收官)。
阅读完本节,你应当能够:
多数 Agent demo 各自孤立工作:沙箱单跑、评估单跑、span 发射器单跑,看着都行。一组合缝就露。门链说 ALLOW 但沙箱因链没预料的原因拒绝。评估记 pass 但 OTel span 说门拒了 Agent 声称用过的工具。Prometheus 计数器该 +1 却 +2。观察预算超了但 Agent 继续跑,因为预算在链里跟踪、沙箱不知道。
本节是整条赛道的集成测试。Agent 得按序做四件:读项目、跑测试、从测试失败认 bug、写修复、重跑测试、停。每个操作经门链,每个工具执行经沙箱,每步包进 span,评估套件末尾给整件事打分。
Agent 策略是状态机,五态。SURVEY:读项目清单,下一态 RUN_TESTS。RUN_TESTS:跑测试命令,过了则成功停,否则下一态 INSPECT。INSPECT:读失败源文件,下一态 FIX。FIX:写修正文件,下一态 VERIFY。VERIFY:再跑测试命令,过了成功停,否则失败停。每态对应一次工具调用,每次工具调用经门链;被拒则 Agent 在 trace 里报拒绝并停。
class CodingAgentPolicy: STATES = ["SURVEY", "RUN_TESTS", "INSPECT", "FIX", "VERIFY"] def next_action(self, state, observation): if state == "SURVEY": return read_file("src/fizz.py") if state == "RUN_TESTS": return run_tests() if state == "INSPECT": return read_file("src/fizz.py") if state == "FIX": return write_file("src/fizz.py", FIXED) if state == "VERIFY": return run_tests()
夹具 bug 是 fizz.py 的差一。确定性策略经测试失败消息的正则认出 bug,发修正文件。把策略换成 LLM 不改外壳契约。
本节自包含。每个前节原语在 main.py 里以最小规模重实现(门、沙箱、账本、span),这样本节无需 import 兄弟节。名字与第 25~28 节完全一致,概念映射无歧义。
真 LLM 需要 API key、网络调用、不可验证的随机性。外壳是本节在乎的部分。替成确定性策略让本节在任意开发者笔记本上零外部依赖运行,让测试套件能断言精确步数。本节策略是 LLM Agent 所做的严格子集:读仓库、看失败测试、认行、发修复。LLM 走同一循环、同一外壳契约,簿记一模一样。
main.py 发:最小外壳原语(名字同第 25~28 节:GateChain、Sandbox、ObservationLedger、SpanBuilder、MetricsRegistry)、CodingAgentPolicy(五态状态机)、Repo 助手(备捆绑 buggy 夹具的 scratch 目录)、AgentRun(驱动策略、经外壳派发、返回 AgentRunReport)、捆绑夹具 fixture_repo/(src/fizz.py、tests/test_fizz.py、expected/ 树)。demo 端到端跑策略,打逐步 trace,断言 pass,打指标。夹具形状同第 27 节:buggy 文件 + tests 文件,测试失败消息含够多信息让确定性策略认出修复。
端到端 demo 在退出时断言五件事,测试套件编程再断言:
tools_called_total{tool="read_file"} 条目与 tool_latency_ms 直方图。cd phases/19-capstone-projects/29-end-to-end-coding-task-demo python3 code/main.py # 打逐步 trace + 最终 eval 报告 + Prometheus 呈现 python3 -m pytest code/tests/ -v
dangerous_tool 名,确认门链拒绝、span 标 ERROR、Agent 停。以上 Agent Harness 深度构建赛道十节完成。下一节起,我们进入第三条赛道——「从零构建 GPT」,从 BPE 分词器开始,逐层搭出一个能训练的 GPT。