Langkah praktis membuat AI chat pertama dengan PHP: cara melakukan request HTTP ke OpenAI API, mengirim prompt, parse response JSON, dan menampilkan jawaban AI.
Daftar Isi
Terakhir diperbarui:
TL;DR (Ringkasan Cepat)
- OpenAI API menerima array
messagesdengan rolesystem,user, danassistant. - Gunakan
cURLPHP untuk melakukan HTTP POST request ke endpoint/v1/chat/completions. - Respons dikembalikan dalam format JSON yang mudah di-parse dengan
json_decode(). - Teks jawaban AI ada di
$data["choices"][0]["message"]["content"].
Request Pertama ke API OpenAI
OpenAI Chat Completions API bekerja dengan konsep messages — sebuah array percakapan yang terdiri dari messages dengan role yang berbeda-beda. Ini adalah fondasi dari semua interaksi AI yang akan kita bangun.
Endpoint yang digunakan: https://api.openai.com/v1/chat/completions
Membuat OpenAI Client Class
Buat file src/OpenAIClient.php yang akan kita gunakan di seluruh project:
<?php
namespace App;
class OpenAIClient
{
private string $apiKey;
private string $model;
private int $maxTokens;
private string $baseUrl = 'https://api.openai.com/v1';
public function __construct(
string $apiKey,
string $model = 'gpt-4o-mini',
int $maxTokens = 4096
) {
$this->apiKey = $apiKey;
$this->model = $model;
$this->maxTokens = $maxTokens;
}
/**
* Kirim pesan ke OpenAI dan dapatkan respons.
*
* @param array $messages Array of messages [{role, content}]
* @param array $tools Optional: daftar tools untuk function calling
* @return array Parsed response dari API
* @throws \RuntimeException Jika terjadi error
*/
public function chat(array $messages, array $tools = []): array
{
$payload = [
'model' => $this->model,
'messages' => $messages,
'max_tokens' => $this->maxTokens,
];
if (!empty($tools)) {
$payload['tools'] = $tools;
$payload['tool_choice'] = 'auto';
}
$ch = curl_init($this->baseUrl . '/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $this->apiKey,
],
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_TIMEOUT => 60,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new \RuntimeException("cURL Error: $error");
}
$data = json_decode($response, true);
if ($httpCode !== 200) {
$msg = $data['error']['message'] ?? "HTTP Error $httpCode";
throw new \RuntimeException("OpenAI API Error: $msg");
}
return $data;
}
/**
* Ekstrak teks respons dari array response API.
*/
public function extractContent(array $response): string
{
return $response['choices'][0]['message']['content'] ?? '';
}
/**
* Ekstrak tool calls dari respons (untuk function calling).
*/
public function extractToolCalls(array $response): array
{
return $response['choices'][0]['message']['tool_calls'] ?? [];
}
}
Mengirim Prompt dan Membaca Response JSON
<?php
// index.php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/config/config.php';
use App\OpenAIClient;
$config = require __DIR__ . '/config/config.php';
$client = new OpenAIClient(
apiKey: $config['openai_api_key'],
model: $config['openai_model'],
maxTokens: $config['openai_max_tokens']
);
// Susun pesan
$messages = [
[
'role' => 'system',
'content' => 'Kamu adalah asisten coding yang ahli dalam PHP. Jawab dalam Bahasa Indonesia.',
],
[
'role' => 'user',
'content' => 'Jelaskan apa itu Dependency Injection dalam 2 kalimat singkat.',
],
];
// Kirim ke API
$response = $client->chat($messages);
// Tampilkan jawaban
echo $client->extractContent($response) . PHP_EOL;
echo "\n---\n";
echo "Token digunakan: " . $response['usage']['total_tokens'] . PHP_EOL;
Menampilkan Jawaban
Jalankan script di atas dan Anda akan mendapatkan output seperti:
Dependency Injection adalah pola desain di mana dependensi sebuah class
diberikan dari luar (bukan dibuat sendiri di dalam class tersebut).
Teknik ini membuat kode lebih mudah diuji, dipelihara, dan diubah karena
setiap komponen tidak terikat erat satu sama lain.
---
Token digunakan: 87
Poin Kunci Bab 5
Dengan OpenAIClient yang kita buat, kita sudah memiliki fondasi yang solid. Class ini akan kita gunakan di seluruh bab berikutnya saat menambahkan tools, memory, dan kemampuan agent yang lebih kompleks.