Php ile Chatgpt yapay zeka sohbet botu sorgulama ve geçmişi hafızaya alarak cevap verme

<?php
class ChatApp {
    private $model;
    private $messages;
    public $api_key;
    public function __construct($model = "gpt-3.5-turbo", $load_file = "") {
        $this->model = $model;
        $this->messages = array();
        if ($load_file != '') {
            $this->load($load_file);
        }
    }
    public function chat($message) {
        if ($message == "exit") {
            $this->save();
            exit();
        } elseif ($message == "save") {
            $this->save();
            return "(saved)";
        }
        $this->messages[] = array("role" => "user", "content" => $message);
        $post_fields = array(
            "model" => $this->model,
            "messages" => $this->messages
        );
        $header = array(
            'Content-Type: application/json',
            'Authorization: Bearer ' . $this->api_key
        );
        $ch = curl_init();
        $url = 'https://api.openai.com/v1/chat/completions';
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        }
        curl_close($ch);
        $response = json_decode($result, true);
        $assistant_message = $response["choices"][0]["message"]["content"];
        $this->messages[] = array("role" => "assistant", "content" => $assistant_message);
        return $assistant_message;
    }
    public function save() {
        try {
            $ts = time();
            $json_object = json_encode($this->messages, JSON_PRETTY_PRINT);
            $filename_prefix = preg_replace('/[^0-9a-zA-Z]+/', '-', substr($this->messages[0]["content"], 0, 30));
            $filename = "chat_model_" . $filename_prefix . "_" . $ts . ".json";
            file_put_contents($filename, $json_object);
        } catch (Exception $e) {
            exit();
        }
    }
    public function load($load_file) {
        $json_data = file_get_contents($load_file);
        $this->messages = json_decode($json_data, true);
    }
}
//Not: Bu sınıf yüksek ücretlere sebep olabilir.
$chatApp = new ChatApp();
$chatApp->api_key="sk-lyaikhPwD73bPVtUMO5FT3BlbkFJ"; // OpenAI API anahtarını buraya girin
//Yazışma geçmişi
$assistant_message = $chatApp->chat("Merhaba, nasılsın?");
$assistant_message = $chatApp->chat("Hava durumu hakkında bilgi verir misin?");
$assistant_message = $chatApp->chat("Konya");
//Sonuç
echo $assistant_message;
/* Çıktısı
Tamam, şu anda Konya'da hava durumu nasıl diye bakayım. Konya' da hava parçalı bulutlu olarak devam ediyor. Sıcaklık ise yaklaşık 16 derece civarında. Bugün için yağış beklenmiyor. Ancak yarın öğleden sonra hafif yağmur tahmini yapılmaktadır.
*/
// Çıkış yapmak istediğinizde "exit" komutunu kullanabilirsiniz
$chatApp->chat("exit");
?>

Fikstür Tarzında Takım Oluşturup Eşleştirmek

<?php
class fikstur{
	var $history=array();
	var $sayi=8;
	var $a=array();
	function takimOlustur(){
		for($i=1;$i<=$this->sayi;$i++){
			$this->a[]="Takim ".$i;
		}
	}
	function gecmisiTemizle($team1,$team2){
		if(sizeof($this->history)>0){
			foreach($this->history[$team1] as $key => $val){							
				if($val==$team2&&$val){
					$this->history[$team1][$key]=0;
					break;
				}
			}
		}
	}
	function gecmisOlustur(){
		for($i=0;$i<$this->sayi;$i++){
			for($j=0;$j<$this->sayi;$j++){				
				if($i==$j) $this->history[$this->a[$i]][]=0;
				else $this->history[$this->a[$i]][]=$this->a[$j];
			}
		}
	}
	function takimYazdir(){
		print_r($this->teams);
	}
	function gemisKontrol($temphistory,$team){
		if(sizeof($temphistory)>0){
			foreach($temphistory as $val){
				if($val==$team){
					return false;
				}
			}
		}
		return true;
	}
	function tasi(){
		$temphistory=array();
		for($i=0;$i<$this->sayi;$i++){	
			if(sizeof($this->history)>0){		
				foreach($this->history[$this->a[$i]] as $key => $val){
					if($val&&$this->gemisKontrol($temphistory,$val)&&$this->gemisKontrol($temphistory,$this->a[$i])){	
						$temphistory[]=$this->a[$i];
						$temphistory[]=$val;
						break;
					}
				}
			}
		}
		$this->a=$temphistory;
	}
	function calistir(){
		for($j=1;$j<$this->sayi;$j++){
			for($i=0;$i<$this->sayi;$i+=2){
				srand();
				$r=rand(0,1);
				if($r==1){
					echo $this->a[$i]."-".$this->a[$i+1];
				}
				else{
					echo $this->a[$i+1]."-".$this->a[$i];
				}
				echo "<br />";
				$this->gecmisiTemizle($this->a[$i],$this->a[$i+1]);
				$this->gecmisiTemizle($this->a[$i+1],$this->a[$i]);
			}
			echo "<hr>";
			$this->tasi();
		}
	}
}
$s=new fikstur();
$s->sayi=8;
$s->takimOlustur();
$s->gecmisOlustur();
$s->calistir();
?>

Çıktısı

Takim 2-Takim 1
Takim 3-Takim 4
Takim 6-Takim 5
Takim 8-Takim 7
Takim 1-Takim 3
Takim 4-Takim 2
Takim 5-Takim 7
Takim 8-Takim 6
Takim 4-Takim 1
Takim 3-Takim 2
Takim 8-Takim 5
Takim 6-Takim 7
Takim 5-Takim 1
Takim 4-Takim 6
Takim 3-Takim 7
Takim 2-Takim 8
Takim 6-Takim 1
Takim 2-Takim 5
Takim 7-Takim 4
Takim 8-Takim 3
Takim 1-Takim 7
Takim 6-Takim 2
Takim 3-Takim 5
Takim 4-Takim 8
Takim 1-Takim 8
Takim 7-Takim 2
Takim 3-Takim 6
Takim 5-Takim 4