helban.dev

Rozmowa z AI jako wpis na bloga: 133 obrazki pod swoimi akapitami

Długa rozmowa z modelem to setki wiadomości i setki obrazków. Wklejona do edytora bloga gubi formatowanie, a obrazki zostają podpięte do cudzego serwera i po kilku miesiącach po cichu przestają się wyświetlać. Ta wtyczka robi z takiej rozmowy gotowy wpis jednym kliknięciem: każdy obrazek wgrywa na blog autora jako trwały link i wstawia pod tym akapitem, do którego należy. Niżej: skąd bierze nazwy plików, jak wybiera akapit, ile razy trafia i co zapisuje wtedy, kiedy nie trafi.

Stack: Chrome MV3 · JavaScript · Blogger API Zakres: wtyczka, dwa kontrakty Oddane: sierpień 2026
133/133
obrazków wgranych na blog jako trwałe linki
132/133
nazw plików odzyskanych z rozmowy
46/56
obrazków w granicy jednego akapitu od celu
Zadanie

Wklejenie rozmowy niszczy to, co w niej najcenniejsze

Rozmowa z modelem ma strukturę: pogrubienia, linki, nagłówki, listy zagnieżdżone, wstawione filmy. Schowek przenosi część z tego, a resztę spłaszcza do jednego szarego bloku. Obrazki wychodzą na tym gorzej niż tekst. Wklejają się jako adresy wskazujące z powrotem na serwer, na którym leżą, więc wpis wygląda dobrze w dniu publikacji, a psuje się później, w cudzym terminie.

Robota przyszła w dwóch kontraktach. Pierwszy to wierny eksport: zachować formatowanie i przenieść każdy obrazek do przestrzeni bloga autora, żeby wpis miał swoje obrazki na własność. Drugi był trudniejszą połową. Wstawienie obrazków do wpisu to nie to samo, co wstawienie ich we właściwe miejsca.

Sedno

Nazwy pliku nie ma na stronie

Kto wrzuca do rozmowy dwadzieścia obrazków, ten najpierw je nazywa: numer i kilka słów. Numer mówi, w jakiej kolejności mają iść, a słowa mówią, o czym każdy z nich jest. To jest kompletna instrukcja, gdzie który obrazek ma stanąć w gotowym wpisie, napisana przez jedyną osobę, która zna odpowiedź.

Objaw

Po wysłaniu wiadomości ta instrukcja znika. Na stronie jest sam obrazek: bez nazwy i bez numeru. Wtyczka czytająca to, co widać na ekranie, nie ma z czego korzystać, więc może tylko ustawić obrazki na górze wiadomości i zostawić układanie człowiekowi. Tak działała pierwsza wersja, a przy wiadomości z dwudziestoma obrazkami to popołudnie przeciągania myszą.

Co się naprawdę dzieje

Nazwy istnieją, tylko nie tam, gdzie ktokolwiek by ich szukał. Przychodzą raz, w odpowiedzi ładującej rozmowę, w parze z identyfikatorem każdego wgrania. Nie ma ich w kodzie strony, nie ma ich w wiadomości i nie ma ich w momencie, w którym obrazek jest wysyłany.

Obejście

Wtyczka nasłuchuje tej odpowiedzi i wiąże nazwę z identyfikatorem wgrania, a nie z miejscem, w którym obrazek stoi na ekranie. Pozycja przesuwa się przy każdym odświeżeniu widoku. Identyfikator nie. To zasada, która ratuje każdą integrację budowaną po cudzej stronie: przypinaj się do rekordu, nie do miejsca.

Jednej konsekwencji tego rozwiązania nie da się załatwić kodem, więc jest napisana wprost w narzędziu. Obrazek wgrany już po ostatnim załadowaniu karty nie znalazł się jeszcze w tych danych i nie ma nazwy do odczytania, więc zostaje na górze swojej wiadomości. Okno wtyczki mówi o tym po każdym eksporcie i podpowiada, żeby przeładować kartę i wyeksportować ponownie.

Metoda

Słowa wybierają akapit, numer ustawia kolejność

Te dwie połowy nazwy odpowiadają na dwa różne pytania, więc narzędzie używa ich do dwóch różnych rzeczy. Dla każdej pary obrazek-akapit liczy, ile z nazwy pojawia się w tym akapicie, i to jest wynik dopasowania. Numer z początku nazwy daje kolejność.

Potem układa wszystkie obrazki jednej wiadomości naraz, maksymalizując sumę wyników i pilnując kolejności, o którą proszą numery. Wybieranie najlepszego akapitu dla każdego obrazka osobno byłoby prostsze i błędne: dwa obrazki wyminęłyby się, a czytelnik dostałby trzeci przed drugim. Żaden obrazek nie może wylądować powyżej poprzedniego i właśnie to jedno ograniczenie sprawia, że wynik da się czytać, zamiast tylko dobrze pasować.

Wiadomość z jednym akapitem nie ma czego wybierać, więc tam decyduje sam numer. Wiadomość z samymi obrazkami, bez ani jednego słowa, też jest wiadomością, czego pierwsza wersja nie zauważała.

Pomiar

Ile razy trafia

Zestaw akceptacyjny to 56 obrazków z prawdziwej rozmowy, każdy z ręcznie wskazanym akapitem docelowym. Trafień co do akapitu: 31 z 56. W granicy jednego akapitu od celu: 46 z 56.

Nikt tego nie sprzeda jako „działa”. Ta liczba mówi, ile roboty zostaje: zamiast układać sto trzydzieści obrazków, przesuwasz kilkanaście o jeden akapit. Wolę opublikować taką proporcję niż okrągłą, bo kto to czyta, ten decyduje, czy oddać mi coś podobnego.

Na gotowym wpisie eksport przeszedł przez 78 wiadomości niosących 133 obrazki. Wszystkie 133 trafiły do przestrzeni bloga jako trwałe linki, a nazwy udało się odzyskać dla 132. Dwa linki do YouTube i jeden do Vimeo zamieniły się w odtwarzacze. Wstawkę Vimeo zmierzyłem na prawdziwym wpisie Bloggera, zanim ją wysłałem, bo goła wklejka renderuje się tam cztery razy mniejsza.

Raport

Narzędzie tłumaczy się z każdej swojej decyzji

Licznik mówi, że coś poszło nie tak. Nigdy nie mówi dlaczego, a na cudzych danych, których nie widzę, „dlaczego” jest jedyną rzeczą wartą posiadania. Ostatnia wersja zapisuje więc plik: wiersz na wiadomość z informacją, po czym rozpoznała autora, i wiersz na obrazek z odczytaną nazwą, wziętym z niej numerem, wybranym akapitem i powodem tego wyboru.

Ten plik zwrócił się na pierwszym raporcie, który do mnie wrócił. Jeden obrazek uparcie lądował nie tam, gdzie trzeba, mimo nazwy wyglądającej bez zarzutu, a raport rozstrzygnął to bez zgadywania. Słowa z tej nazwy pokrywały akapit docelowy w całości, pełny wynik, więc nazwanie zadziałało. Obrazek przesunęła kolejność: dwa pliki w tej wiadomości zaczynały się tym samym numerem, a równe numery nie niosą żadnej informacji o kolejności, więc remis rozstrzygnął moment wgrania. Skoro obrazek nie może wylądować powyżej poprzedniego, to gdy ten drugi plik zajął akapit wyżej, ten pierwszy nie miał już jak dojść do akapitu, który wygrał słowami.

Odpowiedzią był jeden akapit tekstu, a nie nowa wersja: nadaj każdemu obrazkowi własny numer, biegnący w kolejności czytania. W tym wpisie szesnaście obrazków miało słowa wskazujące jeden akapit, a regułę kolejności trzymającą je w innym, cztery z nich przy pełnym dopasowaniu. Każdy z tych szesnastu da się teraz wyjaśnić jednym zdaniem, zamiast spierać się o niego na wyczucie.

Granica

Czego ta wtyczka nie robi

Kod nie ma publicznego repozytorium i nie będzie go miał. Historia zmian niesie dane osoby, która zamówiła tę robotę, a samo narzędzie chodzi po nieudokumentowanych wnętrzach serwisów, które nigdy nie obiecały, że będą je trzymać w miejscu. Opublikowanie go byłoby zaproszeniem do psucia. Mój publiczny kod z tej samej klasy jest w linkach niżej, więc moją wtyczkę na Manifeście V3 można przeczytać przed jakąkolwiek decyzją.

Jedna rzecz jest tu niewyjaśniona i taka zostaje. Na jednym eksporcie pięć wiadomości wyszło podpisanych nie tym autorem. Nie powtórzyło się w żadnym późniejszym przebiegu i nie umiem powiedzieć, co to wywołało, więc nigdzie na tej stronie nie pada słowo „naprawione”. Ostatnia wersja zapisuje natomiast, na jakiej podstawie rozpoznała autora każdej wiadomości, więc następny taki przypadek sam nazwie swoją przyczynę, zamiast się schować.

Warto wiedzieć, zanim nazwiesz pliki

Prośba do modelu o zmianę nazwy pliku nie zmienia niczego, co czyta narzędzie. Sprawdzone na żywych danych: po takiej prośbie wtyczka nadal czyta pierwotną nazwę, bo to wciąż ten sam rekord wgrania. Nazwę ustawia się na własnym dysku, przed wysłaniem obrazka, i nigdy później.

Masz rozmowę albo archiwum do przeniesienia?

Napisz, czym to jest teraz, czym ma się stać i czy obrazki mają wylądować u Ciebie. Jeśli wystarczy eksport, który już istnieje, powiem to, zamiast wyceniać wtyczkę.

Zapytaj o swój przypadek