そんな時代になりましたね。
PHPとHTMLで構築されたシンプルなGPTチャットサービスを5分で作ってみます。
docker-compose up -d
で動作するように構成してあります。GPT
のキーは{your gpt key}
としておきますので、必要に応じてあなたのキーに置き換えてください。
まずソースツリーですが、、
/gpt-chat-service
│
├── docker-compose.yml
├── Dockerfile
├── php/
│ ├── index.php
│ └── gpt_chat.php
└── www/
└── index.html
こんな感じでいきます。
docker-compose.ymlは
version: '3'
services:
php:
build: ./php
volumes:
- ./www:/var/www/html
ports:
- "8080:80"
container_name: php-gpt
これだけでいいかなと思います。
シンプルにphpだけでいきます。
phpの設定はしたいのでDockerファイルを作ります。
FROM php:8.0-apache
COPY ./index.php /var/www/html/gpt_chat.php
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 80
これで作成後のサーバーにインストールしてくれますね。
<?php
// gpt_chat.phpを呼び出してGPTに問い合わせ
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$apiKey = "{your gpt key}";
$userInput = $_POST['message'] ?? '';
// OpenAI APIにリクエストを送信する関数
function callGPT($message, $apiKey) {
$url = "https://api.openai.com/v1/chat/completions";
$data = [
"model" => "gpt-4",
"messages" => [
["role" => "system", "content" => "You are a helpful assistant."],
["role" => "user", "content" => $message]
]
];
$headers = [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
$gptResponse = callGPT($userInput, $apiKey);
$reply = $gptResponse['choices'][0]['message']['content'] ?? "Sorry, no response.";
echo json_encode(['response' => $reply]);
}
こちらですね。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat with GPT</title>
<style>
body { font-family: Arial, sans-serif; }
#chat-box { width: 500px; height: 400px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px; }
#message-box { width: 500px; margin-top: 10px; }
</style>
</head>
<body>
<h1>Chat with GPT</h1>
<div id="chat-box"></div>
<form id="chat-form">
<input type="text" id="message-box" placeholder="Type your message here..." />
<button type="submit">Send</button>
</form>
<script>
const chatBox = document.getElementById('chat-box');
const chatForm = document.getElementById('chat-form');
const messageBox = document.getElementById('message-box');
chatForm.addEventListener('submit', function(e) {
e.preventDefault();
const userMessage = messageBox.value;
if (userMessage.trim() === '') return;
const userHtml = `<p><strong>You:</strong> ${userMessage}</p>`;
chatBox.innerHTML += userHtml;
fetch('/gpt_chat.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ 'message': userMessage })
})
.then(response => response.json())
.then(data => {
const botHtml = `<p><strong>GPT:</strong> ${data.response}</p>`;
chatBox.innerHTML += botHtml;
messageBox.value = '';
chatBox.scrollTop = chatBox.scrollHeight;
})
.catch(err => {
chatBox.innerHTML += '<p><strong>Error:</strong> Something went wrong.</p>';
});
});
</script>
</body>
</html>
docker-compose up -dをすると
http://localhost:8080
でもうGPTのようなシンプルなチャットを表示することが可能です。
3分30秒でできました。