• Время чтения ~2 мин
  • 09.06.2023

Одной из уникальных особенностей Flare является то, что он может отображать решения для ваших ошибок. В нашей кодовой базе мы пытаемся обнаружить определенные сообщения об ошибках и отобразить решение при распознавании конкретной ошибки.

Сегодня мы добавляем в Flare решения на базе искусственного интеллекта. Это означает, что мы можем предложить решение практически для любой ошибки: ИИ, скорее всего, предложит полезное предложение для большинства ошибок.

Вот пример, когда мы забыли настроить регион для диска S3. «Регион должен быть допустимой меткой узла RFC» мало о чем говорит, но ИИ четко объясняет, что мы должны передать регион и us-west-2 даже ссылки на список со всеми возможными регионами.

Мы не рассматриваем решения на базе искусственного интеллекта как «революционную» функцию: они просто вишенка на нашем торте. Лучшая особенность Flare - это наш пользовательский интерфейс и ручная оптимизация как для Laravel, так и для PHP. Вместе с ИИ-решениями это поможет лучше понять ошибку и быстрее ее исправить.

В этом сообщении блога я хотел бы рассказать больше о том, как мы внедрили решения искусственного интеллекта как в Flare, так и в Ignition.

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

Прежде чем отправиться в AI-land, я объясню, что такое Flare, чтобы все были на одной волне. Если вы знакомы с Flare, перейдите к следующему разделу.

Если что-то пойдет не так в вашей производственной среде, и вы не используете средство отслеживания ошибок, легко пропустить, что произошла ошибка. Если вам повезет, один из ваших пользователей свяжется с вами по этому поводу (что немного смущает), или они не свяжутся с вами по этому поводу (что еще хуже, потому что у вас не будет возможности что-то исправить).

Когда вы используете трекер исключений, такой как Flare, ваше приложение отправит ошибку в Flare, а Flare отправит вам уведомление через Mail, Slack или ... Уведомление будет содержать ссылку на полный отчет об ошибке, предоставляя вам как можно больше подробностей. Вы можете использовать эти сведения для исправления своего приложения, даже если ваш пользователь не связывается с вами.

Когда вы используете трекер исключений, такой как Flare, ваше приложение отправит ошибку в Flare, а Flare отправит вам уведомление через Mail, Slack или ... Уведомление будет содержать ссылку на полный отчет об ошибке, предоставляя вам как можно больше подробностей. Вы можете использовать эти сведения для исправления своего приложения, даже если ваш пользователь не связывается с вами по этому поводу.

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

Если вы используете Laravel, вы уже знаете, как выглядит Flare. Если в вашем локальном приложении Laravel произойдет ошибка, вы увидите страницу ошибки. Мы сделали эту страницу с ошибкой - она называется Ignition.

В Flare ошибки отображаются так же, как и в Ignition; Вы уже знаете, где находятся важные биты информации.

Мы сделали все возможное, чтобы сообщить об ошибках в приложении Laravel: мы распознаем ошибки Livewire; При ошибке в задании очереди мы выводим сведения об этой очереди; Ошибки view будут содержать декомпилированное представление Blade, ...

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

очень просто. Создание решения ИИ требует отправки ваших ошибок третьей стороне (в данном случае OpenAI). Мы хотим сделать это только с вашего явного согласия; вам необходимо включить эту функцию в настройках AI Flare вручную.

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

Конечно, мы также отображаем решение во всех отправляемых нами уведомлениях. Ниже приведен пример почтового уведомления, содержащего решение ИИ.

А вот как выглядит уведомление в Slack:

Создание решений ИИ сопряжено с затратами, поэтому у нас есть ежедневный лимит в 500 ошибок, которые будут отправляться в OpenAI. Не волнуйтесь: если вы перейдете этот предел, мы все равно будем принимать и отображать входящие ошибки, но больше не будем генерировать решение через OpenAI.

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

Как это работает за кулисами Взаимодействие

с (открытым) ИИ звучит сложно, но это довольно просто. Короче говоря, мы преобразуем ошибку в текстовую подсказку и делаем вызов API к OpenAI. Служба отвечает решением. Рабочий процесс более или менее такой же, как и в этом сообщении в блоге Марселя.

Когда решения ИИ включены, мы отправим эти части при входящей ошибке в Open AI:

  • Сообщение об ошибке
  • Класс Error
  • Трассировка стека
  • Версия фреймворка
  • маленькие кусочки контекста, чтобы помочь ИИ генерировать правильный ответ

Мы не отправляем ничего, связанного с переменными среды, и не запрашиваем полезную нагрузку, чтобы избежать отправки паролей ИИ.

Чтобы преобразовать ошибку в вопрос (он же приглашение), который мы отправим ИИ, мы используем это представление 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 уже предлагал решения для отображения задолго до появления ИИ, у нас уже были необходимые таблицы БД и пользовательский интерфейс. Единственное, что мы добавили, это флаг, чтобы помнить, что решение было сгенерировано пользовательским интерфейсом. Используя этот флаг, мы можем визуально указать, что решение было сгенерировано искусственным интеллектом, а также добавить небольшое сообщение об отказе от ответственности.

Локальное использование ИИ в Ignition

Использование Flare, вероятно, является самым простым способом работы с решениями ИИ, так как вам нужно только включить эту функцию, и все готово.

Но мы не ограничились простым добавлением ИИ-решений в 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 поставляется с установленным вариантом Ignition, специфичным для Laravel. Эта версия основана на независимой от фреймворка версии Ignition, которую можно использовать в любом приложении PHP.

После установки spatie/ignition в приложении PHP необходимо создать OpenAiSolutionProviderэкземпляр . Конструктор ожидает, что будет передан ключ API OpenAI; вы должны сгенерировать этот ключ в OpenAI.

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

Чтобы использовать поставщика решения, вы должны передать его addSolutionProviders при регистрации Ignition.

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

Давайте попробуем; Вот простой PHP-скрипт с установленным Ignition.

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, ...) в ИИ.

Чтобы отправить тип приложения, обратитесь application type к поставщику решения.

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

В заключение

Мы надеемся, что вам понравится добавление AI-решений в Flare и Ignition. Как было сказано во вступлении, мы думаем, что решения ИИ не произведут революцию в нашем сервисе (он уже отлично обходится без решений ИИ), но ИИ может помочь вам лучше во многих ситуациях.

На данный момент мы включили 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