Client tools
角色的客户端工具在你的页面里执行:模型决定调用某个工具,由你的代码去做——打开商品页、加入购物车、弹出表单。
你在控制台或用 POST /v1/tools 创建工具(type: "client",一个 name,一段告诉模型什么时候用它的 description,
以及 JSON Schema 格式的 parameters),并把它挂到角色上。然后在加入会话之前注册它要做的事:
const stop = client.registerToolCallHandler("open_product", {
onStart: async ({ toolName, arguments: args }) => {
showProduct(args.productId);
return { shown: true }; // 结果:字符串原样返回,其他值转成 JSON
},
onComplete: ({ result, executionTime }) => {},
onFail: ({ errorMessage }) => {}, // onStart 里抛出的错误
});
stop(); // 不再处理arguments按工具的parametersschema,由模型填写。- 工具设了
awaitResult时,模型会拿到onStart的结果,要在toolTimeoutSeconds(默认 10)秒内返回,否则模型会得知应用没有及时回应。 不设awaitResult(默认)时,模型立刻继续说下去;你的处理函数照样执行。 onStart里抛出的错误会作为错误信息交给模型,让它告诉用户——所以抛出人能看懂的话:throw new Error("That product is out of stock")。- 没有注册处理函数的工具,会立刻告诉模型这一点。
- 超过 15 KB 的结果会被截断;模型最多读前 4,000 个字符。
- 每个工具名只有一个处理函数;再次注册会替换掉原来的。