NetSendo
Platform Updates

NetSendo v2.7.0: semantyczny Brain i edytor tekstu sformatowanego

NetSendo Team7 min czytania
NetSendo v2.7.0: semantyczny Brain i edytor tekstu sformatowanego

Asystent AI jest tak dobry, jak kontekst, który otrzymuje. Jeśli przez miesiące uzupełniałeś Brain w NetSendo o opisy produktów, case studies, odpowiedzi na obiekcje i notatki z kampanii, mogłeś trafić na frustrujące ograniczenie. Do tej pory Brain dodawał do każdego promptu pięć najwyżej ocenionych wpisów z kilku stałych kategorii, niezależnie od tego, czego dotyczyło zadanie. W dużej bazie wiedzy większość tego, co Brain wiedział, nigdy do niego nie docierała.

NetSendo v2.7.0 rozwiązuje ten problem dzięki semantycznemu wyszukiwaniu wiedzy w planie GOLD. Brain szuka teraz wiedzy, która znaczeniowo pasuje do danego zadania. Wersja dodaje też prawdziwy edytor tekstu sformatowanego w kreatorze szablonów e-mail i sprawia, że instalacje oraz aktualizacje w Dockerze są bezpieczniejsze.

TL;DR: NetSendo v2.7.0 dzieli wpisy bazy wiedzy Brain na fragmenty i zamienia każdy fragment w wektor embeddingu za pomocą OpenAI, Gemini, OpenRouter lub lokalnego modelu Ollama. Do każdego zadania Brain dostaje tylko pasujące fragmenty. Nie potrzebujesz nowej usługi: wektory są zapisywane w MySQL i porównywane w PHP. Bloki tekstu w kreatorze szablonów mają teraz edytor TipTap, który zachowuje formatowanie. Blokada nazwana MySQL sprawia, że migracje uruchamia tylko jeden kontener. Aktualizacja: docker compose pull && docker compose up -d.

🚀 Co nowego w v2.7.0

Semantyczna baza wiedzy Brain (GOLD)

Wyszukiwanie według kategorii działa jak bibliotekarz, który za każdym razem podaje pięć najpopularniejszych książek z tej samej półki, niezależnie od pytania. Wyszukiwanie semantyczne działa jak bibliotekarz, który najpierw czyta pytanie, a potem wybiera właściwe strony z całej biblioteki.

Jak to działa:

  • Dzielenie na fragmenty: każdy wpis jest dzielony na fragmenty po około 1200 znaków.
  • Embeddingi: każdy fragment zamienia się w wektor, czyli listę liczb, która odzwierciedla jego znaczenie.
  • Dopasowanie: każde zadanie jest porównywane z fragmentami według znaczenia. Zadaniem może być wiadomość na czacie, temat e-maila lub kampanii, cel, brief playbooka albo zadanie cron.
  • Premie: fragment dostaje niewielką premię, jeśli zawiera słowa znalezione przez indeks pełnotekstowy, należy do kategorii zadania albo pochodzi ze zweryfikowanego wpisu. Dopasowania znacznie słabsze od najlepszego są pomijane.

Wpisy o głosie marki i firmie nadal trafiają do zadań pisarskich. Wpis może mieć teraz do 100 000 znaków w planie GOLD i do 10 000 w planie SILVER.

🧠

Kontekst według znaczenia

Brain dostaje wiedzę pasującą do bieżącego zadania, a nie stały zestaw wpisów.

🔌

Twój własny dostawca

OpenAI, Gemini, OpenRouter lub lokalny model Ollama (bge-m3).

🐬

Bez nowej usługi

Wektory są zapisywane w MySQL jako spakowane float32. Przeszukanie 5000 fragmentów zajmuje około 60 ms.

🛡️

Automatyczny tryb awaryjny

Jeśli dostawca embeddingów nie odpowiada, Brain czyta bazę wiedzy według kategorii, tak jak wcześniej.

ℹ️ Dlaczego bez bazy wektorowej? Typ VECTOR w MySQL 9 nie ma funkcji odległości poza HeatWave, a MySQL Community nie potrafi przeszukiwać wektorów. Dlatego NetSendo zapisuje wektory (768 wymiarów, jeśli model pozwala je skrócić) w nowej tabeli knowledge_chunks i porównuje je w PHP. Nie musisz dodawać Qdranta, pgvectora ani żadnego innego kontenera.

Indeks aktualizuje się sam. Gdy dodasz lub zmienisz wpis, zadanie IndexKnowledgeEntry w kolejce tworzy dla niego embeddingi, a zmieniony tekst usuwa swoje stare wektory. Co godzinę polecenie brain:index-knowledge uzupełnia wszystko, czego jeszcze brakuje. Zapis wpisu nigdy nie kończy się błędem z powodu niedostępnego dostawcy. Jeśli zmienisz model, cała baza wiedzy zostanie ponownie zindeksowana w tle, a wektory z różnych modeli nigdy się nie mieszają. Endpoint API GET /api/v1/brain/knowledge?search= w planie GOLD również szuka według znaczenia.

Edytor tekstu sformatowanego w blokach szablonów

Przed tą wersją pole bloku tekstowego było zwykłym polem tekstowym. Jeśli zmieniłeś jedno słowo w treści wygenerowanej przez AI, blok tracił linki, pogrubienia, nagłówki i kolory. Teraz to edytor TipTap z pogrubieniem, kursywą, podkreśleniem, linkami, listami, łamaniem wiersza (Shift+Enter) oraz cofaniem i ponawianiem zmian.

  • Bezpieczny co do bajtu: nic nie jest zapisywane, dopóki nie zmienisz tekstu. Style inline, takie jak #64748b i właściwości mso-*, pozostają dokładnie takie, jak zostały zapisane.
  • Wstawianie zmiennej w miejscu kursora: zmienne, fragmenty treści i podpisy trafiają tam, gdzie jest kursor, a nie na koniec tekstu.
  • HTML bezpieczny dla e-maili: skrypty, iframe'y, formularze, znaczniki <font> i klasy CSS są usuwane, a linki javascript: są odrzucane. Placeholdery takie jak [[unsubscribe]] działają jako adresy linków. Elementy list są zapisywane bez wewnętrznych znaczników <p>, więc klienty poczty nie dodają zbędnych marginesów.

Bazę danych migruje tylko jeden kontener

Kontenery app, scheduler, queue i reverb korzystają z tego samego entrypointu. Przed tą wersją wszystkie cztery mogły uruchamiać migracje jednocześnie, co powodowało błędy takie jak Table 'users' already exists i mogło zostawić migrację wykonaną tylko częściowo. Migracje i seedowanie działają teraz pod blokadą nazwaną MySQL (GET_LOCK). Jeden kontener przygotowuje bazę danych, a pozostałe czekają. Jeśli ten kontener padnie, MySQL automatycznie zwolni blokadę.

💼 Korzyści i przypadki użycia

🛒

E-commerce: kampanie, które znają produkty

Zapisz w Brain pełne karty produktów, zasady zwrotów i promocje sezonowe. Gdy poprosisz Brain o e-mail o porzuconym koszyku z kurtkami zimowymi, użyje specyfikacji kurtek i zasad darmowych zwrotów zamiast niezwiązanych ogólników o firmie.

🚀

SaaS: onboarding i zapobieganie rezygnacjom

Wgraj do Brain obszerną dokumentację, do 100 000 znaków na wpis. Sekwencje onboardingowe i kampanie win-back mogą wtedy odnosić się do konkretnych funkcji, z którymi użytkownik ma problem, a asystent na czacie odpowie na szczegółowe pytania o produkt.

🏢

Agencje: prywatne AI z Ollamą

Pracujesz z danymi klientów, które nigdy nie powinny opuścić Twoich serwerów? Użyj lokalnego modelu Ollama (bge-m3) do tworzenia embeddingów. Cały proces wyszukiwania działa wtedy na Twojej infrastrukturze, co jest mocnym argumentem za self-hostingiem.

🛠️ Przewodnik krok po kroku

  1. Zrób kopię zapasową bazy danych

    Ta wersja zawiera trzy migracje: tabelę knowledge_chunks, dwie nowe kolumny w ai_brain_settings oraz zmianę typu knowledge_entries.content na MEDIUMTEXT.

  2. Zaktualizuj obraz
    docker compose pull && docker compose up -d

    Nowy obraz już chroni polecenia migrate i db:seed blokadą w bazie danych.

  3. Zaktualizuj plik compose i entrypoint (zalecane)

    Twoja instalacja montuje własną kopię entrypointu, więc pobranie obrazu jej nie zastąpi. Uruchom git pull albo pobierz docker-compose.yml i docker/php/docker-entrypoint.sh z wydania v2.7.0. Z oboma plikami bazę migruje tylko app, a pozostałe kontenery startują, gdy skończy.

  4. Skonfiguruj wyszukiwanie semantyczne

    Przejdź do Brain → Ustawienia → Baza wiedzy → Wyszukiwanie semantyczne. Wybierz integrację i model albo zostaw ustawienie automatyczne. NetSendo sprawdza model przed zapisaniem i pokazuje, ile wpisów jest zindeksowanych.

  5. Zindeksuj istniejące wpisy

    Cogodzinne zadanie zindeksuje istniejące wpisy, ale możesz zacząć indeksowanie od razu:

    docker compose exec app php artisan brain:index-knowledge --sync
⚠️ Częsty błąd: Anthropic i Grok nie mają endpointu do embeddingów. Jeśli to Twoje jedyne integracje AI, najpierw dodaj integrację OpenAI, Gemini, OpenRouter lub Ollama w Ustawienia → Integracje AI. Zobacz Integracje.

🎯 Porady ekspertów

1
Pisz skoncentrowane wpisy

Fragmenty mają około 1200 znaków. Wyraźne nagłówki i jeden temat na sekcję dają trafniejsze dopasowania.

2
Weryfikuj kluczowe wpisy

Zweryfikowane wpisy dostają premię w rankingu, więc oznacz swoje najbardziej wiarygodne źródła jako zweryfikowane.

3
Ostrożnie zmieniaj modele

Nowy model indeksuje ponownie całą bazę wiedzy. Przy dużych bazach zmieniaj model poza godzinami szczytu.

4
Dostosuj limit czasu migracji

Przy długich migracjach na dużych bazach ustaw NETSENDO_MIGRATIONS_WAIT_TIMEOUT. Domyślna wartość to 1800 sekund.

🔧 Inne poprawki i usprawnienia

  • Skrypt install.sh tworzy teraz działającą instalację. Pobiera wszystkie pliki montowane przez plik compose, generuje APP_KEY i losowe hasło do bazy danych, nie nadpisuje istniejącego pliku .env i czeka, aż aplikacja zacznie odpowiadać.
  • Klawisz Delete nie usuwa już całego zaznaczonego bloku podczas pisania w polu tekstowym kreatora szablonów.
  • Kliknięcie w blok tekstowy nie usuwa już jego formatowania.
  • Wpisy z web research znów trafiają do Brain. Wpisy z kategoriami wymyślonymi przez AI trafiają teraz do Insights, a dawna kategoria zostaje zachowana jako tag.
  • Nowe wpisy bazy wiedzy zaczynają teraz z kategorią Firma, więc zapis bez wybrania kategorii nie kończy się już cichym błędem.
  • Integracja Ollama za proxy wysyła teraz opcjonalny klucz API jako token bearer.
  • Tytuły wydań z metadanymi buildu wyświetlają się poprawnie, a HTML jest zamieniany na tekst parserem przeglądarki zamiast wyrażenia regularnego.
  • Dokumenty README, DOCKER_INSTALL, CONTRIBUTING i SECURITY zostały zaktualizowane, a nieaktywne linki do forum.netsendo.com usunięte.

🎉 Podsumowanie

W wersji v2.7.0 Brain w NetSendo wyszukuje wiedzę według znaczenia, a wszystko działa na Twoim własnym MySQL z wybranym przez Ciebie dostawcą AI. Edycja szablonów zachowuje formatowanie, a aktualizacje w Dockerze są bardziej niezawodne. Twoje dane pozostają Twoją własnością i nie zależysz od jednego dostawcy.

Gotowy na aktualizację?

Zaktualizuj NetSendo do v2.7.0, aby zacząć korzystać z semantycznego wyszukiwania wiedzy.

Jeśli podoba Ci się NetSendo, daj nam gwiazdkę na GitHubie.

#ai#semantic-search#embeddings#template-builder#docker#release
Udostępnij