Files
crm.clientright.ru/iacode14.php

234 lines
10 KiB
PHP
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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");
}
?>