Powrót do strony głównej

AI-agent do matematyki na Mac mini

Opisano stworzenie autonomicznego laboratorium matematycznego na Mac mini z wykorzystaniem Wolfram Engine, Qwen Code CLI i Delta Chat. System przyjmuje zadania z komunikatora, generuje i wykonuje kod Wolfram lokalnie, zwraca wyniki z wykresami i zapisuje pełną historię sesji.

Laboratorium matematyczne na Mac mini: AI + Wolfram
Advertisement 728x90

AI-agent do badań matematycznych: Wolfram Engine + Qwen Code CLI na Mac mini

Stworzono całkowicie autonomiczną laboratorię do badań matematycznych za pomocą komunikatora — bez użycia chmurowych API, zewnętrznych serwerów i bez utraty kontroli nad kodem oraz danymi. System działa lokalnie na Mac mini, odbiera zadania z Delta Chat, generuje algorytmy w języku Wolfram Language przy pomocy Qwen Code CLI, wykonuje je za pomocą Wolfram Engine i zwraca wyniki z wykresami bezpośrednio do czatu. To nie jest interfejs do gotowego rozwiązania — to środowisko badawcze, które rejestruje cały proces myślenia: od sformułowania problemu po jego weryfikację.

Architektura bez pośrednich usług

Cały cykl przetwarzania wiadomości realizowany jest jako lokalny konwejer bez zależności od zewnętrznych API lub platform SaaS. Kluczową zaletą jest pełna kontrola nad wejściowymi promptami, wykonywanym kodem i czasem życia danych. Nie ma ukrytych wywołań do chmury, automatycznego wysyłania kodu do usług LLM ani zbierania metryk poza maszyną użytkownika.

Wiadomość z Delta Chat (przez IMAP/SMTP) trafia do bota Python math_bot.py, który:

Google AdInline article slot
  • Weryfikuje nadawcę według WHITELIST_EMAIL;
  • Inicjuje nową sesję lub wznowia istniejącą;
  • Formuluje atomowy prompt zawierający preambułę systemową z QWEN_PREAMBLE oraz kontekst poprzednich kroków;
  • Uruchamia qwen w trybie headless z flagami --yolo --continue;
  • Przechwytuje stdout w formacie JSON;
  • Parsuje pliki graficzne z /tmp/mrl_graphics/ według rozszerzeń .png, .jpg, .svg, .pdf;
  • Wysyła rezultat z powrotem do czatu, zachowując historię w sessions/.

Ważne: Qwen Code CLI nie jest używany jako „czarny skrzynka”. Uruchamiany jest jako lokalny subprocess, a wszystkie komendy wolframscript wykonywane są w ściśle określonej dyrektorii z jasnym podaniem ścieżek. Wykresy eksportowane są tylko do wydzielonego folderu tymczasowego — żadnych pobocznych zapisów w domowej dyrektorii czy ~/Downloads.

Wymagania dotyczące środowiska i bezpieczeństwo wykonania

System przeznaczony jest dla macOS 14+, ale jest kompatybilny z Linuxem i Windowsem dzięki komponentom wieloplatformowym. Krytyczne zależności:

  • Wolfram Engine 14.1+ — darmowa wersja silnika dostępna do użytku osobistego. Instalacja przez pkg dodaje binarne wolframscript do PATH. Wszystkie obliczenia odbywają się lokalnie; żadne wyrażenia nie są wysyłane do Wolfram Cloud.
  • Qwen Code CLI v3.5 Plus — wersja headless modelu działająca przez Node.js. Nie wymaga klucza API. Model jest ładowany lokalnie, waży ok. 2,1 GB (quantized GGUF), uruchamiany przez qwen CLI z --model qwen3.5-plus.Q4_K_M.gguf.
  • Delta Chat RPC Server — natywny binarik (deltachat-rpc-server), zarządzający połączeniem z skrzynką pocztową. Działa w trybie --no-verify-ssl tylko przy lokalnym użytkowaniu; zalecana jest konfiguracja szyfrowania PGP za pomocą kodu QR dla ochrony E2E.

Konfiguracja bezpieczeństwa realizowana jest na trzech poziomach:

Google AdInline article slot
  • Sieciowy: Delta Chat korzysta ze standardowych portów IMAP/SMTP bez przekierowywania portów, VPN i białych IP. Ruch jest szyfrowany TLS 1.3.
  • Procesowy: Qwen uruchamiany jest z timeoutem QWEN_TIMEOUT=600, ograniczającym wykonanie skomplikowanych zadań. Po przekroczeniu — proces przymusowo zakończony przez subprocess.run(..., timeout=...).
  • Plikowy: Wszystkie wykresy zapisywane są wyłącznie w /tmp/mrl_graphics/, a sesje — w PROJECT_DIR/sessions/. Ścieżka GRAPHICS_DIR sprawdzana jest na absolutność i dostępność is_dir() przed użyciem.

Realizacja cyklu życia sesji

Bot obsługuje 7 komend zarządzania sesjami, z których każda zmienia stan w SESSIONS_DIR:

  • /start — tworzy nową sesję z unikalnym UUID, inicjuje session_YYYYMMDD_HHMMSS.md i _assets/.
  • /continue — wznawia ostatnią aktywną sesję.
  • /resume <id> — otwiera konkretną sesję według ID.
  • /peek — pokazuje ostatnie PEEK_LINES=40 linii aktualnego logu.
  • /archive — przenosi sesję do archived/, usuwając ją z indeksu.
  • /close — finalizuje sesję: kopiuje solution.wl do algorithms/, generuje summary.md, czyści _assets/.
  • /help — wyświetla pomoc bez dostępu do wewnętrznych ścieżek.

Każda sesja to plik Markdown z chronologią dialogu, gdzie każdy krok zawiera cztery obowiązkowe bloki:

  • Algorytm słowny (numerowane kroki);
  • Kod Wolfram Language (precyzyjny tekst gotowy do wykonania);
  • Faktyczne wyjście wolframscript (stdout/stderr);
  • Interpretacja wyniku (1–2 zdania).

To zapewnia reprodukowalność: każdy krok można powtórzyć ręcznie przez wolframscript -code "...", a wszystkie wykresy — regenerować z Export[...].

Google AdInline article slot

Przykład pracy

Użytkownik wysyła do czata:

Znajdź punkty przecięcia y = x^2 i y = 2x + 3. Zbuduj wykres.

Bot przekazuje zapytanie do Qwen Code CLI z preambułą:

Wykorzystaj tylko wolframscript (nie Python). Wykresy zapisuj w /tmp/mrl_graphics/. Podpisy na wykresach — tylko alfabet łaciński.

Znajdź punkty przecięcia y = x^2 i y = 2x + 3. Zbuduj wykres.

Qwen zwraca strukturalną odpowiedź:

  • Algorytm słowny

1. Przyrównaj funkcje: x^2 == 2x + 3

2. Doprowadź do standardowej postaci: x^2 - 2x - 3 == 0

3. Rozwiąż równanie kwadratowe

4. Zbuduj wykresy obu funkcji na jednym polu

  • Kod Wolfram

---wl---

eq = x^2 == 2 x + 3;

solutions = Solve[eq, x];

Plot[{x^2, 2 x + 3}, {x, -3, 5},

Epilog -> {Red, PointSize[Large],

Point[{x, x^2} /. solutions]},

PlotLabel -> "Intersection of y=x^2 and y=2x+3",

AxesLabel -> {"x", "y"}

Export["/tmp/mrl_graphics/intersection.png", %]

---wl---

  • Wynik wolframscript

{{x -> -1}, {x -> 3}}

$Graphics$

  • Interpretacja wyniku

Punkty przecięcia: (-1, 1) i (3, 9). Wykres zapisany jako intersection.png.

Bot wydobywa PNG z /tmp/mrl_graphics/, wysyła go do czatu i dopisuje ten blok do logu sesji.

Co jest ważne

  • Lokalne wykonanie gwarantuje poufność: żaden obiekt matematyczny, wzór czy wykres nie opuszcza maszyny użytkownika.
  • Wolfram Engine — nie zastępstwo Pythona, lecz specjalistyczny obliczalnik: zapewnia precyzyjną algebrę symboliczną, wizualizację i metody numeryczne bez konieczności pisania własnych solverów.
  • Qwen Code CLI działa jako generator kodu, a nie solver: model nigdy nie wydaje „odpowiedzi", tylko generuje wykonywalny kod i czeka na faktyczne wyjście wolframscript.
  • Delta Chat zapewnia end-to-end szyfrowanie bez serwerów: klucze PGP wymieniane są przez kod QR, a wiadomości szyfrowane są na urządzeniu.
  • Struktura algorithms/ tworzy repozytorium reprodukowalnych rozwiązań: każdy algorytm zawiera description.md, reasoning.md i solution.wl — gotowy do integracji w CI/CD lub dokumentację.

Konfiguracja i wdrożenie

Do wdrożenia potrzebne są:

  • Zainstalować Wolfram Engine z oficjalnej strony i uruchomić wolframscript --install.
  • Zainstalować Node.js 20+ i wykonać npm install -g qwen-cli.
  • Stworzyć środowisko conda: conda create -n mathbot python=3.12 && conda activate mathbot.
  • Zainstalować zależności: pip install -r requirements.txt.
  • Skonfigurować config.py: podać WHITELIST_EMAIL, PROJECT_DIR, QWEN_CMD.
  • Uruchomić inicjacje: bash init.sh — stworzy sessions/, algorithms/, _index.md.
  • Uruchomić bota: python math_bot.py.

Po uruchomieniu bot zaczyna sprawdzać skrzynkę pocztową co 30 sekund. Do testowania wystarczy wysłać /start z autoryzowanego e-maila. Sesje logowane są w czasie rzeczywistym, błędy — w math_bot.log.

— Editorial Team

Advertisement 728x90

Czytaj dalej