Wielojęzyczne wątki to nie problem tłumaczenia: mów 'write', nie 'translate', i filtruj szkice lokalnym skryptem .length.
Dziś opublikowałem 5 artykułów. Do każdego wątek tweetów w 6 językach (en / zh / ja / ko / ar / id), po 4 tweety na język — razem 120 tweetów.
W 4 z 5 trzeba było przyciąć wątek chiński. Surowe liczby (skrypt wypisuje w formacie chars/limit):
zh[1]=160/140 OVER
zh[2]=164/140 OVER
zh[3]=152/140 OVER
...
id[3]=286/280 OVER
zh[2]=163/140 OVER
zh[3]=148/140 OVER
zh[2]=152/140 OVER
Zawsze ten sam schemat: najpierw piszę cztery angielskie tweety (po 230–260 znaków, pod sufit 280), potem proszę Claude'a „wygenerować wersję chińską na bazie tych czterech". Chińska wersja niemal zawsze przekracza 140.
To nie bug, to złe słowo. W momencie, gdy mówisz „translate", Claude wchodzi w tryb „linia po linii" — ale wielojęzyczny wątek to nie problem tłumaczenia. Każdy język trzeba napisać od zera pod jego własny budżet znaków. Ten tekst pokazuje, jak pierwszy szkic Claude'a od razu wypada blisko limitu, bez 3–5 rund cięcia.
Limit długości w X to nie „liczba znaków", tylko weighted characters:
- Łacinka, cyfry, interpunkcja: 1 weight na znak
- Znaki CJK (chiński/japoński/koreański), część emoji: 2 weight na znak
- Sufit na tweet: 280 weight
W praktyce:
- Tweet po angielsku: sufit 280 znaków
- Czysty chiński tweet: sufit 140 znaków (140 × 2 = 280)
- Mieszany: po znaku 1 lub 2
Więc „przetłumacz angielski tweet 260 znaków na chiński" nie daje chińskiej wersji 260 znaków — chińska wersja ma realnie ok. 130 znaków miejsca. Cała interpunkcja, cudzysłowy i backticki z angielskiego oryginału nadal zajmują miejsce, a każdy chiński znak liczy się podwójnie. Dosłowne tłumaczenie praktycznie gwarantuje przekroczenie.
Gdy Claude widzi „translate these 4 EN tweets to ZH", pierwszy jego ruch to zachowanie struktury angielskiego zdania i zmiana tylko słów na chińskie:
Sens jest poprawny, ale:
- Zachowane „并不相同" (o znak dłuższe niż „不同")
- Zachowane „已经点击了" („刚点完" krótsze)
- Zachowane „并看着一个空白屏幕" („看着空白屏" krótsze)
Każdy zachowany nadmiar zjada znaki. Skumulowane na 4 tweetach, 20–40 znaków za dużo wyskakuje łatwo, a limit przekroczony.
Porównaj dwie formulacje:
Co nie działa:
„Translate these 4 English tweets to Chinese, Japanese, Korean, Arabic, Indonesian."
Co działa:
„For each of these 4 points, write a thread in ZH / JA / KO / AR / ID. Each language gets a fresh pass — same argument, adjusted for that language's tweet budget.
- ZH: ≤ 140 chars per tweet, hook-first, cut detail if needed
- other languages: ≤ 280 chars
- use each language's natural phrasing, don't preserve EN sentence structure
- each tweet must be self-contained but add 🧵 only on tweet 1"
Różnice:
.lengthNie licz na oko. Mały skrypt uruchamiany na każdym szkicu:
tweets.each do |loc, list|
list.each_with_index do |t, i|
len = t.length
limit = loc == "zh" ? 140 : 280
status = len > limit ? "OVER" : "ok"
puts "#{loc}[#{i}]=#{len}/#{limit} #{status}"
end
end
String#length w Ruby zwraca kodpointy Unicode — każdy znak CJK liczy się jako 1. X waży CJK z 2, ale limit chińskiego tweeta to 140 kodpointów (bo 140 × 2 = 280 weighted), więc .length bezpośrednio pokrywa się z sufitem X. Przypadki brzegowe:
W ogromnej większości tweetów CJK .length Ruby'ego jest w zakresie ±1 od liczenia X. Używanie go jako lokalnej bramki bije testowe publikowanie na X 100×.
Gdy chińskie tweety trzeba ciąć, te dwie kategorie lecą pierwsze:
Cytaty kodu w stylu `kamal exec` w chińskim kontekście jedzą 1 znak na backtick — 2 znaki na cytat, zero wartości semantycznej. Rozwiązania:
`kamal exec`"🧵 tylko na tweecie 1. Inne emoji w chińskich tweetach — dwa razy się zastanów. Każde emoji kosztuje zasadniczo 2 znaki (1 kodpoint + czasem modyfikatory ZWJ).
'X') — oszczędność 2 znaków na parę względem fullwidth (「X」)Przy generowaniu wielojęzycznych wątków blokuj te cztery:
Objaw: chińskie zdania z konstrukcjami typu „并不相同", „已经点击了", „一个空白屏幕" — oczywiste kalki z angielskiego.
Blokada: napisz w prompcie „don't preserve EN sentence structure" / „use natural ZH phrasing".
Objaw: Claude kończy, mówi „done", wyjście przekracza limit, on tego nie zauważa.
Blokada: poproś Claude'a o samodzielne zliczanie długości każdego tweeta („count each tweet's char length and flag any over the limit") albo postaw lokalny skrypt jako bramkę. Ja wybieram skrypt — Ruby jest dokładniejszy.
Objaw: gdy Claude liczy, zapomina o dodatkowym weight emoji i fullwidth-cudzysłowów.
Blokada: nie pytaj Claude'a „czy przekroczony?" — uruchom .length lokalnie i każ mu ciąć na podstawie liczb.
Objaw: czasem 🧵 na każdym tweecie, czasem tylko na pierwszym, czasem ląduje na 4/4.
Blokada: zafiksuj w prompcie — „🧵 only on tweet 1". Claude nie zna domyślnie wizualnych konwencji wątków.
Sześć reguł, żeby pierwszy szkic wielojęzycznego wątku wypadł blisko limitu:
"cut detail if needed" mówi Claude'owi, że może tracić fakty dla długości..length jako bramka. Dokładniej niż liczenie Claude'a, szybciej niż test na X.Prawdziwy wniosek: Claude umie pisać wielojęzyczne wątki poprawnie — ale jego domyślna reakcja to „przetłumaczyć". Twoja robota to obrócić go promptem na „niezależną kompozycję per język". Z bramką .length chiński wątek ostatniego dzisiejszego artykułu wyszedł równo 140/140 w pierwszym szkicu — bez cięcia.