Class: Chatgpt::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/chatgpt.rb

Constant Summary collapse

API_URL =

URL API, используемый для отправки запросов к ChatGPT

"https://api.openai.com/v1/chat/completions"

Class Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key) ⇒ Client

Конструктор класса

Parameters:

  • api_key (String)

    API-ключ для аутентификации запросов к OpenAI



27
28
29
30
31
32
33
# File 'lib/chatgpt.rb', line 27

def initialize(api_key)
  @chat_api_key = api_key
  @model = self.class.model
  @temperature =  self.class.temperature
  @system_message = self.class.system_message
  @prompt_prefix = self.class.prompt_prefix
end

Class Attribute Details

.modelObject

Настройки клиента (задаются глобально) model - Определяет используемую модель, например, “gpt-4o-mini”. temperature - Контролирует степень случайности ответов модели (диапазон 0.0 - 1.0). system_message - Специальное сообщение, которое задает контекст модели. prompt_prefix - Префикс для запросов, полезен при массовых однотипных запросах. proxy - Прокси-сервер, указывается в формате <protocol>://<login>:<password>@<host>:<port>



18
19
20
# File 'lib/chatgpt.rb', line 18

def model
  @model
end

.prompt_prefixObject

Настройки клиента (задаются глобально) model - Определяет используемую модель, например, “gpt-4o-mini”. temperature - Контролирует степень случайности ответов модели (диапазон 0.0 - 1.0). system_message - Специальное сообщение, которое задает контекст модели. prompt_prefix - Префикс для запросов, полезен при массовых однотипных запросах. proxy - Прокси-сервер, указывается в формате <protocol>://<login>:<password>@<host>:<port>



18
19
20
# File 'lib/chatgpt.rb', line 18

def prompt_prefix
  @prompt_prefix
end

.proxyObject

Настройки клиента (задаются глобально) model - Определяет используемую модель, например, “gpt-4o-mini”. temperature - Контролирует степень случайности ответов модели (диапазон 0.0 - 1.0). system_message - Специальное сообщение, которое задает контекст модели. prompt_prefix - Префикс для запросов, полезен при массовых однотипных запросах. proxy - Прокси-сервер, указывается в формате <protocol>://<login>:<password>@<host>:<port>



18
19
20
# File 'lib/chatgpt.rb', line 18

def proxy
  @proxy
end

.system_messageObject

Настройки клиента (задаются глобально) model - Определяет используемую модель, например, “gpt-4o-mini”. temperature - Контролирует степень случайности ответов модели (диапазон 0.0 - 1.0). system_message - Специальное сообщение, которое задает контекст модели. prompt_prefix - Префикс для запросов, полезен при массовых однотипных запросах. proxy - Прокси-сервер, указывается в формате <protocol>://<login>:<password>@<host>:<port>



18
19
20
# File 'lib/chatgpt.rb', line 18

def system_message
  @system_message
end

.temperatureObject

Настройки клиента (задаются глобально) model - Определяет используемую модель, например, “gpt-4o-mini”. temperature - Контролирует степень случайности ответов модели (диапазон 0.0 - 1.0). system_message - Специальное сообщение, которое задает контекст модели. prompt_prefix - Префикс для запросов, полезен при массовых однотипных запросах. proxy - Прокси-сервер, указывается в формате <protocol>://<login>:<password>@<host>:<port>



18
19
20
# File 'lib/chatgpt.rb', line 18

def temperature
  @temperature
end

Instance Method Details

#build_request_data(prompt) ⇒ String

Формирует тело запроса для API

Parameters:

  • prompt (String)

    Входной текст

Returns:

  • (String)

    JSON-представление данных запроса



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/chatgpt.rb', line 56

def build_request_data(prompt)
  messages = []
  messages << { role: "user", content: @prompt_prefix.to_s + prompt }
  messages << { role: "system", content: @system_message } if @system_message

  {
    "model" => @model,
    "messages" => messages,
    "temperature" => @temperature
  }.to_json
end

#parse_response(response) ⇒ Hash

Обрабатывает ответ API

Parameters:

  • response (Object)

    HTTP-ответ от API

Returns:

  • (Hash)

    Распарсенный JSON-ответ или сообщение об ошибке



80
81
82
83
84
# File 'lib/chatgpt.rb', line 80

def parse_response(response)
  JSON.parse(response.body)
rescue JSON::ParserError
  { "error" => "Ошибка парсинга JSON" }
end

#request_headersHash

Генерирует заголовки для HTTP-запроса

Returns:

  • (Hash)

    Заголовки запроса



70
71
72
73
74
75
# File 'lib/chatgpt.rb', line 70

def request_headers
  {
    "Content-Type" => "application/json",
    "Authorization" => "Bearer #{@chat_api_key}"
  }
end

#send_request(prompt, proxy = nil) ⇒ Hash

Отправляет запрос в API ChatGPT

Parameters:

  • prompt (String)

    Текст запроса

  • proxy (String, nil) (defaults to: nil)

    Опционально: прокси-сервер для запроса

Returns:

  • (Hash)

    Ответ API или ошибка



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/chatgpt.rb', line 39

def send_request(prompt, proxy = nil)
  request_data = build_request_data(prompt)
  response = ApiRequest.new(
    url: API_URL,
    headers: request_headers,
    data: request_data,
    proxy: proxy || self.class.proxy
  ).post

  parse_response(response)
rescue StandardError => e
  { "error" => "Ошибка запроса: #{e.message}" }
end