Files
crm.clientright.ru/iacode14.php

234 lines
10 KiB
PHP
Raw Permalink Normal View History

<?php
// iacode14.php
require_once 'aiassist/config.php';
require_once 'aiassist/logger.php';
require_once 'aiassist/database.php';
require_once 'aiassist/crmHandler.php';
require_once 'aiassist/elastic.php';
require_once 'aiassist/fileHandler.php';
require_once 'aiassist/vectorgpt.php';
require_once 'aiassist/gptAssistant.php';
require_once 'aiassist/search.php';
//require_once 'aiassist/search_context.php';
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;
// 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");
}
?>