• Czas czytania ~8 min
  • 09.06.2023

Jedną z unikalnych cech Flare jest to, że może wyświetlać rozwiązania dla twoich błędów. W naszej bazie kodu staramy się wykrywać określone komunikaty o błędach i wyświetlać rozwiązanie, gdy rozpoznamy konkretny błąd.

Dzisiaj dodajemy do Flare rozwiązania oparte na sztucznej inteligencji. Oznacza to, że możemy zasugerować rozwiązanie dla prawie każdego błędu: sztuczna inteligencja prawdopodobnie zasugeruje pomocną sugestię dla większości błędów.

Oto przykład, w którym zapomnieliśmy skonfigurować region dla dysku S3. "Region musi być prawidłową etykietą hosta RFC." nie mówi wiele, ale AI wyraźnie wyjaśnia, że powinniśmy przekazać region podobny us-west-2 , a nawet linki do listy ze wszystkimi możliwymi regionami.

Nie postrzegamy rozwiązań opartych na sztucznej inteligencji jako "rewolucyjnej" funkcji: są one tylko wisienką na naszym torcie. Najlepszą cechą Flare jest nasz interfejs użytkownika i ręcznie wykonane optymalizacje zarówno dla Laravel, jak i PHP. Wraz z rozwiązaniami AI pomoże Ci to lepiej zrozumieć błąd i szybciej go naprawić.

W tym poście na blogu chciałbym podzielić się więcej o tym, jak wdrożyliśmy rozwiązania AI zarówno w Flare, jak i Ignition.

Przedstawiamy Flare

Zanim przejdę do krainy AI, wyjaśnię, czym jest Flare, aby wszyscy byli na tej samej stronie. Jeśli znasz Flara, przejdź do następnej sekcji.

Jeśli coś pójdzie nie tak w środowisku produkcyjnym i nie korzystasz z narzędzia do śledzenia błędów, łatwo jest przeoczyć, że wystąpił błąd. Jeśli masz szczęście, jeden z Twoich użytkowników skontaktuje się z Tobą w tej sprawie (co jest nieco krępujące) lub nie skontaktuje się z Tobą w tej sprawie (co jest jeszcze gorsze, ponieważ nie będziesz miał szansy naprawić rzeczy).

Gdy używasz narzędzia do śledzenia wyjątków, takiego jak Flare, aplikacja wyśle błąd do Flare, a Flare wyśle Ci powiadomienie za pośrednictwem Mail, Slack lub ... Powiadomienie będzie zawierało link do pełnego raportu o błędzie, zawierającego jak najwięcej szczegółów. Możesz użyć tych informacji do naprawienia aplikacji, nawet jeśli użytkownik nie skontaktuje się z Tobą.

Gdy używasz narzędzia do śledzenia wyjątków, takiego jak Flare, aplikacja wyśle błąd do Flare, a Flare wyśle Ci powiadomienie za pośrednictwem Mail, Slack lub ... Powiadomienie będzie zawierało link do pełnego raportu o błędzie, zawierającego jak najwięcej szczegółów. Możesz użyć tych informacji do naprawienia aplikacji, nawet jeśli użytkownik nie skontaktuje się z Tobą w tej sprawie.

W Spatie, sami tworzymy i utrzymujemy ogromne aplikacje. Zauważyliśmy, że istniejące moduły śledzenia błędów mają mylące interfejsy użytkownika, które bombardują Cię zbyt dużą ilością informacji. Zbudowaliśmy Flare z myślą o łatwości użytkowania. Naszym celem jest pokazanie najbardziej istotnych informacji, abyś mógł szybciej naprawić błędy we wszystkich aplikacjach PHP i JS.

Jeśli używasz Laravel, wiesz już, jak wygląda flare. Gdy wystąpi błąd w lokalnej aplikacji Laravel, zobaczysz stronę błędu. Stworzyliśmy tę stronę błędu - nazywa się Ignition.

W przypadku Flary błędy są wyświetlane podobnie jak w zapłonie; Wiesz już, gdzie znajdują się ważne informacje.

Dołożyliśmy wszelkich starań, aby zgłaszać błędy z aplikacji Laravel: rozpoznajemy błędy Livewire; W przypadku błędu w zadaniu kolejki wyświetlamy informacje o tej kolejce; błędy widoku będą zawierać zdekompilowany widok Blade, ...

Rozwiązania oparte na sztucznej inteligencji we Flare Rozpoczęcie pracy z rozwiązaniem opartym na sztucznej inteligencji we Flare

jest bardzo proste. Wygenerowanie rozwiązania AI wymaga wysłania błędów do strony trzeciej (w tym przypadku OpenAI). Chcemy to zrobić tylko za Twoją wyraźną zgodą; musisz ręcznie włączyć tę funkcję w ustawieniach AI flare.

Gdy ta funkcja zostanie włączona, wyślemy 500 unikalnych przychodzących błędów do OpenAI, gdzie zostanie wygenerowane rozwiązanie. Zwróć uwagę, że zawsze będzie zawierać kilka przydatnych linków do dokumentacji.

Oczywiście rozwiązanie wyświetlamy również we wszystkich wysyłanych przez nas powiadomieniach. Oto przykład powiadomienia pocztą zawierającego rozwiązanie AI.

A oto jak wygląda powiadomienie Slack:

Generowanie rozwiązań AI wiąże się z kosztami, dlatego mamy dzienny limit 500 błędów, które zostaną wysłane do OpenAI. Nie martw się: jeśli przekroczysz ten limit, nadal będziemy akceptować i wyświetlać przychodzące błędy, ale nie będziemy już generować rozwiązania za pośrednictwem OpenAI.

Jeśli chcesz wygenerować ponad 500 rozwiązań dziennie za pośrednictwem OpenAI, możesz użyć własnego klucza OpenAI. Korzystając z własnego klucza, możesz określić własny dzienny limit.

Jak to działa za kulisami Interakcja

z (otwartą) sztuczną inteligencją brzmi zaawansowanie, ale jest dość prosta. Krótko mówiąc, konwertujemy błąd na monit tekstowy i wykonujemy wywołanie API do OpenAI. Usługa odpowiada rozwiązaniem. Przepływ pracy jest mniej więcej taki sam, jak w tym poście na blogu Marcela.

Gdy rozwiązania AI zostaną włączone, wyślemy te części na przychodzący błąd do Open AI:

  • Komunikat o błędzie
  • Klasa błędu
  • Ślad stosu
  • Wersja ramowa
  • małe fragmenty kontekstu, które pomogą sztucznej inteligencji wygenerować właściwą odpowiedź

Nie wysyłamy niczego obracającego się wokół zmiennych środowiskowych ani nie żądamy ładunku, aby uniknąć wysyłania haseł do sztucznej inteligencji.

Aby przekonwertować błąd na pytanie (czyli monit), które wyślemy do AI, używamy tego widoku ostrza. Uprościłem go trochę, aby był zwięzły.

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 }}

Aby wysłać ten monit do Open AI, używamy tego doskonałego klienta.

Widać, że w powyższym monicie ładnie prosimy AI o użycie szablonu do sformatowania wiadomości, sformatowania linków jako JSON i uzyskania własnej odpowiedzi. Wierzcie lub nie, ale sztuczna inteligencja doskonale przestrzega tych instrukcji.

Pozwala nam to analizować odpowiedź i podejmować decyzje na podstawie wyniku. Jeśli sztuczna inteligencja uzyska własną odpowiedź poniżej pewnego progu, nie użyjemy rozwiązania. Czasami sztuczna inteligencja odpowiada linkami do dokumentacji, które skutkują 404. Dlatego za kulisami mamy kod, aby zweryfikować, czy wszystkie linki zwracane przez sztuczną inteligencję są prawidłowe.

Ponieważ Flare zawierał już rozwiązania wyświetlające na długo przed pojawieniem się sztucznej inteligencji, mieliśmy już niezbędne tabele DB i interfejs użytkownika. Jedyne, co dodaliśmy, to flaga pamiętająca, że rozwiązanie zostało wygenerowane przez interfejs użytkownika. Korzystając z tej flagi, możemy wizualnie wskazać, że rozwiązanie zostało wygenerowane przez sztuczną inteligencję, a także dodać mały komunikat o zastrzeżeniu.

Używanie sztucznej inteligencji lokalnie w Ignition

Korzystanie z Flare jest prawdopodobnie najłatwiejszym sposobem pracy z rozwiązaniami AI, ponieważ wystarczy włączyć tę funkcję i gotowe.

Ale nie poprzestaliśmy na dodaniu rozwiązań AI do Flare; dodaliśmy je również do Ignition (zarówno Laravel, jak i wariantu agnostycznego ramy).

W Laravel

dodano obsługę rozwiązań AI w Laravel-ignition v2.1. Biegnijcomposer update, aby to wciągnąć.

Następnie należy najpierw zainstalować tę opcjonalną zależność. Potrzebujemy tego pakietu, aby komunikować się z otwartą sztuczną inteligencją.

composer require openai-php/client

Na koniec należy określić interfejs API OpenAI w kluczu IGNITION_OPEN_AI_KEY w .env pliku. Możesz wygenerować ten klucz w OpenAI.

Używamy pamięci podręcznej, aby zminimalizować wywołania Open AI, gdy aplikacja generuje podobne błędy.

Dzięki temu każdy błąd popełniony przez lokalną aplikację zostanie przesłany do OpenAI, a obok komunikatu o błędzie zostanie wyświetlone rozwiązanie wygenerowane przez sztuczną inteligencję.

W każdej aplikacji

PHP Laravel jest dostarczany z zainstalowanym wariantem Ignition specyficznym dla Laravel. Ta wersja jest oparta na niezależnej od frameworka wersji Ignition, która może być używana w dowolnej aplikacji PHP.

Po zainstalowaniu spatie/ignition w aplikacji PHP należy utworzyć OpenAiSolutionProviderinstancję pliku . Konstruktor oczekuje, że klucz interfejsu API OpenAI zostanie przekazany; powinieneś wygenerować ten klucz w OpenAI.

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

Aby skorzystać z dostawcy rozwiązania, należy przekazać go addSolutionProviders podczas rejestracji Ignition.

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

Wypróbujmy to; oto prosty skrypt PHP z zainstalowanym 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');

To właśnie widzimy w przeglądarce, gdy próbujemy renderować stronę internetową za pomocą tego skryptu.

Opcjonalnie możesz dodać buforowanie, aby podobne błędy zostały wysłane do OpenAI tylko raz. Aby buforować błędy, możesz wywołać use cache $aiSolutionProvider. Powinieneś przekazać prostą implementację pamięci podręcznej. Oto podpis metodyuse cache.

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

Aby podnieść jakość sugerowanych rozwiązań, możesz wysłać wraz z typem aplikacji (Symfony, Drupal, WordPress, ...) do AI.

Aby wysłać typ aplikacji, zadzwoń application type do dostawcy rozwiązania.

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

Na zakończenie

Mamy nadzieję, że spodoba Ci się dodanie rozwiązań AI do Flare i Ignition. Jak wspomniano we wstępie, uważamy, że rozwiązania AI nie zrewolucjonizują naszej usługi (już jest świetna bez rozwiązań AI), ale że AI może pomóc lepiej w wielu sytuacjach.

Na razie udostępniliśmy tylko rozwiązania AI dla aplikacji PHP i Laravel. W ciągu najbliższych kilku tygodni dopracujemy nasz monit na podstawie opinii naszych użytkowników. Następnie będziemy eksperymentować, jeśli możemy podać dobre rozwiązania błędów JavaScript.

Flare to najlepszy tracker błędów dla projektów Laravel i PHP. Wyświetlamy najważniejsze aspekty problemów w Twoim środowisku produkcyjnym w naszym pięknym interfejsie użytkownika.

Teraz jest idealny czas na wypróbowanie Flare. Możesz zarejestrować się tutaj , aby skorzystać z bezpłatnej dziesięciodniowej wersji próbnej; Karta kredytowa nie jest wymagana.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297