Логотип HuTor Tech HuTor Tech
← Усі записи

· hutor.tech

Як підключити OpenAI до наявного застосунку на PHP

Як підключити OpenAI до наявного застосунку на PHP

Додати мовну модель до наявного застосунку на PHP — це задача інтеграції, а не проєкт про штучний інтелект. Модель — віддалений сервіс, повільний, іноді недоступний і оплачуваний за токенами. Ставтеся до неї точно як до платіжного шлюзу — і більша частина рішень випливе сама.

Почніть з однієї вузької задачі. «Стисло переказати звернення», «дістати адресу доставки з повідомлення», «написати опис для сторінки товару» — усе це можна випустити за день і легко оцінити. «Додати ШІ на сайт» — не задача, і проєкти, що починаються так, зазвичай закінчуються дорогим чат-віджетом, яким ніхто не користується.

Тримайте ключ на сервері й поза репозиторієм. Його місце — у `.env`, читається через `config/services.php` у Laravel; ніколи в JavaScript і ніколи в шаблоні. Ключ, що дістався браузеру, — це ключ, який оплачує чужий трафік.

Викликайте API з черги, а не з контролера. Запит, що чекає на модель, може тривати десять секунд або взагалі впасти за таймаутом; користувач не має на це чекати. Спершу збережіть запис, поставте задачу в чергу, покажіть результат, коли він прийде. У Laravel це кілька рядків; у легаси-застосунку ту саму роль непогано виконує таблиця завдань із воркером за cron.

Огорніть виклик тими самими захистами, що й будь-який сторонній сервіс:
— таймаут, щоб повільна відповідь не тримала воркер вічно;
— повтори з витримкою на обмеження частоти та відповіді 5xx;
— кеш за ключем вхідних даних, щоб не платити двічі за той самий опис товару;
— жорсткий ліміт на токени й на кількість викликів, які може спричинити один користувач;
— журналювання ідентифікатора запиту, витрати токенів і вартості.

Просіть структуровану відповідь, коли її споживає ваш код. Модель, що повертає вільний текст, змушує розбирати прозу; модель, обмежена JSON-схемою, повертає поля, які можна перевірити. І все одно перевіряйте їх: для вашого застосунку відповідь мовної моделі — це введення користувача, і її не можна підставляти в SQL, команди оболонки чи HTML без екранування.

Нарешті вирішіть, що буде, коли модель помилиться, — а вона помилиться. Показуйте згенерований текст як чернетку, яку затверджує людина, зберігайте оригінал поруч зі згенерованою версією і робіть так, щоб при недоступному API все поверталося до старої поведінки. Інтеграція, яку неможливо вимкнути, рано чи пізно потягне сайт за собою.