Co to jest RAG? Generacja rozszerzona o wyszukiwanie wyjaśniona na przykładzie działania
RAG pozwala modelowi sztucznej inteligencji odpowiadać na podstawie własnych dokumentów, a nie samej pamięci. Dowiedz się, jak działa potok, uruchom jego małą wersję w zwykłym języku Python i zobacz, dlaczego prawdziwe systemy zawodzą i jak je przetestować.
- RAG najpierw wyszukuje odpowiednie informacje, dodaje je do podpowiedzi, a następnie prosi model o udzielenie na ich podstawie odpowiedzi.
- Jest to typowy sposób łączenia modelu językowego z prywatnymi lub często zmieniającymi się danymi.
- Większość problemów z jakością ma swój początek w pobieraniu i przygotowywaniu danych, a nie w modelu.
- RAG ogranicza zmyślone odpowiedzi, ale ich nie eliminuje, więc musisz to przetestować.
Zapytaj ogólnego asystenta AI o politykę zwrotów obowiązującą w Twojej firmie, a on może tylko zgadywać. Nigdy nie widział twoich dokumentów. RAG, skrót od generowania wspomaganego wyszukiwaniem, rozwiązuje ten problem, wyszukując odpowiednie informacje i przekazując je modelowi wraz z pytaniem.
Ten przewodnik wyjaśnia każdy etap prostym językiem, a następnie tworzy małą wersję, korzystając wyłącznie ze standardowej biblioteki Pythona. Uruchomiliśmy ten kod w Pythonie 3.13 i pokazane wyniki pochodzą z tego uruchomienia. Nie wykorzystuje modelu językowego, więc demonstruje wyszukiwanie i szybkie budowanie, więc nie testowaliśmy ostatniego kroku odpowiedzi.
Co to jest RAG?
Generowanie wspomagane wyszukiwaniem to technika łącząca etap wyszukiwania z modelem językowym. Kiedy pojawia się pytanie, system przeszukuje źródło wiedzy, dodaje najlepsze wyniki do podpowiedzi i prosi model o udzielenie odpowiedzi na podstawie tego materiału.
Pomyśl o egzaminie z otwartą książką. Uczeń z zamkniętą księgą polega na pamięci i może z pewnością błędnie pamiętać. Uczeń czytający otwartą książkę może najpierw sprawdzić właściwą stronę. RAG daje modelowi tę książkę, a także pozwala mu wskazać, z której strony korzystał.
Problem rozwiązuje RAG
Sam model językowy ma trzy ograniczenia w zastosowaniu biznesowym:
- Nie zna Twoich prywatnych danych. Twoje zasady, bilety i umowy nie były częścią jego szkolenia.
- Jego wiedza jest ograniczona. Nie może wiedzieć o cenie, którą zmieniłeś dziś rano.
- Może wymyślać odpowiedzi. Kiedy nie jest pewien, może stworzyć coś wiarygodnego, ale fałszywego.
RAG zajmuje się wszystkimi trzema i nie musisz niczego przekwalifikowywać. Zaktualizuj dokument, ponownie go zaindeksuj, a następna odpowiedź będzie mogła z niego skorzystać.
Jak działa RAG, krok po kroku
System RAG składa się z dwóch rurociągów. Jeden przygotowuje dane z wyprzedzeniem, a drugi odpowiada na każde pytanie.
Indeksowanie: przygotowanie danych
- Wczytaj: zbieraj treści z plików PDF, wiki, baz danych lub biletów.
- Wyczyść i podziel na części: usuń śmieci, a następnie podziel dokumenty na mniejsze fragmenty.
- Osadzanie: konwertuje każdy fragment na listę liczb, zwaną osadzaniem, która oddaje jego znaczenie.
- Przechowywanie: zapisywanie osadzonych elementów w indeksie z możliwością przeszukiwania, często w bazie danych wektorowych.
Zapytanie: odpowiadanie na pytanie
- Pobierz: umieść pytanie i znajdź fragmenty o najbliższym znaczeniu.
- Ulepszenie: wstaw te fragmenty do zachęty.
- Generuj: model zapisuje odpowiedź, korzystając z tego kontekstu.
Wyszukiwanie nie wymaga użycia wektorów. Może to być wyszukiwanie według słów kluczowych lub nawet zapytanie SQL, w zależności od tego, które z nich znajdzie odpowiednie informacje dla Twoich danych.
Mały działający przykład
Aby wyraźnie zobaczyć ruchome części, oto mały retriever bez bibliotek. Reprezentuje tekst w postaci liczonej liczby słów, co jest znacznie prostszym odpowiednikiem prawdziwego osadzania, i ocenia podobieństwo za pomocą miary cosinus.
import math, re
from collections import Counter
DOCS = {
"refunds": "Refunds are paid within 7 days to the original payment method.",
"shipping": "Standard shipping takes 3 to 5 working days across India.",
"warranty": "All keyboards include a 2 year warranty against defects.",
}
def vectorize(text):
return Counter(re.findall(r"[a-z0-9]+", text.lower()))
def similarity(a, b):
dot = sum(a[word] * b[word] for word in a)
size = math.sqrt(sum(v * v for v in a.values()))
size *= math.sqrt(sum(v * v for v in b.values()))
return dot / size if size else 0
def retrieve(question, k=1):
q = vectorize(question)
scored = [(similarity(q, vectorize(t)), name) for name, t in DOCS.items()]
return sorted(scored, reverse=True)[:k]
def build_prompt(question):
(score, name), = retrieve(question)
return (
"Answer using only the context. If it is not there, say you do not know.\n"
f"Context: {DOCS[name]}\n"
f"Question: {question}"
)
Pytanie o zwrot pieniędzy znajduje właściwy fragment i tworzy następujący monit:
print(retrieve("How many days until refunds are paid?"))
# [(0.4558..., 'refunds')]
print(build_prompt("How many days until refunds are paid?"))
# Answer using only the context. If it is not there, say you do not know.
# Context: Refunds are paid within 7 days to the original payment method.
# Question: How many days until refunds are paid?
W kompletnym systemie wysłałbyś teraz ten monit do modelu językowego. Ważnym szczegółem jest instrukcja przyznania się do braku odpowiedzi, o czym możesz dowiedzieć się więcej w naszym przewodniku po szybkiej inżynierii.
Czego brakuje w naszym przykładzie
Teraz spróbuj zadać pytanie, które oznacza to samo, ale używa innych słów:
print(retrieve("When can I get my money back?", k=3))
# [(0.0, 'warranty'), (0.0, 'shipping'), (0.0, 'refunds')]
Każdy wynik wynosi zero, ponieważ pytanie nie ma wspólnych słów z żadnym dokumentem. „Zwrot pieniędzy” oznacza zwrot pieniędzy człowiekowi, ale nie ma tego w słowach. Ten pojedynczy wynik wyjaśnia, dlaczego w rzeczywistych systemach stosuje się osadzenia, które są zaprojektowane w taki sposób, że tekst o podobnym znaczeniu kończy się podobnymi liczbami, nawet bez wspólnych słów.
Ale nie zakładaj, że osadzanie rozwiąże wszystko. Mogą mieć trudności z dokładnymi terminami, takimi jak kody produktów i numery błędów, z którymi wyszukiwanie słów kluczowych radzi sobie bardzo dobrze. Dlatego wiele systemów produkcyjnych korzysta z wyszukiwania hybrydowego, łącząc oba podejścia.
Kawałki: krok, którego ludzie nie doceniają
Dokumenty są dzielone na fragmenty, ponieważ całe pliki są zbyt długie i nieprecyzyjne, aby je odzyskać. Wybrany rozmiar wiąże się z prawdziwym kompromisem:
| Rozmiar kawałka | Zaleta | Ryzyko |
|---|---|---|
| Za mały | Precyzyjne dopasowania | Traci kontekst, np. produkt, do którego odnosi się reguła |
| Za duży | Zachowuje kontekst | Rozmywa znaczenie i wykorzystuje więcej podpowiedzi |
| Podziel według struktury | Przestrzega nagłówków i sekcji | Potrzebuje czystszych dokumentów źródłowych |
Kilkaset słów z pewnym nakładaniem się fragmentów to częsty punkt wyjścia, ale traktuj to jako pierwsze przypuszczenie do przetestowania. Jeśli to możliwe, dziel wzdłuż naturalnych granic, takich jak nagłówki. Dołącz metadane, takie jak tytuł dokumentu, data i dział, aby móc filtrować wyniki i cytować źródła.
Poprawa odzyskiwania
Jeśli odpowiedzi są słabe, warto wypróbować poniższe ulepszenia, mniej więcej w następującej kolejności:
- Wyczyść dane. Najpierw usuń nieaktualne i zduplikowane dokumenty. Żaden algorytm nie naprawia sprzecznych źródeł.
- Użyj wyszukiwania hybrydowego. Łącz wyniki oparte na znaczeniu i słowa kluczowe.
- Dodaj osobę oceniającą. Pobierz więcej kandydatów, a następnie użyj specjalistycznego modelu, aby zmienić ich kolejność według trafności.
- Filtruj według metadanych. Przed wyszukiwaniem ogranicz wyniki według produktu, regionu lub daty.
- Przepisz zapytanie. Zastosuj niejasną odpowiedź typu „a co z drugim?” w kompletne pytanie.
Wskazówka: Zanim zrzucisz winę na model, sprawdź, co faktycznie zwróciło odzyskanie. Gdyby właściwy fragment nie znajdował się w kontekście, żaden model nie mógłby udzielić na jego podstawie prawidłowej odpowiedzi.
RAG vs dostrajanie
| Pytanie | SZARA | Dostrajanie |
|---|---|---|
| Co dodaje? | Wiedza w czasie pytań | Wytrenowane zachowanie lub styl |
| Aktualizowanie informacji | Ponownie zaindeksuj dokument | Pociąg ponownie |
| Czy może powoływać się na źródła? | Tak | Niezawodnie |
| Najlepsze dla | Fakty, które zmieniają | Spójny format lub ton |
Nie wykluczają się one wzajemnie. Nasze porównanie RAG z dostrajaniem i szybką inżynierią pokazuje, jak dokonać bardziej szczegółowego wyboru.
Jak przetestować system RAG
RAG to oprogramowanie i wymaga testów, jak każde inne oprogramowanie. Utwórz zestaw prawdziwych pytań wraz z fragmentami i odpowiedziami, których oczekujesz, a następnie zmierz oba etapy osobno:
| Scena | Pytanie, które należy zadać | Nazwa zwyczajowa |
|---|---|---|
| Odzyskiwanie | Czy złapaliśmy właściwy fragment? | Przypomnienie kontekstu |
| Odzyskiwanie | Ile z tego, co pobraliśmy, było przydatne? | Precyzja kontekstu |
| Pokolenie | Czy odpowiedź jest poparta kontekstem? | Wierność |
| Pokolenie | Czy faktycznie odpowiada na pytanie? | Znaczenie odpowiedzi |
Uwzględnij także niewygodne przypadki: pytania, na które nie ma odpowiedzi w danych, pytania zawierające inne sformułowania oraz pytania pochodzące ze sprzecznych źródeł. Uruchom ponownie ten zestaw za każdym razem, gdy zmienisz fragmentację, modele lub podpowiedzi, tak jak w przypadku zestawu regresji. Nasz samouczek dotyczący testów Pythona pokazuje, jak uruchomić wiele danych wejściowych w jednym teście.
Dlaczego systemy RAG zawodzą
- Odpowiedzi nie ma w danych. Model może nadal podjąć taką próbę, więc powiedz mu, jak odmówić.
- Nie pobrano odpowiedniego fragmentu. Często jest to problem związany z fragmentowaniem lub wyszukiwaniem.
- Zbyt dużo kontekstu. Nieistotne fragmenty mogą odwrócić uwagę modelu i podnieść koszty.
- Nieaktualne dokumenty. Starą polisę można odzyskać z taką samą pewnością, jak obecną.
- Tabele i pliki PDF zostały źle przeanalizowane. Jeśli wyodrębnienie zakłóci tekst, odzyskanie nigdy nie zostanie przywrócone.
- Testowanie tylko za pomocą pytań demonstracyjnych. Prawdziwi użytkownicy wyrażają się zupełnie inaczej.
Bezpieczeństwo i uprawnienia
RAG niesie ze sobą dwa zagrożenia, które łatwo przeoczyć. Po pierwsze, kontrola dostępu: jeśli w indeksie znajdują się pliki HR, pytanie młodszego pracownika nie może ich pobierać. Zastosuj uprawnienia każdego użytkownika podczas pobierania, ponieważ poinstruowanie modelu, aby zachowywał tajemnice, nie jest niezawodnym zabezpieczeniem.
Po drugie, szybki zastrzyk. Pobrana strona internetowa lub dokument może zawierać tekst taki jak „zignoruj instrukcje”. Traktuj pobrane treści jako niezaufane dane, ograniczaj działania, jakie może podjąć model i wymagaj zatwierdzenia przez człowieka wrażliwych danych.
Podsumowanie
RAG to prosty pomysł z dużą ilością praktycznych szczegółów: znajdź odpowiednie informacje, a następnie poproś modelkę, aby z nich skorzystała. Zacznij od małego, przejrzystego zestawu dokumentów i około dwudziestu prawdziwych pytań. Spraw, aby pobieranie działało dobrze, zanim zwiększysz złożoność, ponieważ skromny potok z dobrymi danymi zwykle pokonuje wyrafinowany potok ze złymi danymi.
Najczęstsze pytania
Co oznacza RAG w AI?
RAG oznacza generację wspomaganą odzyskiwaniem. System pobiera istotne informacje, dodaje je do podpowiedzi, a model generuje na ich podstawie odpowiedź.
Czy RAG powstrzymuje halucynacje AI?
Redukuje je, podając modelowi realne źródła, ale ich nie usuwa. Model może nadal błędnie odczytać kontekst, więc przetestuj odpowiedzi i pokaż cytaty.
Czy potrzebuję bazy danych wektorów dla RAG?
Nie zawsze. Małe projekty mogą wykorzystywać indeks w pamięci, wyszukiwanie słów kluczowych lub SQL. Wektorowe bazy danych pomagają w przypadku dużych zbiorów i wyszukiwania opartego na znaczeniach.
Jaka jest różnica między RAG a dostrajaniem?
RAG dostarcza informacji w czasie zadawania pytań, więc aktualizacje są szybkie. Dostrajanie uczy model zmiany jego zachowania lub stylu i jest mniej dostosowane do zmieniających się faktów.
Co to jest osadzanie?
Osadzanie to lista liczb reprezentujących znaczenie tekstu. Fragmenty o podobnym znaczeniu mają podobne numery, co umożliwia wyszukiwanie na podstawie znaczeń.
Ucz się dalej
Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?
Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.
Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój
Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.
Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć
Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…
Przeczytaj artykuł →DevOpsWyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo
Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429
Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …
Przeczytaj artykuł →Automatyzacja testówWyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią
Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…
Przeczytaj artykuł →Testowanie oprogramowaniaWyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%
Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…
Przeczytaj artykuł →Bazy danych i SQLDELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich
DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami
Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…
Przeczytaj artykuł →Tworzenie oprogramowaniaInterfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora
Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…
Przeczytaj artykuł →Tworzenie oprogramowaniaPython *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami
Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…
Przeczytaj artykuł →Tworzenie oprogramowaniaFunkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać
Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…
Przeczytaj artykuł →Sztuczna inteligencjaKim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić
Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…
Przeczytaj artykuł →DevOpsMonitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami
Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…
Przeczytaj artykuł →DevOpsWoluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób
Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…
Przeczytaj artykuł →Automatyzacja testówTDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich
TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…
Przeczytaj artykuł →Testowanie oprogramowaniaTestowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady
Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać
Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…
Przeczytaj artykuł →Bazy danych i SQLInstrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy
SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…
Przeczytaj artykuł →Tworzenie oprogramowaniaCo to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania
Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami
Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom
Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …
Przeczytaj artykuł →Sztuczna inteligencjaCzym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa
Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…
Przeczytaj artykuł →DevOpsWdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru
Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…
Przeczytaj artykuł →Automatyzacja testówNiestabilne testy: co je powoduje i jak je naprawić na dobre
Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…
Przeczytaj artykuł →Testowanie oprogramowaniaLoad Testing vs Stress Testing: Differences, Metrics and k6 Examples
Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…
Przeczytaj artykuł →Testowanie oprogramowaniaPrzypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich
Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…
Przeczytaj artykuł →Bazy danych i SQLOptymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją
Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…
Przeczytaj artykuł →Bazy danych i SQLSQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność
SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…
Przeczytaj artykuł →Tworzenie oprogramowaniaSamouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu
Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…
Przeczytaj artykuł →Tworzenie oprogramowaniaObsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami
Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…
Przeczytaj artykuł →Tworzenie oprogramowaniaKlasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami
Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …
Przeczytaj artykuł →Sztuczna inteligencjaCo to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu
Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…
Przeczytaj artykuł →DevOpsPolecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami
Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…
Przeczytaj artykuł →Automatyzacja testówSelenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór
Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…
Przeczytaj artykuł →Testowanie oprogramowaniaPartycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach
Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…
Przeczytaj artykuł →Testowanie oprogramowaniaWażność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady
Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…
Przeczytaj artykuł →Bazy danych i SQLSamouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami
Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…
Przeczytaj artykuł →Bazy danych i SQLWyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji
Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…
Przeczytaj artykuł →Tworzenie oprogramowaniaŚciągawka dotycząca poleceń Git: polecenia, których faktycznie używasz, z przykładami
Ściągawka poleceń Git pogrupowana według zadań: konfiguracja, przemieszczanie, gałęzie, piloty, skrytka, historia i cofanie błędów, z danymi wyjścio…
Przeczytaj artykuł →Tworzenie oprogramowaniaWyjaśnienie obietnic JavaScript: następnie catch, Promise.all i typowe błędy
Obietnice JavaScript wyjaśnione za pomocą uruchomionego przez nas kodu: stany, łańcuchy then i catch, obsługa błędów, Promise.all, allSettled, race …
Przeczytaj artykuł →Tworzenie oprogramowaniaSamouczek słownika języka Python: metody, przykłady i typowe wzorce
Samouczek słownika języka Python z uruchomionym przez nas kodem: tworzenie, odczytywanie i aktualizowanie słowników, metody kluczowych, łączenie, ro…
Przeczytaj artykuł →Sztuczna inteligencjaCo to jest RAG? Generacja rozszerzona o wyszukiwanie wyjaśniona na przykładzie roboczym
Co to jest RAG? Generowanie wspomagane pobieraniem wyjaśnione krok po kroku: indeksowanie, fragmentowanie, osadzanie, pobieranie, mały działający pr…
Przeczytaj artykuł →DevOpsSamouczek Terraform dla początkujących: Infrastruktura jako kod od pierwszego pliku do modułów
Samouczek Terraform dla początkujących: zacznij bez konta w chmurze, naucz się inicjowania, planowania i stosowania, a następnie zmiennych, wyników,…
Przeczytaj artykuł →DevOpsDocker kontra Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz
Wyjaśniono Docker vs Kubernetes: co robi każdy z nich, ta sama aplikacja działa z obydwoma, porównanie Docker Compose i Swarm, zmiana podkładki dock…
Przeczytaj artykuł →Automatyzacja testówSamouczek Pytest dla początkujących: urządzenia, parametryzacja i prawdziwe przykłady
Samouczek pytest dla początkujących z testami, które przeprowadziliśmy na pytest 9.2: asercje, urządzenia, parametryzacja, conftest, znaczniki, tmp_…
Przeczytaj artykuł →Testowanie oprogramowaniaCykl życia testowania oprogramowania (STLC): 6 faz, kryteria wejścia i wyjścia, przykład
Wyjaśniono cykl życia testowania oprogramowania: sześć faz STLC z kryteriami wejścia i wyjścia, elementy dostarczane, działający przykład funkcji lo…
Przeczytaj artykuł →Tworzenie oprogramowaniaGit merge vs rebase: różnice, przykłady i kiedy czego używać
Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.
Przeczytaj artykuł →Tworzenie oprogramowaniaPython list comprehension: składnia, przykłady i kiedy jej unikać
Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…
Przeczytaj artykuł →Bazy danych i SQLSQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)
Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…
Przeczytaj artykuł →