Skip to content

第三课: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 → 保存结果
未结束 → 下一轮模型判断

内容仅供学习参考 · 隐私说明与免责声明见“关于”页面