Zbuduj lokalnego czata AI w Pythonie - Mercury + Bielik LLM krok po kroku
Niedawo opublikowaliśmy wersję 3 naszej biblioteki Mercury która umożliwia budowanie aplikacji webowych bezpośrednio z notatnika Pythonowego. Nowa wersja oferuje widgety pozwalające na łatwe budowanie aplikacji typu chat. To pozwala na tworzenie różnorodnych aplikacji, począwszy od zaawansowanej wizualizacji w formie dashboardu, interaktywnego raportu, po złożoną aplikację, która rozmawia z naszą bazą danych.
W tym artykule pokażemy jak łatwo zbudować aplikację czata z wykorzystaniem polskiego modelu językowego Bielik. To model stworzony przez SpeakLeash i ACK Cyfronet AGH. Jest to model wyspecjalizowany w przetwarzaniu i zgodny z polskim kontekstem języokowym. Dzięki temu, że model jest otwarty, można go douczyć na własnych danych, aby sprawniej działał zgodnie z naszymi potrzebami.
Do zbudowania czata wykorzystujemy notatnik Pythonowy oraz bibliotekę Mercury, która jest open source na licencji Apache-2.0. Repozytorium Mercurego to github.com/mljar/mercury , a dokumentacja jest dostępna na stronie RunMercury.com.
Obie technologie Mercury i Bielik powstają w Polsce, świetnie razem rezonują i są doskonałymi narzędziami do dalszego tworzenia.
1. Uruchomienie Bielika lokalnie
Do uruchomienia Bielika na moim komputerze używam oprogramowania ollama, do pobrania ze strony ollama.com. Żeby pobrać model uruchamiam komendę:
ollama run SpeakLeash/bielik-11b-v3.0-instruct:Q4_K_M
Pobranie zajmuje kilka minut, po tym czasie mogę swobodnie rozmawiać z modelem w terminalu:

2. Potrzebne pakiety
Do stworzenia kompletnej aplikacji potrzebujemy dwóch pakietów:
ollamado komunikacji z Bielikiem,mercurydo stworzenia aplikacji,
Ich nieskomplikowana instalacja wymaga jedynie wpisania komendy:
pip install ollama mercury
Do edytowania notatnika można użyć JupyterLab albo MLJAR Studio.
3. Budowanie czata
Otwieramy nowy notatnik Pythonowy. Pierwszym krokiem jest import potrzebnych paczek:
import ollama import mercury as mr
W kolejnej komórce z kodem dodajemy zmienną messages która będzie listą wiadomości. Dzięki niej Bielik będzie wiedział o całej naszej rozmowie:
# list with all user and assistant messages messages = []
W kolejnej komórce tworzymy miejsce gdzie będą wyświetlane wiadomości. Używamy do tego widgeta Chat z pakietu Mercury. W nim będą wyświetlane wszystkie wiadomości.
# place to display messages chat = mr.Chat(placeholder="💬 Brak wiadomości, zacznij konwersację")
Potrzebujemy miejsca, w którym użytkownik będzie mógł wpisać swoją wiadomość. Używamy do tego ChatInput. Miejsce na wpisanie prompta będzie wyświetlane na dole aplikacji:
# user input prompt = mr.ChatInput(placeholder="Napisz wiadomość ...")
Tak prezentują się elementy składowe naszej aplikacji:

Pakiet Mercury upraszcza budowanie aplikacji, ponieważ interakcja z widgetem poprostu wywołuje ponowne wykonanie komórek pod widgetem. Wystarczy dodać komórkę z kodem do obsługi prompta, który zostanie uruchomiony po wprowadzeniu wiadomości przez użytkownika.
if prompt.value: # create user message usr_msg = mr.Message(markdown=prompt.value, role="user") # display user message in the chat chat.add(usr_msg) # save in messages list messages += [{'role': 'user', 'content': prompt.value}] # call local LLM 🇵🇱 stream = ollama.chat( model='SpeakLeash/bielik-11b-v3.0-instruct:Q4_K_M', messages=messages, stream=True, ) # create assistant message ai_msg = mr.Message(role="assistant", emoji="🦅") # display assistant message in the chat chat.add(ai_msg) # stream with response content = "" for chunk in stream: ai_msg.append_markdown(chunk.message.content) content += chunk.message.content # save assistant response messages += [{'role': 'assistant', 'content': content}]
Powyższy kod można podzielić na następujące kroki:
- jeżeli jest nowa wartość prompta to wchodzimy w warunek,
- tworzymy wiadomość użytkownika, dodajemy ją do czata, i zapamiętujemy w liście wiadomości,
- następnie wysyłamy nasze wiadomości do Bielika przy użyciu pakietu ollama.
Warto zauważyć, że mamy podany argument
stream=True- to znaczy, że będziemy wyświetlać tekst dokładnie w takiej formie, w jakiej zwraca go model. Dzięki temu użytkownik będzie miał wrażenie, że model rzeczywiście do niego pisze. Gdybyśmy ustawilistream=Falsetoollamaczekała by na całą wiadomość od Bielika i dopiero wtedy całość byłaby wyświetlana. - ostatnim krokiem w naszym kodzie, jest stworzenie widomości z Bielika, dodawanie w niej zwracanego tekstu z modelu (funkcja
ai_msg.append_markdown()), oraz zapamiętanie końcowej wiadomości w liściemessages.
Pakiet Mercury daje możliwość wyświetlenia podglądu aplikacji w trakcie jej budowania. Tak wygląda czat w procesie tworzenia:

Fajnie :)
4. Aplikacja czat z Bielikiem
Dla naszego użytkownika końcowego chcemy wyświetlić tylko aplikację końcową. Nie straszymy kodem użytkowników! Żeby uruchomić serwer Mercury wystarczy uruchomić komendę:
mercury
Serwer wyszukuje wszystkie notatniki w bieżącym katalogu i wyświetla stronę startową:

Wybieramy naszą aplikację i możemy rozmawiać w naszym ojczystym języku z polskim modelem językowym, w aplikacji zbudowanej za pomocą polskiego pakietu Mercury:

Coś pięknego!
Podsumowanie
A niechaj narodowie wżdy postronni znają, iż Polacy nie gęsi, iż swoje AI technologie mają.
Nie ukrywam - to trochę wzruszające. Mercury powstaje w Polsce. Bielik powstaje w Polsce. A razem pozwalają budować nowoczesne aplikacje AI, które jeszcze kilka lat temu wymagały całych zespołów frontendowych, backendowych i ML-owych.
Dziś wystarczy:
- notatnik Python,
- kilka widgetów,
- lokalny model językowy.
I nagle mamy:
- aplikację webową,
- interfejs typu chat,
- model LLM działający na własnym komputerze,
- pełną kontrolę nad danymi.
To dopiero początek. Taki chat można łatwo rozbudować o:
- rozmowę z bazą danych,
- generowanie wykresów,
- analizę plików,
- dashboardy,
- wewnętrzne narzędzia firmowe,
- asystentów do dokumentów,
- edukacyjne aplikacje AI.
I to wszystko bez budowania frontendu od zera.
Mercury skraca drogę od pomysłu do działającej aplikacji. Bielik daje model, który rozumie polski język i kontekst. Razem tworzą fundament pod polskie aplikacje AI nowej generacji.
Jeśli budujesz narzędzia, robisz analizy, tworzysz systemy ML albo po prostu chcesz eksperymentować z LLM-ami - to jest świetny moment, żeby zacząć.
Bo przyszłość AI nie dzieje się gdzieś tam. Ona dzieje się tu. I możesz ją współtworzyć. 🇵🇱🚀
AI Data Analyst on Your Computer
Use MLJAR Studio to explore data, find insights, and create reports with AI. Everything runs locally, so your data stays with you.
About the Authors

Related Articles
- 4 ways for Exploratory Data Analysis in Python
- AutoML Example Projects: A Guide with 10 Popular Datasets
- What is AI Data Analyst?
- Navy SEALs, Performance vs Trust, and AI
- New version of Mercury (3.0.0) - a framework for sharing discoveries
- Build chatbot to talk with your PostgreSQL database using Python and local LLM
- Build a ChatGPT-Style GIS App in a Jupyter Notebook with Python
- Private PyPI Server: How to Install Python Packages from a Custom Repository
- Essential Python Libraries for Data Science (2026 Guide)
- Statistics for Data Science: Essential Concepts
