试读章节:Agent Loop 的完整生命周期
这篇放一段《Agent Runtime 工程化》的试读。
不是整章原样贴。
我把第三章里最核心的部分抽出来,重新整理成一篇社区版:一次 Agent Loop 到底应该怎么跑。
很多 Agent 教程会把主循环写成:
用户输入
调用模型
模型调用工具
工具结果返回模型
模型输出答案
这张图没错。
只是太薄。
真正写 Runtime 时,你会发现每一步都有边界。
模型不是直接执行者。模型只是提出下一步。
Runtime 才负责校验、审批、执行、记录和停止。
一次 Agent Loop 不只是 while
最小循环可以写得很短:
while (step < maxSteps) {
const response = await model.complete(messages, tools);
if (response.final) return response.text;
for (const call of response.toolCalls) {
const result = await tools[call.name](call.input);
messages.push(toToolMessage(result));
}
}
教学时,这段代码很好。
但生产里,它至少漏了这些问题:
工具名不存在怎么办?
参数缺字段怎么办?
路径越过 workspace 怎么办?
写文件是否需要用户批准?
工具输出太大怎么办?
工具失败后能不能重试?
这一步是否写入 trace?
中断后从哪里恢复?
为什么最终停止?
所以本书里,我更愿意把 Agent Loop 看成一个生命周期,而不是一个 while loop。
第一步:创建 Run
用户看到一句话:
帮我修复这个测试失败。
Runtime 看到的是一次 run。
它至少要创建:
type RuntimeIds = {
sessionId: string;
runId: string;
turnId: string;
traceId: string;
};

