Skip to content

第二课:手工工具调用

目标

不借助运行框架,完整展开一次“模型选择工具、程序执行工具、模型整理结果”的过程。

源码:02-manual-tool.ts

运行:

bash
npm run lesson:02

流程

正在绘制流程图…

第一次模型决定

typescript
const firstDecision = await model.decide(messages, [weatherTool]);

模型返回的不是天气,而是一个工具请求:

typescript
{
  type: "tool",
  call: {
    name: "weather",
    arguments: { city: "杭州" }
  }
}

模型只提出工具名称和参数,真正执行工具的是应用程序。

执行工具

typescript
const toolOutput = await weatherTool.execute(
  firstDecision.call.arguments,
);

工具结果被写回消息:

typescript
messages.push({
  role: "tool",
  name: "weather",
  content: toolOutput,
});

第二次模型决定

模型重新看到原问题和工具结果,随后选择:

typescript
{
  type: "final",
  content: "我已经取得工具结果:杭州小雨,25°C"
}

这不是固定需要两次调用。如果模型还需要第二个工具,它可以继续请求工具。

是否一定需要第二次模型调用

不一定。简单事实可以直接使用模板:

typescript
return `杭州今天${weather.condition},${weather.temperature}°C`;

以下情况更适合再次调用模型:

  • 多个工具结果需要综合;
  • 搜索资料需要总结;
  • 用户要建议、比较或规划,而不是原始数据;
  • 工具失败后需要判断重试、替代或追问。

本课结论

模型请求工具,程序执行工具,工具结果再成为模型可以观察的新信息。

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