外观
第二课:手工工具调用
目标
不借助运行框架,完整展开一次“模型选择工具、程序执行工具、模型整理结果”的过程。
运行:
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`;以下情况更适合再次调用模型:
- 多个工具结果需要综合;
- 搜索资料需要总结;
- 用户要建议、比较或规划,而不是原始数据;
- 工具失败后需要判断重试、替代或追问。
本课结论
模型请求工具,程序执行工具,工具结果再成为模型可以观察的新信息。