diff --git a/app/Http/Controllers/Api/ToolController.php b/app/Http/Controllers/Api/ToolController.php index 027f66d..92bb649 100644 --- a/app/Http/Controllers/Api/ToolController.php +++ b/app/Http/Controllers/Api/ToolController.php @@ -44,18 +44,23 @@ public function store(Request $request) $json = Http::get($url); - $toolRepo = new ToolRepo($json->json()); $tool = new Tool(); - $tool->create([ - 'name' => $toolRepo->name, - 'description' => $toolRepo->description, + $tool = $tool->create([ + 'name' => "", + 'description' => "", 'discovery_url' => $url, 'api_key' => $request->input('api_key'), - 'data' => $toolRepo, 'user_id' => $request->user('api')->id, ]); + $toolRepo = new ToolRepo($tool->id, $json->json()); + $tool->update([ + 'name' => $toolRepo->name, + 'description' => $toolRepo->description, + 'data' => $toolRepo, + ]); + return $this->created($tool); } diff --git a/app/LLM/Qwen.php b/app/LLM/Qwen.php index bc9ecf3..26374e9 100644 --- a/app/LLM/Qwen.php +++ b/app/LLM/Qwen.php @@ -231,7 +231,7 @@ private function callTool($tool_name, $args): string foreach ($tool->data['tool_functions'] as $f) { if ($f['function']['name'] == $tool_name) { $c = new LLMTool(); - $c->setCallbackUrl($tool->data['callback_url']); + $c->setTool($tool->data['tool_id']); $r = $c->callTool($tool_name, $args); return $r->result; diff --git a/app/Logic/LLMTool.php b/app/Logic/LLMTool.php index fcc944c..86097fc 100644 --- a/app/Logic/LLMTool.php +++ b/app/Logic/LLMTool.php @@ -2,18 +2,23 @@ namespace App\Logic; +use App\Models\Tool; use App\Repositories\LLM\FunctionCall; +use Illuminate\Http\Client\ConnectionException; use Illuminate\Support\Facades\Http; class LLMTool { - protected string $callback_url; + protected Tool $tool; - public function setCallbackUrl(string $callback_url): void + public function setTool(int $tool_id): void { - $this->callback_url = $callback_url; + $this->tool = Tool::findOrFail($tool_id); } + /** + * @throws ConnectionException + */ public function callTool(string $function_name, $parameters = []): FunctionCall { // 使用 _ 分割 @@ -22,7 +27,7 @@ public function callTool(string $function_name, $parameters = []): FunctionCall $function_name = substr($function_name, $prefix_length); - $http = Http::post($this->callback_url, [ + $http = Http::withToken($this->tool->api_key)->post($this->tool->data['callback_url'], [ 'function_name' => $function_name, 'parameters' => $parameters, ]); @@ -31,7 +36,7 @@ public function callTool(string $function_name, $parameters = []): FunctionCall $r->name = $function_name; $r->parameters = $parameters; - if (! $http->ok()) { + if (!$http->ok()) { $r->success = false; $r->result = "[Error] 我们的服务器与工具 $function_name 通讯失败"; } @@ -39,13 +44,13 @@ public function callTool(string $function_name, $parameters = []): FunctionCall $d = $http->json(); // 必须有 success 和 message 两个 - if (! isset($d['success']) || ! isset($d['message'])) { + if (!isset($d['success']) || !isset($d['message'])) { $r->success = false; $r->result = "[Error] 和 工具 $function_name 通讯失败,返回数据格式错误。"; return $r; } - $r->success= $d['success']; + $r->success = $d['success']; $r->result = $d['message']; return $r; diff --git a/app/Repositories/Tool/Tool.php b/app/Repositories/Tool/Tool.php index c8e573a..e7d932e 100644 --- a/app/Repositories/Tool/Tool.php +++ b/app/Repositories/Tool/Tool.php @@ -13,6 +13,7 @@ class Tool public string $callback_url; public string $description; + public int $tool_id; public array $tool_functions; @@ -21,9 +22,10 @@ class Tool /** * @throws Exception */ - public function __construct(array $data) + public function __construct(int $tool_id, array $data) { $this->data = $data; + $this->tool_id = $tool_id; $this->parse(); }