Koniec z metodą "na czuja"
Większość projektów AI kończy się na etapie Jupyter Notebooka. Dlaczego? Bo przejście od imponującego demo do stabilnej produkcji to skok w przepaść. Modele językowe (LLM) są z natury niedeterministyczne. Ten sam prompt, który działał wczoraj, dziś może zwrócić halucynacje, bo dostawca modelu zmienił coś "pod maską" lub zmienił się kontekst danych wejściowych.
Tu wchodzi koncepcja LLMOps. Nie potrzebujesz jednak wymyślać koła na nowo i budować egzotycznych systemów CI/CD. Wystarczy połączyć nowoczesne narzędzie do obserwowalności, jakim jest Langfuse, z weteranem automatyzacji – Jenkinsem. To połączenie pozwala wprowadzić inżynieryjny rygor do nieprzewidywalnego świata AI.
Langfuse: Rentgen dla Twojej aplikacji AI
Langfuse nie jest kolejnym wrapperem na OpenAI. To platforma inżynieryjna typu open-source, która rozwiązuje trzy kluczowe problemy:
- Tracing (Śledzenie): Widzisz każdy krok wykonania łańcucha (chain) lub agenta. Wiesz dokładnie, ile trwał retrieval z wektorowej bazy danych, a ile generowanie odpowiedzi przez LLM.
- Zarządzanie Promptami: Zamiast trzymać prompty w kodzie (hardcoded strings), trzymasz je w Langfuse. To pozwala na ich wersjonowanie i edycję bez konieczności redeployu całej aplikacji.
- Ewaluacja i Dataset: To najważniejszy element w kontekście CI/CD. Możesz tworzyć zbiory danych testowych (złote standardy) i automatycznie sprawdzać, czy nowa wersja promptu nie pogorszyła jakości odpowiedzi.
Jenkins w świecie AI? Oczywiście.
Często słyszy się, że do AI potrzebne są nowe, dedykowane narzędzia CI/CD. To bzdura. Jenkins, ze swoją elastycznością i ekosystemem wtyczek, doskonale nadaje się do orkiestracji procesów LLMOps. Jego rola zmienia się jednak z prostego "budowniczego" na strażnika jakości merytorycznej modelu.
W tradycyjnym software developmencie testy jednostkowe są binarne: przechodzi albo nie. W AI testy są probabilistyczne. Jenkins musi więc uruchomić skrypt ewaluacyjny, pobrać wyniki (scores) z Langfuse i podjąć decyzję: czy spadek dokładności odpowiedzi o 2% jest akceptowalny, czy przerywamy wdrożenie?
Architektura rozwiązania: Pipeline krok po kroku
Integracja tych dwóch narzędzi tworzy pętlę zwrotną, która wygląda następująco:
1. Zarządzanie zmianą w promptach
Developer lub inżynier promptów aktualizuje prompt w panelu Langfuse. Zamiast ręcznie kopiować go do kodu, nadaje mu nową etykietę, np. staging. Aplikacja jest skonfigurowana tak, by pobierać najnowszą wersję promptu przez SDK Langfuse.
2. Jenkins uruchamia testy regresji
To serce procesu. Jenkins Pipeline (zdefiniowany w Jenkinsfile) powinien zawierać dedykowany etap LLM Evaluation. Co się w nim dzieje?
- Jenkins pobiera kod aplikacji i uruchamia skrypt testowy (np. w Pythonie z użyciem Pytest lub dedykowanego skryptu ewaluacyjnego).
- Skrypt ten pobiera zdefiniowany wcześniej
Datasetz Langfuse (zbiór pytań i wzorcowych odpowiedzi). - Każde pytanie z datasetu jest przepuszczane przez aplikację z nowym promptem.
- Wyniki są wysyłane z powrotem do Langfuse, gdzie następuje ich ocena. Może to być ocena automatyczna (np. inny model LLM oceniający spójność - tzw. LLM-as-a-Judge) lub porównanie deterministyczne.
3. Decyzja o wdrożeniu (Quality Gate)
To moment, w którym Jenkins pokazuje swoją siłę. Skrypt ewaluacyjny musi zwrócić zagregowany wynik. Jeśli średni wynik (score) dla nowego promptu jest niższy niż ustalony próg (np. 0.85) lub niższy niż wynik poprzedniej wersji produkcyjnej, Jenkins oznacza build jako FAILURE.
Dzięki temu unikasz sytuacji, w której "poprawienie" promptu pod jedno zapytanie psuje dziesięć innych przypadków użycia. Masz twarde dane, a nie przeczucia.
Monitoring produkcyjny i pętla zwrotna
Po udanym wdrożeniu rola Langfuse się nie kończy. W środowisku produkcyjnym narzędzie zbiera rzeczywiste interakcje użytkowników. Kluczowym elementem jest tutaj mechanizm User Feedback. Jeśli użytkownik kliknie "kciuk w dół" przy odpowiedzi bota, ta informacja trafia do Langfuse wraz z pełnym śladem (trace) wykonania.
Takie oflagowane konwersacje stają się idealnym materiałem do rozbudowy Twojego datasetu testowego. Inżynier AI może dodać ten trudny przypadek do zbioru w Langfuse, a przy kolejnym uruchomieniu Jenkinsa system sprawdzi, czy nowa wersja modelu radzi sobie z tym konkretnym problemem. W ten sposób dataset rośnie organicznie, a system staje się odporniejszy z każdym wdrożeniem.
Koszty i wydajność pod kontrolą
Oprócz jakości merytorycznej, Langfuse w połączeniu z Jenkinsem pozwala kontrolować budżet. W pipeline Jenkinsa możesz dodać asercje dotyczące zużycia tokenów lub czasu latencji. Jeśli nowy model jest co prawda o 1% lepszy, ale zużywa dwa razy więcej tokenów (i kosztuje dwa razy więcej) lub odpowiada o 3 sekundy dłużej, pipeline może to wykryć i zablokować wdrożenie. To aspekt często pomijany, a kluczowy dla rentowności projektów GenAI.