Add (article): ai gen, front views
This commit is contained in:
90
app/Helpers/FirstParty/OpenAI/OpenAI.php
Normal file
90
app/Helpers/FirstParty/OpenAI/OpenAI.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace App\Helpers\FirstParty\OpenAI;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class OpenAI
|
||||
{
|
||||
public static function writeArticle($title, $description, $article_type, $min, $max)
|
||||
{
|
||||
$system_prompt = "
|
||||
Using the general article structure, please create a Markdown format article on the topic given. The article should prioritize accuracy and provide genuine value to readers. Avoid making assumptions or adding unverified facts. Ensure the article is between {$min}-{$max} words. Write with 8th & 9th grade US english standard.\n\n
|
||||
Structure:\n\n
|
||||
Title\n
|
||||
Provide a headline that captures the essence of the article's focus and is tailored to the reader's needs.\n\n
|
||||
Introduction\n
|
||||
Offer a brief overview or background of the topic, ensuring it's engaging and invites readers to continue reading.\n\n
|
||||
Main Body\n\n
|
||||
Subsection\n
|
||||
Introduce foundational information about the topic, ensuring content is accurate and based on known facts. Avoid generic or speculative statements.\n\n
|
||||
Subsection (if applicable)\n
|
||||
If helpful, use Markdown to create tables to convey comparison of data. Ensure data is accurate and relevant to the reader.\n\n
|
||||
Subsection\n
|
||||
Dive deep into primary elements or facets of the topic, ensuring content is factual and offers value.\n\n
|
||||
Subsection\n
|
||||
Discuss real-world applications or significance, highlighting practical implications or actionable insights for the reader.\n\n
|
||||
Subsection (optional)\n
|
||||
Provide context or relate the topic to relevant past events or trends, making it relatable and more comprehensive.\n\n
|
||||
Subsection (if applicable)\n
|
||||
Predict outcomes, trends, or ramifications, but ensure predictions are rooted in known information or logical reasoning.\n\n
|
||||
Subsection\n
|
||||
Summarise key points or lessons, ensuring they resonate with the initial objectives of the article and provide clear takeaways.\n\n
|
||||
Conclusion\n
|
||||
Revisit main points and offer final thoughts or recommendations that are actionable and beneficial to the reader.\n\n
|
||||
FAQs\n
|
||||
Address anticipated questions or misconceptions about the topic. Prioritize questions that readers are most likely to have and provide clear, concise answers based on factual information.\n
|
||||
Q: Question\n
|
||||
A: Answer\n
|
||||
";
|
||||
|
||||
$user_prompt = "Title: {$title}\nDescription: {$description}\nArticleType: {$article_type}";
|
||||
|
||||
return self::chatCompletion($system_prompt, $user_prompt, 'gpt-3.5-turbo');
|
||||
|
||||
}
|
||||
|
||||
public static function suggestArticleTitles($current_title, $supporting_data, $suggestion_counts)
|
||||
{
|
||||
$system_prompt = "Based on provided article title, identify the main keyword in 1-2 words. Once identified, use the main keyword only to generate {$suggestion_counts} easy-to-read unique, helpful title articles.\n\n
|
||||
Requirements:\n
|
||||
2 descriptive photos keywords to represent article title when put together side-by-side\n
|
||||
No realtime information required\n
|
||||
No guides and how tos\n
|
||||
No punctuation in titles especially colons :\n
|
||||
90-130 characters\n\n
|
||||
|
||||
return in following json format {\"main_keyword\":\"(Main Keyword)\",\"suggestions\":[{\"title\":\"(Title in 90-130 letters)\",\"short_title\":\"(Short Title in 30-40 letters)\",\"article_type\":\"(How-tos|Guides|Interview|Review|Commentary|Feature|News|Editorial|Report|Research|Case-study|Overview|Tutorial|Update|Spotlight|Insights)\",\"description\":\"(SEO description based on main keyword)\",\"photo_keywords\":[\"photo keyword 1\",\"photo keyword 2\"]}]}";
|
||||
|
||||
$user_prompt = "Article Title: {$current_title}";
|
||||
|
||||
$reply = self::chatCompletion($system_prompt, $current_title, 'gpt-3.5-turbo');
|
||||
|
||||
try {
|
||||
return json_decode($reply, false);
|
||||
} catch (Exception $e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function chatCompletion($system_prompt, $user_prompt, $model)
|
||||
{
|
||||
$response = Http::timeout(500)->withToken(config('platform.ai.openai.api_key'))
|
||||
->post('https://api.openai.com/v1/chat/completions', [
|
||||
'model' => $model,
|
||||
'max_tokens' => 2500,
|
||||
'messages' => [
|
||||
['role' => 'user', 'content' => $system_prompt.' '.$user_prompt],
|
||||
],
|
||||
]);
|
||||
|
||||
$json_response = json_decode($response->body());
|
||||
|
||||
$reply = $json_response?->choices[0]?->message?->content;
|
||||
|
||||
return $reply;
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user