"error", "message" => "Некорректный ID."], JSON_UNESCAPED_UNICODE)); } $GLOBALS['caseId'] = $id; // 1️⃣ Получаем данные из базы $pdo = getDbConnection(); $documents = fetchDocumentData($pdo, $id); if (empty($documents)) { logMessage("Документы не найдены для ID: $id"); die("Документы не найдены для ID: $id"); } logMessage("✅ Документы получены: " . json_encode($documents, JSON_UNESCAPED_UNICODE)); // 2️⃣ Извлекаем текст из документов $combinedContent = ""; foreach ($documents as $doc) { if (empty($doc['filepath'])) continue; $text = extractText($doc['filepath']); if (!empty($text)) { $combinedContent .= $text . "\n"; } } logMessage("📄 Собранный контент:\n" . $combinedContent); if (empty($combinedContent)) { logMessage("❌ Ошибка: анализ документов не дал результатов."); die("Ошибка: анализ документов не вернул результатов."); } // 3️⃣ Первый запрос в GPT (извлекаем ключевые параметры дела) $threadId = createNewThread(); if (!$threadId) { logMessage("❌ Ошибка создания треда GPT"); die("Ошибка создания треда"); } logMessage("📤 Отправляем в GPT-4 на предварительный анализ..."); $parsedResponse = extractCaseDetailsWithGPT($threadId, ASSISTANT_ID, "", $combinedContent); if (!$parsedResponse) { logMessage("❌ Ошибка анализа обращения через GPT-4."); die("Ошибка анализа обращения через GPT-4"); } logMessage("✅ Ответ GPT-4 (ключевые параметры): " . json_encode($parsedResponse, JSON_UNESCAPED_UNICODE)); // 4️⃣ Генерируем эмбеддинг по `facts` $embedding = getTextEmbedding($parsedResponse['facts']); logMessage("🔍 Полученный эмбеддинг (первые 10 значений): " . json_encode(array_slice($embedding["embedding_1024"], 0, 10))); // 5️⃣ Ищем судебные решения в ElasticSearch logMessage("🔍 Выполняем поиск судебных решений..."); $searchResults = searchSimilarCases([ 'category' => $parsedResponse['category'], 'article' => implode(" ", $parsedResponse['articles']), 'amount' => $parsedResponse['claim_amount'], 'facts' => $parsedResponse['facts'], 'embedding' => $embedding ]); logMessage("✅ Найденные судебные решения: " . json_encode($searchResults, JSON_UNESCAPED_UNICODE)); // 6️⃣ Формируем итоговый промпт $embedding = getTextEmbedding($combinedContent); logMessage("🔍 Полученный эмбеддинг (первые 10 значений): " . json_encode(array_slice($embedding, 0, 10))); // Выполняем поиск судебных решений $searchResults = searchSimilarCases([ 'category' => $parsedResponse['category'], 'article' => implode(" ", $parsedResponse['articles']), 'amount' => $parsedResponse['claim_amount'], 'facts' => $parsedResponse['facts'], 'embedding' => $embedding ]); logMessage("✅ Найденные судебные решения: " . json_encode($searchResults, JSON_UNESCAPED_UNICODE)); // Формируем `finalPrompt` $finalPrompt = "Новый спор:\n" . $combinedContent . "\n\n" . "Контекст поиска судебных решений:\n\n"; foreach ($searchResults as $case) { $finalPrompt .= "- " . ($case['court_decision'] ?? "Нет данных") . "\n"; } // 7️⃣ Второй запрос в GPT (финальный анализ) logMessage("📤 Отправляем в GPT-4 финальный анализ..."); $analysis = analyzeDocumentWithAssistantStream($threadId, ASSISTANT_ID, "", $finalPrompt, $searchResults); if (!$analysis) { logMessage("❌ Ошибка анализа совокупного запроса"); die("Ошибка анализа совокупного запроса"); } logMessage("✅ Итоговый анализ от GPT-4:\n" . $analysis); // 8️⃣ Завершаем обработку logMessage("✅ Обработка всех документов завершена."); exit; } /* if ($_SERVER['REQUEST_METHOD'] === 'POST') { $id = $_POST['id'] ?? null; if (!$id) { $input = json_decode(file_get_contents('php://input'), true); $id = $input['id'] ?? null; } if (!$id || !is_numeric($id)) { logMessage("Ошибка: Некорректный ID."); die(json_encode(["status" => "error", "message" => "Некорректный ID."], JSON_UNESCAPED_UNICODE)); } $GLOBALS['caseId'] = $id; $pdo = getDbConnection(); $documents = fetchDocumentData($pdo, $id); if (empty($documents)) { logMessage("Документы не найдены для ID: $id"); die("Документы не найдены для ID: $id"); } logMessage("Документы получены из БД: " . json_encode($documents, JSON_UNESCAPED_UNICODE)); $filePathList = array_map(function($doc) { return $doc['filepath']; }, $documents); $previousAnalysis = checkPreviousAnalysis($id, $filePathList); logMessage("DEBUG: Значение предыдущего анализа: " . print_r($previousAnalysis, true)); if ($previousAnalysis) { logMessage("Найден сохранённый анализ, отправляем его в CRM."); exit; } else { logMessage("Сохранённый анализ не найден, продолжаем обработку."); } // Создание Vector Store и загрузка файлов $vectorStoreId = createVectorStore(); $uploadedFileIds = []; foreach ($filePathList as $filePath) { if (!file_exists($filePath)) { logMessage("Ошибка: Файл не существует: $filePath"); continue; } $fileId = uploadFileToOpenAI($filePath); if (!$fileId) { logMessage("Ошибка загрузки файла: $filePath"); continue; } if (!addFileToVectorStore($vectorStoreId, $fileId)) { logMessage("Ошибка добавления файла в Vector Store: $filePath"); } else { logMessage("Файл успешно добавлен в Vector Store: $filePath"); $uploadedFileIds[$filePath] = $fileId; } } if (!updateAssistantWithVectorStore($vectorStoreId)) { logMessage("Ошибка обновления ассистента с Vector Store"); die("Ошибка обновления ассистента"); } // Извлечение текста из документов и формирование объединённого контента $combinedContent = ""; foreach ($documents as $doc) { if (empty($doc['filepath'])) continue; $text = extractText($doc['filepath']); if (!empty($text)) { $combinedContent .= $text . "\n"; } } logMessage("Собранный контент для анализа:\n" . $combinedContent); if (empty($combinedContent)) { logMessage("Ошибка: анализ документов не вернул результатов"); die("Ошибка: анализ документов не вернул результатов"); } $fileIdCombined = implode(',', array_values($uploadedFileIds)); logMessage("Объединённый список идентификаторов файлов: " . $fileIdCombined); // Получаем итоговый prompt для GPT через search_context.php $finalPrompt = include 'aiassist/search_context.php'; logMessage("Итоговый prompt для GPT:\n" . $finalPrompt); $threadId = createNewThread(); if (!$threadId) { logMessage("Ошибка создания треда"); die("Ошибка создания треда"); } // Пример вызова анализа через GPT-4 $analysis = analyzeDocumentWithAssistantStream($threadId, ASSISTANT_ID, $fileIdCombined, $finalPrompt, []); if (!$analysis) { logMessage("❌ Ошибка анализа совокупного запроса"); die("Ошибка анализа совокупного запроса"); } // Получение эмбеддинга для полного текста обращения $embedding = getTextEmbedding($combinedContent); logMessage("Полученный эмбеддинг (первые 10 значений): " . json_encode(array_slice($embedding["embedding_1024"], 0, 10))); // Далее можно продолжить обработку: анализ обращения, поиск судебных решений, сохранение результата и т.д. logMessage("Обработка всех документов завершена."); exit; */ else { logMessage("Ошибка: запрос должен быть POST"); die("Ошибка: запрос должен быть POST"); } ?>