• Час читання ~8 хв
  • 09.06.2023

Однією з унікальних особливостей Flare є те, що він може відображати рішення для ваших помилок. У нашій базі коду ми намагаємося виявити конкретні повідомлення про помилки та відображати рішення, коли розпізнаємо конкретну помилку.

Сьогодні ми додаємо рішення на основі штучного інтелекту до Flare. Це означає, що ми можемо запропонувати рішення практично для будь-якої помилки: ШІ, швидше за все, запропонує корисну пропозицію для більшості помилок.

Ось приклад, коли ми забули налаштувати регіон для диска S3. "Регіон повинен бути дійсним міткою хоста RFC." не говорить багато, але ШІ чітко пояснює, що ми повинні передати такий регіон, як us-west-2 і навіть посилання на список, з усіма можливими регіонами.

Ми не розглядаємо рішення на основі штучного інтелекту як «революційну» функцію: вони просто вишенька на нашому торті. Найкращою особливістю Flare є наш інтерфейс користувача та ручна оптимізація як для Laravel, так і для PHP. Разом з AI-рішеннями це допоможе краще зрозуміти помилку та швидше її виправити.

У цьому блозі я хотів би поділитися більше про те, як ми впровадили рішення штучного інтелекту як у спалаху, так і в запалювання.

Представляємо Flare

Перш ніж відправитися в AI-land, я поясню, що таке Flare, щоб зібрати всіх на одній сторінці. Якщо ви знайомі з Flare, перейдіть до наступного розділу.

Якщо у вашому виробничому середовищі щось піде не так, і ви не використовуєте засіб відстеження помилок, легко пропустити, що сталася помилка. Якщо вам пощастить, один із ваших користувачів зв'яжеться з вами з цього приводу (що трохи бентежить), або він не зв'яжеться з вами з цього приводу (що ще гірше, тому що у вас не буде можливості щось виправити).

Коли ви використовуєте трекер винятків, як Flare, ваш додаток надішле помилку до Flare, а Flare надішле вам сповіщення поштою, Slack або ... Повідомлення міститиме посилання на повний звіт про помилку, що містить якомога більше деталей. Ви можете використовувати цю інформацію, щоб вирішити проблему з додатком, навіть якщо користувач не зв'язується з вами.

Коли ви використовуєте трекер винятків, як Flare, ваш додаток надішле помилку до Flare, а Flare надішле вам сповіщення поштою, Slack або ... Повідомлення міститиме посилання на повний звіт про помилку, що містить якомога більше деталей. Ви можете використовувати цю інформацію, щоб вирішити проблему з додатком, навіть якщо користувач не зв'язується з вами з цього приводу.

У Spatie ми самі створюємо та підтримуємо величезні програми. Ми помітили, що існуючі засоби відстеження помилок мають заплутані інтерфейси користувача, які бомбардують вас занадто великою кількістю інформації. Ми створили Flare з урахуванням простоти використання. Ми прагнемо показати вам найбільш релевантну інформацію, щоб ви могли швидше виправляти помилки у всіх своїх програмах PHP та JS.

Якщо ви використовуєте Laravel, ви вже знаєте, як виглядає Flare. Якщо у вашому локальному додатку Laravel сталася помилка, ви побачите сторінку помилки. Ми зробили цю сторінку помилки - вона називається Ignition.

У "Відблиску" помилки відображаються так само, як і при запалюванні; Ви вже знаєте, де знаходяться важливі фрагменти інформації.

Ми зробили все можливе, щоб повідомити про помилки з програми Laravel: ми розпізнаємо помилки Livewire; для помилки в завданні черги ми відображаємо інформацію про цю чергу; помилки перегляду міститимуть декомпільований вигляд Blade, ...

Рішення на основі штучного інтелекту в Flare Почати роботу з рішенням на основі штучного інтелекту в Flare

дуже просто. Для створення AI-рішення потрібно відправити свої помилки третій стороні (в даному випадку OpenAI). Ми хочемо зробити це лише з вашої явної згоди; вам потрібно ввімкнути цю функцію в налаштуваннях AI Flare вручну.

Коли ця функція буде ввімкнена, ми надішлемо 500 унікальних вхідних помилок до OpenAI, де буде згенеровано рішення. Зверніть увагу, що він завжди міститиме кілька корисних посилань на документацію.

Звичайно, ми також відображаємо рішення у всіх сповіщеннях, які надсилаємо. Ось приклад сповіщення поштою, що містить рішення AI.

І ось як виглядає сповіщення Slack:

створення рішень AI вимагає витрат, і саме тому у нас є щоденний ліміт у 500 помилок, які надсилатимуться до OpenAI. Не хвилюйтеся: якщо ви перетнете цю межу, ми все одно будемо приймати і відображати вхідні помилки, але більше не будемо генерувати рішення через OpenAI.

Якщо ви хочете генерувати більше 500 рішень на день через OpenAI, ви можете використовувати власний ключ OpenAI. При використанні власного ключа можна вказати власний денний ліміт.

Як це працює за лаштунками

Взаємодія з (відкритим) ШІ звучить просунуто, але це досить просто. Коротше кажучи, ми перетворюємо помилку в текстовий запит і робимо виклик API в OpenAI. Служба відповідає рішенням. Робочий процес більш-менш такий же, як і в цьому блозі Марселя.

Коли рішення AI увімкнено, ми надішлемо ці частини про вхідну помилку Open AI:

  • Повідомлення про помилку
  • Клас помилки
  • трасування стека
  • Фреймворкова версія
  • невеликі фрагменти контексту, щоб допомогти ШІ генерувати належну реакцію

Ми не надсилаємо нічого, що обертається навколо змінних середовища, і не запитуємо корисне навантаження, щоб уникнути надсилання паролів до штучного інтелекту.

Щоб перетворити помилку на запитання (він же підказка), яке ми надішлемо до ШІ, ми використовуємо цей вигляд Blade. Я трохи спростив його, щоб зробити його лаконічним.

You are a talented web programmer.
@if($error->language)
You are working on a {{ $error->language }} {{ $error->languageVersion }} app
	@if($error->framework)
	    that uses {{ $error->framework }} {{ $error->frameworkVersion }}
	@endif
@endif
Use the following context to find a possible fix for the exception message at the end. Limit your answer to 4 or 5 sentences, and include links to documentation that might help. Also, rate, on a scale from 1 to 100, how sure you are that this is the correct fix. Avoid repeating the exception message in your answer.
Use this format in your answer; make sure the links are JSON.
FIX
insert the possible fix here
ENDFIX
LINKS
{"title": "Title link 1", "URL": "URL link 1"}
{"title": "Title link 2", "URL": "URL link 2"}
ENDLINKS
SCORE
score from 1 to 100
ENDSCORE
---
Here comes the context and the exception message:
Line: {{ $error->lineNumber }}
File:
{{ $error->file }}
Snippet including line numbers:
```
{{ $error->snippet }}
```
Exception class:
{{ $error->exceptionClass }}
Exception message:
{{ $error->exceptionMessage }}

Щоб надіслати цю підказку Open AI, ми використовуємо цього чудового клієнта.

Ви можете побачити, що в підказці вище ми просимо ШІ добре використовувати шаблон для форматування повідомлення, форматування посилань як JSON та оцінки власної відповіді. Вірте чи ні, але ШІ ідеально дотримується цих інструкцій.

Це дозволяє нам аналізувати відповідь і приймати рішення на основі оцінки. Якщо ШІ набере власну відповідь нижче певного порогу, ми не будемо використовувати рішення. Іноді ШІ відповідає посиланнями на документацію, в результаті чого виходить 404. Ось чому у нас, за лаштунками, є код, щоб перевірити, чи всі посилання, які повертає ШІ, дійсні.

Оскільки Flare вже пропонував рішення для відображення задовго до появи штучного інтелекту, у нас вже були необхідні таблиці БД та інтерфейс користувача. Єдине, що ми додали, це прапорець, щоб пам'ятати, що рішення було згенеровано інтерфейсом користувача. Використовуючи цей прапорець, ми можемо візуально вказати, що рішення було створено штучним інтелектом, а також додати невелике повідомлення про відмову від відповідальності.

Використання штучного інтелекту локально в запаленні

Використання спалаху, мабуть, найпростіший спосіб роботи з рішеннями AI, оскільки вам потрібно лише ввімкнути цю функцію, і все готово.

Але ми не зупинилися на тому, щоб просто додати рішення AI до Flare; ми також додали їх до Ignition (як Laravel, так і агностичний варіант фреймворку).

У Laravel

була додана підтримка AI-рішень в Laravel-ignition v2.1. Біжи, composer update щоб втягнути це.

Далі спочатку необхідно встановити цю необов'язкову залежність. Нам потрібен цей пакет для спілкування з відкритим ШІ.

composer require openai-php/client

Нарешті, ви повинні вказати API OpenAI у ключі IGNITION_OPEN_AI_KEY у вашому .env файлі. Ви можете згенерувати цей ключ на OpenAI.

Ми використовуємо кеш, щоб мінімізувати дзвінки, зроблені до Open AI, коли ваша програма генерує подібні помилки.

Після цього кожна помилка, яку робить ваш локальний додаток, буде передана в OpenAI, а поряд із повідомленням про помилку відображатиметься рішення, створене штучним інтелектом.

У будь-якому додатку

для PHP Laravel поставляється з встановленим специфічним для Laravel варіантом запалювання. Ця версія заснована на фреймворк-агностичній версії Ignition, яку можна використовувати в будь-якій програмі PHP.

Після встановлення spatie/ignition у вашому додатку PHP ви повинні створити OpenAiSolutionProviderекземпляр . Конструктор очікує передачі ключа API OpenAI; ви повинні згенерувати цей ключ на OpenAI.

use \Spatie\Ignition\Solutions\OpenAi\OpenAiSolutionProvider;
$aiSolutionProvider = new OpenAiSolutionProvider($openAiKey);

Щоб скористатися постачальником рішень, вам слід передати addSolutionProviders його під час реєстрації запалювання.

\Spatie\Ignition\Ignition::make()
    ->addSolutionProviders([
    $aiSolutionProvider,
    // other solution providers...
    ])
->register();

Давайте спробуємо; ось простий сценарій PHP із встановленим запалюванням.

use Illuminate\Cache\ArrayStore;
use Illuminate\Cache\Repository;
use Spatie\Ignition\Ignition;
use Spatie\Ignition\Solutions\OpenAi\OpenAiSolutionProvider;
include 'vendor/autoload.php';
$openAiKey = 'sk-your-open-ai-key-here';
Ignition::make()
    ->addSolutionProviders([
        new OpenAiSolutionProvider(
            $openAiKey,
            new Repository(new ArrayStore())
        ),
    ])
    ->register();
throw new Exception('Stop here');

Це те, що ми бачимо в браузері, коли намагаємося відтворити веб-сторінку за допомогою цього сценарію.

За бажанням, ви можете додати кешування, щоб подібні помилки були надіслані на OpenAI лише один раз. Для кешування помилок можна викликати use cache Вам $aiSolutionProvider. слід пройти просту кеш-реалізацію. Ось підпис методуuse cache.

public function useCache(CacheInterface $cache, int $cacheTtlInSeconds = 60 * 60)

Щоб підвищити якість запропонованих рішень, ви можете надіслати тип додатку (Symfony, Drupal, WordPress, ...) до AI.

Щоб надіслати тип заявки, зателефонуйте application type до постачальника рішення.

$aiSolutionProvider->applicationType('Symfony 6');

На завершення

Сподіваємося, що вам сподобається додавання рішень AI до Flare і Ignition. Як було сказано у вступі, ми вважаємо, що рішення AI не зроблять революцію в нашому сервісі (це вже чудово без рішень AI), але що AI може допомогти вам краще в багатьох ситуаціях.

Наразі ми ввімкнули лише рішення AI для додатків PHP та Laravel. Протягом наступних кількох тижнів ми вдосконалимо нашу підказку на основі відгуків наших користувачів. Після цього ми будемо експериментувати, чи зможемо ми дати хороші рішення для помилок JavaScript.

Flare - найкращий трекер помилок для проектів Laravel та PHP. Ми відображаємо найважливіші аспекти проблем у вашому виробничому середовищі в нашому прекрасному інтерфейсі користувача.

Зараз ідеальний час, щоб спробувати Flare. Ви можете зареєструватися тут для безкоштовної десятиденної пробної версії; Кредитна картка не потрібна.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297