Калі мне патрэбныя тэставыя даныя, а мадэль ужо адкрытая, я проста прашу яе. “Generate 30 random email addresses for test fixtures.” Адказ прыходзіць за секунду і спіс выглядае выпадковым. Праз гадзіну калега робіць тое ж самае для іншага тэсту. Потым абедзве фікстуры трапляюць у 1 сід базы з абмежаваннем UNIQUE на калонцы.
Тут выпадковы выгляд 1 спіса нічога не кажа. Сід падае, калі 2 спісы з 2 асобных запытаў дзеляць хаця б 1 значэнне. Мне трэба было гэтая лічба, таму я яе вымераў. У артыкуле яна называецца P_pair: доля пар незалежных запускаў, у якіх ёсць агульнае значэнне.
Тут ужо былі да мяне
Агульная ідэя не мая. Што мадэлі паўтараюцца на адкрытых пытаннях, добра вымерана, а Artificial Hivemind называе генерацыю імёнаў сярод задач, дзе разнастайнасць ужо правяралі. Бліжэй за ўсё работа пра падробленыя персанальныя даныя (arXiv:2605.13538). Там маленькая мадэль прыдумвала імёны і адрасы, а аўтары наўпрост параўналі іх з Faker. Па выніку на задачы NER падробкі мадэлі далі менш разнастайны навучальны набор, чым Faker. Больш ранняя работа пра сінтэтычныя пасведчанні асобы (arXiv:2411.14962) паведаміла адваротнае: палі ад LLM аказаліся разнастайнейшыя за шаблоны Faker.
Так што фразу “выдуманыя мадэллю даныя аднастайнейшыя, чым у Faker” ужо вымаўлялі, прычым у абодва бакі. Мой унёсак вузкі. Адзінка ліку тут пара незалежных запускаў, якраз як у сідзе вышэй. У тэсце ёсць ідэнтыфікатары: email і імёны карыстальнікаў. Faker працуе на тых жа памерах, што і мадэлі. Мадэлі гэта 7 мадэляў Claude, бягучыя і папярэднія, праз той CLI, у які распрацоўшчык сапраўды піша.
Як я пытаўся
Тыпаў значэнняў было 7, кожны ў самай простай фармулёўцы, якую я мог прыдумаць, накшталт “Generate 30 random person full names for test fixtures.” Кожны запыт ішоў у 3 варыянтах. Першы прасіў па адным значэнні на радок. Другі прасіў масіў JSON. Трэці прасіў па адным значэнні на радок і дадаваў фразу з просьбай зрабіць значэнні як мага больш непадобнымі адно на адно.
З бягучага пакалення я ўзяў Opus 5.5, Sonnet 5.5, Haiku 5.5 і Fable 5.1, з папярэдняга Opus 5, Sonnet 5 і Haiku 4.5. 1274 выклікі прайшлі 19 і 20 кастрычніка 2026. Кожны выклік быў асобным працэсам claude -p без гісторыі і з выключанымі інструментамі, так што 2 запускі нічога адзін пра аднаго не ведаюць. Для параўнання Faker 40.43.0 зрабіў па 300 набораў з 30 значэнняў на кожны тып.
Імёны
На простым запыце 2 спісы па 30 імёнаў ад адной мадэлі дзялілі хаця б 1 імя ў 64-98% пар. Faker таго ж памеру зрабіў гэта ў 1,29% пар. Па ўсіх 7 мадэлях гэта 256 пар з 315.
Унутры аднаго адказу ніводная мадэль імя не паўтарыла, так што кожны спіс сам па сабе выглядае нармальна. Паўтор узнікае толькі паміж запускамі. Dmitri Volkov вярнуўся ў 26 простых запусках з 70, Priya Raghunathan у 24 і Kwame Asante у 19.
Ідэнтыфікатары залежаць ад мадэлі
З email мадэлі разышліся. 2 спісы ад Opus 5.5 супалі ў 56% пар, ад Sonnet 5.5 у 36%, а ў Haiku 5.5 ніводная з 45 пар не супала. Адрас alice.morgan@example.com вярнуўся ў 7 запусках з 70. Па імёнах карыстальнікаў 4 мадэлі з 7 стаяць вышэй за Faker нават ніжняй мяжой інтэрвалу.
Я чакаў, што варыянт з JSON зменшыць разнастайнасць, бо работа 2026 года знайшла якраз гэта на адказах з аднаго слова. Тут гэта правілам не стала. У адных мадэляў разнастайнасць вырасла, у іншых упала.
Просьба пра разнастайнасць
Лішняя фраза пра разнастайнасць цалкам паправіла email: 0 супадзенняў у 105 парах па ўсіх 7 мадэлях. Імёны яна не паправіла. Імёны сталі разнастайнейшыя ў кожнай мадэлі, але ніводная не дайшла да Faker і 58 пар з 105 усё роўна дзялілі імя.
Што я не змог раздзяліць
CLI гэта не голы API. Ён адпраўляе свой сістэмны промпт і ў гэтым кантэксце былі даныя майго акаўнта. У 1 адказе мадэль прайграла email акаўнта, мой нік на GitHub і горад, што супадае з часавым поясам машыны. Значыць гэтая інфармацыя да мадэлі дайшла.
Самае частае імя Dmitri Volkov, а Дзмітрый гэта маё імя. Па ўсіх 3 варыянтах запыту яно сустракаецца ў 66 запусках з імёнамі са 182. Ці падштурхнуў яго кантэкст майго акаўнта, ці мадэлі любяць яго і так? Я гэтага не правяраў. Калі прыбраць гэтае імя з усіх спісаў, агульны лік мяняецца з 256 на 254 пары з 315, так што долі на ім не трымаюцца. Якія імёны апынуцца наверсе, ад кантэксту залежаць усё ж можа. Гэта вырашыў бы прагон праз голы API без кантэксту акаўнта, а яго я не рабіў.
Ёсць яшчэ 2 рэчы, якія трэба сказаць проста. Вынікі па UUID тут нічога не значаць, бо з выключанымі інструментамі некалькі мадэляў адказвалі на запыт UUID разметкай выкліку інструмента замест значэнняў. І свае чаканні я запісаў за 18 хвілін да старту прагону, а закаміціў іх толькі тады, калі ў журнале ўжо было 52 адказы. Ніводнай долі супадзенняў да таго моманту палічана не было, а што я бачыў і мяняў у прамежку, пералічана ў артыкуле.
Што я раблю цяпер
Для любой калонкі з абмежаваннем UNIQUE я б не браў значэнні ў мадэлі. 30 значэнняў гэта маленькая фікстура, а ў вялікай шанцаў супасці больш. Горш за ўсё тое, што падзенне плаваючае: яно залежыць ад таго, які адказ дастаўся кожнай фікстуры. Генератар накшталт Faker гэта вырашае, а мадэль усё гэтак жа можа напісаць выклік генератара. Просьбы пра разнастайнасць у гэтай выбарцы хапіла для email, але не для імёнаў.
Поўны тэкст з усімі табліцамі ляжыць на старонцы артыкула. Абвязка, усе адказы цалкам і скрыпты аналізу ляжаць у рэпазіторыі.