diff --git a/app/Http/Controllers/Admin/AiProviderController.php b/app/Http/Controllers/Admin/AiProviderController.php index c19e62d..985dcfa 100644 --- a/app/Http/Controllers/Admin/AiProviderController.php +++ b/app/Http/Controllers/Admin/AiProviderController.php @@ -203,10 +203,11 @@ class AiProviderController extends Controller /** * 测试指定 AI 厂商的接口连通性 * - * 发送一条简短的测试消息,返回响应结果和耗时,用于验证配置是否正确。 + * 通过 GET /v1/models 检查端点可达性与 API Key 有效性,毫秒级响应, + * 不触发模型推理,避免经 Cloudflare 代理时因推理耗时导致 524 超时。 * * @param int $id 厂商配置 ID - * @return JsonResponse 测试结果 + * @return JsonResponse 测试结果(含可用模型列表) */ public function testConnection(int $id): JsonResponse { @@ -214,25 +215,20 @@ class AiProviderController extends Controller $apiKey = $provider->getDecryptedApiKey(); $base = rtrim($provider->api_endpoint, '/'); - $endpoint = str_ends_with($base, '/v1') - ? $base.'/chat/completions' - : $base.'/v1/chat/completions'; + + // 拼接 /v1/models 端点(检查连通性,不触发推理) + $modelsUrl = str_ends_with($base, '/v1') + ? $base.'/models' + : $base.'/v1/models'; $startTime = microtime(true); try { $response = \Illuminate\Support\Facades\Http::withToken($apiKey) - ->timeout(60) // Ollama 本地模型冷启动较慢,给 60s - ->post($endpoint, [ - 'model' => $provider->model, - 'messages' => [ - ['role' => 'user', 'content' => '请用一句话介绍你自己。'], - ], - 'max_tokens' => 64, - ]); + ->timeout(10) + ->get($modelsUrl); $ms = (int) ((microtime(true) - $startTime) * 1000); - $data = $response->json(); if (! $response->successful()) { return response()->json([ @@ -242,13 +238,24 @@ class AiProviderController extends Controller ]); } - $reply = $data['choices'][0]['message']['content'] ?? '(无回复内容)'; + $data = $response->json(); + + // 提取可用模型列表(兼容 Ollama 和 OpenAI 格式) + $models = collect($data['models'] ?? $data['data'] ?? []) + ->pluck('id') + ->filter() + ->values() + ->toArray(); + + $modelList = count($models) > 0 + ? implode('、', array_slice($models, 0, 5)).(count($models) > 5 ? ' 等' : '') + : $provider->model; return response()->json([ 'ok' => true, - 'message' => trim($reply), + 'message' => "接口连通正常,可用模型:{$modelList}", 'ms' => $ms, - 'model' => $data['model'] ?? $provider->model, + 'models' => $models, ]); } catch (\Illuminate\Http\Client\ConnectionException $e) { $ms = (int) ((microtime(true) - $startTime) * 1000);