new: Мой ФэшнБлог

Класс для работы с ask.chadgpt.ru на PHP

класс предоставлен клиентом, я не тестировала
class ChatGpt {
    protected static $instance;
    protected const API_TOKEN = "тут Ваш токен";
    public const TYPE_CHAT = ['gpt-4o-mini', 'gpt-4o', 'claude-3-haiku', 'claude-3-opus', 'claude-3.5-sonnet'];

    private static $messages = [];

    private function __construct(){
    }
    private function __clone(){
    }
    private function __wakeup(){
    }

    public static function getInstance(){
        if (is_null(self::$instance)) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public static function getHistory(){
        return self::$messages;
    }

    public static function clearHistory(){
        self::$messages = [];
    }

    public static function updateHistory($messages){
        self::$messages = $messages;
    }

    private static function get($url, $headers, $data){
        $curl = curl_init();
        curl_setopt_array($curl, [
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($data),
        ]);
        $result = curl_exec($curl);
        curl_close($curl);
        if ($result === false) {
            return json_decode( 'Curl error: ' . curl_error($curl));
        }
        return json_decode($result,true);
    }

    public static function ask($question, $type=0){
        $answer = "";
        if(!empty($question)){
            $token = self::API_TOKEN;
            $type = self::TYPE_CHAT[$type] ?? self::TYPE_CHAT[0];

            if($token){
                $url = "https://ask.chadgpt.ru/api/public/".$type;
                $headers = [
                    'Content-Type: application/json'
                ];
                $data = [
                    "message" => $question,
                    "api_key" => $token,
                    "history" => [
                        ["role" => "system", "content" => "Отвечай максимально коротко."],
                    ],
                    "temperature" => 0.7,
                ];
                if (!empty(self::$messages)) {
                    $lastMessage = end(self::$messages);
                    $data['history'][] = ['role' => 'user', 'content' => $lastMessage['user']];
                    $data['history'][] = ['role' => 'assistant', 'content' => $lastMessage['assistant']];
                }


                $result = self::get($url, $headers, $data);

                $answer = $result['response'] ?? $result['error'] ?? '';
                if(!empty($answer)){
                    self::$messages[] = [
                        "user" => $question,
                        "assistant"=> $answer
                    ];
                }
            }
        }
        return $answer;
    }
}
пример работы
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/php_interface/classes/chatgpt.php");
if($chatGpt = ChatGpt::getInstance()){
   echo $chatGpt::ask('Какой самый теплый город в России?');

}