Пишем ИИ - консультанта для сайта с открытыми линиями Битрикс24: переход на Responses API

Пишем ИИ - консультанта для сайта с открытыми линиями Битрикс24: переход на Responses API

Введение

В статье Пишем умного консультанта для сайта с открытыми линиями Битрикс24 мы разобрали, как написать своего ИИ - консультанта для открытой линии Битрикс24.

Со времени публикации прошло некоторое время, OpenAI объявила о том, что ASSISTANT API скоро будет закрыт, и предложила решение для миграции на новый Responses API. Почитать про это можно в этой статье на сайте OpenAI - https://developers.openai.com/api/docs/guides/migrate-to-responses?update-generation-endpoints=responses "Migrate to the Responses API". Так же можно почитать гид по миграции https://developers.openai.com/api/docs/assistants/migration?user-chat-app=responses "Assistants migration guide" (который мы использовать не будем, так как вскоре было объявлено что этот способ взаимодействия тоже будет отключен, останется только Responses API).

Responses API

В новом API все инструкции для ИИ передаются непосредственно в запросе, а цепочка диалога строится на основе last_response_id - в каждый последующий запрос передается идентификатор предыдущего ответа. Для того, чтобы мигрировать на новый API, нужно добавить инструкции, идентификатор последнего запроса, и ссылки на файлы через инструменты работы с файлами (если они у вас есть).

В первой версии мы использовали функции для обмена данными с OpenAI, в этой версии мы добавим новую функцию, которая одна целиком будет обеспечивать обмен данными. Так же нужно будет добавить пару новых констант:

define('VECTOR_STORE_ID','vs_VECTORSTOREKEY'); - ключ - идентификатор файлового хранилища
define('INSTRUCTIONS_FILE_PATH',dirname(__FILE__)."/instructions.md"); - путь к файлу с инструкциями для нейросети

Что добавиться в запрос к ИИ:

  • instructions - поле с текстом инструкций
  • tools - тут вызываем инструмент поиска по файлам
  • store - сохранять диалог
  • previous_response_id - идентификатор предыдущего запроса, если есть 
$api_request = array(
'model' => 'gpt-5.4-mini',
'input' => $input,
'store' => true,
'instructions'  =>  file_get_contents(INSTRUCTIONS_FILE_PATH),
'tools' =>  array(
array('type'  =>  'file_search', 'vector_store_ids' =>  array(VECTOR_STORE_ID))
)
);
if($previous_response_id) {
$api_request['previous_response_id'] = $previous_response_id;
}

Запрос мы должны отправить на https://api.openai.com/v1/responsesВ результатах запроса обязательно забираем и сохраняем идентификатор, чтобы не терять нить разговора. 

$response_id = $res['data']['id'];
return array(
'response_id' => $response_id,
'content'     => $answer,
'raw'         => $res['data'] // Полный ответ на случай, если нужны детали (например, вызовы инструментов)
);

Полный код функции :

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

Далее нам нужно чуть изменить код нашего бота Битрикс24, а именно заменить старые вызовы функции с получением результата на новую функцию sendMessageToResponseApi

$thread_id = '';
if(isset($this->usersdata[$_REQUEST['data']['PARAMS']['CHAT_ID']]['previous_response_id'])
&& $this->usersdata[$_REQUEST['data']['PARAMS']['CHAT_ID']]['previous_response_id'] != ''
&& $this->usersdata[$_REQUEST['data']['PARAMS']['CHAT_ID']]['chatgpt_last_response_date']+$this->chatgpt_thread_expired_time > time() ) {
...
} else {
...
}
$answer = sendMessageToResponseApi($message, $previous_response_id);
$previous_response_id = $answer['response_id'];
$this->usersdata[$_REQUEST['data']['PARAMS']['CHAT_ID']]['previous_response_id'] = $previous_response_id;
$this->usersdata[$_REQUEST['data']['PARAMS']['CHAT_ID']]['chatgpt_last_response_date'] = time();

Чтобы было понятно, приведу полный код блока, отвечающего за взаимодействие с нейросетью

Измененный код для ИИ - онлайн - консультанта открытых линий Битрикс24

Миграция ИИ‑консультанта для открытых линий Битрикс24 на Responses API от OpenAI успешно реализована.

В ходе перехода:

  • отказались от устаревшего ASSISTANT API в пользу актуального Responses API;
  • перестроили логику диалога - теперь контекст сохраняется через previous_response_id, а инструкции передаются непосредственно в каждом запросе;
  • интегрировали работу с векторным хранилищем файлов через инструмент file_search;
  • унифицировали взаимодействие с API, выделив отдельную функцию для отправки запросов;
  • добавили необходимые константы для хранения идентификатора хранилища и пути к инструкциям.
  • Обновлённый код стал лаконичнее, а управление диалогом в связке с Битрикс24 - прозрачнее и удобнее для дальнейшей поддержки и масштабирования.

 

image