tool = Tool::findOrFail($tool_id); } /** * @throws ConnectionException */ public function callTool(string $function_name, $parameters = []): FunctionCall { // 使用 _ 分割 $names = explode('_', $function_name)[0]; $prefix_length = strlen($names) + 1; $function_name = substr($function_name, $prefix_length); $http = Http::withToken($this->tool->api_key)->post($this->tool->data['callback_url'], [ 'function_name' => $function_name, 'parameters' => $parameters, ]); $r = new FunctionCall(); $r->name = $function_name; $r->parameters = $parameters; if (!$http->ok()) { $r->success = false; $r->result = "[Error] 我们的服务器与工具 $function_name 通讯失败"; } $d = $http->json(); // 必须有 success 和 message 两个 if (!isset($d['success']) || !isset($d['message'])) { $r->success = false; $r->result = "[Error] 和 工具 $function_name 通讯失败,返回数据格式错误。"; return $r; } $r->success = $d['success']; $r->result = $d['message']; return $r; } }