$assistantName, "instructions" => $instructions, "model" => ASSISTANT_MODEL, "tools" => [ ["type" => "file_search"] ] ]; $body = json_encode($data, JSON_UNESCAPED_UNICODE); $curl = curl_init(OPENAI_ASSISTANT_API); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . OPENAI_API_KEY, 'OpenAI-Beta: assistants=v2' ], ]); $response = curl_exec($curl); curl_close($curl); $decoded = json_decode($response, true); if (!empty($decoded['id'])) { echo "✅ Ассистент создан, ID: " . $decoded['id'] . "\n"; return $decoded['id']; } echo "❌ Ошибка создания ассистента: " . ($decoded['error']['message'] ?? json_encode($decoded)) . "\n"; return null; } // 🔹 Получение списка файлов из директории function getFilesFromDirectory(string $directory): array { $supported = ['txt','pdf','doc','docx']; $files = []; if (!is_dir($directory)) { echo "❌ Директория не найдена: {$directory}\n"; return $files; } foreach (scandir($directory) as $file) { if (in_array($file, ['.','..'], true)) continue; $path = realpath("{$directory}/{$file}"); $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); if (is_file($path) && in_array($ext, $supported, true)) { $files[] = $path; } else { echo "⚠️ Пропущен неподдерживаемый файл: {$path}\n"; } } return $files; } // 🔹 Загрузка файла в OpenAI function uploadFileToOpenAI(string $filePath): ?string { echo "📂 Загружаем файл: {$filePath}\n"; $curl = curl_init(OPENAI_FILES_API); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . OPENAI_API_KEY, 'OpenAI-Beta: assistants=v2' ], CURLOPT_POSTFIELDS => [ 'file' => new CURLFile($filePath), 'purpose' => 'assistants' ], ]); $response = curl_exec($curl); curl_close($curl); $decoded = json_decode($response, true); if (!empty($decoded['id'])) { return $decoded['id']; } echo "❌ Ошибка загрузки файла: " . ($decoded['error']['message'] ?? json_encode($decoded)) . "\n"; return null; } // 🔹 Привязка загруженных файлов к ассистенту function attachFilesToAssistant(string $assistantId, array $fileIds): void { echo "📡 Привязываем файлы к ассистенту {$assistantId}...\n"; $payload = json_encode([ "tool_resources" => [ "file_search" => ["file_ids" => $fileIds] ] ], JSON_UNESCAPED_UNICODE); $curl = curl_init(OPENAI_ASSISTANT_API . "/{$assistantId}"); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $payload, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . OPENAI_API_KEY ], ]); $response = curl_exec($curl); curl_close($curl); echo "✅ Файлы успешно привязаны к ассистенту.\n"; } // 🔹 Основная функция: создаём ассистента и загружаем файлы function setupAssistantWithFiles(string $directory): void { $assistantName = "Clientright"; $instructions = "Ты юридический аналитик. Проанализируй материалы согласно инструкции."; // Создаём ассистента $assistantId = createAssistant($assistantName, $instructions); if (!$assistantId) { exit("❌ Не удалось создать ассистента.\n"); } // Получаем файлы из директории $files = getFilesFromDirectory($directory); if (empty($files)) { exit("❌ В директории '{$directory}' нет поддерживаемых файлов.\n"); } // Загружаем каждый файл $uploadedIds = []; foreach ($files as $filePath) { $fileId = uploadFileToOpenAI($filePath); if ($fileId) { $uploadedIds[] = $fileId; } } // Привязываем файлы к ассистенту if (!empty($uploadedIds)) { attachFilesToAssistant($assistantId, $uploadedIds); } echo "🎉 Ассистент готов к работе!\n"; } // 📌 Укажите папку с вашими документами $directory = __DIR__ . '/documents'; // 🚀 Запускаем процесс setupAssistantWithFiles($directory);