OpenAI’s GPT-3 (Generative Pretrained Transformer 3) technology is available through an API, also known as the OpenAI API or the GPT-3 API. The API allows developers to integrate GPT-3’s advanced language capabilities into their applications and services.
GPT-3 is trained on a massive amount of diverse text data, allowing it to generate human-like responses to a wide range of language tasks. It can be fine-tuned for specific use cases and applications, making it a versatile tool for developers.
With the API, developers can build conversational AI systems, language translation systems, and other advanced language-based applications. The API offers a wide range of functionality, including text completion, text generation, question-answering, and summarization, among others.
The API is a cloud-based service and can be accessed over the internet through standard HTTP requests. It is also highly scalable, meaning that it can handle a large number of requests from multiple clients simultaneously.
Follow this video for complete guidance :
Steps to Build Your Own ChatGPT
1. Get Your API key by signing in to your account here
2. Save Your API Key in api_key.txt file
3. Create a composer.json file
{
"require": {
"orhanerday/open-ai": "^3.4",
"league/commonmark": "^2.3"
},
"config": {
"platform-check": false
}
}
4. Run composer install
composer install
5. Create a chat view with following code
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/css/bootstrap.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
<style type="text/css">
body,.container-fluid{
padding: 0;
margin: 0;
}
.header{
background: #000;
color:#fff;
height:80px;
}
.chat-message{
border-radius: 10px;
padding: 5px 15px;
margin: 10px 0;
line-height: 1.5em;
}
.message-out{
background: #ddd;
}
.message-in{
background: #3e4343;
color:#fff;
}
.input-box{
width:100%;
position: fixed;
bottom:0;
height:120px;
padding:20px 0px;
background: #000;
}
#chat-input{
margin: 20px auto;
resize: none;
border: none;
color: #fff;
background-color: #3e4343;
outline: none;
padding: 15px;
font-size: 1.1em;
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: 75%;
}
#cursor{
width: 5px;
height: 20px;
background-color: #fff;
display: inline-block;
animation: blink 1s infinite;
}
@keyframes blink {
0% {
opacity: 0;
}
50% {
opacity: 1;
}
100% {
opacity: 0;
}
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="header d-flex align-items-center justify-content-center">
<h1>ChatJPT</h1>
</div>
</div>
</div>
</div>
<div class="container mt-3 chat-content" style="margin-bottom:150px;">
<div class="chat-messages">
</div>
</div>
<div class="input-box">
<textarea id="chat-input" placeholder="Type Here"></textarea>
</div>
<script type="text/javascript">
var chat_input = $("#chat-input");
var chat_container = $(".chat-content");
var context = [];
$(document).on('keypress',function(e) {
if(e.which == 13) {
message();
e.preventDefault();
}
});
function appendMessage(flag,message,className){
html = '<div class="'+className+' chat-message message-'+flag+'">'+message+'</div>';
chat_container.append(html);
$("html, body").animate({ scrollTop: $(document).height() }, 300);
}
function message(){
query = chat_input.val();
appendMessage('out',query,'');
appendMessage('in','<div id="cursor"></div>','temp');
chat_input.val('');
chat_input.focus();
postData = {
'message':query,
'context':JSON.stringify(context)
};
url = 'message.php';
$.ajax({
url:url,
type:'post',
data:postData,
success:function(res){
if(res.status=='success'){
$(".chat-message.temp").remove();
appendMessage('in',res.message);
context.push([query, res.raw_message]);
hljs.highlightAll();
}
}
});
}
</script>
6. Create a message.php file to actually call OpenAI chat
<?php
require_once(__DIR__."/vendor/autoload.php");
$api_key = file_get_contents("api_key.txt");
$api_key = trim($api_key);
use Orhanerday\OpenAi\OpenAi;
use League\CommonMark\CommonMarkConverter;
header("Content-Type: application/json");
$previous_conversation = json_decode($_POST['context'] ?? "[]", true);
$message = $_POST['message'];
$openai = new OpenAi($api_key);
$prompt = "Format the response in Markdown format if there's code in it. Also always explain your answer in detail.\n";
$prompt .= "Use previous conversation as context:\n";
foreach ($previous_conversation as $entry) {
$prompt .= "Question: " . $entry[0] . "\n";
$prompt .= "Answer: " . $entry[1] . "\n\n";
}
$prompt .= "New Question: " . $message . "\n\nAnswer:\n\n";
$complete = json_decode($openai->completion([
'model' => 'text-davinci-003',
'prompt' => $prompt,
'temperature' => 0.9,
'max_tokens' => 2000,
'top_p' => 1,
'frequency_penalty' => 0,
'presence_penalty' => 0,
'stop' => [
"\nNote:",
"\nQuestion:"
]
]));
if (isset($complete->choices[0]->text)) {
$text = str_replace("\\n", "\n", $complete->choices[0]->text);
} elseif (isset($complete->error->message)) {
$text = $complete->error->message;
} else {
$text = "Sorry, but I don't know how to answer that.";
}
$converter = new CommonMarkConverter();
$styled_text = $converter->convert($text);
echo json_encode([
"message" => (string)$styled_text,
"raw_message" => $text,
"status" => "success",
]);
The parameters for the $openai->completion method are as follows:
- model: ID of the OpenAI language model to use.
- prompt: The text prompt that the model should complete.
- temperature: Controls the “creativity” of the model’s response, with a higher temperature leading to more unexpected and diverse completions.
- max_tokens: Maximum number of tokens (words or word-like units) in the response.
- top_p: Controls the diversity of the completions generated by the model, with a higher value leading to more diverse completions and a lower value leading to more focused completions.
- frequency_penalty: Controls the balance between selecting tokens that are frequent in the model’s training data and selecting tokens that are rare.
- presence_penalty: Controls the balance between selecting tokens that are present in the prompt and selecting tokens that are not.
- stop: A list of strings that, if encountered in the generated text, cause the completion to stop.
