外观
第三课:Agent 循环
目标
把第二课写死的一次工具调用,抽成可以连续运行任意多个工具的通用循环。
源码:
运行:
bash
npm run lesson:03核心循环
正在绘制流程图…
运行器每轮调用:
typescript
const decision = await model.decide(messages, tools);如果是最终答案:
typescript
if (decision.type === "final") {
return {
finalOutput: decision.content,
messages,
steps: step,
};
}如果是工具请求:
typescript
const tool = tools.find(
candidate => candidate.name === decision.call.name,
);
const output = await tool.execute(decision.call.arguments);
messages.push({ role: "tool", name: tool.name, content: output });没有 return,程序就回到循环开头,再让模型判断。
工具不是任意权限
模型只能请求 tools 参数中明确提供的工具。不存在的工具会产生错误结果,不会直接执行。
停止条件
typescript
const maxSteps = options.maxSteps ?? 8;超过最大轮数仍未得到最终答案,运行器会强制停止,防止无限循环。
本课结论
text
final → return → 结束
tool → execute → 保存结果
未结束 → 下一轮模型判断