callback_url = $callback_url; } 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::post($this->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; } }