PHP ile AI Uygulamaları Geliştirmek
PHP, son yıllarda “ölüm” ilanlarına maruz kalmasına rağmen, internetin önemli bir bölümünü desteklemeye devam etmektedir. 20 yılı aşkın süredir PHP’de kod yazan biri olarak, AI projeleriyle ilgili ihtiyaçlar doğduğunda Python’a yönelmek yerine mevcut kod tabanımı kullanmayı tercih ettim. Bir servis yazıp bir API çağrısı yapmak, yeterli oldu.
Kimsenin Sormadığı Varsayım
Python, AI alanında hâkim durumda ve bu herkesin malumu. Ancak çoğu ekip, gerçekten model mi eğitiyorsunuz yoksa bir API mi çağırıyorsunuz? Çünkü bu iki durum son derece farklı problemlere işaret ediyor. Günümüzde “AI özellikleri” geliştiren işletmeler büyük ölçüde ikinci durumu yaşıyorlar. Yani, Claude, GPT gibi sistemlere bir istekte bulunup, yanıtları değerlendirmekle uğraşıyorlar. Bu işlem ise bir REST çağrısıdır ve REST çağrıları dil bağımsızdır.
Mevcut Yığınınızı Kullanın
PHP, bilinen sunucu tarafı dillerinin %71’inden fazlasını destekleyen web sitelerinin arka planda çalışmasını sağlıyor. CRM, CMS ve yönetim panelleri zaten PHP ile geliştirilmiş durumda. AI ajanları, üretim katmanında sıradışı yazılımlar değil, doğrulanmış API çağrıları, veritabanı okuma işlemleri ve kuyruk işleyicileridir.
AI endüstrisinin size söylemeyeceği bir gerçek ise birçok “ajanın” aslında iyi birer servis olduğudur. Pazarlama alanını bir kenara bırakınca, tipik bir AI ajanı girdi kabul eden, bir dış API’yi çağıran, bazı mantıksal işlemler yapan ve yanıt döndüren bir sınıftır. Bu yapıyı MVC çerçevelerinde yazmaya zaten alışkınız.
Aşırı Yükleme Problemi
Takımların bazen AWS Bedrock gibi çözümlere başvurduklarını görüyorum, yalnızca bir destek biletini özetlemek için. n8n gibi otomasyon araçları, bir API çağrısını gerçekleştirmek için gereğinden fazla karmaşaya neden olabiliyor. AI özelliğini zaten kontrol ettiğiniz bir PHP uygulamasına entegre etmek için bu araçlar uygun değil.
$client = new \GuzzleHttp\Client();
$response = $client->post('https://api.anthropic.com/v1/messages', [
'headers' => [
'x-api-key' => $_ENV['ANTHROPIC_API_KEY'],
'anthropic-version' => '2023-06-01',
'content-type' => 'application/json',
],
'json' => [
'model' => 'claude-haiku-4-5-20251001',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => $userPrompt]
],
],
]);
$data = json_decode($response->getBody(), true);
$reply = $data['content'][0]['text'];
Yeni bir platform, aylık bir abonelik ya da yeni bir altyapı kurmak zorunda kalmadan, Composer, Guzzle ve bir API anahtarı ile canlıya geçmek mümkün.
Gerçek Bir Ajan Nasıldır?
API çağrısı, bir yanıt bekler ve ardından veriyi döner. Ancak bir ajan, bir sonraki adımı karar verir, araçlar çağırır, çıktıyı kontrol eder ve görev tamamlanana kadar işlemleri tekrarlar. İşte bu değişimi PHP’de Neuron AI kullanarak gerçekleştirme şeklimiz:
namespace App\Neuron;
use NeuronAI\Agent\Agent;
use NeuronAI\Agent\SystemPrompt;
use NeuronAI\Chat\Messages\UserMessage;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
use NeuronAI\Tools\PropertyType;
use NeuronAI\Tools\Tool;
use NeuronAI\Tools\ToolProperty;
class FitnessAgent extends Agent
{
protected function provider(): AIProviderInterface
{
return new Anthropic(
key: $_ENV['ANTHROPIC_API_KEY'],
model: 'claude-haiku-4-5-20251001',
);
}
protected function instructions(): string
{
return (string) new SystemPrompt(
background: ['You are a knowledgeable fitness assistant.'],
steps: ['Use available tools to look up workout plans before answering questions about them.'],
output: ['Give clear, practical guidance based on the workout data returned.']
);
}
protected function tools(): array
{
return [
Tool::make('get_workout', 'Look up a workout plan by name or muscle group.')
->addProperty(
new ToolProperty(
name: 'workout_name',
type: PropertyType::STRING,
description: 'The name or muscle group of the workout to retrieve.',
required: true
)
)
->setCallable(function (string $workout_name) {
$pdo = new \PDO($_ENV['DB_DSN'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$stmt = $pdo->prepare("SELECT exercises, sets, reps FROM workouts WHERE name = ?");
$stmt->execute([$workout_name]);
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
return $row ? json_encode($row) : 'Workout not found.';
}),
];
}
}
$reply = FitnessAgent::make()
->chat(new UserMessage('How many sets should I do for a beginner chest workout?'))
->getMessage()
->getContent();
echo $reply;
Ajan, soruyu aldıktan sonra hangi araca ihtiyaç duyduğuna karar verir, o aracı çağırır ve sonucu yanıtına katmadan önce mantıksal işlemleri otomatik olarak gerçekleştirir. Bu, API sarmalayıcıdan ajana geçiştir.
PHP’nin Alanı
Python, model eğitimi, ML araştırmaları ve veri bilimi boru hatları gibi alanlarda hâkim durumda. Bu konuda kullanılmalı. Ancak PHP’nin alanı, üretim web katmanıdır. CRMs, gösterge panelleri, e-ticaret platformları, CMS sistemleri, yönetim araçları. Bu tabanın zaten PHP ile inşa edildiği unutulmamalıdır. Ajanlar da bu çatı altında inşa edilmelidir.
Ajanınızın kullanıcı oturumuna, veritabanı şemasına, iş kurallarınıza ve önbellek katmanınıza erişimi olması gerekir. Tüm bunları dış bir Python servisine aktarmak sadece bir yük değil, aynı zamanda teknik bir borç da yaratır.
Bir API anahtarı, bir servis sınıfı ve muhtemelen zaten üretimde çalıştırmakta olduğunuz PHP kod tabanı yeterlidir.
Büyük dev asla uyumadı. Diğerleri gözlerini kapattı.
PHP ile RAG, MCP, FrankenPHP ve ekosistemin tamamı hakkında tam olarak bilgi almak için tam makaleyi inceleyebilirsiniz.
Kaynak: Orijinal Makale


