amber-laravel/app/Logic/LLMTool.php
2024-07-25 01:16:41 +08:00

54 lines
1.4 KiB
PHP

<?php
namespace App\Logic;
use App\Repositories\LLM\FunctionCall;
use Illuminate\Support\Facades\Http;
class LLMTool
{
protected string $callback_url;
public function setCallbackUrl(string $callback_url): void
{
$this->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;
}
}