Projekt AI-DX autorstwa Andrei Decarolis (K1FM) to aplikacja w języku Python typu open source, która może autonomicznie prowadzić prawdziwe QSO SSB na pasmach KV - bez operatora siedzącego za radiem. To nie jest chatbot symulujący ruch na ekranie. AI-DX łączy się z fizycznym transiwerem, słucha pasma, rozpoznaje połączenie, odpowiada głosowo, rejestruje połączenie w ADIF i ponownie wywołuje CQ. Projekt nie ma zaplecza korporacyjnego ani zespołu programistów – na razie trzy gwiazdki na GitHubie i jeden entuzjasta, który po prostu raz go napisał i umieścił.
Dla społeczności radioamatorów AI-DX jest interesujący nie tylko jako gotowe narzędzie, ale także jako implementacja referencyjna: pokazuje, jak nowoczesne interfejsy API AI można zintegrować z istniejącym sprzętem radiowym bez potrzeby stosowania specjalnego interfejsu sprzętowego. Każdy, kto chce zrozumieć, jak GPT-4o Realtime, mostek audio WebSocket i rejestrowanie ADIF współpracują ze sobą, może po prostu uruchomić tryb demonstracyjny na dowolnym MacBooku i zobaczyć, co się stanie.
Przeczytasz w artykule
K1FM: kto za tym stoi

Autorka Andrea Decarolis ma markę K1FM. Je vývojár so záujmom o prepojenie moderných AI API s rádioamatérskou praxou. AI-DX nie je jeho jediným projektom v tejto oblasti – spolu s ním je na GitHube aj wfweb, webový server, ktorý sprístupňuje audio a PTT Transceiver poprzez interfejs WebSocket z obsługą TLS. Architektura ta ma tę zaletę, że wfweb może działać bezpośrednio na komputerze podłączonym do radia (na przykład Raspberry Pi w stacji), natomiast AI-DX działa na dowolnej innej maszynie w sieci - nawet zdalnej.
Architektura: co naprawdę dzieje się za kulisami

AI-DX opiera się na tym GPT-4o API czasu rzeczywistego z OpenAI – specjalnego interfejsu przeznaczonego do przetwarzania dźwięku w czasie rzeczywistym. Cały łańcuch wygląda tak: wfweb WebSocket odbiera dźwięk z odbiornika (48 kHz PCM16), wysyła go do GPT-4o Realtime, gdzie następuje rozpoznawanie mowy (STT), przetwarzanie modelu języka (LLM) i synteza odpowiedzi (TTS) - wszystko po stronie serwera OpenAI. Wygenerowany dźwięk jest przesyłany z powrotem poprzez wfweb do nadajnika, a model jednocześnie przełącza PTT poprzez WebSocket.
Dôsledok tohto dizajnu je zaujímavý: na lokálnom počítači nebeží žiadny STT engine, žiadny TTS engine, žiadna detekcia hlasovej aktivity. Dodatkowo model nie przechowuje żadnej pamięci pomiędzy QSO - każde wywołanie CQ zaczyna się od pustego kontekstu. To nie jest błąd, ale celowa decyzja: pozwala uniknąć kumulacji stanu, który mógłby zdezorientować model podczas długich sesji operacyjnych. Obciążenie obliczeniowe jest w całości przenoszone na serwer chmurowy OpenAI. Dzięki temu możliwe jest uruchomienie AI-DX nawet na komputerze Mac Mini M1 bez procesora graficznego. Praktyczny kompromis jest oczywisty: działa tylko wtedy, gdy masz Internet i ważny klucz API OpenAI z dostępem do modelu podgląd-gpt-4o w czasie rzeczywistym.
Kontakty sa sledujú cez function calling: gdy model usłyszy znak wywoławczy, nazwę operatora lub QTH, zavolá interný nástroj aktualizacja_kontaktu() i na bieżąco uzupełnia dokumentację. Kiedy operator się żegna, model dzwoni update_contact(zamykanie=true), połączenie jest zapisywane w dzienniku ADIF i AI-DX ponownie wywołuje CQ. Żadnych wyrażeń regularnych, żadnego analizowania tekstu - po prostu zrozumienie języka ojczystego.
Wymagania instalacyjne i techniczne
Projekt wymaga Pythona 3.10 do 3.13 i menedżera pakietów uv. Instalacja jest prosta:
git clone https://github.com/adecarolis/AI-DX && cd AI-DX && synchronizacja UV
Projekt jest obecnie testowany na systemie macOS Apple Silicon (M4). Na innych platformach może być konieczna modyfikacja – autor otwarcie wspomina o tym w README. Oprócz zależności Pythona, w sieci musi działać instancja wfweb, aby fizycznie sterować transiwerem. Dostępny jest tryb demonstracyjny bez wfweb: AI-DX słucha mikrofonu komputera i odpowiada przez głośniki bez żadnego sprzętu radiowego - świetnie nadaje się do testowania lub poznania zachowania modelu.
Konfiguracja: plik .env zamiast GUI
Wszystkie ustawienia przechodzą przez plik .środka w katalogu głównym projektu. Wymagane zmienne to OPENAI_API_KEY, znak wywoławczy a WFWEB_URL. Opcjonalne zmienne obejmują nazwę operatora, QTH, antenę, moc i typ transiwera - model wykorzystuje je bezpośrednio w mowie QSO. Częstotliwość i tryb są ładowane na żywo z raportów o stanie wfweb; dokładna wartość jest zapisywana w dzienniku ADIF VFO v momente ukončenia QSO.
Zásadnou voľbou je štýl operátora, ustawiony przez zmienną STYL_OPERATORA:
| Styl | Zachowanie |
|---|---|
| CALLING_CQ | Woła CQ co N sekund, prowadzi regularne QSO |
| KONKURS | Szybka wymiana numerów seryjnych, protokół zawodów |
| MONITOROWANIE | Czeka na bezpośrednie połączenie, samo CQ nie dzwoni, wydaje identyfikator co 5 minut |
| SWL | Tylko odbieraj, nigdy nie nadawaj |
Tryb CONTESTING jest ciekawy z technicznego punktu widzenia: model musi obsługiwać szybkie protokoły stosu, krótkie wymiany i kolejność przetwarzania połączeń. Obecne możliwości GPT-4o Realtime w tym kierunku nie zostały jeszcze systematycznie udokumentowane – jest to otwarta przestrzeń do eksperymentów. detektor duplikatów (wykrywanie pominięć stacji) porównuje znaki wywoławcze przy użyciu podobieństwa ciągów i zapobiega blokowaniu przez model innych poprzez wywoływanie tej samej stacji w pętli.
Debuguj zmienne, takie jak VAD_THRESHOLD (próg rozpoznawania głosu, 0,0–1,0), VAD_SILENCE_DURATION (pauza, aby zakończyć rap za kilka sekund), CQ_INTERVAL_SEC a CQ_RESTART_DELAY_SEC dávajú operátorovi priamu kontrolu nad rytmom prevádzky. Na rušnom pásme s QRM niski VAD_THRESHOLD spowoduje fałszywe aktywacje; w cichym paśmie zbyt wysoki próg może spowodować pominięcie słabych stacji. Przed pierwszym wdrożeniem warto skalibrować te wartości w trybie demonstracyjnym.
Interfejs terminala i dziennik ADIF

AI-DX zawiera w pełni funkcjonalny interfejs terminala zbudowany na bazie biblioteki Rich, aktualizowany 10 razy na sekundę. Wyświetla się S-metr (wartości z wfweb, zakres od -54dB do +60dB z S9), wskaźnik PTT (RX / VOICE↑ / ON AIR), aktualna częstotliwość i tryb, moc nadawania i SWR oraz ciągłe nagrywanie transkryptów RX/TX. Aktywne QSO ze statusem, znakiem wywoławczym i QTH jest widoczne w dolnej linii.
Dziennik ADIF jest zapisywany w logs/contacts.adi. Tryb demonstracyjny tworzy oddzielny plik ze znacznikiem czasu logs/demo_YYYYMMDD_HHMMSS.adi, więc testowanie nigdy nie wpływa na dokumentację produkcyjną. Każdy rekord zawiera pola QSO_DATE, TIME_ON, DZWONIĆ, CZĘSTOTLIWOŚĆ, MODA, RST_WYSYŁANY, RST_RCVD, NAZWA, QTH a NOTATKI. Częstotliwość jest odczytywana na żywo z wfweb w momencie zakończenia QSO - nie jest to stała wartość z konfiguracji.
Ograniczenia, odpowiedzialność prawna i pytania otwarte

Autorka w DISCLAIMER.md wyraźnie podkreśla: operatorem odpowiedzialnym za każdą transmisję jesteś Ty, a nie modelka. Wszystkie obowiązki prawne mające zastosowanie do systemów autonomicznych zgodnie z przepisami IARU, FCC i krajowymi organami regulacyjnymi mają zastosowanie do licencjobiorcy. Projekt posiada specjalną sekcję ostrzegawczą w pliku README, która jest warunkiem uruchomienia.
Model podgląd-gpt-4o w czasie rzeczywistym jest zalecany w przypadku dużej zdolności rozumienia częściowych znaków wywoławczych, alfabetu fonetycznego i słabych sygnałów HF. Tańsze gpt-realtime-1.5 jest dostępny jako zapasowy, ale autor zauważa zauważalnie gorszą dokładność na ruchliwych falach radiowych. Koszty OpenAI API zależą od długości sesji i nie są bez znaczenia w przypadku długich wydarzeń konkursowych.
Obecnie brakuje natywnej integracji z zewnętrznym klastrem DX, Książka telefoniczna HamQTH alebo LoTW – ADIF log existuje, ale jeho automatické odovzdanie je na používateľovi. Rovnako nie je implementovaná podpora CW; model rozumie tekst CW, gdy transceiver go dekoduje i wyświetla jako tekst, ale natywne dekodowanie kodu Morse'a z dźwięku wymagałoby dodatkowego modułu. Są to przestrzenie, w których społeczność może posunąć projekt do przodu.
Poważniejszym praktycznym ograniczeniem może być opóźnienie API w chmurze. GPT-4o Realtime zwykle odpowiada w ciągu kilkuset milisekund po zakończeniu powtórzeń stacji wywołującej, ale przy obciążonym serwerze lub niestabilnym Internecie przerwa przed transmisją może być zauważalna. Na torze konkursowym z gęstym skupiskiem może sprawiać wrażenie powolnego operatora. Wartość VAD_SILENCE_DURATION=0,6 jest ustawieniem domyślnym, ale zmniejszenie go do 0,4 s może przyspieszyć reakcję kosztem sporadycznych przedwczesnych transmisji.
Ramy regulacyjne: kto jest odpowiedzialny?
AI-DX otwarcie powołuje się na fakt, że zgodnie z przepisami większości krajów, w tym Słowacji i Czech, za każdą transmisję musi odpowiadać operator kontrolny – posiadacz ważnej licencji amatorskiej, który aktywnie nadzoruje operację. System autonomiczny nie zmienia tej zasady. Jeśli AI-DX omyłkowo odbierze nielegalne połączenie, wyśle niewłaściwą moc lub naruszy bandplan, za odpowiedzialność odpowiada operator, a nie model. Autor stwierdza w DISCLAIMER.md, że oprogramowanie jest dostarczane „tak jak jest”, bez gwarancji, a użytkownik przyjmuje do wiadomości wszystkie obowiązki regulacyjne.
Praktický dôsledok: AI-DX nie je určený na prevádzku bez dozoru. Realistický prípad použitia je napríklad contestová prevádzka, gdzie operator czuwa nad terminalem i ewentualnie przejmuje ręczne sterowanie, lub eksperymentalne testowanie przetwarzania stosu SSB bez fizycznej obecności przy radiu, ale z możliwością natychmiastowego odłączenia. Tryb SWL jest z tego punktu widzenia najbezpieczniejszy - nigdy nie transmituje i służy wyłącznie do odbioru i analizy.
Jak się zaangażować
Kod źródłowy jest dostępny pod adresem github.com/adecarolis/AI-DX pod licenciou MIT. Licencia je čistá: predchádzajúce verzie projektu využívali Hamlib (LGPL v2.1), aktualna wersja nie zawiera Hamlib - sterowanie PTT odbywa się wyłącznie za pomocą polecenia wfweb WebSocket ustaw PTT. Záujemcovia o portáciu na Linux alebo Windows môžu otvoriť issue na GitHube – základ je čisto Python a asyncio, takže technická bariéra nie je vysoká. Chyby a návrhy patria do záložky GitHub Issues. Kto má skúsenosť s integráciou Hamlib, N1MM+ lub zewnętrzne klastry DX, mogą wnosić wkład za pomocą żądań ściągnięcia - projekt ma przejrzystą strukturę modułową z oddzielnymi katalogami dla audio, AI, radia, rdzenia i interfejsu użytkownika. Testowanie w trybie demonstracyjnym nie wymaga radia ani licencji – wystarczy Python, klucz API OpenAI i mikrofon.
Kod źródłowy, procedura instalacji i ZASTRZEŻENIE są dostępne pod adresem github.com/adecarolis/AI-DX. Tryb demonstracyjny działa bez sprzętu radiowego.
