add validation topic on send prompt if not relevan
This commit is contained in:
@@ -34,7 +34,7 @@ class ChatbotController extends Controller
|
|||||||
};
|
};
|
||||||
|
|
||||||
$chatHistory = $request->input('chatHistory');
|
$chatHistory = $request->input('chatHistory');
|
||||||
// Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]);
|
Log::info('Chat history sebelum disimpan:', ['history' => $chatHistory]);
|
||||||
|
|
||||||
if ($main_content === "UNKNOWN") {
|
if ($main_content === "UNKNOWN") {
|
||||||
return response()->json(['response' => 'Invalid tab_active value.'], 400);
|
return response()->json(['response' => 'Invalid tab_active value.'], 400);
|
||||||
@@ -44,14 +44,15 @@ class ChatbotController extends Controller
|
|||||||
|
|
||||||
$queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content, $chatHistory);
|
$queryResponse = $this->openAIService->generateQueryBasedMainContent($request->input('prompt'), $main_content, $chatHistory);
|
||||||
|
|
||||||
$firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
if (str_contains($queryResponse, 'tidak relevan') || str_contains($queryResponse, 'tidak valid') || str_starts_with($queryResponse, 'Prompt')) {
|
||||||
$secondValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
return response()->json(['response' => $queryResponse], 400);
|
||||||
|
}
|
||||||
|
|
||||||
$formattedResultQuery = "[]";
|
$formattedResultQuery = "[]";
|
||||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||||
$resultQuery = DB::select($queryResponse);
|
$resultQuery = DB::select($queryResponse);
|
||||||
$formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT);
|
$formattedResultQuery = json_encode($resultQuery, JSON_PRETTY_PRINT);
|
||||||
// info($formattedResultQuery);
|
info($formattedResultQuery);
|
||||||
|
|
||||||
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
$nlpResult = $this->openAIService->generateNLPFromQuery($request->input('prompt'), $formattedResultQuery);
|
||||||
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
$finalGeneratedText =$this->openAIService->generateFinalText($nlpResult);
|
||||||
@@ -92,9 +93,6 @@ class ChatbotController extends Controller
|
|||||||
$queryResponse = $this->openAIService->createMainQuery($classifyResponse, $request->input('prompt'), $chatHistory);
|
$queryResponse = $this->openAIService->createMainQuery($classifyResponse, $request->input('prompt'), $chatHistory);
|
||||||
info($queryResponse);
|
info($queryResponse);
|
||||||
|
|
||||||
$firstValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
|
||||||
$secondValidation = $this->openAIService->validateSyntaxQuery($queryResponse);
|
|
||||||
|
|
||||||
$formattedResultQuery = "[]";
|
$formattedResultQuery = "[]";
|
||||||
|
|
||||||
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
$queryResponse = str_replace(['```sql', '```'], '', $queryResponse);
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ class OpenAIService
|
|||||||
return "Template prompt tidak ditemukan.";
|
return "Template prompt tidak ditemukan.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$validationResponse = $this->validatePromptTopic($prompt);
|
||||||
|
if ($validationResponse !== 'VALID') {
|
||||||
|
return "Prompt yang Anda masukkan tidak relevan dengan data PUPR/SIMBG/DPUTR atau pekerjaan sejenis.";
|
||||||
|
}
|
||||||
|
|
||||||
// Ambil template berdasarkan kategori
|
// Ambil template berdasarkan kategori
|
||||||
$promptTemplate = $jsonData[$mainContent]['prompt'];
|
$promptTemplate = $jsonData[$mainContent]['prompt'];
|
||||||
|
|
||||||
@@ -273,4 +278,26 @@ class OpenAIService
|
|||||||
|
|
||||||
// return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
// return trim($response['choices'][0]['message']['content'] ?? 'No response');
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
public function validatePromptTopic($prompt)
|
||||||
|
{
|
||||||
|
$messages = [
|
||||||
|
[
|
||||||
|
'role' => 'system',
|
||||||
|
'content' => "You are a classification expert. Determine if the user's request is related to the Indonesian Ministry of Public Works and Public Housing (PUPR), DPUTR, SIMBG, or construction-related tasks managed by these institutions.
|
||||||
|
|
||||||
|
Only respond with:
|
||||||
|
- VALID → if it's relevant to those topics
|
||||||
|
- INVALID → if not related at all"
|
||||||
|
],
|
||||||
|
['role' => 'user', 'content' => $prompt],
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = $this->client->chat()->create([
|
||||||
|
'model' => 'gpt-4o-mini',
|
||||||
|
'messages' => $messages,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return trim($response['choices'][0]['message']['content'] ?? 'INVALID');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user