[{"data":1,"prerenderedAt":7176},["ShallowReactive",2],{"tag-ai":3},[4,3538],{"id":5,"title":6,"body":7,"category":3522,"cover":3523,"date":3524,"description":19,"draft":3525,"extension":3526,"meta":3527,"navigation":3528,"path":3529,"seo":3530,"stem":3531,"tags":3532,"updated":3536,"__hash__":3537},"blog\u002Fblog\u002Fthe-unity-of-infinities.md","Единство бесконечностей: Как одна теорема связывает квантовую физику, JPEG и искусственный интеллект",{"type":8,"value":9,"toc":3498},"minimark",[10,20,23,28,31,122,127,130,610,614,1053,1118,1134,1136,1140,1151,1313,1320,1324,1327,1477,1673,1724,1726,1730,1736,1747,1751,1919,1930,2001,2005,2015,2030,2037,2049,2053,2060,2071,2073,2077,2083,2087,2236,2247,2606,2612,2616,2623,2932,2936,2955,2958,2969,2973,3078,3149,3151,3155,3166,3169,3171,3175,3491,3493],[11,12,13],"blockquote",{},[14,15,16],"p",{},[17,18,19],"em",{},"В геометрии и анализе существует удивительный факт: объекты, которые кажутся нам принципиально разными, с точки зрения высшей математики могут быть абсолютно тождественны. Самое мощное выражение этой идеи — фундаментальная теорема функционального анализа о структуре гильбертовых пространств.",[21,22],"hr",{},[24,25,27],"h2",{"id":26},"_1-чистая-математика-формулировка-и-суть-теоремы","1. Чистая математика: формулировка и суть теоремы",[14,29,30],{},"В основе нашего понимания бесконечномерных систем лежит следующая классическая теорема, окончательно оформленная Джоном фон Нейманом в 1929 году и Маршаллом Стоуном в 1932-м:",[11,32,33,39],{},[14,34,35],{},[36,37,38],"strong",{},"Теорема о классификации сепарабельных гильбертовых пространств.",[14,40,41,42,90,91,121],{},"Любые два бесконечномерных сепарабельных гильбертовых пространства над одним и тем же полем (",[43,44,47,71],"span",{"className":45},[46],"katex",[43,48,51],{"className":49},[50],"katex-mathml",[52,53,55],"math",{"xmlns":54},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[56,57,58,66],"semantics",{},[59,60,61],"mrow",{},[62,63,65],"mi",{"mathvariant":64},"double-struck","R",[67,68,70],"annotation",{"encoding":69},"application\u002Fx-tex","\\mathbb{R}",[43,72,76],{"className":73,"ariaHidden":75},[74],"katex-html","true",[43,77,80,85],{"className":78},[79],"base",[43,81],{"className":82,"style":84},[83],"strut","height:0.6889em;",[43,86,65],{"className":87},[88,89],"mord","mathbb"," или ",[43,92,94,109],{"className":93},[46],[43,95,97],{"className":96},[50],[52,98,99],{"xmlns":54},[56,100,101,106],{},[59,102,103],{},[62,104,105],{"mathvariant":64},"C",[67,107,108],{"encoding":69},"\\mathbb{C}",[43,110,112],{"className":111,"ariaHidden":75},[74],[43,113,115,118],{"className":114},[79],[43,116],{"className":117,"style":84},[83],[43,119,105],{"className":120},[88,89],") изометрически изоморфны между собой.",[123,124,126],"h3",{"id":125},"разбор-терминов","Разбор терминов",[14,128,129],{},"Чтобы почувствовать глубину формулировки, разберём её по частям:",[131,132,133,146],"table",{},[134,135,136],"thead",{},[137,138,139,143],"tr",{},[140,141,142],"th",{},"Термин",[140,144,145],{},"Суть",[147,148,149,164,267,281],"tbody",{},[137,150,151,157],{},[152,153,154],"td",{},[36,155,156],{},"Гильбертово пространство",[152,158,159,160,163],{},"Векторное пространство со скалярным произведением, порождающим норму (длину) и угол, которое является ",[36,161,162],{},"полным",": всякая последовательность Коши сходится к элементу того же пространства.",[137,165,166,171],{},[152,167,168],{},[36,169,170],{},"Бесконечномерное",[152,172,173,174,266],{},"Пространство, не имеющее конечного базиса. В сепарабельном случае его размерность в точности равна ",[43,175,177,200],{"className":176},[46],[43,178,180],{"className":179},[50],[52,181,182],{"xmlns":54},[56,183,184,197],{},[59,185,186],{},[187,188,189,193],"msub",{},[62,190,192],{"mathvariant":191},"normal","ℵ",[194,195,196],"mn",{},"0",[67,198,199],{"encoding":69},"\\aleph_0",[43,201,203],{"className":202,"ariaHidden":75},[74],[43,204,206,210],{"className":205},[79],[43,207],{"className":208,"style":209},[83],"height:0.8444em;vertical-align:-0.15em;",[43,211,213,216],{"className":212},[88],[43,214,192],{"className":215},[88],[43,217,220],{"className":218},[219],"msupsub",[43,221,225,257],{"className":222},[223,224],"vlist-t","vlist-t2",[43,226,229,252],{"className":227},[228],"vlist-r",[43,230,234],{"className":231,"style":233},[232],"vlist","height:0.3011em;",[43,235,237,242],{"style":236},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[43,238],{"className":239,"style":241},[240],"pstrut","height:2.7em;",[43,243,249],{"className":244},[245,246,247,248],"sizing","reset-size6","size3","mtight",[43,250,196],{"className":251},[88,248],[43,253,256],{"className":254},[255],"vlist-s","​",[43,258,260],{"className":259},[228],[43,261,264],{"className":262,"style":263},[232],"height:0.15em;",[43,265],{}," — мощности натуральных чисел.",[137,268,269,274],{},[152,270,271],{},[36,272,273],{},"Сепарабельное",[152,275,276,277,280],{},"Существует ",[36,278,279],{},"счётное"," всюду плотное подмножество. Интуитивно: можно зафиксировать упорядоченный бесконечный «каркас» (ортонормированный базис), к элементам которого любой вектор приближается сколь угодно точно.",[137,282,283,288],{},[152,284,285],{},[36,286,287],{},"Изометрический изоморфизм",[152,289,290,291,390,391,605,606,609],{},"Взаимно однозначное линейное отображение ",[43,292,294,328],{"className":293},[46],[43,295,297],{"className":296},[50],[52,298,299],{"xmlns":54},[56,300,301,325],{},[59,302,303,306,310,314,316,319,322],{},[62,304,305],{},"T",[307,308,309],"mtext",{}," ⁣",[311,312,313],"mo",{},":",[307,315,309],{},[62,317,318],{},"A",[311,320,321],{},"→",[62,323,324],{},"B",[67,326,327],{"encoding":69},"T\\!:\\!A\\to B",[43,329,331,362,380],{"className":330,"ariaHidden":75},[74],[43,332,334,338,343,348,352,356,359],{"className":333},[79],[43,335],{"className":336,"style":337},[83],"height:0.6833em;",[43,339,305],{"className":340,"style":342},[88,341],"mathnormal","margin-right:0.1389em;",[43,344],{"className":345,"style":347},[346],"mspace","margin-right:-0.1667em;",[43,349],{"className":350,"style":351},[346],"margin-right:0.2778em;",[43,353,313],{"className":354},[355],"mrel",[43,357],{"className":358,"style":347},[346],[43,360],{"className":361,"style":351},[346],[43,363,365,368,371,374,377],{"className":364},[79],[43,366],{"className":367,"style":337},[83],[43,369,318],{"className":370},[88,341],[43,372],{"className":373,"style":351},[346],[43,375,321],{"className":376},[355],[43,378],{"className":379,"style":351},[346],[43,381,383,386],{"className":382},[79],[43,384],{"className":385,"style":337},[83],[43,387,324],{"className":388,"style":389},[88,341],"margin-right:0.0502em;",", сохраняющее скалярное произведение: ",[43,392,394,452],{"className":393},[46],[43,395,397],{"className":396},[50],[52,398,399],{"xmlns":54},[56,400,401,449],{},[59,402,403,407,409,412,415,418,420,423,430,433,435,437,439,441,443],{},[311,404,406],{"stretchy":405},"false","⟨",[62,408,305],{},[62,410,411],{},"x",[311,413,414],{"separator":75},",",[307,416,417],{}," ",[62,419,305],{},[62,421,422],{},"y",[187,424,425,428],{},[311,426,427],{"stretchy":405},"⟩",[62,429,324],{},[311,431,432],{},"=",[311,434,406],{"stretchy":405},[62,436,411],{},[311,438,414],{"separator":75},[307,440,417],{},[62,442,422],{},[187,444,445,447],{},[311,446,427],{"stretchy":405},[62,448,318],{},[67,450,451],{"encoding":69},"\\langle Tx,\\,Ty\\rangle_B = \\langle x,\\,y\\rangle_A",[43,453,455,541],{"className":454,"ariaHidden":75},[74],[43,456,458,462,466,469,472,476,480,483,486,490,532,535,538],{"className":457},[79],[43,459],{"className":460,"style":461},[83],"height:1em;vertical-align:-0.25em;",[43,463,406],{"className":464},[465],"mopen",[43,467,305],{"className":468,"style":342},[88,341],[43,470,411],{"className":471},[88,341],[43,473,414],{"className":474},[475],"mpunct",[43,477],{"className":478,"style":479},[346],"margin-right:0.1667em;",[43,481],{"className":482,"style":479},[346],[43,484,305],{"className":485,"style":342},[88,341],[43,487,422],{"className":488,"style":489},[88,341],"margin-right:0.0359em;",[43,491,494,497],{"className":492},[493],"mclose",[43,495,427],{"className":496},[493],[43,498,500],{"className":499},[219],[43,501,503,524],{"className":502},[223,224],[43,504,506,521],{"className":505},[228],[43,507,510],{"className":508,"style":509},[232],"height:0.3283em;",[43,511,512,515],{"style":236},[43,513],{"className":514,"style":241},[240],[43,516,518],{"className":517},[245,246,247,248],[43,519,324],{"className":520,"style":389},[88,341,248],[43,522,256],{"className":523},[255],[43,525,527],{"className":526},[228],[43,528,530],{"className":529,"style":263},[232],[43,531],{},[43,533],{"className":534,"style":351},[346],[43,536,432],{"className":537},[355],[43,539],{"className":540,"style":351},[346],[43,542,544,547,550,553,556,559,562,565],{"className":543},[79],[43,545],{"className":546,"style":461},[83],[43,548,406],{"className":549},[465],[43,551,411],{"className":552},[88,341],[43,554,414],{"className":555},[475],[43,557],{"className":558,"style":479},[346],[43,560],{"className":561,"style":479},[346],[43,563,422],{"className":564,"style":489},[88,341],[43,566,568,571],{"className":567},[493],[43,569,427],{"className":570},[493],[43,572,574],{"className":573},[219],[43,575,577,597],{"className":576},[223,224],[43,578,580,594],{"className":579},[228],[43,581,583],{"className":582,"style":509},[232],[43,584,585,588],{"style":236},[43,586],{"className":587,"style":241},[240],[43,589,591],{"className":590},[245,246,247,248],[43,592,318],{"className":593},[88,341,248],[43,595,256],{"className":596},[255],[43,598,600],{"className":599},[228],[43,601,603],{"className":602,"style":263},[232],[43,604],{},". Как следствие — сохраняются ",[36,607,608],{},"все"," расстояния, углы и геометрические свойства.",[123,611,613],{"id":612},"главный-вывод","Главный вывод",[14,615,276,616,619,620,684,685,898,899,1052],{},[36,617,618],{},"ровно одно"," (с точностью до изоморфизма) бесконечномерное сепарабельное гильбертово пространство. Канонический представитель этого единственного класса — пространство ",[43,621,623,644],{"className":622},[46],[43,624,626],{"className":625},[50],[52,627,628],{"xmlns":54},[56,629,630,641],{},[59,631,632],{},[633,634,635,638],"msup",{},[62,636,637],{"mathvariant":191},"ℓ",[194,639,640],{},"2",[67,642,643],{"encoding":69},"\\ell^2",[43,645,647],{"className":646,"ariaHidden":75},[74],[43,648,650,654],{"className":649},[79],[43,651],{"className":652,"style":653},[83],"height:0.8141em;",[43,655,657,660],{"className":656},[88],[43,658,637],{"className":659},[88],[43,661,663],{"className":662},[219],[43,664,666],{"className":665},[223],[43,667,669],{"className":668},[228],[43,670,672],{"className":671,"style":653},[232],[43,673,675,678],{"style":674},"top:-3.063em;margin-right:0.05em;",[43,676],{"className":677,"style":241},[240],[43,679,681],{"className":680},[245,246,247,248],[43,682,640],{"className":683},[88,248],": бесконечные последовательности ",[43,686,688,738],{"className":687},[46],[43,689,691],{"className":690},[50],[52,692,693],{"xmlns":54},[56,694,695,735],{},[59,696,697,700,708,710,716,718,725,727,730,732],{},[311,698,699],{"stretchy":405},"(",[187,701,702,705],{},[62,703,704],{},"a",[194,706,707],{},"1",[311,709,414],{"separator":75},[187,711,712,714],{},[62,713,704],{},[194,715,640],{},[311,717,414],{"separator":75},[187,719,720,722],{},[62,721,704],{},[194,723,724],{},"3",[311,726,414],{"separator":75},[311,728,729],{},"…",[307,731,417],{},[311,733,734],{"stretchy":405},")",[67,736,737],{"encoding":69},"(a_1, a_2, a_3, \\dots)",[43,739,741],{"className":740,"ariaHidden":75},[74],[43,742,744,747,750,790,793,796,836,839,842,882,885,888,892,895],{"className":743},[79],[43,745],{"className":746,"style":461},[83],[43,748,699],{"className":749},[465],[43,751,753,756],{"className":752},[88],[43,754,704],{"className":755},[88,341],[43,757,759],{"className":758},[219],[43,760,762,782],{"className":761},[223,224],[43,763,765,779],{"className":764},[228],[43,766,768],{"className":767,"style":233},[232],[43,769,770,773],{"style":236},[43,771],{"className":772,"style":241},[240],[43,774,776],{"className":775},[245,246,247,248],[43,777,707],{"className":778},[88,248],[43,780,256],{"className":781},[255],[43,783,785],{"className":784},[228],[43,786,788],{"className":787,"style":263},[232],[43,789],{},[43,791,414],{"className":792},[475],[43,794],{"className":795,"style":479},[346],[43,797,799,802],{"className":798},[88],[43,800,704],{"className":801},[88,341],[43,803,805],{"className":804},[219],[43,806,808,828],{"className":807},[223,224],[43,809,811,825],{"className":810},[228],[43,812,814],{"className":813,"style":233},[232],[43,815,816,819],{"style":236},[43,817],{"className":818,"style":241},[240],[43,820,822],{"className":821},[245,246,247,248],[43,823,640],{"className":824},[88,248],[43,826,256],{"className":827},[255],[43,829,831],{"className":830},[228],[43,832,834],{"className":833,"style":263},[232],[43,835],{},[43,837,414],{"className":838},[475],[43,840],{"className":841,"style":479},[346],[43,843,845,848],{"className":844},[88],[43,846,704],{"className":847},[88,341],[43,849,851],{"className":850},[219],[43,852,854,874],{"className":853},[223,224],[43,855,857,871],{"className":856},[228],[43,858,860],{"className":859,"style":233},[232],[43,861,862,865],{"style":236},[43,863],{"className":864,"style":241},[240],[43,866,868],{"className":867},[245,246,247,248],[43,869,724],{"className":870},[88,248],[43,872,256],{"className":873},[255],[43,875,877],{"className":876},[228],[43,878,880],{"className":879,"style":263},[232],[43,881],{},[43,883,414],{"className":884},[475],[43,886],{"className":887,"style":479},[346],[43,889,729],{"className":890},[891],"minner",[43,893],{"className":894,"style":479},[346],[43,896,734],{"className":897},[493],", для которых ",[43,900,902,939],{"className":901},[46],[43,903,905],{"className":904},[50],[52,906,907],{"xmlns":54},[56,908,909,936],{},[59,910,911,914,917,924,930,933],{},[311,912,913],{},"∑",[62,915,916],{"mathvariant":191},"∣",[187,918,919,921],{},[62,920,704],{},[62,922,923],{},"k",[633,925,926,928],{},[62,927,916],{"mathvariant":191},[194,929,640],{},[311,931,932],{},"\u003C",[62,934,935],{"mathvariant":191},"∞",[67,937,938],{"encoding":69},"\\sum |a_k|^2 \u003C \\infty",[43,940,942,1042],{"className":941,"ariaHidden":75},[74],[43,943,945,949,956,959,962,1004,1033,1036,1039],{"className":944},[79],[43,946],{"className":947,"style":948},[83],"height:1.0641em;vertical-align:-0.25em;",[43,950,913],{"className":951,"style":955},[952,953,954],"mop","op-symbol","small-op","position:relative;top:0em;",[43,957],{"className":958,"style":479},[346],[43,960,916],{"className":961},[88],[43,963,965,968],{"className":964},[88],[43,966,704],{"className":967},[88,341],[43,969,971],{"className":970},[219],[43,972,974,996],{"className":973},[223,224],[43,975,977,993],{"className":976},[228],[43,978,981],{"className":979,"style":980},[232],"height:0.3361em;",[43,982,983,986],{"style":236},[43,984],{"className":985,"style":241},[240],[43,987,989],{"className":988},[245,246,247,248],[43,990,923],{"className":991,"style":992},[88,341,248],"margin-right:0.0315em;",[43,994,256],{"className":995},[255],[43,997,999],{"className":998},[228],[43,1000,1002],{"className":1001,"style":263},[232],[43,1003],{},[43,1005,1007,1010],{"className":1006},[88],[43,1008,916],{"className":1009},[88],[43,1011,1013],{"className":1012},[219],[43,1014,1016],{"className":1015},[223],[43,1017,1019],{"className":1018},[228],[43,1020,1022],{"className":1021,"style":653},[232],[43,1023,1024,1027],{"style":674},[43,1025],{"className":1026,"style":241},[240],[43,1028,1030],{"className":1029},[245,246,247,248],[43,1031,640],{"className":1032},[88,248],[43,1034],{"className":1035,"style":351},[346],[43,1037,932],{"className":1038},[355],[43,1040],{"className":1041,"style":351},[346],[43,1043,1045,1049],{"className":1044},[79],[43,1046],{"className":1047,"style":1048},[83],"height:0.4306em;",[43,1050,935],{"className":1051},[88],".",[14,1054,1055,1056,1084,1085,1113,1114,1117],{},"Какими бы экзотическими ни казались элементы пространства ",[43,1057,1059,1072],{"className":1058},[46],[43,1060,1062],{"className":1061},[50],[52,1063,1064],{"xmlns":54},[56,1065,1066,1070],{},[59,1067,1068],{},[62,1069,318],{},[67,1071,318],{"encoding":69},[43,1073,1075],{"className":1074,"ariaHidden":75},[74],[43,1076,1078,1081],{"className":1077},[79],[43,1079],{"className":1080,"style":337},[83],[43,1082,318],{"className":1083},[88,341]," (гладкие функции, решения дифференциальных уравнений) и пространства ",[43,1086,1088,1101],{"className":1087},[46],[43,1089,1091],{"className":1090},[50],[52,1092,1093],{"xmlns":54},[56,1094,1095,1099],{},[59,1096,1097],{},[62,1098,324],{},[67,1100,324],{"encoding":69},[43,1102,1104],{"className":1103,"ariaHidden":75},[74],[43,1105,1107,1110],{"className":1106},[79],[43,1108],{"className":1109,"style":337},[83],[43,1111,324],{"className":1112,"style":389},[88,341]," (бесконечные матрицы, ряды Фурье), между ними ",[36,1115,1116],{},"всегда"," существует единственный по структуре «математический переводчик».",[11,1119,1120],{},[14,1121,1122,1125,1126,1129,1130,1133],{},[36,1123,1124],{},"Любопытный факт."," Для ",[17,1127,1128],{},"несепарабельных"," гильбертовых пространств теорема ",[36,1131,1132],{},"не работает",": их существует бесконечно много попарно неизоморфных классов, каждый из которых определяется своей (несчётной) размерностью. Сепарабельность — ключевое ограничение, делающее мир бесконечномерных пространств «одноэтажным».",[21,1135],{},[24,1137,1139],{"id":1138},"_2-повседневная-жизнь-цифровая-обработка-сигналов-и-сжатие-данных","2. Повседневная жизнь: цифровая обработка сигналов и сжатие данных",[14,1141,1142,1143,1146,1147,1150],{},"В инженерном мире теорема позволяет переходить от непрерывных физических процессов к дискретным цифровым кодам ",[36,1144,1145],{},"без потери геометрической структуры",". Мостом служит ",[36,1148,1149],{},"теорема Рисса — Фишера"," (1907), устанавливающая изометрический изоморфизм",[14,1152,1153],{},[43,1154,1156,1203],{"className":1155},[46],[43,1157,1159],{"className":1158},[50],[52,1160,1161],{"xmlns":54},[56,1162,1163,1200],{},[59,1164,1165,1172,1175,1177,1179,1181,1184,1187,1190,1192,1198],{},[633,1166,1167,1170],{},[62,1168,1169],{},"L",[194,1171,640],{},[311,1173,1174],{"stretchy":405},"[",[194,1176,196],{},[311,1178,414],{"separator":75},[194,1180,707],{},[311,1182,1183],{"stretchy":405},"]",[307,1185,1186],{},"  ",[311,1188,1189],{},"≅",[307,1191,1186],{},[633,1193,1194,1196],{},[62,1195,637],{"mathvariant":191},[194,1197,640],{},[311,1199,414],{"separator":75},[67,1201,1202],{"encoding":69},"L^2[0,1] \\;\\cong\\; \\ell^2,",[43,1204,1206,1274],{"className":1205,"ariaHidden":75},[74],[43,1207,1209,1212,1241,1244,1247,1250,1253,1256,1259,1262,1265,1268,1271],{"className":1208},[79],[43,1210],{"className":1211,"style":948},[83],[43,1213,1215,1218],{"className":1214},[88],[43,1216,1169],{"className":1217},[88,341],[43,1219,1221],{"className":1220},[219],[43,1222,1224],{"className":1223},[223],[43,1225,1227],{"className":1226},[228],[43,1228,1230],{"className":1229,"style":653},[232],[43,1231,1232,1235],{"style":674},[43,1233],{"className":1234,"style":241},[240],[43,1236,1238],{"className":1237},[245,246,247,248],[43,1239,640],{"className":1240},[88,248],[43,1242,1174],{"className":1243},[465],[43,1245,196],{"className":1246},[88],[43,1248,414],{"className":1249},[475],[43,1251],{"className":1252,"style":479},[346],[43,1254,707],{"className":1255},[88],[43,1257,1183],{"className":1258},[493],[43,1260],{"className":1261,"style":351},[346],[43,1263],{"className":1264,"style":351},[346],[43,1266,1189],{"className":1267},[355],[43,1269],{"className":1270,"style":351},[346],[43,1272],{"className":1273,"style":351},[346],[43,1275,1277,1281,1310],{"className":1276},[79],[43,1278],{"className":1279,"style":1280},[83],"height:1.0085em;vertical-align:-0.1944em;",[43,1282,1284,1287],{"className":1283},[88],[43,1285,637],{"className":1286},[88],[43,1288,1290],{"className":1289},[219],[43,1291,1293],{"className":1292},[223],[43,1294,1296],{"className":1295},[228],[43,1297,1299],{"className":1298,"style":653},[232],[43,1300,1301,1304],{"style":674},[43,1302],{"className":1303,"style":241},[240],[43,1305,1307],{"className":1306},[245,246,247,248],[43,1308,640],{"className":1309},[88,248],[43,1311,414],{"className":1312},[475],[14,1314,1315,1316,1319],{},"то есть пространство интегрируемых с квадратом функций и пространство числовых последовательностей — ",[17,1317,1318],{},"одно и то же"," гильбертово пространство, записанное в разных координатах.",[123,1321,1323],{"id":1322},"алгоритм-jpeg-и-дискретное-косинусное-преобразование","Алгоритм JPEG и дискретное косинусное преобразование",[14,1325,1326],{},"Когда камера смартфона фиксирует закатное небо, она «видит» непрерывную функцию яркости и цвета. Чтобы сохранить снимок:",[1328,1329,1330,1395,1401,1465,1471],"ol",{},[1331,1332,1333,1336,1337,1394],"li",{},[36,1334,1335],{},"Разбиение."," Изображение нарезается на блоки ",[43,1338,1340,1360],{"className":1339},[46],[43,1341,1343],{"className":1342},[50],[52,1344,1345],{"xmlns":54},[56,1346,1347,1357],{},[59,1348,1349,1352,1355],{},[194,1350,1351],{},"8",[311,1353,1354],{},"×",[194,1356,1351],{},[67,1358,1359],{"encoding":69},"8 \\times 8",[43,1361,1363,1384],{"className":1362,"ariaHidden":75},[74],[43,1364,1366,1370,1373,1377,1381],{"className":1365},[79],[43,1367],{"className":1368,"style":1369},[83],"height:0.7278em;vertical-align:-0.0833em;",[43,1371,1351],{"className":1372},[88],[43,1374],{"className":1375,"style":1376},[346],"margin-right:0.2222em;",[43,1378,1354],{"className":1379},[1380],"mbin",[43,1382],{"className":1383,"style":1376},[346],[43,1385,1387,1391],{"className":1386},[79],[43,1388],{"className":1389,"style":1390},[83],"height:0.6444em;",[43,1392,1351],{"className":1393},[88]," пикселей.",[1331,1396,1397,1400],{},[36,1398,1399],{},"Выбор базиса."," Каждый блок раскладывается по ортонормированному базису дискретного косинусного преобразования (ДКП) — набору «волн» разной частоты и ориентации.",[1331,1402,1403,1406,1407,1052],{},[36,1404,1405],{},"Изоморфизм."," Непрерывная картинка превращается в набор из 64 коэффициентов на блок — координат в ",[43,1408,1410,1427],{"className":1409},[46],[43,1411,1413],{"className":1412},[50],[52,1414,1415],{"xmlns":54},[56,1416,1417,1425],{},[59,1418,1419],{},[633,1420,1421,1423],{},[62,1422,637],{"mathvariant":191},[194,1424,640],{},[67,1426,643],{"encoding":69},[43,1428,1430],{"className":1429,"ariaHidden":75},[74],[43,1431,1433,1436],{"className":1432},[79],[43,1434],{"className":1435,"style":653},[83],[43,1437,1439,1442],{"className":1438},[88],[43,1440,637],{"className":1441},[88],[43,1443,1445],{"className":1444},[219],[43,1446,1448],{"className":1447},[223],[43,1449,1451],{"className":1450},[228],[43,1452,1454],{"className":1453,"style":653},[232],[43,1455,1456,1459],{"style":674},[43,1457],{"className":1458,"style":241},[240],[43,1460,1462],{"className":1461},[245,246,247,248],[43,1463,640],{"className":1464},[88,248],[1331,1466,1467,1470],{},[36,1468,1469],{},"Квантование."," Человеческий глаз нечувствителен к мелкой высокочастотной ряби, поэтому коэффициенты, отвечающие за неё, обнуляются или огрубляются.",[1331,1472,1473,1476],{},[36,1474,1475],{},"Обратное преобразование."," По оставшимся коэффициентам восстанавливается изображение.",[14,1478,1479,1480,1483,1484,1668,1669,1672],{},"Благодаря ",[36,1481,1482],{},"равенству Парсеваля"," (изометрии ",[43,1485,1487,1530],{"className":1486},[46],[43,1488,1490],{"className":1489},[50],[52,1491,1492],{"xmlns":54},[56,1493,1494,1527],{},[59,1495,1496,1499,1502,1508,1510,1512,1514,1521],{},[62,1497,1498],{"mathvariant":191},"∥",[62,1500,1501],{},"f",[633,1503,1504,1506],{},[62,1505,1498],{"mathvariant":191},[194,1507,640],{},[311,1509,432],{},[311,1511,913],{},[62,1513,916],{"mathvariant":191},[187,1515,1516,1519],{},[62,1517,1518],{},"c",[62,1520,923],{},[633,1522,1523,1525],{},[62,1524,916],{"mathvariant":191},[194,1526,640],{},[67,1528,1529],{"encoding":69},"\\|f\\|^2 = \\sum |c_k|^2",[43,1531,1533,1584],{"className":1532,"ariaHidden":75},[74],[43,1534,1536,1539,1542,1546,1575,1578,1581],{"className":1535},[79],[43,1537],{"className":1538,"style":948},[83],[43,1540,1498],{"className":1541},[88],[43,1543,1501],{"className":1544,"style":1545},[88,341],"margin-right:0.1076em;",[43,1547,1549,1552],{"className":1548},[88],[43,1550,1498],{"className":1551},[88],[43,1553,1555],{"className":1554},[219],[43,1556,1558],{"className":1557},[223],[43,1559,1561],{"className":1560},[228],[43,1562,1564],{"className":1563,"style":653},[232],[43,1565,1566,1569],{"style":674},[43,1567],{"className":1568,"style":241},[240],[43,1570,1572],{"className":1571},[245,246,247,248],[43,1573,640],{"className":1574},[88,248],[43,1576],{"className":1577,"style":351},[346],[43,1579,432],{"className":1580},[355],[43,1582],{"className":1583,"style":351},[346],[43,1585,1587,1590,1593,1596,1599,1639],{"className":1586},[79],[43,1588],{"className":1589,"style":948},[83],[43,1591,913],{"className":1592,"style":955},[952,953,954],[43,1594],{"className":1595,"style":479},[346],[43,1597,916],{"className":1598},[88],[43,1600,1602,1605],{"className":1601},[88],[43,1603,1518],{"className":1604},[88,341],[43,1606,1608],{"className":1607},[219],[43,1609,1611,1631],{"className":1610},[223,224],[43,1612,1614,1628],{"className":1613},[228],[43,1615,1617],{"className":1616,"style":980},[232],[43,1618,1619,1622],{"style":236},[43,1620],{"className":1621,"style":241},[240],[43,1623,1625],{"className":1624},[245,246,247,248],[43,1626,923],{"className":1627,"style":992},[88,341,248],[43,1629,256],{"className":1630},[255],[43,1632,1634],{"className":1633},[228],[43,1635,1637],{"className":1636,"style":263},[232],[43,1638],{},[43,1640,1642,1645],{"className":1641},[88],[43,1643,916],{"className":1644},[88],[43,1646,1648],{"className":1647},[219],[43,1649,1651],{"className":1650},[223],[43,1652,1654],{"className":1653},[228],[43,1655,1657],{"className":1656,"style":653},[232],[43,1658,1659,1662],{"style":674},[43,1660],{"className":1661,"style":241},[240],[43,1663,1665],{"className":1664},[245,246,247,248],[43,1666,640],{"className":1667},[88,248],") энергия сигнала распределяется предсказуемо, и отбрасывание «незначимых» компонент не разрушает общую структуру. Итог: файл в ",[36,1670,1671],{},"10–20 раз"," меньше при визуально неотличимом качестве.",[11,1674,1675],{},[14,1676,1677,1678,1681,1682,1685,1686,1715,1716,1719,1720,1723],{},"Тот же принцип изоморфизма лежит в основе ",[36,1679,1680],{},"MP3\u002FAAC"," (аудио), ",[36,1683,1684],{},"МРТ-сканирования"," (пространство ",[43,1687,1689,1702],{"className":1688},[46],[43,1690,1692],{"className":1691},[50],[52,1693,1694],{"xmlns":54},[56,1695,1696,1700],{},[59,1697,1698],{},[62,1699,923],{},[67,1701,923],{"encoding":69},[43,1703,1705],{"className":1704,"ariaHidden":75},[74],[43,1706,1708,1712],{"className":1707},[79],[43,1709],{"className":1710,"style":1711},[83],"height:0.6944em;",[43,1713,923],{"className":1714,"style":992},[88,341],"-частот изоморфно пространству изображений), ",[36,1717,1718],{},"вейвлет-сжатия"," и ",[36,1721,1722],{},"адаптивного шумоподавления"," в наушниках.",[21,1725],{},[24,1727,1729],{"id":1728},"_3-масштаб-вселенной-квантовая-механика-и-чёрные-дыры","3. Масштаб Вселенной: квантовая механика и чёрные дыры",[14,1731,1732,1733,1052],{},"В физике изоморфизм гильбертовых пространств не просто упрощает расчёты — он ",[36,1734,1735],{},"объединяет альтернативные картины реальности",[1737,1738,1744],"pre",{"className":1739,"code":1741,"language":1742,"meta":1743},[1740],"language-text","   [ Квантовое состояние системы ]\n                 |\n      +----------+----------+\n      |                     |\n(Унитарное            (Унитарное\nотображение)          отображение)\n      v                     v\n[ Пространство L² ] [ Пространство ℓ² ]\n  Волновая функция   Векторы и матрицы\n(Э. Шрёдингер, 1926) (В. Гейзенберг, 1925)\n","text","",[1745,1746,1741],"code",{"__ignoreMap":1743},[123,1748,1750],{"id":1749},"разрешение-спора-шрёдингера-и-гейзенберга","Разрешение спора Шрёдингера и Гейзенберга",[14,1752,1753,1754,1812,1813,1858,1859,1918],{},"В середине 1920-х годов Вернер Гейзенберг описал квантовую систему через бесконечные матрицы и векторы-последовательности (",[43,1755,1757,1774],{"className":1756},[46],[43,1758,1760],{"className":1759},[50],[52,1761,1762],{"xmlns":54},[56,1763,1764,1772],{},[59,1765,1766],{},[633,1767,1768,1770],{},[62,1769,637],{"mathvariant":191},[194,1771,640],{},[67,1773,643],{"encoding":69},[43,1775,1777],{"className":1776,"ariaHidden":75},[74],[43,1778,1780,1783],{"className":1779},[79],[43,1781],{"className":1782,"style":653},[83],[43,1784,1786,1789],{"className":1785},[88],[43,1787,637],{"className":1788},[88],[43,1790,1792],{"className":1791},[219],[43,1793,1795],{"className":1794},[223],[43,1796,1798],{"className":1797},[228],[43,1799,1801],{"className":1800,"style":653},[232],[43,1802,1803,1806],{"style":674},[43,1804],{"className":1805,"style":241},[240],[43,1807,1809],{"className":1808},[245,246,247,248],[43,1810,640],{"className":1811},[88,248],"), а Эрвин Шрёдингер — через непрерывные волновые функции ",[43,1814,1816,1837],{"className":1815},[46],[43,1817,1819],{"className":1818},[50],[52,1820,1821],{"xmlns":54},[56,1822,1823,1834],{},[59,1824,1825,1828,1830,1832],{},[62,1826,1827],{},"ψ",[311,1829,699],{"stretchy":405},[62,1831,411],{},[311,1833,734],{"stretchy":405},[67,1835,1836],{"encoding":69},"\\psi(x)",[43,1838,1840],{"className":1839,"ariaHidden":75},[74],[43,1841,1843,1846,1849,1852,1855],{"className":1842},[79],[43,1844],{"className":1845,"style":461},[83],[43,1847,1827],{"className":1848,"style":489},[88,341],[43,1850,699],{"className":1851},[465],[43,1853,411],{"className":1854},[88,341],[43,1856,734],{"className":1857},[493]," и дифференциальные уравнения (",[43,1860,1862,1880],{"className":1861},[46],[43,1863,1865],{"className":1864},[50],[52,1866,1867],{"xmlns":54},[56,1868,1869,1877],{},[59,1870,1871],{},[633,1872,1873,1875],{},[62,1874,1169],{},[194,1876,640],{},[67,1878,1879],{"encoding":69},"L^2",[43,1881,1883],{"className":1882,"ariaHidden":75},[74],[43,1884,1886,1889],{"className":1885},[79],[43,1887],{"className":1888,"style":653},[83],[43,1890,1892,1895],{"className":1891},[88],[43,1893,1169],{"className":1894},[88,341],[43,1896,1898],{"className":1897},[219],[43,1899,1901],{"className":1900},[223],[43,1902,1904],{"className":1903},[228],[43,1905,1907],{"className":1906,"style":653},[232],[43,1908,1909,1912],{"style":674},[43,1910],{"className":1911,"style":241},[240],[43,1913,1915],{"className":1914},[245,246,247,248],[43,1916,640],{"className":1917},[88,248],"). Казалось, это две разные физики.",[14,1920,1921,1922,1925,1926,1929],{},"В 1932 году Джон фон Нейман в монографии ",[17,1923,1924],{},"«Математические основы квантовой механики»"," применил теорему об изоморфизме и доказал: ",[36,1927,1928],{},"матричная и волновая механика математически тождественны",". Физик волен выбирать — считать сложные интегралы или перемножать матрицы; вероятность любого исхода будет одной и той же.",[11,1931,1932],{},[14,1933,1934,1937,1938,1941,1942,2000],{},[36,1935,1936],{},"Иллюстрация."," Квантовая частица в прямоугольной яме и квантовый гармонический осциллятор выглядят совершенно по-разному: разные потенциалы, разные уравнения, разные волновые функции. Но их гильбертовы пространства состояний ",[36,1939,1940],{},"изоморфны"," ",[43,1943,1945,1962],{"className":1944},[46],[43,1946,1948],{"className":1947},[50],[52,1949,1950],{"xmlns":54},[56,1951,1952,1960],{},[59,1953,1954],{},[633,1955,1956,1958],{},[62,1957,637],{"mathvariant":191},[194,1959,640],{},[67,1961,643],{"encoding":69},[43,1963,1965],{"className":1964,"ariaHidden":75},[74],[43,1966,1968,1971],{"className":1967},[79],[43,1969],{"className":1970,"style":653},[83],[43,1972,1974,1977],{"className":1973},[88],[43,1975,637],{"className":1976},[88],[43,1978,1980],{"className":1979},[219],[43,1981,1983],{"className":1982},[223],[43,1984,1986],{"className":1985},[228],[43,1987,1989],{"className":1988,"style":653},[232],[43,1990,1991,1994],{"style":674},[43,1992],{"className":1993,"style":241},[240],[43,1995,1997],{"className":1996},[245,246,247,248],[43,1998,640],{"className":1999},[88,248],". С точки зрения абстрактной структуры — это одна и та же система.",[123,2002,2004],{"id":2003},"adscft-соответствие-и-голографический-принцип","AdS\u002FCFT-соответствие и голографический принцип",[14,2006,2007,2008,2011,2012,313],{},"На экстремальных масштабах — в теории квантовой гравитации — идея изоморфизма принимает форму ",[36,2009,2010],{},"гипотезы Хуана Малдасены"," (1997), известной как ",[36,2013,2014],{},"AdS\u002FCFT-дуальность",[2016,2017,2018,2024],"ul",{},[1331,2019,2020,2023],{},[36,2021,2022],{},"Мир А"," — объём анти-де-ситтеровского пространства (AdS): есть гравитация, искривление пространства-времени, чёрные дыры.",[1331,2025,2026,2029],{},[36,2027,2028],{},"Мир Б"," — граница этого пространства, на которой живёт конформная теория поля (CFT): гравитации нет, только квантовые частицы.",[14,2031,2032,2033,2036],{},"Гильбертовы пространства состояний этих двух миров изоморфны. Трёхмерный (и более) мир с гравитацией ",[36,2034,2035],{},"полностью кодируется"," на двумерной границе без потери информации — подобно голограмме.",[11,2038,2039],{},[14,2040,2041,2044,2045,2048],{},[36,2042,2043],{},"Важная оговорка."," В отличие от теоремы фон Неймана, AdS\u002FCFT остаётся ",[36,2046,2047],{},"гипотезой"," (хотя и подтверждённой тысячами непротиворечивых проверок). Строгого доказательства для физически реалистичных случаев пока нет. Тем не менее структурная логика здесь та же: два внешне несхожих описания оказываются одним пространством в разных координатах.",[123,2050,2052],{"id":2051},"информационный-парадокс-чёрных-дыр","Информационный парадокс чёрных дыр",[14,2054,2055,2056,2059],{},"Когда материя падает в чёрную дыру, а дыра затем испаряется через излучение Хокинга, возникает вопрос: куда девается информация? Общая теория относительности говорит «уничтожается», квантовая механика (закон ",[36,2057,2058],{},"унитарности",") запрещает это.",[14,2061,2062,2063,2066,2067,2070],{},"Решение, подсказанное AdS\u002FCFT: гильбертово пространство гравитационной чёрной дыры изоморфно пространству квантовых степеней свободы на её горизонте. Информация не исчезает — она ",[36,2064,2065],{},"перекодируется"," на поверхность, как трёхмерный объект кодируется на плоской голографической плёнке. В 2019–2024 гг. расчёты с использованием «островов» (",[17,2068,2069],{},"island formula",") и квантовой экстремальной поверхности дали первые количественные подтверждения этого механизма.",[21,2072],{},[24,2074,2076],{"id":2075},"_4-искусственный-интеллект-семантическая-геометрия-и-эмбеддинги","4. Искусственный интеллект: семантическая геометрия и эмбеддинги",[14,2078,2079,2080,1052],{},"Современный прорыв в области больших языковых моделей (LLM) — GPT, Claude, LLaMA — стал возможен благодаря переносу лингвистики в ",[36,2081,2082],{},"метрические векторные пространства",[123,2084,2086],{"id":2085},"векторизация-эмбеддинги","Векторизация (эмбеддинги)",[14,2088,2089,2090,1941,2093,2154,2155,2235],{},"Для компьютера слова «кошка» и «собака» — просто последовательности байтов. Чтобы научить модель рассуждать, инженеры строят отображение из хаотичного пространства языка в ",[36,2091,2092],{},"конечномерное евклидово пространство",[43,2094,2096,2115],{"className":2095},[46],[43,2097,2099],{"className":2098},[50],[52,2100,2101],{"xmlns":54},[56,2102,2103,2112],{},[59,2104,2105],{},[633,2106,2107,2109],{},[62,2108,65],{"mathvariant":64},[62,2110,2111],{},"d",[67,2113,2114],{"encoding":69},"\\mathbb{R}^d",[43,2116,2118],{"className":2117,"ariaHidden":75},[74],[43,2119,2121,2125],{"className":2120},[79],[43,2122],{"className":2123,"style":2124},[83],"height:0.8491em;",[43,2126,2128,2131],{"className":2127},[88],[43,2129,65],{"className":2130},[88,89],[43,2132,2134],{"className":2133},[219],[43,2135,2137],{"className":2136},[223],[43,2138,2140],{"className":2139},[228],[43,2141,2143],{"className":2142,"style":2124},[232],[43,2144,2145,2148],{"style":674},[43,2146],{"className":2147,"style":241},[240],[43,2149,2151],{"className":2150},[245,246,247,248],[43,2152,2111],{"className":2153},[88,341,248]," (обычно ",[43,2156,2158,2187],{"className":2157},[46],[43,2159,2161],{"className":2160},[50],[52,2162,2163],{"xmlns":54},[56,2164,2165,2184],{},[59,2166,2167,2169,2171,2174,2176,2179,2181],{},[62,2168,2111],{},[311,2170,432],{},[194,2172,2173],{},"768",[311,2175,729],{},[194,2177,2178],{},"15",[307,2180,417],{},[194,2182,2183],{},"360",[67,2185,2186],{"encoding":69},"d = 768 \\ldots 15\\,360",[43,2188,2190,2208],{"className":2189,"ariaHidden":75},[74],[43,2191,2193,2196,2199,2202,2205],{"className":2192},[79],[43,2194],{"className":2195,"style":1711},[83],[43,2197,2111],{"className":2198},[88,341],[43,2200],{"className":2201,"style":351},[346],[43,2203,432],{"className":2204},[355],[43,2206],{"className":2207,"style":351},[346],[43,2209,2211,2214,2217,2220,2223,2226,2229,2232],{"className":2210},[79],[43,2212],{"className":2213,"style":1390},[83],[43,2215,2173],{"className":2216},[88],[43,2218],{"className":2219,"style":479},[346],[43,2221,729],{"className":2222},[891],[43,2224],{"className":2225,"style":479},[346],[43,2227,2178],{"className":2228},[88],[43,2230],{"className":2231,"style":479},[346],[43,2233,2183],{"className":2234},[88],"), которое формально тоже является гильбертовым пространством.",[14,2237,2238,2239,2242,2243,2246],{},"Каждое слово или концепт становится ",[36,2240,2241],{},"вектором"," — точкой в этом пространстве. Ключевое свойство: близкие по смыслу понятия оказываются геометрически близкими. Скалярное произведение (точнее, ",[36,2244,2245],{},"косинусное сходство",") отражает семантическую связь:",[14,2248,2249],{},[43,2250,2252,2322],{"className":2251},[46],[43,2253,2255],{"className":2254},[50],[52,2256,2257],{"xmlns":54},[56,2258,2259,2319],{},[59,2260,2261,2264,2267,2270,2272],{},[62,2262,2263],{},"cos",[311,2265,2266],{},"⁡",[62,2268,2269],{},"θ",[311,2271,432],{},[2273,2274,2275,2295],"mfrac",{},[59,2276,2277,2285,2288],{},[2278,2279,2280,2282],"mover",{"accent":75},[62,2281,704],{},[311,2283,2284],{},"⃗",[311,2286,2287],{},"⋅",[2278,2289,2290,2293],{"accent":75},[62,2291,2292],{},"b",[311,2294,2284],{},[59,2296,2297,2299,2305,2307,2309,2311,2317],{},[62,2298,916],{"mathvariant":191},[2278,2300,2301,2303],{"accent":75},[62,2302,704],{},[311,2304,2284],{},[62,2306,916],{"mathvariant":191},[307,2308,417],{},[62,2310,916],{"mathvariant":191},[2278,2312,2313,2315],{"accent":75},[62,2314,2292],{},[311,2316,2284],{},[62,2318,916],{"mathvariant":191},[67,2320,2321],{"encoding":69},"\\cos\\theta = \\frac{\\vec{a}\\cdot\\vec{b}}{|\\vec{a}|\\,|\\vec{b}|}",[43,2323,2325,2350],{"className":2324,"ariaHidden":75},[74],[43,2326,2328,2331,2334,2337,2341,2344,2347],{"className":2327},[79],[43,2329],{"className":2330,"style":1711},[83],[43,2332,2263],{"className":2333},[952],[43,2335],{"className":2336,"style":479},[346],[43,2338,2269],{"className":2339,"style":2340},[88,341],"margin-right:0.0278em;",[43,2342],{"className":2343,"style":351},[346],[43,2345,432],{"className":2346},[355],[43,2348],{"className":2349,"style":351},[346],[43,2351,2353,2357],{"className":2352},[79],[43,2354],{"className":2355,"style":2356},[83],"height:1.7474em;vertical-align:-0.6692em;",[43,2358,2360,2364,2603],{"className":2359},[88],[43,2361],{"className":2362},[465,2363],"nulldelimiter",[43,2365,2367],{"className":2366},[2273],[43,2368,2370,2594],{"className":2369},[223,224],[43,2371,2373,2591],{"className":2372},[228],[43,2374,2377,2495,2506],{"className":2375,"style":2376},[232],"height:1.0782em;",[43,2378,2380,2384],{"style":2379},"top:-2.5058em;",[43,2381],{"className":2382,"style":2383},[240],"height:3em;",[43,2385,2387],{"className":2386},[245,246,247,248],[43,2388,2390,2393,2445,2448,2452,2455,2492],{"className":2389},[88,248],[43,2391,916],{"className":2392},[88,248],[43,2394,2397],{"className":2395},[88,2396,248],"accent",[43,2398,2400],{"className":2399},[223],[43,2401,2403],{"className":2402},[228],[43,2404,2407,2417],{"className":2405,"style":2406},[232],"height:0.714em;",[43,2408,2410,2414],{"style":2409},"top:-2.714em;",[43,2411],{"className":2412,"style":2413},[240],"height:2.714em;",[43,2415,704],{"className":2416},[88,341,248],[43,2418,2419,2422],{"style":2409},[43,2420],{"className":2421,"style":2413},[240],[43,2423,2427],{"className":2424,"style":2426},[2425],"accent-body","left:-0.2355em;",[43,2428,2432],{"className":2429,"style":2431},[2430,248],"overlay","height:0.714em;width:0.471em;",[2433,2434,2441],"svg",{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","0.471em","0.714em","width:0.471em","0 0 471 714","xMinYMin",[2442,2443],"path",{"d":2444},"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",[43,2446,916],{"className":2447},[88,248],[43,2449],{"className":2450,"style":2451},[346,248],"margin-right:0.1952em;",[43,2453,916],{"className":2454},[88,248],[43,2456,2458],{"className":2457},[88,2396,248],[43,2459,2461],{"className":2460},[223],[43,2462,2464],{"className":2463},[228],[43,2465,2468,2476],{"className":2466,"style":2467},[232],"height:0.9774em;",[43,2469,2470,2473],{"style":2409},[43,2471],{"className":2472,"style":2413},[240],[43,2474,2292],{"className":2475},[88,341,248],[43,2477,2479,2482],{"style":2478},"top:-2.9774em;",[43,2480],{"className":2481,"style":2413},[240],[43,2483,2485],{"className":2484,"style":2426},[2425],[43,2486,2488],{"className":2487,"style":2431},[2430,248],[2433,2489,2490],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2491],{"d":2444},[43,2493,916],{"className":2494},[88,248],[43,2496,2498,2501],{"style":2497},"top:-3.23em;",[43,2499],{"className":2500,"style":2383},[240],[43,2502],{"className":2503,"style":2505},[2504],"frac-line","border-bottom-width:0.04em;",[43,2507,2509,2512],{"style":2508},"top:-3.394em;",[43,2510],{"className":2511,"style":2383},[240],[43,2513,2515],{"className":2514},[245,246,247,248],[43,2516,2518,2553,2556],{"className":2517},[88,248],[43,2519,2521],{"className":2520},[88,2396,248],[43,2522,2524],{"className":2523},[223],[43,2525,2527],{"className":2526},[228],[43,2528,2530,2538],{"className":2529,"style":2406},[232],[43,2531,2532,2535],{"style":2409},[43,2533],{"className":2534,"style":2413},[240],[43,2536,704],{"className":2537},[88,341,248],[43,2539,2540,2543],{"style":2409},[43,2541],{"className":2542,"style":2413},[240],[43,2544,2546],{"className":2545,"style":2426},[2425],[43,2547,2549],{"className":2548,"style":2431},[2430,248],[2433,2550,2551],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2552],{"d":2444},[43,2554,2287],{"className":2555},[1380,248],[43,2557,2559],{"className":2558},[88,2396,248],[43,2560,2562],{"className":2561},[223],[43,2563,2565],{"className":2564},[228],[43,2566,2568,2576],{"className":2567,"style":2467},[232],[43,2569,2570,2573],{"style":2409},[43,2571],{"className":2572,"style":2413},[240],[43,2574,2292],{"className":2575},[88,341,248],[43,2577,2578,2581],{"style":2478},[43,2579],{"className":2580,"style":2413},[240],[43,2582,2584],{"className":2583,"style":2426},[2425],[43,2585,2587],{"className":2586,"style":2431},[2430,248],[2433,2588,2589],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2590],{"d":2444},[43,2592,256],{"className":2593},[255],[43,2595,2597],{"className":2596},[228],[43,2598,2601],{"className":2599,"style":2600},[232],"height:0.6692em;",[43,2602],{},[43,2604],{"className":2605},[493,2363],[1737,2607,2610],{"className":2608,"code":2609,"language":1742,"meta":1743},[1740],"[Животные]                   [Техника]\n  • Кошка                      • Холодильник\n  • Собака                     • Телевизор\n  (малое расстояние)           (малое расстояние)\n  ←———————————— большое расстояние ————————————→\n",[1745,2611,2609],{"__ignoreMap":1743},[123,2613,2615],{"id":2614},"алгебра-смыслов","Алгебра смыслов",[14,2617,2618,2619,2622],{},"Поскольку линейная структура сохраняется, над абстрактными понятиями можно выполнять ",[36,2620,2621],{},"векторную арифметику",". Знаменитый пример из работы Миколова и соавторов (2013, word2vec):",[14,2624,2625],{},[43,2626,2628,2681],{"className":2627},[46],[43,2629,2631],{"className":2630},[50],[52,2632,2633],{"xmlns":54},[56,2634,2635,2678],{},[59,2636,2637,2644,2647,2654,2657,2664,2666,2669,2671],{},[2278,2638,2639,2642],{"accent":75},[307,2640,2641],{},"Король",[311,2643,2284],{},[311,2645,2646],{},"−",[2278,2648,2649,2652],{"accent":75},[307,2650,2651],{},"Мужчина",[311,2653,2284],{},[311,2655,2656],{},"+",[2278,2658,2659,2662],{"accent":75},[307,2660,2661],{},"Женщина",[311,2663,2284],{},[307,2665,1186],{},[311,2667,2668],{},"≈",[307,2670,1186],{},[2278,2672,2673,2676],{"accent":75},[307,2674,2675],{},"Королева",[311,2677,2284],{},[67,2679,2680],{"encoding":69},"\\vec{\\text{Король}} - \\vec{\\text{Мужчина}} + \\vec{\\text{Женщина}} \\;\\approx\\; \\vec{\\text{Королева}}",[43,2682,2684,2754,2818,2877],{"className":2683,"ariaHidden":75},[74],[43,2685,2687,2691,2745,2748,2751],{"className":2686},[79],[43,2688],{"className":2689,"style":2690},[83],"height:1.1608em;vertical-align:-0.1944em;",[43,2692,2694],{"className":2693},[88,2396],[43,2695,2697,2736],{"className":2696},[223,224],[43,2698,2700,2733],{"className":2699},[228],[43,2701,2704,2717],{"className":2702,"style":2703},[232],"height:0.9663em;",[43,2705,2707,2710],{"style":2706},"top:-3em;",[43,2708],{"className":2709,"style":2383},[240],[43,2711,2713],{"className":2712},[88,1742],[43,2714,2641],{"className":2715},[88,2716],"cyrillic_fallback",[43,2718,2720,2723],{"style":2719},"top:-3.2523em;",[43,2721],{"className":2722,"style":2383},[240],[43,2724,2726],{"className":2725,"style":2426},[2425],[43,2727,2729],{"className":2728,"style":2431},[2430],[2433,2730,2731],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2732],{"d":2444},[43,2734,256],{"className":2735},[255],[43,2737,2739],{"className":2738},[228],[43,2740,2743],{"className":2741,"style":2742},[232],"height:0.1944em;",[43,2744],{},[43,2746],{"className":2747,"style":1376},[346],[43,2749,2646],{"className":2750},[1380],[43,2752],{"className":2753,"style":1376},[346],[43,2755,2757,2760,2809,2812,2815],{"className":2756},[79],[43,2758],{"className":2759,"style":2690},[83],[43,2761,2763],{"className":2762},[88,2396],[43,2764,2766,2801],{"className":2765},[223,224],[43,2767,2769,2798],{"className":2768},[228],[43,2770,2772,2783],{"className":2771,"style":2703},[232],[43,2773,2774,2777],{"style":2706},[43,2775],{"className":2776,"style":2383},[240],[43,2778,2780],{"className":2779},[88,1742],[43,2781,2651],{"className":2782},[88,2716],[43,2784,2785,2788],{"style":2719},[43,2786],{"className":2787,"style":2383},[240],[43,2789,2791],{"className":2790,"style":2426},[2425],[43,2792,2794],{"className":2793,"style":2431},[2430],[2433,2795,2796],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2797],{"d":2444},[43,2799,256],{"className":2800},[255],[43,2802,2804],{"className":2803},[228],[43,2805,2807],{"className":2806,"style":2742},[232],[43,2808],{},[43,2810],{"className":2811,"style":1376},[346],[43,2813,2656],{"className":2814},[1380],[43,2816],{"className":2817,"style":1376},[346],[43,2819,2821,2824,2862,2865,2868,2871,2874],{"className":2820},[79],[43,2822],{"className":2823,"style":2703},[83],[43,2825,2827],{"className":2826},[88,2396],[43,2828,2830],{"className":2829},[223],[43,2831,2833],{"className":2832},[228],[43,2834,2836,2847],{"className":2835,"style":2703},[232],[43,2837,2838,2841],{"style":2706},[43,2839],{"className":2840,"style":2383},[240],[43,2842,2844],{"className":2843},[88,1742],[43,2845,2661],{"className":2846},[88,2716],[43,2848,2849,2852],{"style":2719},[43,2850],{"className":2851,"style":2383},[240],[43,2853,2855],{"className":2854,"style":2426},[2425],[43,2856,2858],{"className":2857,"style":2431},[2430],[2433,2859,2860],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2861],{"d":2444},[43,2863],{"className":2864,"style":351},[346],[43,2866],{"className":2867,"style":351},[346],[43,2869,2668],{"className":2870},[355],[43,2872],{"className":2873,"style":351},[346],[43,2875],{"className":2876,"style":351},[346],[43,2878,2880,2883],{"className":2879},[79],[43,2881],{"className":2882,"style":2690},[83],[43,2884,2886],{"className":2885},[88,2396],[43,2887,2889,2924],{"className":2888},[223,224],[43,2890,2892,2921],{"className":2891},[228],[43,2893,2895,2906],{"className":2894,"style":2703},[232],[43,2896,2897,2900],{"style":2706},[43,2898],{"className":2899,"style":2383},[240],[43,2901,2903],{"className":2902},[88,1742],[43,2904,2675],{"className":2905},[88,2716],[43,2907,2908,2911],{"style":2719},[43,2909],{"className":2910,"style":2383},[240],[43,2912,2914],{"className":2913,"style":2426},[2425],[43,2915,2917],{"className":2916,"style":2431},[2430],[2433,2918,2919],{"xmlns":2435,"width":2436,"height":2437,"style":2438,"viewBox":2439,"preserveAspectRatio":2440},[2442,2920],{"d":2444},[43,2922,256],{"className":2923},[255],[43,2925,2927],{"className":2926},[228],[43,2928,2930],{"className":2929,"style":2742},[232],[43,2931],{},[123,2933,2935],{"id":2934},"мультимодальность-общий-язык-для-текста-и-изображений","Мультимодальность: общий язык для текста и изображений",[14,2937,2938,2939,2942,2943,2946,2947,2950,2951,2954],{},"Модели вроде ",[36,2940,2941],{},"CLIP"," (OpenAI, 2021) строят изоморфное отображение между пространством текстовых описаний и пространством визуальных образов. Вектор фразы ",[17,2944,2945],{},"«пушистый рыжий кот»"," и вектор реальной фотографии рыжего кота указывают ",[36,2948,2949],{},"в одну и ту же сторону"," в едином скрытом пространстве (",[17,2952,2953],{},"shared embedding space",").",[14,2956,2957],{},"Именно это позволяет:",[2016,2959,2960,2963,2966],{},[1331,2961,2962],{},"генерировать изображения по текстовому запросу (Midjourney, DALL·E, Stable Diffusion);",[1331,2964,2965],{},"понимать содержание видео и находить нужный кадр по описанию;",[1331,2967,2968],{},"выполнять «поиск картинки текстом» и наоборот.",[123,2970,2972],{"id":2971},"взгляд-в-будущее-квантовое-машинное-обучение","Взгляд в будущее: квантовое машинное обучение",[14,2974,2975,2976,2979,2980,3009,3010,3070,3071,1719,3074,3077],{},"На стыке квантовой физики и ИИ рождается ",[36,2977,2978],{},"квантовое машинное обучение"," (QML). Квантовые состояния ",[43,2981,2983,2997],{"className":2982},[46],[43,2984,2986],{"className":2985},[50],[52,2987,2988],{"xmlns":54},[56,2989,2990,2995],{},[59,2991,2992],{},[62,2993,2994],{},"n",[67,2996,2994],{"encoding":69},[43,2998,3000],{"className":2999,"ariaHidden":75},[74],[43,3001,3003,3006],{"className":3002},[79],[43,3004],{"className":3005,"style":1048},[83],[43,3007,2994],{"className":3008},[88,341]," кубитов естественным образом живут в комплексном гильбертовом пространстве размерности ",[43,3011,3013,3031],{"className":3012},[46],[43,3014,3016],{"className":3015},[50],[52,3017,3018],{"xmlns":54},[56,3019,3020,3028],{},[59,3021,3022],{},[633,3023,3024,3026],{},[194,3025,640],{},[62,3027,2994],{},[67,3029,3030],{"encoding":69},"2^n",[43,3032,3034],{"className":3033,"ariaHidden":75},[74],[43,3035,3037,3041],{"className":3036},[79],[43,3038],{"className":3039,"style":3040},[83],"height:0.6644em;",[43,3042,3044,3047],{"className":3043},[88],[43,3045,640],{"className":3046},[88],[43,3048,3050],{"className":3049},[219],[43,3051,3053],{"className":3052},[223],[43,3054,3056],{"className":3055},[228],[43,3057,3059],{"className":3058,"style":3040},[232],[43,3060,3061,3064],{"style":674},[43,3062],{"className":3063,"style":241},[240],[43,3065,3067],{"className":3066},[245,246,247,248],[43,3068,2994],{"className":3069},[88,341,248],". Исследователи пытаются отображать пространства признаков больших данных непосредственно в состояния кубитов, чтобы использовать ",[36,3072,3073],{},"квантовую суперпозицию",[36,3075,3076],{},"запутанность"," для ускорения линейно-алгебраических операций (например, алгоритм HHL для решения систем линейных уравнений).",[11,3079,3080],{},[14,3081,3082,3085,3086,3089,3090,3148],{},[36,3083,3084],{},"Честная оговорка."," Речь идёт о ",[17,3087,3088],{},"конечномерных"," пространствах размерности ",[43,3091,3093,3110],{"className":3092},[46],[43,3094,3096],{"className":3095},[50],[52,3097,3098],{"xmlns":54},[56,3099,3100,3108],{},[59,3101,3102],{},[633,3103,3104,3106],{},[194,3105,640],{},[62,3107,2994],{},[67,3109,3030],{"encoding":69},[43,3111,3113],{"className":3112,"ariaHidden":75},[74],[43,3114,3116,3119],{"className":3115},[79],[43,3117],{"className":3118,"style":3040},[83],[43,3120,3122,3125],{"className":3121},[88],[43,3123,640],{"className":3124},[88],[43,3126,3128],{"className":3127},[219],[43,3129,3131],{"className":3130},[223],[43,3132,3134],{"className":3133},[228],[43,3135,3137],{"className":3136,"style":3040},[232],[43,3138,3139,3142],{"style":674},[43,3140],{"className":3141,"style":241},[240],[43,3143,3145],{"className":3144},[245,246,247,248],[43,3146,2994],{"className":3147},[88,341,248],", а не о бесконечномерных. Тем не менее сама логика — «перевести задачу в удобное гильбертово пространство, решить, перевести обратно» — прямо наследует духу теоремы, о которой эта статья. Практические преимущества QML пока продемонстрированы лишь на небольших модельных задачах, и путь к реальному ускорению для промышленных нейросетей ещё долог.",[21,3150],{},[24,3152,3154],{"id":3153},"заключение","Заключение",[14,3156,3157,3158,3161,3162,3165],{},"Теорема об изоморфизме бесконечномерных сепарабельных гильбертовых пространств — это манифест ",[36,3159,3160],{},"универсальности математики",". Она доказывает, что за бесконечным разнообразием форм нашей Вселенной — от пикселя на экране смартфона и человеческого слова до квантового перехода электрона и термодинамики чёрных дыр — скрывается ",[36,3163,3164],{},"одна и та же"," элегантная геометрическая структура.",[14,3167,3168],{},"Меняются координаты и базисы. Правила игры остаются неизменными.",[21,3170],{},[24,3172,3174],{"id":3173},"краткая-хронология-идей","Краткая хронология идей",[131,3176,3177,3187],{},[134,3178,3179],{},[137,3180,3181,3184],{},[140,3182,3183],{},"Год",[140,3185,3186],{},"Событие",[147,3188,3189,3255,3433,3441,3449,3459,3467,3475,3483],{},[137,3190,3191,3194],{},[152,3192,3193],{},"1904–1910",[152,3195,3196,3197],{},"Давид Гильберт изучает бесконечномерные квадратичные формы; рождается понятие ",[43,3198,3200,3217],{"className":3199},[46],[43,3201,3203],{"className":3202},[50],[52,3204,3205],{"xmlns":54},[56,3206,3207,3215],{},[59,3208,3209],{},[633,3210,3211,3213],{},[62,3212,637],{"mathvariant":191},[194,3214,640],{},[67,3216,643],{"encoding":69},[43,3218,3220],{"className":3219,"ariaHidden":75},[74],[43,3221,3223,3226],{"className":3222},[79],[43,3224],{"className":3225,"style":653},[83],[43,3227,3229,3232],{"className":3228},[88],[43,3230,637],{"className":3231},[88],[43,3233,3235],{"className":3234},[219],[43,3236,3238],{"className":3237},[223],[43,3239,3241],{"className":3240},[228],[43,3242,3244],{"className":3243,"style":653},[232],[43,3245,3246,3249],{"style":674},[43,3247],{"className":3248,"style":241},[240],[43,3250,3252],{"className":3251},[245,246,247,248],[43,3253,640],{"className":3254},[88,248],[137,3256,3257,3260],{},[152,3258,3259],{},"1907",[152,3261,3262,3263,3321,3322],{},"Фридьеш Рисс и Эрнст Фишер доказывают полноту ",[43,3264,3266,3283],{"className":3265},[46],[43,3267,3269],{"className":3268},[50],[52,3270,3271],{"xmlns":54},[56,3272,3273,3281],{},[59,3274,3275],{},[633,3276,3277,3279],{},[62,3278,1169],{},[194,3280,640],{},[67,3282,1879],{"encoding":69},[43,3284,3286],{"className":3285,"ariaHidden":75},[74],[43,3287,3289,3292],{"className":3288},[79],[43,3290],{"className":3291,"style":653},[83],[43,3293,3295,3298],{"className":3294},[88],[43,3296,1169],{"className":3297},[88,341],[43,3299,3301],{"className":3300},[219],[43,3302,3304],{"className":3303},[223],[43,3305,3307],{"className":3306},[228],[43,3308,3310],{"className":3309,"style":653},[232],[43,3311,3312,3315],{"style":674},[43,3313],{"className":3314,"style":241},[240],[43,3316,3318],{"className":3317},[245,246,247,248],[43,3319,640],{"className":3320},[88,248]," и изоморфизм ",[43,3323,3325,3351],{"className":3324},[46],[43,3326,3328],{"className":3327},[50],[52,3329,3330],{"xmlns":54},[56,3331,3332,3348],{},[59,3333,3334,3340,3342],{},[633,3335,3336,3338],{},[62,3337,1169],{},[194,3339,640],{},[311,3341,1189],{},[633,3343,3344,3346],{},[62,3345,637],{"mathvariant":191},[194,3347,640],{},[67,3349,3350],{"encoding":69},"L^2 \\cong \\ell^2",[43,3352,3354,3398],{"className":3353,"ariaHidden":75},[74],[43,3355,3357,3360,3389,3392,3395],{"className":3356},[79],[43,3358],{"className":3359,"style":653},[83],[43,3361,3363,3366],{"className":3362},[88],[43,3364,1169],{"className":3365},[88,341],[43,3367,3369],{"className":3368},[219],[43,3370,3372],{"className":3371},[223],[43,3373,3375],{"className":3374},[228],[43,3376,3378],{"className":3377,"style":653},[232],[43,3379,3380,3383],{"style":674},[43,3381],{"className":3382,"style":241},[240],[43,3384,3386],{"className":3385},[245,246,247,248],[43,3387,640],{"className":3388},[88,248],[43,3390],{"className":3391,"style":351},[346],[43,3393,1189],{"className":3394},[355],[43,3396],{"className":3397,"style":351},[346],[43,3399,3401,3404],{"className":3400},[79],[43,3402],{"className":3403,"style":653},[83],[43,3405,3407,3410],{"className":3406},[88],[43,3408,637],{"className":3409},[88],[43,3411,3413],{"className":3412},[219],[43,3414,3416],{"className":3415},[223],[43,3417,3419],{"className":3418},[228],[43,3420,3422],{"className":3421,"style":653},[232],[43,3423,3424,3427],{"style":674},[43,3425],{"className":3426,"style":241},[240],[43,3428,3430],{"className":3429},[245,246,247,248],[43,3431,640],{"className":3432},[88,248],[137,3434,3435,3438],{},[152,3436,3437],{},"1925–1926",[152,3439,3440],{},"Гейзенберг (матричная механика) и Шрёдингер (волновая механика)",[137,3442,3443,3446],{},[152,3444,3445],{},"1929–1932",[152,3447,3448],{},"Фон Нейман и Стоун формулируют теорему о единственности сепарабельного гильбертова пространства",[137,3450,3451,3454],{},[152,3452,3453],{},"1932",[152,3455,3456,3457],{},"Фон Нейман публикует ",[17,3458,1924],{},[137,3460,3461,3464],{},[152,3462,3463],{},"1992",[152,3465,3466],{},"Дискретное косинусное преобразование стандартизировано в JPEG (ISO\u002FIEC 10918)",[137,3468,3469,3472],{},[152,3470,3471],{},"1997",[152,3473,3474],{},"Хуан Малдасена публикует гипотезу AdS\u002FCFT",[137,3476,3477,3480],{},[152,3478,3479],{},"2013",[152,3481,3482],{},"Миколов и соавторы демонстрируют векторную алгебру слов (word2vec)",[137,3484,3485,3488],{},[152,3486,3487],{},"2021",[152,3489,3490],{},"OpenAI выпускает CLIP — мультимодальное эмбеддинг-пространство",[21,3492],{},[14,3494,3495],{},[17,3496,3497],{},"Если после прочтения вы посмотрите на JPEG-снимок заката, на уравнение Шрёдингера и на ответ чат-бота как на три проекции одного и того же бесконечномерного пространства — значит, теорема сработала ещё раз.",{"title":1743,"searchDepth":3499,"depth":3499,"links":3500},3,[3501,3506,3509,3514,3520,3521],{"id":26,"depth":3502,"text":27,"children":3503},2,[3504,3505],{"id":125,"depth":3499,"text":126},{"id":612,"depth":3499,"text":613},{"id":1138,"depth":3502,"text":1139,"children":3507},[3508],{"id":1322,"depth":3499,"text":1323},{"id":1728,"depth":3502,"text":1729,"children":3510},[3511,3512,3513],{"id":1749,"depth":3499,"text":1750},{"id":2003,"depth":3499,"text":2004},{"id":2051,"depth":3499,"text":2052},{"id":2075,"depth":3502,"text":2076,"children":3515},[3516,3517,3518,3519],{"id":2085,"depth":3499,"text":2086},{"id":2614,"depth":3499,"text":2615},{"id":2934,"depth":3499,"text":2935},{"id":2971,"depth":3499,"text":2972},{"id":3153,"depth":3502,"text":3154},{"id":3173,"depth":3502,"text":3174},"Science","\u002Fcovers\u002Fthe-unity-of-infinities.webp","2026-10-19",false,"md",{},true,"\u002Fblog\u002Fthe-unity-of-infinities",{"title":6,"description":19},"blog\u002Fthe-unity-of-infinities",[52,3533,3534,3535],"physics","llm","ai",null,"5NCbq2wBl2QPzE1LRnl7rLq1BU113fRiIcJc3T6FCEA",{"id":3539,"title":3540,"body":3541,"category":7165,"cover":7166,"date":7167,"description":7168,"draft":3525,"extension":3526,"meta":7169,"navigation":3528,"path":7170,"seo":7171,"stem":7172,"tags":7173,"updated":3536,"__hash__":7175},"blog\u002Fblog\u002Fllm-itself.md","LLM: Как это работает, где взять и как приручить",{"type":8,"value":3542,"toc":7109},[3543,3547,3550,3553,3556,3562,3565,3567,3571,3574,3592,3596,3599,3605,3611,3621,3627,3631,3634,3647,3653,3674,3678,3681,3687,3708,3722,3728,3734,3747,3751,3756,3762,3767,3773,3778,3784,3789,3795,3799,3805,3810,3828,3830,3834,3837,3840,3846,3852,3866,3872,3876,3879,3885,3893,3896,3902,3910,3916,3924,3930,3941,3947,3955,3961,3965,3968,4000,4004,4007,4033,4036,4040,4045,4056,4061,4069,4074,4085,4090,4101,4105,4108,4114,4120,4126,4130,4158,4162,4165,4170,4173,4193,4199,4205,4209,4212,4232,4238,4243,4247,4250,4264,4267,4271,4274,4300,4304,4309,4341,4367,4372,4414,4419,4453,4455,4459,4462,4465,4471,4477,4480,4483,4485,4489,4495,4499,4503,4509,4512,4516,4519,4753,4756,4760,4763,4974,4981,4986,5156,5161,5170,5175,5179,5199,5204,5211,5240,5247,5252,5272,5277,5280,5285,5291,5296,5302,5305,5466,5471,5706,5711,5714,5876,5879,5979,5981,6075,6080,6083,6165,6170,6175,6234,6239,6250,6255,6266,6270,6273,6299,6301,6305,6312,6315,6318,6332,6345,6348,6359,6363,6367,6370,6375,6381,6384,6389,6395,6401,6405,6408,6413,6419,6424,6428,6565,6569,6572,6576,6582,6585,6590,6596,6599,6605,6610,6614,6617,6622,6628,6633,6637,6640,6645,6651,6654,6658,6662,6667,6673,6678,6684,6690,6694,6698,6704,6708,6714,6719,6723,6727,6733,6737,6743,6748,6752,6756,6762,6766,6772,6777,6781,6785,6791,6795,6801,6806,6810,6814,6820,6823,6827,6833,6838,6842,6845,6913,6917,6923,6928,6934,6941,6946,6952,6955,6960,6966,6969,6974,6980,6983,6987,6990,7022,7025,7027,7031,7034,7040,7043,7046,7064,7070,7072,7076,7079,7082,7102,7105],[24,3544,3546],{"id":3545},"_1-введение-развенчание-мифов","1. Введение. Развенчание мифов",[14,3548,3549],{},"Большие языковые модели — LLM.\nНачнем с того, что развеем главный миф: LLM — это не волшебный шар, который читает ваши мысли и знает все ответы.",[14,3551,3552],{},"Когда мы впервые сталкиваемся с ChatGPT или аналогичными системами, возникает ощущение магии.\nМы пишем вопрос — получаем ответ. Кажется, что перед нами разумная сущность, которая всё понимает.\nНо на самом деле LLM — это очень сложный, но предсказуемый статистический калькулятор слов.",[14,3554,3555],{},"Что это значит на практике? Это значит, что модель не «понимает» смысл ваших слов в человеческом смысле.\nОна не знает ваших внутренних бизнес-процессов, если вы ей о них не рассказали. Она не может прочитать ваши мысли.",[14,3557,3558,3561],{},[36,3559,3560],{},"LLM — это движок предсказания следующего токена.","\nОна обучена на огромном массиве текстов и научилась угадывать, какое слово (или часть слова) должно идти дальше с наибольшей вероятностью.\nОна не ищет истину. Она ищет наиболее вероятное продолжение текста на основе своих весов.",[14,3563,3564],{},"Наша задача как инженеров, менеджеров и всех, кто работает с LLM — научиться управлять этой вероятностью.\nРазберемся, как это делать.",[21,3566],{},[24,3568,3570],{"id":3569},"_2-анатомия-мышления-токены-и-температура","2. Анатомия «мышления»: Токены и Температура",[14,3572,3573],{},"Начнем с базовых понятий. Когда вы пишете текст модели, она видит его не как слова, а как токены.",[14,3575,3576,3577,3580,3581,3584,3585,1719,3588,3591],{},"Токен — это базовая единица обработки. Это может быть целое слово, часть слова или даже отдельный символ.\nНапример, фраза ",[1745,3578,3579],{},"«Clean Architecture»"," разбивается на три токена: ",[1745,3582,3583],{},"«Clean»",", ",[1745,3586,3587],{},"« Arch»",[1745,3589,3590],{},"«itecture»",".\nОбратите внимание: токенов больше, чем слов, потому что модель работает с частями слов.",[123,3593,3595],{"id":3594},"как-тратятся-токены","Как тратятся токены",[14,3597,3598],{},"Когда вы отправляете запрос к модели, токены тратятся в двух направлениях:",[14,3600,3601,3604],{},[36,3602,3603],{},"Input токены"," — это всё, что вы отправляете модели: ваш промпт, системные инструкции, история диалога, контекст из RAG.\nЭто то, что модель должна «прочитать» и понять.",[14,3606,3607,3610],{},[36,3608,3609],{},"Output токены"," — это то, что модель генерирует в ответ.\nИменно за эти токены вы платите больше всего, потому что генерация требует больше вычислительных ресурсов.",[14,3612,3613,3616,3617,3620],{},[36,3614,3615],{},"Важно для менеджеров:"," Стоимость API обычно считается так: ",[1745,3618,3619],{},"$X за 1M input токенов + $Y за 1M output токенов",".\nПри этом output токены часто стоят в 2-4 раза дороже. Поэтому длинные ответы модели — это дорого.",[14,3622,3623,3626],{},[36,3624,3625],{},"Важно для разработчиков:"," Лимит контекстного окна (например, 8K, 32K, 128K токенов) включает и input, и output.\nЕсли у вас история диалога на 7000 токенов, а лимит 8000, то на ответ остается всего 1000 токенов.\nЭто примерно 750 слов — модель может оборвать ответ на полуслове.",[123,3628,3630],{"id":3629},"лимит-токенов-max_tokens","Лимит токенов: max_tokens",[14,3632,3633],{},"Параметр max_tokens ограничивает длину ответа модели. Что произойдет, если модель достигнет этого лимита?",[14,3635,3636,3639,3640,3643,3644,1052],{},[36,3637,3638],{},"Сценарий 1: Ответ оборвался."," Модель генерировала длинный код, но достигла лимита.\nВы получите обрезанный, нерабочий код. В ответе API будет флаг ",[1745,3641,3642],{},"finish_reason: \"length\""," вместо ",[1745,3645,3646],{},"\"stop\"",[14,3648,3649,3652],{},[36,3650,3651],{},"Сценарий 2: Модель не успела закончить мысль.","\nНапример, вы попросили объяснить концепцию, но модель остановилась на середине предложения.",[14,3654,3655,3658,3659,3662,3663,3666,3667,3670,3671,3673],{},[36,3656,3657],{},"Как избежать:"," Всегда проверяйте ",[1745,3660,3661],{},"finish_reason"," в ответе API.\nЕсли это ",[1745,3664,3665],{},"\"length\"",", значит ответ обрезан, и нужно либо увеличить ",[1745,3668,3669],{},"max_tokens",", либо попросить модель продолжить.\nДля генерации кода ставьте ",[1745,3672,3669],{}," с запасом — 2000-4000 токенов, чтобы модель могла написать полный класс без обрезания.",[123,3675,3677],{"id":3676},"температура-и-другие-параметры-контроля","Температура и другие параметры контроля",[14,3679,3680],{},"Температура — это не единственный параметр, который управляет «креативностью» модели. Давайте разберем весь набор.",[14,3682,3683,3686],{},[36,3684,3685],{},"Temperature (0.0 — 2.0)"," — основной параметр. На температуре 0.0 модель максимально строгая и детерминированная.\nЕсли вы попросите её сгенерировать PHP-код, SQL-запрос или извлечь данные в JSON — ставьте температуру 0.0 или 0.1.\nВы получите предсказуемый, стабильный результат. На температуре 0.7–0.9 модель становится креативной, хаотичной.\nЭто идеально для брейншторма идей, написания маркетингового текста.\nНо для кода или точных данных такая температура опасна.",[14,3688,3689,3692,3693,3696,3697,3700,3701,3704,3705,1052],{},[36,3690,3691],{},"Top_p (nucleus sampling, 0.0 — 1.0)"," — альтернатива температуре.\nМодель рассматривает только токены, которые в сумме дают вероятность p.\nНапример, ",[1745,3694,3695],{},"top_p=0.9"," означает, что модель выбирает из токенов, которые покрывают 90% вероятности.\nЧем ниже значение, тем более предсказуемый ответ. Обычно используется либо ",[1745,3698,3699],{},"temperature",", либо ",[1745,3702,3703],{},"top_p",", но не оба сразу.\nДля кода ставьте ",[1745,3706,3707],{},"top_p=0.1-0.3",[14,3709,3710,3713,3714,3717,3718,3721],{},[36,3711,3712],{},"Top_k (1 — бесконечность)"," — модель рассматривает только k наиболее вероятных следующих токенов.\n",[1745,3715,3716],{},"top_k=1"," означает, что модель всегда выбирает самый вероятный токен (жадный поиск, greedy decoding).\nЭто максимально детерминированный режим. Для PHP-кода и JSON ",[1745,3719,3720],{},"top_k=1-10"," дает очень стабильные результаты.",[14,3723,3724,3727],{},[36,3725,3726],{},"Frequency penalty (-2.0 — 2.0)"," — штрафует токены, которые уже часто встречались в ответе.\nЧем выше значение, тем меньше модель повторяется. Полезно для генерации длинных текстов, чтобы избежать зацикливания.\nДля кода ставьте 0.0 — повторения в коде (например, использование одних и тех же переменных) — это нормально.",[14,3729,3730,3733],{},[36,3731,3732],{},"Presence penalty (-2.0 — 2.0)"," — штрафует токены, которые уже появлялись в ответе, независимо от частоты.\nЭто заставляет модель переходить к новым темам. Для креативного письма ставьте 0.5-1.0. Для кода — 0.0.",[14,3735,3736,3739,3740,90,3743,3746],{},[36,3737,3738],{},"Stop sequences"," — список строк, при появлении которых модель останавливается.\nНапример, если вы генерируете JSON и не хотите, чтобы модель добавляла пояснения после JSON, добавьте ",[1745,3741,3742],{},"stop=[\"\\n\\n\"]",[1745,3744,3745],{},"stop=[\"```\"]",".\nЭто гарантирует, что ответ закончится ровно там, где вам нужно.",[123,3748,3750],{"id":3749},"практические-рекомендации-для-разных-задач","Практические рекомендации для разных задач",[14,3752,3753],{},[36,3754,3755],{},"Для генерации PHP-кода:",[1737,3757,3760],{"className":3758,"code":3759,"language":1742,"meta":1743},[1740],"temperature: 0.0-0.1\ntop_p: 0.1-0.3\ntop_k: 1-10\nfrequency_penalty: 0.0\npresence_penalty: 0.0\nmax_tokens: 2000-4000\n",[1745,3761,3759],{"__ignoreMap":1743},[14,3763,3764],{},[36,3765,3766],{},"Для извлечения данных в JSON:",[1737,3768,3771],{"className":3769,"code":3770,"language":1742,"meta":1743},[1740],"temperature: 0.0\ntop_p: 0.1\ntop_k: 1\nmax_tokens: 500-1000 (зависит от сложности JSON)\n",[1745,3772,3770],{"__ignoreMap":1743},[14,3774,3775],{},[36,3776,3777],{},"Для брейншторма идей:",[1737,3779,3782],{"className":3780,"code":3781,"language":1742,"meta":1743},[1740],"temperature: 0.7-0.9\ntop_p: 0.9\nfrequency_penalty: 0.5\npresence_penalty: 0.5\nmax_tokens: 1000-2000\n",[1745,3783,3781],{"__ignoreMap":1743},[14,3785,3786],{},[36,3787,3788],{},"Для суммаризации текста:",[1737,3790,3793],{"className":3791,"code":3792,"language":1742,"meta":1743},[1740],"temperature: 0.3-0.5\ntop_p: 0.5\nmax_tokens: 200-500 (зависит от желаемой длины саммари)\n",[1745,3794,3792],{"__ignoreMap":1743},[123,3796,3798],{"id":3797},"галлюцинации","Галлюцинации",[14,3800,3801,3802,3804],{},"И последнее важное: ",[36,3803,3797],{},". Это не баг, это фича стохастической модели.\nЕсли модель не знает ответа на ваш вопрос, она всё равно сгенерирует наиболее вероятное продолжение.\nИ это продолжение может быть полностью выдуманным.\nМодель не скажет «я не знаю» — она уверенно сгенерирует текст, который звучит правдоподобно, но может не соответствовать реальности.",[14,3806,3807],{},[36,3808,3809],{},"Как бороться:",[1328,3811,3812,3819,3822,3825],{},[1331,3813,3814,3815,3818],{},"Используйте ",[1745,3816,3817],{},"temperature=0.0"," для фактических вопросов",[1331,3820,3821],{},"Применяйте RAG — давайте модели реальные данные в контексте",[1331,3823,3824],{},"В промпте явно указывайте: «Если не знаешь ответа, скажи \"Я не знаю\"»",[1331,3826,3827],{},"Всегда проверяйте факты в критичных задачах",[21,3829],{},[24,3831,3833],{"id":3832},"_3-анатомия-модели-где-брать-и-что-значат-цифры","3. Анатомия модели: Где брать и что значат цифры",[14,3835,3836],{},"Теперь разберемся, что такое модель и как выбирать подходящую.",[14,3838,3839],{},"У модели есть три ключевых параметра, которые нужно понимать.",[14,3841,3842,3845],{},[36,3843,3844],{},"Первый — размер в параметрах."," Вы видите обозначения вроде 7B, 8B, 70B.\nB — это миллиард параметров. Условно говоря, это «размер мозга» модели.\nМодели на 7-8 миллиардов параметров (например, Llama 3 8B или Mistral 7B) достаточно для большинства задач: суммаризация текста, простые чаты, написание кода, извлечение данных.\nМодели на 70B и больше нужны для сложной логики, глубоких рассуждений, работы с большими контекстами.\nНо они требуют гораздо больше ресурсов.",[14,3847,3848,3851],{},[36,3849,3850],{},"Второй — квантование."," Это сжатие модели. Вы видите обозначения вроде Q4_K_M, Q8, FP16.\nКвантование уменьшает размер модели и потребление оперативной памяти с минимальной потерей качества.\nНапример, модель 8B в квантовании Q4 занимает около 5 ГБ оперативной памяти и спокойно запускается на хорошем ноутбуке.\nВ полном качестве (FP16) она заняла бы 16 ГБ.\nДля большинства задач разница в качестве между Q4 и FP16 минимальна, а разница в ресурсах — колоссальная.",[14,3853,3854,3857,3858,3861,3862,3865],{},[36,3855,3856],{},"Третий — где брать модели."," Мы не тренируем модели с нуля. Мы берем готовые open-source решения.\nОсновные источники: ",[36,3859,3860],{},"Hugging Face"," — это как GitHub для ML-моделей, там лежат тысячи моделей с документацией.\nИ официальный реестр ",[36,3863,3864],{},"Ollama"," — там модели уже оптимизированы для локального запуска.",[14,3867,3868,3869,1052],{},"Но есть еще один критически важный аспект — ",[36,3870,3871],{},"семейство моделей",[123,3873,3875],{"id":3874},"семейства-моделей-кто-есть-кто","Семейства моделей: кто есть кто",[14,3877,3878],{},"На рынке open-source моделей доминирует несколько ключевых семейств. Каждый имеет свою специализацию.",[14,3880,3881,3884],{},[36,3882,3883],{},"Meta Llama (3.3, 4)"," — самое популярное семейство. Llama 4, представленная в 2025 году, перевела флагманские модели на MoE-архитектуру.",[2016,3886,3887,3890],{},[1331,3888,3889],{},"Llama 4 Scout: 109B параметров (17B активных), нативная мультимодальность (изображения, видео), контекстное окно до 10M токенов.",[1331,3891,3892],{},"Llama 4 Maverick: 402B параметров (17B активных), 1M контекст.",[14,3894,3895],{},"Обе отлично справляются с чатами, суммаризацией, сложной логикой и генерацией кода.\nLlama 3.3 70B остаётся мощной плотной моделью для тех, кому нужна стабильность и меньший объём VRAM.\nДля локального запуска в условиях ограниченных ресурсов всё ещё актуальны Llama 3.1 8B и Llama 3.2 (мультимодальные 11B \u002F 90B).",[14,3897,3898,3901],{},[36,3899,3900],{},"Mistral"," — французское семейство, славящееся эффективностью.",[2016,3903,3904,3907],{},[1331,3905,3906],{},"Mistral Large 3 (123B) — флагман 2025 года, 256K контекст, мультимодальность, лучший выбор для сложных задач.",[1331,3908,3909],{},"Mistral Small 3 (24B) — «рабочая лошадка» для локального запуска: при квантовании помещается в 16 ГБ RAM и превосходит многих конкурентов в кодировании и рассуждениях.",[14,3911,3912,3915],{},[36,3913,3914],{},"Qwen 3"," — семейство от Alibaba. Вышло весной 2025 года. Поддержка 119 языков, включая превосходную работу с русским и китайским.",[2016,3917,3918,3921],{},[1331,3919,3920],{},"Qwen 3 Coder (специализированные версии 8B, 32B) — лидеры в бенчмарках кода, обходят GPT-4o в задачах генерации и отладки.",[1331,3922,3923],{},"Qwen 3 8B \u002F 32B — универсальные мультиязычные модели с контекстом до 1M токенов.",[14,3925,3926,3929],{},[36,3927,3928],{},"DeepSeek"," — китайское семейство, флагман эффективности и рассуждений.",[2016,3931,3932,3935,3938],{},[1331,3933,3934],{},"DeepSeek V3.1 (март 2025): 671B MoE (37B активных), 128K контекст, выдающееся качество в коде и математике.",[1331,3936,3937],{},"DeepSeek R1 — модель с продвинутой цепочкой рассуждений, решает задачи, требующие пошаговой логики.",[1331,3939,3940],{},"DeepSeek Coder V3 — узкая специализация на программировании, стабильно в топе бенчмарков.",[14,3942,3943,3946],{},[36,3944,3945],{},"Microsoft Phi-4"," — маленькие, но мощные модели (конец 2024 – 2025).",[2016,3948,3949,3952],{},[1331,3950,3951],{},"Phi-4-mini (3.3B) — удивительно сильна в рассуждениях, математике и следовании инструкциям. Идеальна для edge-устройств и мобильных приложений.",[1331,3953,3954],{},"Phi-4 (14B) — более крупная версия, контекст 128K, хороша для аналитики и длинных документов.",[14,3956,3957,3960],{},[36,3958,3959],{},"Google Gemma 3"," — открытое семейство на базе технологий Gemini (2025). Модели от 1B до 27B, все с контекстом 128K и мультимодальностью. Gemma 3 27B сравнима с Llama 3.3 70B по качеству, но значительно легче.",[123,3962,3964],{"id":3963},"как-выбирать-модель-бенчмарки-и-специализация","Как выбирать модель: бенчмарки и специализация",[14,3966,3967],{},"Ни одна модель не решает все задачи одинаково хорошо. Ориентируйтесь на ключевые тесты.",[2016,3969,3970,3976,3982,3988,3994],{},[1331,3971,3972,3975],{},[36,3973,3974],{},"MMLU (Massive Multitask Language Understanding)"," — общие знания и рассуждения. DeepSeek V3.1 и Llama 4 Maverick показывают ≈88‑89%, Qwen 3 235B — около 87%. Хороший уровень для прикладной системы — от 80%.",[1331,3977,3978,3981],{},[36,3979,3980],{},"HumanEval \u002F MBPP"," — генерация и понимание кода (Python, JavaScript, PHP и др.). Здесь лидируют Qwen 3 Coder 32B и DeepSeek Coder V3, набирая выше 90% pass@1.",[1331,3983,3984,3987],{},[36,3985,3986],{},"MT-Bench \u002F AlpacaEval"," — качество диалога и следования инструкциям. Важно для чат-ботов и ассистентов. Лидеры — Llama 4 Maverick, Mistral Large 3 и Qwen 3 235B.",[1331,3989,3990,3993],{},[36,3991,3992],{},"GSM8K \u002F MATH"," — математические и логические рассуждения. DeepSeek R1 и Qwen 3 Coder решают почти 100% задач GSM8K и сложные олимпиадные примеры.",[1331,3995,3996,3999],{},[36,3997,3998],{},"Мультиязычность"," — если работаете с русским, обязательно проверяйте. Llama 4, Qwen 3, Mistral Large 3 и DeepSeek V3 прекрасно понимают кириллицу, генерируют текст и код с комментариями на русском. Маленькие модели (Phi-4-mini, Gemma 3 1B) могут «спотыкаться» на сложных конструкциях.",[123,4001,4003],{"id":4002},"контекстное-окно-сколько-текста-модель-может-увидеть","Контекстное окно: сколько текста модель может «увидеть»",[14,4005,4006],{},"Лимит токенов (input + output) критичен для RAG, обработки длинных документов и многошаговых диалогов.",[2016,4008,4009,4015,4021,4027],{},[1331,4010,4011,4014],{},[36,4012,4013],{},"Llama 4 Scout"," — до 10 000 000 токенов (беспрецедентный объём, ~7 млн слов). Позволяет загружать целые книги и большие кодовые базы.",[1331,4016,4017,4020],{},[36,4018,4019],{},"Llama 4 Maverick \u002F Qwen 3 (крупные)"," — 1 000 000 токенов.",[1331,4022,4023,4026],{},[36,4024,4025],{},"Mistral Large 3"," — 256K токенов.",[1331,4028,4029,4032],{},[36,4030,4031],{},"DeepSeek V3.1 \u002F R1, Phi-4, Gemma 3"," — 128K токенов.",[14,4034,4035],{},"Практический совет: если ваш RAG-пайплайн подгружает десятки чанков из векторной БД, выбирайте модель с окном от 128K, чтобы избежать лишней суммаризации.",[123,4037,4039],{"id":4038},"практические-рекомендации-по-выбору","Практические рекомендации по выбору",[14,4041,4042],{},[36,4043,4044],{},"Для локального чат-бота на ноутбуке (8–16 ГБ RAM):",[2016,4046,4047,4050,4053],{},[1331,4048,4049],{},"Qwen 3 8B Q4 (~5 ГБ) — универсальный мультиязычный выбор.",[1331,4051,4052],{},"Mistral Small 3 24B Q4_K_M (~14 ГБ) — если есть 16 ГБ и нужен упор на код и логику.",[1331,4054,4055],{},"Phi-4-mini Q4 (~2 ГБ) — для очень ограниченных ресурсов.",[14,4057,4058],{},[36,4059,4060],{},"Для корпоративного RAG с большими документами:",[2016,4062,4063,4066],{},[1331,4064,4065],{},"Llama 4 Scout Q4 на GPU с ≥24 ГБ VRAM (RTX 4090\u002F5090 или A6000) — контекст 10M, экономично.",[1331,4067,4068],{},"Облачный API DeepSeek V3.1 или Mistral Large 3 — если нужна максимальная точность без собственного парка GPU.",[14,4070,4071],{},[36,4072,4073],{},"Для генерации кода (PHP, Python, JavaScript):",[2016,4075,4076,4079,4082],{},[1331,4077,4078],{},"Qwen 3 Coder 32B (локально или в облаке).",[1331,4080,4081],{},"DeepSeek Coder V3.",[1331,4083,4084],{},"Mistral Large 3 (облачный API) — мощный универсал с сильным кодом.",[14,4086,4087],{},[36,4088,4089],{},"Для edge-устройств и мобильных приложений:",[2016,4091,4092,4095,4098],{},[1331,4093,4094],{},"Phi-4-mini (3.3B).",[1331,4096,4097],{},"Gemma 3 1B \u002F 4B.",[1331,4099,4100],{},"Qwen 3 3B.",[123,4102,4104],{"id":4103},"мультиязычность-и-русский-язык","Мультиязычность и русский язык",[14,4106,4107],{},"При работе с русским языком опирайтесь на модели, прошедшие обучение на многоязычных корпусах.",[14,4109,4110,4113],{},[36,4111,4112],{},"Отличная поддержка:"," Llama 4, Qwen 3, Mistral Large 3 \u002F Small 3, DeepSeek V3.",[14,4115,4116,4119],{},[36,4117,4118],{},"Хорошая поддержка:"," Gemma 3 27B, Phi-4 (базовая).",[14,4121,4122,4125],{},[36,4123,4124],{},"Как проверить:"," дайте модели инструкцию на русском с требованием написать код с комментариями на русском и оцените качество. Модели вроде Qwen 3 или Llama 4 справятся без нареканий.",[123,4127,4129],{"id":4128},"где-брать-модели-детализация-источников","Где брать модели: детализация источников",[2016,4131,4132,4137,4146,4152],{},[1331,4133,4134,4136],{},[36,4135,3860],{}," — главный репозиторий. Все модели доступны в различных форматах: GGUF для Ollama, safetensors для vLLM, PyTorch для дообучения. Множество community-сборок под медицинские, юридические, финансовые задачи.",[1331,4138,4139,4141,4142,4145],{},[36,4140,3864],{}," — по-прежнему самый простой способ локального запуска. Одна команда ",[1745,4143,4144],{},"ollama run llama4:scout"," — и модель готова к работе. Поддерживает все популярные кванты.",[1331,4147,4148,4151],{},[36,4149,4150],{},"LM Studio"," — графический интерфейс с поиском по Hugging Face, авто-квантованием и чатом. Удобен для быстрого прототипирования.",[1331,4153,4154,4157],{},[36,4155,4156],{},"vLLM"," — движок для продакшен-инференса. PagedAttention, continuous batching, поддержка квантов FP8\u002FFP4. Требует настройки, но даёт максимальный throughput.",[123,4159,4161],{"id":4160},"проприетарные-облачные-модели","Проприетарные облачные модели",[14,4163,4164],{},"Эти модели нельзя запустить локально, они доступны только через API. Но именно они задают планку качества для индустрии.",[4166,4167,4169],"h4",{"id":4168},"anthropic-claude-opus-4-sonnet-4-haiku-4","Anthropic Claude (Opus 4, Sonnet 4, Haiku 4)",[14,4171,4172],{},"Флагманское семейство 2025–2026 годов. Claude считается эталоном для сложных инженерных и аналитических задач.",[2016,4174,4175,4181,4187],{},[1331,4176,4177,4180],{},[36,4178,4179],{},"Opus 4"," — самая мощная модель для глубоких рассуждений, анализа многотысячестраничных документов и комплексной разработки. Контекст до 500K токенов, отлично держит детали из начала.",[1331,4182,4183,4186],{},[36,4184,4185],{},"Sonnet 4"," — оптимальный баланс скорости и качества, лучший выбор для генерации кода, рефакторинга и RAG. Контекст 200K, отличное следование инструкциям.",[1331,4188,4189,4192],{},[36,4190,4191],{},"Haiku 4"," — быстрая и недорогая, подходит для простых чат-ботов, классификации и рутинной обработки.",[14,4194,4195,4198],{},[36,4196,4197],{},"Сильные стороны:"," минимальный уровень галлюцинаций, феноменальная точность в «needle in a haystack», строгие корпоративные политики безопасности (включая опцию нулевого удержания данных).",[14,4200,4201,4204],{},[36,4202,4203],{},"Ограничения:"," только облако, платный API, невозможность локального дообучения.",[4166,4206,4208],{"id":4207},"openai-gpt-gpt-4o-gpt-41-gpt-5-mini","OpenAI GPT (GPT-4o, GPT-4.1, GPT-5 mini)",[14,4210,4211],{},"Базовый ориентир для большинства разработчиков.",[2016,4213,4214,4220,4226],{},[1331,4215,4216,4219],{},[36,4217,4218],{},"GPT-4o"," (2024) — мультимодальный универсал, понимает текст, изображения и аудио.",[1331,4221,4222,4225],{},[36,4223,4224],{},"GPT-4.1"," (2025) — улучшенная логика и следование инструкциям, особенно в коде.",[1331,4227,4228,4231],{},[36,4229,4230],{},"GPT-5 mini"," (2026) — сверхбыстрая и крайне дешёвая модель, унаследовавшая качество старших версий для простых задач вроде суммаризации, извлечения JSON и диалогов.",[14,4233,4234,4237],{},[36,4235,4236],{},"Особенность для разработчиков:"," у OpenAI одни из самых надёжных Structured Outputs и JSON Mode, что критично при интеграции с PHP\u002FPython-бэкендами.",[14,4239,4240,4242],{},[36,4241,4203],{}," закрытый исходный код, данные обрабатываются на серверах OpenAI, стоимость старших моделей всё ещё высока.",[4166,4244,4246],{"id":4245},"google-gemini-25-pro-25-flash","Google Gemini (2.5 Pro, 2.5 Flash)",[14,4248,4249],{},"Проприетарные модели с самым большим контекстным окном на рынке — до 2 миллионов токенов у Gemini 2.5 Pro.",[2016,4251,4252,4258],{},[1331,4253,4254,4257],{},[36,4255,4256],{},"Gemini 2.5 Pro"," — флагман, отлично проявляет себя в аналитике, мультимодальных задачах и поиске по гигантским массивам документов.",[1331,4259,4260,4263],{},[36,4261,4262],{},"Gemini 2.5 Flash"," — быстрая и экономичная версия для повседневных задач, контекст до 1M токенов.",[14,4265,4266],{},"Обе модели глубоко интегрированы с экосистемой Google Cloud, что удобно, если инфраструктура уже там. Качество мультиязычной работы (включая русский) на высоком уровне.",[4166,4268,4270],{"id":4269},"как-это-меняет-выбор-обновленная-матрица","Как это меняет выбор (Обновленная матрица)",[14,4272,4273],{},"Теперь, когда мы видим полную картину, выбор модели становится осознанным компромиссом:",[2016,4275,4276,4282,4288,4294],{},[1331,4277,4278,4281],{},[36,4279,4280],{},"Нужна максимальная приватность и работа без интернета?"," → Только open-source: Llama 3.1 8B\u002F70B, Qwen 2.5, Mistral (запуск через Ollama\u002FvLLM).",[1331,4283,4284,4287],{},[36,4285,4286],{},"Нужно анализировать 100-страничный технический документ или писать сложный рефакторинг, и данные можно отправлять в облако?"," → Claude 3.5 Sonnet (лучшее качество рассуждений и работы с большим контекстом).",[1331,4289,4290,4293],{},[36,4291,4292],{},"Нужно надежно извлекать данные в JSON для PHP-приложения с минимальными затратами?"," → GPT-4o mini (дешево, быстро, отличный Structured Output) или локальный Qwen 2.5 Coder 7B (если данные чувствительные).",[1331,4295,4296,4299],{},[36,4297,4298],{},"Нужно встроить модель в мобильное приложение или IoT-устройство?"," → Phi 3.5 Mini или Gemma 2 2B (работают прямо на устройстве).",[123,4301,4303],{"id":4302},"экономика-сколько-это-стоит","Экономика: сколько это стоит",[14,4305,4306],{},[36,4307,4308],{},"Облачные API (цены ориентировочные на середину 2026):",[2016,4310,4311,4322,4328,4334],{},[1331,4312,4313,4314,4317,4318,4321],{},"OpenAI GPT-4o: ",[1745,4315,4316],{},"~$1.0"," за 1M входящих токенов, ",[1745,4319,4320],{},"~$4.0"," за 1M исходящих.",[1331,4323,4324,4325,1052],{},"Anthropic Claude 4 Sonnet: ",[1745,4326,4327],{},"~$3\u002F$15",[1331,4329,4330,4331,1052],{},"Mistral Large 3: ",[1745,4332,4333],{},"~$2\u002F$6",[1331,4335,4336,4337,4340],{},"DeepSeek V3.1: ",[1745,4338,4339],{},"~$0.27\u002F$1.1"," — одно из лучших соотношений цена\u002Fкачество.",[14,4342,4343,4344,4347,4348,4351,4352,4355,4356,4359,4360,4363,4364,1052],{},"Для приложения с ",[36,4345,4346],{},"1 000"," запросов в день (",[36,4349,4350],{},"500"," входных + ",[36,4353,4354],{},"200"," выходных токенов) ежемесячные расходы на GPT-4o составят около ",[1745,4357,4358],{},"$60",", на ",[36,4361,4362],{},"DeepSeek V3.1"," — менее ",[1745,4365,4366],{},"$10",[14,4368,4369],{},[36,4370,4371],{},"Локальный запуск:",[14,4373,4374,4375,4378,4379,4382,4383,4386,4387,4390,4391,4394,4395,4398,4399,4402,4403,4405,4406,4409,4410,4413],{},"Стоимость ",[36,4376,4377],{},"GPU RTX 5090 (32 ГБ)"," — около ",[1745,4380,4381],{},"$2 000",". Модель ",[36,4384,4385],{},"Llama 4 Scout Q4"," занимает ",[1745,4388,4389],{},"~20 ГБ VRAM"," и потребляет порядка ",[1745,4392,4393],{},"250 Вт",". При круглосуточной работе и цене ",[1745,4396,4397],{},"$0.1 за кВт·ч"," расходы на электричество — около ",[1745,4400,4401],{},"$18\u002Fмес",".\nОкупаемость железа по сравнению с ",[36,4404,4218],{}," наступает примерно через ",[1745,4407,4408],{},"9–12 месяцев"," при нагрузке ",[1745,4411,4412],{},"от 5 000 запросов в день",". Для стартапов с высоким трафиком локальный инференс становится выгодным очень быстро.",[14,4415,4416],{},[36,4417,4418],{},"Вывод для менеджеров",[14,4420,4421,4422,4425,4426,90,4428,1941,4431,4434,4435,90,4438,4440,4441,1719,4444,4447,4448,1719,4450,1052],{},"Если у вас регулярный поток ",[1745,4423,4424],{},">10 000 запросов в день"," и доступен GPU — вложения в локальный запуск ",[36,4427,4013],{},[36,4429,4430],{},"Qwen 3 32B",[1745,4432,4433],{},"окупаются за год"," и далее приносят чистую экономию.\nПри низком или нестабильном трафике облачные ",[36,4436,4437],{},"API DeepSeek V3.1",[36,4439,4025],{}," дают максимальную гибкость и минимальный порог входа.\nДля кодовых задач лучшими помощниками остаются ",[36,4442,4443],{},"Qwen 3 Coder",[36,4445,4446],{},"DeepSeek Coder",", а для русского языка уверенно лидируют ",[36,4449,3914],{},[36,4451,4452],{},"Llama 4",[21,4454],{},[24,4456,4458],{"id":4457},"_4-где-и-как-запускать-облако-vs-локально","4. Где и как запускать: Облако vs Локально",[14,4460,4461],{},"Теперь вопрос инфраструктуры. Где запускать модель?",[14,4463,4464],{},"Есть два основных пути: облако и локально.",[14,4466,4467,4470],{},[36,4468,4469],{},"Облачные API"," — это OpenAI, Anthropic, YandexGPT и другие.\nПлюсы: не нужно своё железо, доступны самые мощные модели (GPT-4, Claude 3), не нужно разбираться в инфраструктуре.\nМинусы: ваши данные уходят наружу (для многих компаний это критично), оплата за каждый токен, зависимость от интернета и доступности сервиса.",[14,4472,4473,4476],{},[36,4474,4475],{},"Локальный запуск"," — это LM Studio, Ollama, vLLM.\nПлюсы: полная приватность данных (всё остается у вас), бесплатно после покупки железа, работа без интернета.\nМинусы: нужна оперативная память (от 8-16 ГБ для небольших моделей), модели чуть менее мощные, чем топовые облачные.",[14,4478,4479],{},"Для прототипирования, личных задач и тестирования идеально подходит LM Studio — это красивый графический интерфейс, скачал модель, нажал кнопку Run, и всё работает.\nИли Ollama — работает через терминал, легко интегрируется в скрипты и автоматизацию.",[14,4481,4482],{},"Для корпоративного продакшена, где нужны чувствительные данные и высокая нагрузка, мы поднимаем свои инстансы Ollama или vLLM внутри нашего периметра, обычно в Docker-контейнерах.\nvLLM особенно хорош для высоконагруженных систем, где нужна максимальная скорость отдачи.",[21,4484],{},[24,4486,4488],{"id":4487},"_5-форматы-промптов-как-правильно-разговаривать","5. Форматы промптов: Как правильно «разговаривать»",[14,4490,4491,4492,1052],{},"Теперь самое интересное — как писать промпты, чтобы получать предсказуемый результат.\nЭто не просто \"напиши текст\", это целая дисциплина — ",[36,4493,4494],{},"промпт-инжиниринг",[123,4496,4498],{"id":4497},"базовые-форматы-промптов","Базовые форматы промптов",[4166,4500,4502],{"id":4501},"_1-простой-текст","1. Простой текст",[1737,4504,4507],{"className":4505,"code":4506,"language":1742,"meta":1743},[1740],"Напиши функцию на PHP, которая сортирует массив пользователей по дате регистрации.\n",[1745,4508,4506],{"__ignoreMap":1743},[14,4510,4511],{},"Это работает для простых задач, но для сложных может быть недостаточно. Модель может интерпретировать запрос по-разному каждый раз.",[4166,4513,4515],{"id":4514},"_2-xml-markdown-разметка","2. XML \u002F Markdown разметка",[14,4517,4518],{},"Это мощный инструмент для структурирования промпта. Вы используете теги, чтобы явно разделить инструкции и данные:",[1737,4520,4524],{"className":4521,"code":4522,"language":4523,"meta":1743,"style":1743},"language-xml shiki shiki-themes github-light github-dark","\u003Crole>\nТы опытный PHP-разработчик с 10-летним стажем.\nТы всегда используешь строгую типизацию и PSR-12.\n\u003C\u002Frole>\n\n\u003Crules>\n1. Используй только PHP 8.5+\n2. Добавляй PHPDoc для всех публичных методов\n3. Обрабатывай все возможные ошибки\n4. Пиши код в стиле Clean Architecture\n\u003C\u002Frules>\n\n\u003Ccontext>\nВот текущий код, который нужно рефакторить:\n```php\nclass UserService {\n    public function saveUser($data) {\n        mysql_query(\"INSERT INTO users...\");\n    }\n}\n\u003C\u002Fcontext>\n\n\u003Ctask>\nПримени паттерн Repository к этому коду.\nВыдели интерфейс UserRepository и реализацию MysqlUserRepository.\n\u003C\u002Ftask>\n\n\u003Coutput_format>\nВерни результат в виде двух блоков кода:\n1. Интерфейс UserRepository\n2. Класс MysqlUserRepository\n\u003C\u002Foutput_format>\n","xml",[1745,4525,4526,4540,4545,4550,4560,4566,4576,4582,4588,4594,4600,4609,4614,4624,4630,4636,4642,4648,4654,4660,4666,4675,4680,4690,4696,4702,4711,4716,4726,4732,4738,4744],{"__ignoreMap":1743},[43,4527,4530,4533,4537],{"class":4528,"line":4529},"line",1,[43,4531,932],{"class":4532},"sVt8B",[43,4534,4536],{"class":4535},"s9eBZ","role",[43,4538,4539],{"class":4532},">\n",[43,4541,4542],{"class":4528,"line":3502},[43,4543,4544],{"class":4532},"Ты опытный PHP-разработчик с 10-летним стажем.\n",[43,4546,4547],{"class":4528,"line":3499},[43,4548,4549],{"class":4532},"Ты всегда используешь строгую типизацию и PSR-12.\n",[43,4551,4553,4556,4558],{"class":4528,"line":4552},4,[43,4554,4555],{"class":4532},"\u003C\u002F",[43,4557,4536],{"class":4535},[43,4559,4539],{"class":4532},[43,4561,4563],{"class":4528,"line":4562},5,[43,4564,4565],{"emptyLinePlaceholder":3528},"\n",[43,4567,4569,4571,4574],{"class":4528,"line":4568},6,[43,4570,932],{"class":4532},[43,4572,4573],{"class":4535},"rules",[43,4575,4539],{"class":4532},[43,4577,4579],{"class":4528,"line":4578},7,[43,4580,4581],{"class":4532},"1. Используй только PHP 8.5+\n",[43,4583,4585],{"class":4528,"line":4584},8,[43,4586,4587],{"class":4532},"2. Добавляй PHPDoc для всех публичных методов\n",[43,4589,4591],{"class":4528,"line":4590},9,[43,4592,4593],{"class":4532},"3. Обрабатывай все возможные ошибки\n",[43,4595,4597],{"class":4528,"line":4596},10,[43,4598,4599],{"class":4532},"4. Пиши код в стиле Clean Architecture\n",[43,4601,4603,4605,4607],{"class":4528,"line":4602},11,[43,4604,4555],{"class":4532},[43,4606,4573],{"class":4535},[43,4608,4539],{"class":4532},[43,4610,4612],{"class":4528,"line":4611},12,[43,4613,4565],{"emptyLinePlaceholder":3528},[43,4615,4617,4619,4622],{"class":4528,"line":4616},13,[43,4618,932],{"class":4532},[43,4620,4621],{"class":4535},"context",[43,4623,4539],{"class":4532},[43,4625,4627],{"class":4528,"line":4626},14,[43,4628,4629],{"class":4532},"Вот текущий код, который нужно рефакторить:\n",[43,4631,4633],{"class":4528,"line":4632},15,[43,4634,4635],{"class":4532},"```php\n",[43,4637,4639],{"class":4528,"line":4638},16,[43,4640,4641],{"class":4532},"class UserService {\n",[43,4643,4645],{"class":4528,"line":4644},17,[43,4646,4647],{"class":4532},"    public function saveUser($data) {\n",[43,4649,4651],{"class":4528,"line":4650},18,[43,4652,4653],{"class":4532},"        mysql_query(\"INSERT INTO users...\");\n",[43,4655,4657],{"class":4528,"line":4656},19,[43,4658,4659],{"class":4532},"    }\n",[43,4661,4663],{"class":4528,"line":4662},20,[43,4664,4665],{"class":4532},"}\n",[43,4667,4669,4671,4673],{"class":4528,"line":4668},21,[43,4670,4555],{"class":4532},[43,4672,4621],{"class":4535},[43,4674,4539],{"class":4532},[43,4676,4678],{"class":4528,"line":4677},22,[43,4679,4565],{"emptyLinePlaceholder":3528},[43,4681,4683,4685,4688],{"class":4528,"line":4682},23,[43,4684,932],{"class":4532},[43,4686,4687],{"class":4535},"task",[43,4689,4539],{"class":4532},[43,4691,4693],{"class":4528,"line":4692},24,[43,4694,4695],{"class":4532},"Примени паттерн Repository к этому коду.\n",[43,4697,4699],{"class":4528,"line":4698},25,[43,4700,4701],{"class":4532},"Выдели интерфейс UserRepository и реализацию MysqlUserRepository.\n",[43,4703,4705,4707,4709],{"class":4528,"line":4704},26,[43,4706,4555],{"class":4532},[43,4708,4687],{"class":4535},[43,4710,4539],{"class":4532},[43,4712,4714],{"class":4528,"line":4713},27,[43,4715,4565],{"emptyLinePlaceholder":3528},[43,4717,4719,4721,4724],{"class":4528,"line":4718},28,[43,4720,932],{"class":4532},[43,4722,4723],{"class":4535},"output_format",[43,4725,4539],{"class":4532},[43,4727,4729],{"class":4528,"line":4728},29,[43,4730,4731],{"class":4532},"Верни результат в виде двух блоков кода:\n",[43,4733,4735],{"class":4528,"line":4734},30,[43,4736,4737],{"class":4532},"1. Интерфейс UserRepository\n",[43,4739,4741],{"class":4528,"line":4740},31,[43,4742,4743],{"class":4532},"2. Класс MysqlUserRepository\n",[43,4745,4747,4749,4751],{"class":4528,"line":4746},32,[43,4748,4555],{"class":4532},[43,4750,4723],{"class":4535},[43,4752,4539],{"class":4532},[14,4754,4755],{},"Модель гораздо лучше понимает структуру. Она не перепутает инструкцию с данными.\nXML-теги работают как \"разделители контекста\" для внимания модели (attention mechanism).",[4166,4757,4759],{"id":4758},"_3-json-mode-structured-output","3. JSON Mode \u002F Structured Output",[14,4761,4762],{},"Это критически важно для разработчиков. Если вам нужно, чтобы модель вернула структурированные данные для обработки в коде, всегда используйте JSON Mode:",[1737,4764,4768],{"className":4765,"code":4766,"language":4767,"meta":1743,"style":1743},"language-json shiki shiki-themes github-light github-dark","{\n  \"prompt\": \"Извлеки из текста имя пользователя и email\",\n  \"text\": \"Меня зовут Иван Петров, мой email ivan@example.com\",\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"user_extraction\",\n      \"strict\": true,\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"name\": {\"type\": \"string\"},\n          \"email\": {\"type\": \"string\", \"format\": \"email\"}\n        },\n        \"required\": [\"name\", \"email\"],\n        \"additionalProperties\": false\n      }\n    }\n  }\n}\n","json",[1745,4769,4770,4775,4791,4803,4811,4823,4830,4842,4853,4860,4872,4879,4898,4923,4928,4946,4956,4961,4965,4970],{"__ignoreMap":1743},[43,4771,4772],{"class":4528,"line":4529},[43,4773,4774],{"class":4532},"{\n",[43,4776,4777,4781,4784,4788],{"class":4528,"line":3502},[43,4778,4780],{"class":4779},"sj4cs","  \"prompt\"",[43,4782,4783],{"class":4532},": ",[43,4785,4787],{"class":4786},"sZZnC","\"Извлеки из текста имя пользователя и email\"",[43,4789,4790],{"class":4532},",\n",[43,4792,4793,4796,4798,4801],{"class":4528,"line":3499},[43,4794,4795],{"class":4779},"  \"text\"",[43,4797,4783],{"class":4532},[43,4799,4800],{"class":4786},"\"Меня зовут Иван Петров, мой email ivan@example.com\"",[43,4802,4790],{"class":4532},[43,4804,4805,4808],{"class":4528,"line":4552},[43,4806,4807],{"class":4779},"  \"response_format\"",[43,4809,4810],{"class":4532},": {\n",[43,4812,4813,4816,4818,4821],{"class":4528,"line":4562},[43,4814,4815],{"class":4779},"    \"type\"",[43,4817,4783],{"class":4532},[43,4819,4820],{"class":4786},"\"json_schema\"",[43,4822,4790],{"class":4532},[43,4824,4825,4828],{"class":4528,"line":4568},[43,4826,4827],{"class":4779},"    \"json_schema\"",[43,4829,4810],{"class":4532},[43,4831,4832,4835,4837,4840],{"class":4528,"line":4578},[43,4833,4834],{"class":4779},"      \"name\"",[43,4836,4783],{"class":4532},[43,4838,4839],{"class":4786},"\"user_extraction\"",[43,4841,4790],{"class":4532},[43,4843,4844,4847,4849,4851],{"class":4528,"line":4584},[43,4845,4846],{"class":4779},"      \"strict\"",[43,4848,4783],{"class":4532},[43,4850,75],{"class":4779},[43,4852,4790],{"class":4532},[43,4854,4855,4858],{"class":4528,"line":4590},[43,4856,4857],{"class":4779},"      \"schema\"",[43,4859,4810],{"class":4532},[43,4861,4862,4865,4867,4870],{"class":4528,"line":4596},[43,4863,4864],{"class":4779},"        \"type\"",[43,4866,4783],{"class":4532},[43,4868,4869],{"class":4786},"\"object\"",[43,4871,4790],{"class":4532},[43,4873,4874,4877],{"class":4528,"line":4602},[43,4875,4876],{"class":4779},"        \"properties\"",[43,4878,4810],{"class":4532},[43,4880,4881,4884,4887,4890,4892,4895],{"class":4528,"line":4611},[43,4882,4883],{"class":4779},"          \"name\"",[43,4885,4886],{"class":4532},": {",[43,4888,4889],{"class":4779},"\"type\"",[43,4891,4783],{"class":4532},[43,4893,4894],{"class":4786},"\"string\"",[43,4896,4897],{"class":4532},"},\n",[43,4899,4900,4903,4905,4907,4909,4911,4913,4916,4918,4921],{"class":4528,"line":4616},[43,4901,4902],{"class":4779},"          \"email\"",[43,4904,4886],{"class":4532},[43,4906,4889],{"class":4779},[43,4908,4783],{"class":4532},[43,4910,4894],{"class":4786},[43,4912,3584],{"class":4532},[43,4914,4915],{"class":4779},"\"format\"",[43,4917,4783],{"class":4532},[43,4919,4920],{"class":4786},"\"email\"",[43,4922,4665],{"class":4532},[43,4924,4925],{"class":4528,"line":4626},[43,4926,4927],{"class":4532},"        },\n",[43,4929,4930,4933,4936,4939,4941,4943],{"class":4528,"line":4632},[43,4931,4932],{"class":4779},"        \"required\"",[43,4934,4935],{"class":4532},": [",[43,4937,4938],{"class":4786},"\"name\"",[43,4940,3584],{"class":4532},[43,4942,4920],{"class":4786},[43,4944,4945],{"class":4532},"],\n",[43,4947,4948,4951,4953],{"class":4528,"line":4638},[43,4949,4950],{"class":4779},"        \"additionalProperties\"",[43,4952,4783],{"class":4532},[43,4954,4955],{"class":4779},"false\n",[43,4957,4958],{"class":4528,"line":4644},[43,4959,4960],{"class":4532},"      }\n",[43,4962,4963],{"class":4528,"line":4650},[43,4964,4659],{"class":4532},[43,4966,4967],{"class":4528,"line":4656},[43,4968,4969],{"class":4532},"  }\n",[43,4971,4972],{"class":4528,"line":4662},[43,4973,4665],{"class":4532},[14,4975,4976,4977,4980],{},"Это гарантирует, что вы получите валидный JSON, который можно распарсить через ",[1745,4978,4979],{},"json_decode($response, true)"," без ошибок.\nИначе модель может ответить текстом вроде \"Конечно, вот ваш JSON:\" и добавить пояснения, которые сломают парсинг.",[14,4982,4983],{},[36,4984,4985],{},"Пример на PHP:",[1737,4987,4991],{"className":4988,"code":4989,"language":4990,"meta":1743,"style":1743},"language-php shiki shiki-themes github-light github-dark","$response = $llm->generate($prompt, [\n    'response_format' => ['type' => 'json_object']\n]);\n\n$data = json_decode($response, true);\nif (json_last_error() === JSON_ERROR_NONE) {\n    \u002F\u002F Успешно распарсили\n    $user = new User($data['name'], $data['email']);\n} else {\n    \u002F\u002F Обработка ошибки\n    throw new \\Exception('Invalid JSON response');\n}\n","php",[1745,4992,4993,5014,5036,5041,5045,5063,5086,5092,5119,5130,5135,5152],{"__ignoreMap":1743},[43,4994,4995,4998,5001,5004,5007,5011],{"class":4528,"line":4529},[43,4996,4997],{"class":4532},"$response ",[43,4999,432],{"class":5000},"szBVR",[43,5002,5003],{"class":4532}," $llm",[43,5005,5006],{"class":5000},"->",[43,5008,5010],{"class":5009},"sScJk","generate",[43,5012,5013],{"class":4532},"($prompt, [\n",[43,5015,5016,5019,5022,5025,5028,5030,5033],{"class":4528,"line":3502},[43,5017,5018],{"class":4786},"    'response_format'",[43,5020,5021],{"class":5000}," =>",[43,5023,5024],{"class":4532}," [",[43,5026,5027],{"class":4786},"'type'",[43,5029,5021],{"class":5000},[43,5031,5032],{"class":4786}," 'json_object'",[43,5034,5035],{"class":4532},"]\n",[43,5037,5038],{"class":4528,"line":3499},[43,5039,5040],{"class":4532},"]);\n",[43,5042,5043],{"class":4528,"line":4552},[43,5044,4565],{"emptyLinePlaceholder":3528},[43,5046,5047,5050,5052,5055,5058,5060],{"class":4528,"line":4562},[43,5048,5049],{"class":4532},"$data ",[43,5051,432],{"class":5000},[43,5053,5054],{"class":4779}," json_decode",[43,5056,5057],{"class":4532},"($response, ",[43,5059,75],{"class":4779},[43,5061,5062],{"class":4532},");\n",[43,5064,5065,5068,5071,5074,5077,5080,5083],{"class":4528,"line":4568},[43,5066,5067],{"class":5000},"if",[43,5069,5070],{"class":4532}," (",[43,5072,5073],{"class":4779},"json_last_error",[43,5075,5076],{"class":4532},"() ",[43,5078,5079],{"class":5000},"===",[43,5081,5082],{"class":4779}," JSON_ERROR_NONE",[43,5084,5085],{"class":4532},") {\n",[43,5087,5088],{"class":4528,"line":4578},[43,5089,5091],{"class":5090},"sJ8bj","    \u002F\u002F Успешно распарсили\n",[43,5093,5094,5097,5099,5102,5105,5108,5111,5114,5117],{"class":4528,"line":4584},[43,5095,5096],{"class":4532},"    $user ",[43,5098,432],{"class":5000},[43,5100,5101],{"class":5000}," new",[43,5103,5104],{"class":4779}," User",[43,5106,5107],{"class":4532},"($data[",[43,5109,5110],{"class":4786},"'name'",[43,5112,5113],{"class":4532},"], $data[",[43,5115,5116],{"class":4786},"'email'",[43,5118,5040],{"class":4532},[43,5120,5121,5124,5127],{"class":4528,"line":4590},[43,5122,5123],{"class":4532},"} ",[43,5125,5126],{"class":5000},"else",[43,5128,5129],{"class":4532}," {\n",[43,5131,5132],{"class":4528,"line":4596},[43,5133,5134],{"class":5090},"    \u002F\u002F Обработка ошибки\n",[43,5136,5137,5140,5142,5145,5147,5150],{"class":4528,"line":4602},[43,5138,5139],{"class":5000},"    throw",[43,5141,5101],{"class":5000},[43,5143,5144],{"class":4779}," \\Exception",[43,5146,699],{"class":4532},[43,5148,5149],{"class":4786},"'Invalid JSON response'",[43,5151,5062],{"class":4532},[43,5153,5154],{"class":4528,"line":4611},[43,5155,4665],{"class":4532},[5157,5158,5160],"h5",{"id":5159},"json-mode-ограничения-и-альтернативы","JSON Mode: ограничения и альтернативы",[14,5162,5163,5166,5167,1052],{},[36,5164,5165],{},"Важно:"," JSON Mode (особенно Structured Outputs с гарантированной валидацией схемы) доступен ",[36,5168,5169],{},"не для всех моделей и фреймворков",[14,5171,5172],{},[36,5173,5174],{},"Где JSON Mode работает надёжно",[14,5176,5177],{},[36,5178,4469],{},[2016,5180,5181,5187,5193],{},[1331,5182,5183,5186],{},[36,5184,5185],{},"OpenAI GPT-4.1, GPT-5 mini."," Полная поддержка response_format: { \"type\": \"json_object\" } и Structured Outputs — режим, в котором модель строго соблюдает переданную JSON-схему (100% гарантия валидности ответа). GPT-4.1 также позволяет совмещать Structured Outputs с вызовом функций, что удобно для сложных конвейеров на PHP‑бэкенде.",[1331,5188,5189,5192],{},[36,5190,5191],{},"Anthropic Claude (Opus 4, Sonnet 4)."," Гарантированный JSON достигается через tool use (function calling) — модель возвращает данные в полях аргументов функции, соответствующих заранее заданной схеме. В расширенном режиме (extended tool use) можно явно указать, что ответ всегда должен быть валидным JSON. Sonnet 4 при этом отлично держит структуру даже для вложенных объектов, а Opus 4 незаменим, когда схема сложная и требует многошаговых рассуждений.",[1331,5194,5195,5198],{},[36,5196,5197],{},"Google Gemini 2.5 Pro, 2.5 Flash",". Нативная поддержка JSON Mode через параметр response_mime_type: \"application\u002Fjson\". В сочетании с system instruction, описывающей желаемую структуру, Gemini 2.5 даёт очень стабильный JSON. Модель также поддерживает Controlled Generation — указание схемы напрямую, что исключает невалидные ответы.",[14,5200,5201],{},[36,5202,5203],{},"Open-source \u002F локальный запуск",[14,5205,5206,5207,5210],{},"Современные движки позволяют получить ",[36,5208,5209],{},"надёжный JSON Mode"," за счёт принудительного ограничения генерации грамматикой (guided\u002Fconstrained decoding). Ключевые инструменты:",[2016,5212,5213,5222,5234],{},[1331,5214,5215,5218,5219],{},[36,5216,5217],{},"llama.cpp \u002F Ollama"," — встроенная поддержка JSON grammar (формат GBNF). Достаточно передать описание схемы, и модель сгенерирует токены строго по ней.\n",[17,5220,5221],{},"Проверенные модели: Qwen 3, Llama 4 (обе конвертируются в GGUF), Mistral Small 3, Phi‑4‑mini.",[1331,5223,5224,5226,5227,5230,5231],{},[36,5225,4156],{}," — режим ",[1745,5228,5229],{},"guided_decoding_backend"," с опорой на outlines или lm-format-enforcer. Позволяет передать Pydantic-модель или JSON Schema прямо в API.\n",[17,5232,5233],{},"Рекомендуемые модели: Qwen 3 Coder 32B, DeepSeek V3.1 (при развёртывании через vLLM).",[1331,5235,5236,5239],{},[36,5237,5238],{},"Outlines"," (библиотека) — строит FSM, гарантирующий генерацию токенов по регулярному выражению или JSON-схеме. Работает поверх transformers, vLLM, llama.cpp. Идеален, если нужна максимальная скорость и строгость.",[14,5241,5242,5243,5246],{},"Таким образом, если раньше JSON Mode считался вотчиной проприетарных API, то сейчас ",[36,5244,5245],{},"любая open-source модель, запущенная через llama.cpp с грамматикой или vLLM с guided decoding, гарантирует 100% валидный JSON",". Это полностью снимает проблему «сломанного» вывода при интеграции с PHP-приложениями — можно смело выбирать локальную Qwen 3 8B для извлечения данных и быть уверенным в структуре ответа.",[14,5248,5249],{},[36,5250,5251],{},"Где JSON Mode НЕ работает или работает плохо:",[2016,5253,5254,5260,5266],{},[1331,5255,5256,5259],{},[36,5257,5258],{},"Старые модели"," (Llama 2, Mistral v1) — не обучались на JSON-формате, часто генерируют невалидный JSON",[1331,5261,5262,5265],{},[36,5263,5264],{},"Маленькие модели"," (\u003C 7B параметров) — могут \"ломаться\" на сложных JSON-схемах",[1331,5267,5268,5271],{},[36,5269,5270],{},"Модели без fine-tuning на JSON"," — некоторые специализированные модели (например, для кода) могут не понимать JSON-структуру",[14,5273,5274],{},[36,5275,5276],{},"Альтернативы, если JSON Mode недоступен",[14,5278,5279],{},"Если ваша модель не поддерживает JSON Mode или генерирует невалидный JSON, есть несколько рабочих паттернов:",[14,5281,5282],{},[36,5283,5284],{},"Паттерн 1: Явная инструкция + пример (Few-shot)",[1737,5286,5289],{"className":5287,"code":5288,"language":1742,"meta":1743},[1740],"Верни результат СТРОГО в формате JSON. Никаких пояснений, никакого текста до или после JSON.\n\nПример правильного ответа:\n{\"name\": \"Иван\", \"email\": \"ivan@example.com\"}\n\nТекст для обработки:\n\"Меня зовут Петр, мой email petr@test.com\"\n",[1745,5290,5288],{"__ignoreMap":1743},[14,5292,5293],{},[36,5294,5295],{},"Паттерн 2: Обертка в XML-теги + парсинг",[1737,5297,5300],{"className":5298,"code":5299,"language":1742,"meta":1743},[1740],"Верни результат в тегах \u003Cjson>...\u003C\u002Fjson>.\n\nПример:\n\u003Cjson>\n{\"name\": \"Иван\", \"email\": \"ivan@example.com\"}\n\u003C\u002Fjson>\n",[1745,5301,5299],{"__ignoreMap":1743},[14,5303,5304],{},"На PHP:",[1737,5306,5308],{"className":4988,"code":5307,"language":4990,"meta":1743,"style":1743},"$response = $llm->generate($prompt);\n\n\u002F\u002F Извлекаем JSON из тегов\nif (preg_match('\u002F\u003Cjson>(.*?)\u003C\\\u002Fjson>\u002Fs', $response, $matches)) {\n    $jsonString = trim($matches[1]);\n    $data = json_decode($jsonString, true);\n    \n    if (json_last_error() === JSON_ERROR_NONE) {\n        \u002F\u002F Успешно\n    } else {\n        \u002F\u002F Попытка восстановить JSON\n        $data = attemptJsonRepair($jsonString);\n    }\n}\n",[1745,5309,5310,5325,5329,5334,5371,5388,5404,5409,5426,5431,5440,5445,5458,5462],{"__ignoreMap":1743},[43,5311,5312,5314,5316,5318,5320,5322],{"class":4528,"line":4529},[43,5313,4997],{"class":4532},[43,5315,432],{"class":5000},[43,5317,5003],{"class":4532},[43,5319,5006],{"class":5000},[43,5321,5010],{"class":5009},[43,5323,5324],{"class":4532},"($prompt);\n",[43,5326,5327],{"class":4528,"line":3502},[43,5328,4565],{"emptyLinePlaceholder":3528},[43,5330,5331],{"class":4528,"line":3499},[43,5332,5333],{"class":5090},"\u002F\u002F Извлекаем JSON из тегов\n",[43,5335,5336,5338,5340,5343,5345,5348,5352,5355,5358,5362,5365,5368],{"class":4528,"line":4552},[43,5337,5067],{"class":5000},[43,5339,5070],{"class":4532},[43,5341,5342],{"class":4779},"preg_match",[43,5344,699],{"class":4532},[43,5346,5347],{"class":4786},"'\u002F",[43,5349,5351],{"class":5350},"sA_wV","\u003Cjson>(.",[43,5353,5354],{"class":5000},"*",[43,5356,5357],{"class":5350},"?)\u003C",[43,5359,5361],{"class":5360},"snhLl","\\\u002F",[43,5363,5364],{"class":5350},"json>",[43,5366,5367],{"class":4786},"\u002Fs'",[43,5369,5370],{"class":4532},", $response, $matches)) {\n",[43,5372,5373,5376,5378,5381,5384,5386],{"class":4528,"line":4562},[43,5374,5375],{"class":4532},"    $jsonString ",[43,5377,432],{"class":5000},[43,5379,5380],{"class":4779}," trim",[43,5382,5383],{"class":4532},"($matches[",[43,5385,707],{"class":4779},[43,5387,5040],{"class":4532},[43,5389,5390,5393,5395,5397,5400,5402],{"class":4528,"line":4568},[43,5391,5392],{"class":4532},"    $data ",[43,5394,432],{"class":5000},[43,5396,5054],{"class":4779},[43,5398,5399],{"class":4532},"($jsonString, ",[43,5401,75],{"class":4779},[43,5403,5062],{"class":4532},[43,5405,5406],{"class":4528,"line":4578},[43,5407,5408],{"class":4532},"    \n",[43,5410,5411,5414,5416,5418,5420,5422,5424],{"class":4528,"line":4584},[43,5412,5413],{"class":5000},"    if",[43,5415,5070],{"class":4532},[43,5417,5073],{"class":4779},[43,5419,5076],{"class":4532},[43,5421,5079],{"class":5000},[43,5423,5082],{"class":4779},[43,5425,5085],{"class":4532},[43,5427,5428],{"class":4528,"line":4590},[43,5429,5430],{"class":5090},"        \u002F\u002F Успешно\n",[43,5432,5433,5436,5438],{"class":4528,"line":4596},[43,5434,5435],{"class":4532},"    } ",[43,5437,5126],{"class":5000},[43,5439,5129],{"class":4532},[43,5441,5442],{"class":4528,"line":4602},[43,5443,5444],{"class":5090},"        \u002F\u002F Попытка восстановить JSON\n",[43,5446,5447,5450,5452,5455],{"class":4528,"line":4611},[43,5448,5449],{"class":4532},"        $data ",[43,5451,432],{"class":5000},[43,5453,5454],{"class":5009}," attemptJsonRepair",[43,5456,5457],{"class":4532},"($jsonString);\n",[43,5459,5460],{"class":4528,"line":4616},[43,5461,4659],{"class":4532},[43,5463,5464],{"class":4528,"line":4626},[43,5465,4665],{"class":4532},[14,5467,5468],{},[36,5469,5470],{},"Паттерн 3: Retry с валидацией",[1737,5472,5474],{"className":4988,"code":5473,"language":4990,"meta":1743,"style":1743},"$maxRetries = 3;\n$lastError = null;\n\nfor ($i = 0; $i \u003C $maxRetries; $i++) {\n    $response = $llm->generate($prompt);\n    $data = json_decode($response, true);\n    \n    if (json_last_error() === JSON_ERROR_NONE) {\n        \u002F\u002F Валидный JSON\n        break;\n    }\n    \n    $lastError = json_last_error_msg();\n    \n    \u002F\u002F Добавляем ошибку в промпт для следующей попытки\n    $prompt = $originalPrompt . \"\\n\\nПредыдущий ответ был невалидным JSON: $lastError. Попробуй снова.\";\n}\n\nif (json_last_error() !== JSON_ERROR_NONE) {\n    throw new \\Exception(\"Failed to get valid JSON after $maxRetries retries: $lastError\");\n}\n",[1745,5475,5476,5489,5501,5505,5531,5546,5560,5564,5580,5585,5592,5596,5600,5613,5617,5622,5651,5655,5659,5676,5702],{"__ignoreMap":1743},[43,5477,5478,5481,5483,5486],{"class":4528,"line":4529},[43,5479,5480],{"class":4532},"$maxRetries ",[43,5482,432],{"class":5000},[43,5484,5485],{"class":4779}," 3",[43,5487,5488],{"class":4532},";\n",[43,5490,5491,5494,5496,5499],{"class":4528,"line":3502},[43,5492,5493],{"class":4532},"$lastError ",[43,5495,432],{"class":5000},[43,5497,5498],{"class":4779}," null",[43,5500,5488],{"class":4532},[43,5502,5503],{"class":4528,"line":3499},[43,5504,4565],{"emptyLinePlaceholder":3528},[43,5506,5507,5510,5513,5515,5518,5521,5523,5526,5529],{"class":4528,"line":4552},[43,5508,5509],{"class":5000},"for",[43,5511,5512],{"class":4532}," ($i ",[43,5514,432],{"class":5000},[43,5516,5517],{"class":4779}," 0",[43,5519,5520],{"class":4532},"; $i ",[43,5522,932],{"class":5000},[43,5524,5525],{"class":4532}," $maxRetries; $i",[43,5527,5528],{"class":5000},"++",[43,5530,5085],{"class":4532},[43,5532,5533,5536,5538,5540,5542,5544],{"class":4528,"line":4562},[43,5534,5535],{"class":4532},"    $response ",[43,5537,432],{"class":5000},[43,5539,5003],{"class":4532},[43,5541,5006],{"class":5000},[43,5543,5010],{"class":5009},[43,5545,5324],{"class":4532},[43,5547,5548,5550,5552,5554,5556,5558],{"class":4528,"line":4568},[43,5549,5392],{"class":4532},[43,5551,432],{"class":5000},[43,5553,5054],{"class":4779},[43,5555,5057],{"class":4532},[43,5557,75],{"class":4779},[43,5559,5062],{"class":4532},[43,5561,5562],{"class":4528,"line":4578},[43,5563,5408],{"class":4532},[43,5565,5566,5568,5570,5572,5574,5576,5578],{"class":4528,"line":4584},[43,5567,5413],{"class":5000},[43,5569,5070],{"class":4532},[43,5571,5073],{"class":4779},[43,5573,5076],{"class":4532},[43,5575,5079],{"class":5000},[43,5577,5082],{"class":4779},[43,5579,5085],{"class":4532},[43,5581,5582],{"class":4528,"line":4590},[43,5583,5584],{"class":5090},"        \u002F\u002F Валидный JSON\n",[43,5586,5587,5590],{"class":4528,"line":4596},[43,5588,5589],{"class":5000},"        break",[43,5591,5488],{"class":4532},[43,5593,5594],{"class":4528,"line":4602},[43,5595,4659],{"class":4532},[43,5597,5598],{"class":4528,"line":4611},[43,5599,5408],{"class":4532},[43,5601,5602,5605,5607,5610],{"class":4528,"line":4616},[43,5603,5604],{"class":4532},"    $lastError ",[43,5606,432],{"class":5000},[43,5608,5609],{"class":4779}," json_last_error_msg",[43,5611,5612],{"class":4532},"();\n",[43,5614,5615],{"class":4528,"line":4626},[43,5616,5408],{"class":4532},[43,5618,5619],{"class":4528,"line":4632},[43,5620,5621],{"class":5090},"    \u002F\u002F Добавляем ошибку в промпт для следующей попытки\n",[43,5623,5624,5627,5629,5632,5634,5637,5640,5643,5646,5649],{"class":4528,"line":4638},[43,5625,5626],{"class":4532},"    $prompt ",[43,5628,432],{"class":5000},[43,5630,5631],{"class":4532}," $originalPrompt ",[43,5633,1052],{"class":5000},[43,5635,5636],{"class":4786}," \"",[43,5638,5639],{"class":4779},"\\n\\n",[43,5641,5642],{"class":4786},"Предыдущий ответ был невалидным JSON: ",[43,5644,5645],{"class":4532},"$lastError",[43,5647,5648],{"class":4786},". Попробуй снова.\"",[43,5650,5488],{"class":4532},[43,5652,5653],{"class":4528,"line":4644},[43,5654,4665],{"class":4532},[43,5656,5657],{"class":4528,"line":4650},[43,5658,4565],{"emptyLinePlaceholder":3528},[43,5660,5661,5663,5665,5667,5669,5672,5674],{"class":4528,"line":4656},[43,5662,5067],{"class":5000},[43,5664,5070],{"class":4532},[43,5666,5073],{"class":4779},[43,5668,5076],{"class":4532},[43,5670,5671],{"class":5000},"!==",[43,5673,5082],{"class":4779},[43,5675,5085],{"class":4532},[43,5677,5678,5680,5682,5684,5686,5689,5692,5695,5697,5700],{"class":4528,"line":4662},[43,5679,5139],{"class":5000},[43,5681,5101],{"class":5000},[43,5683,5144],{"class":4779},[43,5685,699],{"class":4532},[43,5687,5688],{"class":4786},"\"Failed to get valid JSON after ",[43,5690,5691],{"class":4532},"$maxRetries",[43,5693,5694],{"class":4786}," retries: ",[43,5696,5645],{"class":4532},[43,5698,5699],{"class":4786},"\"",[43,5701,5062],{"class":4532},[43,5703,5704],{"class":4528,"line":4668},[43,5705,4665],{"class":4532},[14,5707,5708],{},[36,5709,5710],{},"Паттерн 4: Function Calling (Tool Use)",[14,5712,5713],{},"Вместо JSON Mode используйте function calling — многие модели лучше справляются с вызовом функций, чем с генерацией JSON:",[1737,5715,5717],{"className":4765,"code":5716,"language":4767,"meta":1743,"style":1743},"{\n  \"tools\": [\n    {\n      \"type\": \"function\",\n      \"function\": {\n        \"name\": \"extract_user\",\n        \"description\": \"Извлекает имя и email из текста\",\n        \"parameters\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\"type\": \"string\"},\n            \"email\": {\"type\": \"string\"}\n          },\n          \"required\": [\"name\", \"email\"]\n        }\n      }\n    }\n  ]\n}\n",[1745,5718,5719,5723,5731,5736,5748,5755,5767,5779,5786,5797,5804,5819,5834,5839,5854,5859,5863,5867,5872],{"__ignoreMap":1743},[43,5720,5721],{"class":4528,"line":4529},[43,5722,4774],{"class":4532},[43,5724,5725,5728],{"class":4528,"line":3502},[43,5726,5727],{"class":4779},"  \"tools\"",[43,5729,5730],{"class":4532},": [\n",[43,5732,5733],{"class":4528,"line":3499},[43,5734,5735],{"class":4532},"    {\n",[43,5737,5738,5741,5743,5746],{"class":4528,"line":4552},[43,5739,5740],{"class":4779},"      \"type\"",[43,5742,4783],{"class":4532},[43,5744,5745],{"class":4786},"\"function\"",[43,5747,4790],{"class":4532},[43,5749,5750,5753],{"class":4528,"line":4562},[43,5751,5752],{"class":4779},"      \"function\"",[43,5754,4810],{"class":4532},[43,5756,5757,5760,5762,5765],{"class":4528,"line":4568},[43,5758,5759],{"class":4779},"        \"name\"",[43,5761,4783],{"class":4532},[43,5763,5764],{"class":4786},"\"extract_user\"",[43,5766,4790],{"class":4532},[43,5768,5769,5772,5774,5777],{"class":4528,"line":4578},[43,5770,5771],{"class":4779},"        \"description\"",[43,5773,4783],{"class":4532},[43,5775,5776],{"class":4786},"\"Извлекает имя и email из текста\"",[43,5778,4790],{"class":4532},[43,5780,5781,5784],{"class":4528,"line":4584},[43,5782,5783],{"class":4779},"        \"parameters\"",[43,5785,4810],{"class":4532},[43,5787,5788,5791,5793,5795],{"class":4528,"line":4590},[43,5789,5790],{"class":4779},"          \"type\"",[43,5792,4783],{"class":4532},[43,5794,4869],{"class":4786},[43,5796,4790],{"class":4532},[43,5798,5799,5802],{"class":4528,"line":4596},[43,5800,5801],{"class":4779},"          \"properties\"",[43,5803,4810],{"class":4532},[43,5805,5806,5809,5811,5813,5815,5817],{"class":4528,"line":4602},[43,5807,5808],{"class":4779},"            \"name\"",[43,5810,4886],{"class":4532},[43,5812,4889],{"class":4779},[43,5814,4783],{"class":4532},[43,5816,4894],{"class":4786},[43,5818,4897],{"class":4532},[43,5820,5821,5824,5826,5828,5830,5832],{"class":4528,"line":4611},[43,5822,5823],{"class":4779},"            \"email\"",[43,5825,4886],{"class":4532},[43,5827,4889],{"class":4779},[43,5829,4783],{"class":4532},[43,5831,4894],{"class":4786},[43,5833,4665],{"class":4532},[43,5835,5836],{"class":4528,"line":4616},[43,5837,5838],{"class":4532},"          },\n",[43,5840,5841,5844,5846,5848,5850,5852],{"class":4528,"line":4626},[43,5842,5843],{"class":4779},"          \"required\"",[43,5845,4935],{"class":4532},[43,5847,4938],{"class":4786},[43,5849,3584],{"class":4532},[43,5851,4920],{"class":4786},[43,5853,5035],{"class":4532},[43,5855,5856],{"class":4528,"line":4632},[43,5857,5858],{"class":4532},"        }\n",[43,5860,5861],{"class":4528,"line":4638},[43,5862,4960],{"class":4532},[43,5864,5865],{"class":4528,"line":4644},[43,5866,4659],{"class":4532},[43,5868,5869],{"class":4528,"line":4650},[43,5870,5871],{"class":4532},"  ]\n",[43,5873,5874],{"class":4528,"line":4656},[43,5875,4665],{"class":4532},[14,5877,5878],{},"Модель вернет:",[1737,5880,5882],{"className":4765,"code":5881,"language":4767,"meta":1743,"style":1743},"{\n  \"tool_calls\": [\n    {\n      \"function\": {\n        \"name\": \"extract_user\",\n        \"arguments\": \"{\\\"name\\\": \\\"Иван\\\", \\\"email\\\": \\\"ivan@example.com\\\"}\"\n      }\n    }\n  ]\n}\n",[1745,5883,5884,5888,5895,5899,5905,5915,5963,5967,5971,5975],{"__ignoreMap":1743},[43,5885,5886],{"class":4528,"line":4529},[43,5887,4774],{"class":4532},[43,5889,5890,5893],{"class":4528,"line":3502},[43,5891,5892],{"class":4779},"  \"tool_calls\"",[43,5894,5730],{"class":4532},[43,5896,5897],{"class":4528,"line":3499},[43,5898,5735],{"class":4532},[43,5900,5901,5903],{"class":4528,"line":4552},[43,5902,5752],{"class":4779},[43,5904,4810],{"class":4532},[43,5906,5907,5909,5911,5913],{"class":4528,"line":4562},[43,5908,5759],{"class":4779},[43,5910,4783],{"class":4532},[43,5912,5764],{"class":4786},[43,5914,4790],{"class":4532},[43,5916,5917,5920,5922,5925,5928,5931,5933,5935,5937,5940,5942,5944,5946,5949,5951,5953,5955,5958,5960],{"class":4528,"line":4568},[43,5918,5919],{"class":4779},"        \"arguments\"",[43,5921,4783],{"class":4532},[43,5923,5924],{"class":4786},"\"{",[43,5926,5927],{"class":4779},"\\\"",[43,5929,5930],{"class":4786},"name",[43,5932,5927],{"class":4779},[43,5934,4783],{"class":4786},[43,5936,5927],{"class":4779},[43,5938,5939],{"class":4786},"Иван",[43,5941,5927],{"class":4779},[43,5943,3584],{"class":4786},[43,5945,5927],{"class":4779},[43,5947,5948],{"class":4786},"email",[43,5950,5927],{"class":4779},[43,5952,4783],{"class":4786},[43,5954,5927],{"class":4779},[43,5956,5957],{"class":4786},"ivan@example.com",[43,5959,5927],{"class":4779},[43,5961,5962],{"class":4786},"}\"\n",[43,5964,5965],{"class":4528,"line":4578},[43,5966,4960],{"class":4532},[43,5968,5969],{"class":4528,"line":4584},[43,5970,4659],{"class":4532},[43,5972,5973],{"class":4528,"line":4590},[43,5974,5871],{"class":4532},[43,5976,5977],{"class":4528,"line":4596},[43,5978,4665],{"class":4532},[14,5980,5304],{},[1737,5982,5984],{"className":4988,"code":5983,"language":4990,"meta":1743,"style":1743},"$response = $llm->generate($prompt, ['tools' => $tools]);\n\nif (isset($response['tool_calls'])) {\n    $args = json_decode($response['tool_calls'][0]['function']['arguments'], true);\n    \u002F\u002F $args['name'], $args['email']\n}\n",[1745,5985,5986,6009,6013,6031,6066,6071],{"__ignoreMap":1743},[43,5987,5988,5990,5992,5994,5996,5998,6001,6004,6006],{"class":4528,"line":4529},[43,5989,4997],{"class":4532},[43,5991,432],{"class":5000},[43,5993,5003],{"class":4532},[43,5995,5006],{"class":5000},[43,5997,5010],{"class":5009},[43,5999,6000],{"class":4532},"($prompt, [",[43,6002,6003],{"class":4786},"'tools'",[43,6005,5021],{"class":5000},[43,6007,6008],{"class":4532}," $tools]);\n",[43,6010,6011],{"class":4528,"line":3502},[43,6012,4565],{"emptyLinePlaceholder":3528},[43,6014,6015,6017,6019,6022,6025,6028],{"class":4528,"line":3499},[43,6016,5067],{"class":5000},[43,6018,5070],{"class":4532},[43,6020,6021],{"class":4779},"isset",[43,6023,6024],{"class":4532},"($response[",[43,6026,6027],{"class":4786},"'tool_calls'",[43,6029,6030],{"class":4532},"])) {\n",[43,6032,6033,6036,6038,6040,6042,6044,6047,6049,6051,6054,6056,6059,6062,6064],{"class":4528,"line":4552},[43,6034,6035],{"class":4532},"    $args ",[43,6037,432],{"class":5000},[43,6039,5054],{"class":4779},[43,6041,6024],{"class":4532},[43,6043,6027],{"class":4786},[43,6045,6046],{"class":4532},"][",[43,6048,196],{"class":4779},[43,6050,6046],{"class":4532},[43,6052,6053],{"class":4786},"'function'",[43,6055,6046],{"class":4532},[43,6057,6058],{"class":4786},"'arguments'",[43,6060,6061],{"class":4532},"], ",[43,6063,75],{"class":4779},[43,6065,5062],{"class":4532},[43,6067,6068],{"class":4528,"line":4562},[43,6069,6070],{"class":5090},"    \u002F\u002F $args['name'], $args['email']\n",[43,6072,6073],{"class":4528,"line":4568},[43,6074,4665],{"class":4532},[14,6076,6077],{},[36,6078,6079],{},"Паттерн 5: Post-processing с LLM",[14,6081,6082],{},"Если модель сгенерировала \"грязный\" JSON, используйте вторую (более дешевую) модель для очистки:",[1737,6084,6086],{"className":4988,"code":6085,"language":4990,"meta":1743,"style":1743},"$dirtyResponse = $llm->generate($extractionPrompt);\n\n$cleanupPrompt = \"Исправь этот JSON, чтобы он был валидным. Верни ТОЛЬКО исправленный JSON:\\n\" . $dirtyResponse;\n$cleanJson = $cheapLlm->generate($cleanupPrompt);\n\n$data = json_decode($cleanJson, true);\n",[1745,6087,6088,6104,6108,6129,6146,6150],{"__ignoreMap":1743},[43,6089,6090,6093,6095,6097,6099,6101],{"class":4528,"line":4529},[43,6091,6092],{"class":4532},"$dirtyResponse ",[43,6094,432],{"class":5000},[43,6096,5003],{"class":4532},[43,6098,5006],{"class":5000},[43,6100,5010],{"class":5009},[43,6102,6103],{"class":4532},"($extractionPrompt);\n",[43,6105,6106],{"class":4528,"line":3502},[43,6107,4565],{"emptyLinePlaceholder":3528},[43,6109,6110,6113,6115,6118,6121,6123,6126],{"class":4528,"line":3499},[43,6111,6112],{"class":4532},"$cleanupPrompt ",[43,6114,432],{"class":5000},[43,6116,6117],{"class":4786}," \"Исправь этот JSON, чтобы он был валидным. Верни ТОЛЬКО исправленный JSON:",[43,6119,6120],{"class":4779},"\\n",[43,6122,5699],{"class":4786},[43,6124,6125],{"class":5000}," .",[43,6127,6128],{"class":4532}," $dirtyResponse;\n",[43,6130,6131,6134,6136,6139,6141,6143],{"class":4528,"line":4552},[43,6132,6133],{"class":4532},"$cleanJson ",[43,6135,432],{"class":5000},[43,6137,6138],{"class":4532}," $cheapLlm",[43,6140,5006],{"class":5000},[43,6142,5010],{"class":5009},[43,6144,6145],{"class":4532},"($cleanupPrompt);\n",[43,6147,6148],{"class":4528,"line":4562},[43,6149,4565],{"emptyLinePlaceholder":3528},[43,6151,6152,6154,6156,6158,6161,6163],{"class":4528,"line":4568},[43,6153,5049],{"class":4532},[43,6155,432],{"class":5000},[43,6157,5054],{"class":4779},[43,6159,6160],{"class":4532},"($cleanJson, ",[43,6162,75],{"class":4779},[43,6164,5062],{"class":4532},[14,6166,6167],{},[36,6168,6169],{},"Практические рекомендации",[14,6171,6172],{},[36,6173,6174],{},"Для продакшена с критичными данными:",[2016,6176,6177,6182,6194,6206,6219,6224],{},[1331,6178,6179],{},[36,6180,6181],{},"Облако:",[1331,6183,6184],{},[2016,6185,6186],{},[1331,6187,6188,90,6191,6193],{},[36,6189,6190],{},"OpenAI GPT-4.1",[36,6192,4230],{}," — Structured Outputs со строгим соблюдением переданной JSON-схемы.",[1331,6195,6196],{},[2016,6197,6198],{},[1331,6199,6200,90,6203,6205],{},[36,6201,6202],{},"Anthropic Claude Sonnet 4",[36,6204,4179],{}," — JSON через tool use, гарантированно валидный и идеально подходящий для сложных многошаговых сценариев.",[1331,6207,6208],{},[2016,6209,6210],{},[1331,6211,6212,90,6215,6218],{},[36,6213,6214],{},"Google Gemini 2.5 Pro",[36,6216,6217],{},"Flash"," — нативный JSON Mode + Controlled Generation с явным указанием схемы.",[1331,6220,6221],{},[36,6222,6223],{},"Локально:",[1331,6225,6226],{},[2016,6227,6228],{},[1331,6229,6230,6233],{},[36,6231,6232],{},"vLLM с guided decoding + сильная модель",": Qwen 3 32B, DeepSeek V3.1 (развёрнутая через vLLM), Mistral Small 3 24B. Это даёт 100% валидный JSON на собственной инфраструктуре без компромиссов по приватности.",[14,6235,6236],{},[36,6237,6238],{},"Для локального запуска с Ollama:",[2016,6240,6241,6244,6247],{},[1331,6242,6243],{},"Используйте встроенную поддержку JSON Schema: передайте желаемую структуру через параметр format (с версии Ollama 0.5.0+). Модель будет сгенерирована с грамматикой, гарантирующей точное соответствие схеме.",[1331,6245,6246],{},"Рекомендуемые модели: Qwen 3 8B (универсальная), Mistral Small 3 24B (с упором на код и логику), Llama 4 Scout (если хватает памяти). Для простых задач отлично работают Phi-4-mini или Gemma 3 4B.",[1331,6248,6249],{},"Паттерны с XML-тегами и повторными попытками (retry) больше не обязательны — грамматика исключает невалидный вывод на корню.",[14,6251,6252],{},[36,6253,6254],{},"Для маленьких моделей (\u003C 7B):",[2016,6256,6257,6260,6263],{},[1331,6258,6259],{},"Принудительная JSON-грамматика гарантирует валидность даже на скромных моделях, однако смысловое наполнение может уступать старшим собратьям.",[1331,6261,6262],{},"Чтобы повысить точность, обязательно добавляйте few-shot примеры в промпт — это помогает модели лучше понять, какие данные ожидаются в полях.",[1331,6264,6265],{},"Для критичных приложений придерживайтесь простых схем (один–два уровня вложенности) и всегда проверяйте смысловую корректность ответа.",[4166,6267,6269],{"id":6268},"_4-специальные-токены-chat-templates","4. Специальные токены (Chat Templates)",[14,6271,6272],{},"У разных моделей есть свои особенности разметки диалога:",[2016,6274,6275,6283,6291],{},[1331,6276,6277,1941,6280],{},[36,6278,6279],{},"Mistral:",[1745,6281,6282],{},"[INST] Инструкция [\u002FINST] Ответ",[1331,6284,6285,1941,6288],{},[36,6286,6287],{},"Llama 3:",[1745,6289,6290],{},"\u003C|start_header_id|>user\u003C|end_header_id|> Сообщение \u003C|eot_id|>",[1331,6292,6293,1941,6296],{},[36,6294,6295],{},"ChatML (OpenAI):",[1745,6297,6298],{},"\u003C|im_start|>Предоставьте контекст и\u002Fили инструкции для модели.\u003C|im_end|>",[21,6300],{},[24,6302,6304],{"id":6303},"_6-почему-сделай-мне-хорошо-не-работает-сила-детализации","6. Почему «сделай мне хорошо» не работает: Сила детализации",[14,6306,6307,6308,6311],{},"А теперь главный практический вывод. Почему запрос «",[17,6309,6310],{},"сделай мне хорошо","» не работает?",[14,6313,6314],{},"Потому что LLM не может прочитать ваши мысли. Если вы не описали требование в промпте, его для модели не существует.\nМодель работает по принципу близости токенов — она сильнее всего связывает слова, которые стоят рядом в вашем запросе.\nЧем детальнее запрос, тем точнее результат.",[14,6316,6317],{},"Давайте посмотрим на конкретный кейс с PHP.",[14,6319,6320,6323,6324,6327,6328,6331],{},[36,6321,6322],{},"Плохой запрос:"," «",[17,6325,6326],{},"Напиши скрипт на PHP для сохранения пользователя","». Что вы получите?\nСкорее всего, устаревший код с ",[1745,6329,6330],{},"mysql_query"," (который давно deprecated) или спагетти-код без валидации, без обработки ошибок, без типизации.\nМодель сделала то, что вы попросили — написала скрипт. Но она не знает, что вам нужен production-ready код.",[14,6333,6334,6323,6337,6344],{},[36,6335,6336],{},"Хороший запрос:",[17,6338,6339,6340,6343],{},"Напиши класс на PHP 8.5 для сохранения пользователя.\nИспользуй Clean Architecture, строгую типизацию (",[1745,6341,6342],{},"declare(strict_types=1)","), паттерн Repository, PDO для работы с базой данных и кастомные исключения.\nДобавь PHPDoc для всех методов","». Что вы получите?\nГотовый к использованию код, который соответствует современным стандартам, с правильной архитектурой, типизацией и документацией.",[14,6346,6347],{},"Разница колоссальная. И эта разница — в детализации запроса.",[14,6349,6350,6351,6354,6355,6358],{},"Еще один важный инструмент — ",[36,6352,6353],{},"System Prompt",". Это инструкция, которая действует на протяжении всего диалога.\nНапример: «",[17,6356,6357],{},"Ты опытный PHP-разработчик с 10-летним стажем. Ты всегда проверяешь входные данные.\nТы используешь PSR-12. Ты пишешь PHPDoc для всех публичных методов","».\nЭтот промпт задает контекст и роль модели для всего разговора.",[123,6360,6362],{"id":6361},"паттерны-промпт-инжиниринга","Паттерны промпт-инжиниринга",[4166,6364,6366],{"id":6365},"паттерн-1-chain-of-thought-cot-думай-шаг-за-шагом","Паттерн 1: Chain of Thought (CoT) — \"Думай шаг за шагом\"",[14,6368,6369],{},"Модели гораздо лучше решают сложные задачи, если явно попросить их рассуждать вслух. Это особенно важно для рефакторинга, анализа кода, отладки.",[14,6371,6372],{},[36,6373,6374],{},"Плохой промпт:",[1737,6376,6379],{"className":6377,"code":6378,"language":1742,"meta":1743},[1740],"Найди баг в этом PHP-коде и исправь его.\n",[1745,6380,6378],{"__ignoreMap":1743},[14,6382,6383],{},"Модель может пропустить тонкую ошибку или предложить неверное решение.",[14,6385,6386],{},[36,6387,6388],{},"Хороший промпт с CoT:",[1737,6390,6393],{"className":6391,"code":6392,"language":1742,"meta":1743},[1740],"Проанализируй этот PHP-код шаг за шагом:\n\n1. Сначала опиши, что делает каждая функция\n2. Затем найди потенциальные баги (учти race conditions, SQL injection, \n   проблемы с типами)\n3. Для каждого бага объясни, почему он опасен\n4. Предложи исправление с примером кода\n\n\u003Ccode>\n\u003C?php\nfunction getUserById($id) {\n    global $db;\n    $result = $db->query(\"SELECT * FROM users WHERE id = $id\");\n    return $result->fetch();\n}\n\u003C\u002Fcode>\n",[1745,6394,6392],{"__ignoreMap":1743},[14,6396,6397,6400],{},[36,6398,6399],{},"Почему это работает:"," Модель вынуждена \"пройтись\" по коду логически, а не угадывать ответ. Качество исправлений вырастает на 30-50% по бенчмаркам.",[4166,6402,6404],{"id":6403},"паттерн-2-few-shot-примеры-в-промпте","Паттерн 2: Few-shot — примеры в промпте",[14,6406,6407],{},"Модель учится \"на лету\" из примеров, которые вы даете в промпте. Это критически важно для задач классификации, извлечения данных, форматирования.",[14,6409,6410],{},[36,6411,6412],{},"Пример для извлечения сущностей из логов:",[1737,6414,6417],{"className":6415,"code":6416,"language":1742,"meta":1743},[1740],"Извлеки из текста лога уровень, сообщение и контекст.\n\nПример 1:\nТекст: \"[ERROR] Connection failed: timeout after 30s (db=primary)\"\nОтвет: {\"level\": \"ERROR\", \"message\": \"Connection failed: timeout after 30s\", \"context\": {\"db\": \"primary\"}}\n\nПример 2:\nТекст: \"[INFO] User logged in successfully (user_id=123, ip=192.168.1.1)\"\nОтвет: {\"level\": \"INFO\", \"message\": \"User logged in successfully\", \"context\": {\"user_id\": \"123\", \"ip\": \"192.168.1.1\"}}\n\nТекст для обработки:\n\"[WARNING] Disk space low: 5% remaining (server=web-01, path=\u002Fvar\u002Flog)\"\n",[1745,6418,6416],{"__ignoreMap":1743},[14,6420,6421,6423],{},[36,6422,6399],{}," Модель видит паттерн и воспроизводит его. Без примеров она может вернуть JSON в другом формате, с другими ключами или вообще текстом.",[14,6425,6426],{},[36,6427,5304],{},[1737,6429,6431],{"className":4988,"code":6430,"language":4990,"meta":1743,"style":1743},"$examples = [\n    ['input' => '[ERROR] ...', 'output' => ['level' => 'ERROR', ...]],\n    ['input' => '[INFO] ...', 'output' => ['level' => 'INFO', ...]],\n];\n\n$prompt = buildFewShotPrompt($examples, $newLogEntry);\n$response = $llm->generate($prompt, ['response_format' => ['type' => 'json_object']]);\n",[1745,6432,6433,6443,6481,6513,6518,6522,6535],{"__ignoreMap":1743},[43,6434,6435,6438,6440],{"class":4528,"line":4529},[43,6436,6437],{"class":4532},"$examples ",[43,6439,432],{"class":5000},[43,6441,6442],{"class":4532}," [\n",[43,6444,6445,6448,6451,6453,6456,6458,6461,6463,6465,6468,6470,6473,6475,6478],{"class":4528,"line":3502},[43,6446,6447],{"class":4532},"    [",[43,6449,6450],{"class":4786},"'input'",[43,6452,5021],{"class":5000},[43,6454,6455],{"class":4786}," '[ERROR] ...'",[43,6457,3584],{"class":4532},[43,6459,6460],{"class":4786},"'output'",[43,6462,5021],{"class":5000},[43,6464,5024],{"class":4532},[43,6466,6467],{"class":4786},"'level'",[43,6469,5021],{"class":5000},[43,6471,6472],{"class":4786}," 'ERROR'",[43,6474,3584],{"class":4532},[43,6476,6477],{"class":5000},"...",[43,6479,6480],{"class":4532},"]],\n",[43,6482,6483,6485,6487,6489,6492,6494,6496,6498,6500,6502,6504,6507,6509,6511],{"class":4528,"line":3499},[43,6484,6447],{"class":4532},[43,6486,6450],{"class":4786},[43,6488,5021],{"class":5000},[43,6490,6491],{"class":4786}," '[INFO] ...'",[43,6493,3584],{"class":4532},[43,6495,6460],{"class":4786},[43,6497,5021],{"class":5000},[43,6499,5024],{"class":4532},[43,6501,6467],{"class":4786},[43,6503,5021],{"class":5000},[43,6505,6506],{"class":4786}," 'INFO'",[43,6508,3584],{"class":4532},[43,6510,6477],{"class":5000},[43,6512,6480],{"class":4532},[43,6514,6515],{"class":4528,"line":4552},[43,6516,6517],{"class":4532},"];\n",[43,6519,6520],{"class":4528,"line":4562},[43,6521,4565],{"emptyLinePlaceholder":3528},[43,6523,6524,6527,6529,6532],{"class":4528,"line":4568},[43,6525,6526],{"class":4532},"$prompt ",[43,6528,432],{"class":5000},[43,6530,6531],{"class":5009}," buildFewShotPrompt",[43,6533,6534],{"class":4532},"($examples, $newLogEntry);\n",[43,6536,6537,6539,6541,6543,6545,6547,6549,6552,6554,6556,6558,6560,6562],{"class":4528,"line":4578},[43,6538,4997],{"class":4532},[43,6540,432],{"class":5000},[43,6542,5003],{"class":4532},[43,6544,5006],{"class":5000},[43,6546,5010],{"class":5009},[43,6548,6000],{"class":4532},[43,6550,6551],{"class":4786},"'response_format'",[43,6553,5021],{"class":5000},[43,6555,5024],{"class":4532},[43,6557,5027],{"class":4786},[43,6559,5021],{"class":5000},[43,6561,5032],{"class":4786},[43,6563,6564],{"class":4532},"]]);\n",[4166,6566,6568],{"id":6567},"паттерн-3-decomposition-разбиение-сложной-задачи","Паттерн 3: Decomposition — разбиение сложной задачи",[14,6570,6571],{},"Если задача слишком сложная для одного промпта, разбейте её на подзадачи. Это особенно полезно для генерации сложной архитектуры.",[14,6573,6574],{},[36,6575,6374],{},[1737,6577,6580],{"className":6578,"code":6579,"language":1742,"meta":1743},[1740],"Создай систему аутентификации на PHP с JWT, refresh tokens, \nrate limiting и двухфакторной аутентификацией.\n",[1745,6581,6579],{"__ignoreMap":1743},[14,6583,6584],{},"Модель выдаст поверхностный код, не покрывающий все аспекты.",[14,6586,6587],{},[36,6588,6589],{},"Хороший промпт с декомпозицией:",[1737,6591,6594],{"className":6592,"code":6593,"language":1742,"meta":1743},[1740],"Мы строим систему аутентификации. Реализуй ТОЛЬКО первый компонент:\n\nЗадача: Создать класс JwtTokenService на PHP 8.5\n\nТребования:\n- Использование HMAC SHA256 для подписи\n- Поддержка access и refresh токенов с разными TTL\n- Методы: generateAccessToken(), generateRefreshToken(), validateToken()\n- Обработка истекших токенов через кастомное исключение TokenExpiredException\n- Строгая типизация, PHPDoc для всех методов\n\nНе пиши остальные компоненты (контроллеры, middleware) — только этот сервис.\n",[1745,6595,6593],{"__ignoreMap":1743},[14,6597,6598],{},"Затем в следующем запросе:",[1737,6600,6603],{"className":6601,"code":6602,"language":1742,"meta":1743},[1740],"Теперь создай AuthMiddleware, который использует JwtTokenService...\n",[1745,6604,6602],{"__ignoreMap":1743},[14,6606,6607,6609],{},[36,6608,6399],{}," Модель фокусируется на одной задаче и выдает production-ready код. Каждый компонент можно протестировать отдельно.",[4166,6611,6613],{"id":6612},"паттерн-4-generated-knowledge-модель-генерирует-контекст","Паттерн 4: Generated Knowledge — модель генерирует контекст",[14,6615,6616],{},"Попросите модель сначала сгенерировать релевантные знания, а потом использовать их для ответа.",[14,6618,6619],{},[36,6620,6621],{},"Пример:",[1737,6623,6626],{"className":6624,"code":6625,"language":1742,"meta":1743},[1740],"Шаг 1: Перечисли 5 лучших практик безопасности для PHP-приложений, \nработающих с пользовательскими данными.\n\nШаг 2: Используя эти практики, проверь этот код и предложи улучшения:\n\u003Ccode>...\u003C\u002Fcode>\n",[1745,6627,6625],{"__ignoreMap":1743},[14,6629,6630,6632],{},[36,6631,6399],{}," Модель \"вспоминает\" релевантные знания перед анализом, что повышает качество рекомендаций.",[4166,6634,6636],{"id":6635},"паттерн-5-react-reason-act-мостик-к-агентам","Паттерн 5: ReAct (Reason + Act) — мостик к агентам",[14,6638,6639],{},"Это основа работы агентов. Модель чередует рассуждения и действия.",[14,6641,6642],{},[36,6643,6644],{},"Пример промпта для агента:",[1737,6646,6649],{"className":6647,"code":6648,"language":1742,"meta":1743},[1740],"Ты PHP-разработчик с доступом к инструментам:\n- read_file(path) — читает файл\n- run_tests() — запускает PHPUnit\n- search_codebase(query) — ищет по коду\n\nЗадача: Исправь падающий тест UserServiceTest::testCreateUser\n\nДумай вслух:\n1. Какие файлы нужно прочитать?\n2. Какой инструмент вызвать?\n3. Что показал результат?\n4. Что делать дальше?\n\nФормат ответа:\nThought: [твои рассуждения]\nAction: [инструмент(аргументы)]\n",[1745,6650,6648],{"__ignoreMap":1743},[14,6652,6653],{},"Почему это работает: Модель получает возможность \"исследовать\" кодовую базу, а не гадать.",[123,6655,6657],{"id":6656},"антипаттерны-промпт-инжиниринга-чего-не-делать","Антипаттерны промпт-инжиниринга (чего НЕ делать)",[4166,6659,6661],{"id":6660},"антипаттерн-1-негативные-инструкции","Антипаттерн 1: Негативные инструкции",[14,6663,6664],{},[36,6665,6666],{},"Плохо:",[1737,6668,6671],{"className":6669,"code":6670,"language":1742,"meta":1743},[1740],"Не используй устаревшие функции.\nНе забывай про обработку ошибок.\n",[1745,6672,6670],{"__ignoreMap":1743},[14,6674,6675],{},[36,6676,6677],{},"Хорошо:",[1737,6679,6682],{"className":6680,"code":6681,"language":1742,"meta":1743},[1740],"Используй только функции PHP 8.5+.\nДля каждой операции с БД добавляй try-catch с логированием.\n",[1745,6683,6681],{"__ignoreMap":1743},[14,6685,6686,6689],{},[36,6687,6688],{},"Почему:"," Модель плохо понимает отрицания. Она может сфокусироваться на \"устаревших функциях\" и начать их использовать. Позитивные инструкции работают надежнее.",[4166,6691,6693],{"id":6692},"антипаттерн-2-перегрузка-промпта","Антипаттерн 2: Перегрузка промпта",[14,6695,6696],{},[36,6697,6666],{},[1737,6699,6702],{"className":6700,"code":6701,"language":1742,"meta":1743},[1740],"Ты эксперт. Используй PSR-12. Пиши PHPDoc. Обрабатывай ошибки. \nИспользуй Clean Architecture. Добавь тесты. Оптимизируй производительность. \nСледуй SOLID. Используй dependency injection. Пиши комментарии. \nПроверяй входные данные. Логируй все действия. Используй кэширование.\n... \n(20+ требований в одном промпте)\n",[1745,6703,6701],{"__ignoreMap":1743},[14,6705,6706],{},[36,6707,6677],{},[1737,6709,6712],{"className":6710,"code":6711,"language":1742,"meta":1743},[1740],"Главные приоритеты (в порядке важности):\n1. Строгая типизация PHP 8.5\n2. Обработка ошибок через try-catch\n3. PHPDoc для публичных методов\n\nОстальное — по возможности.\n",[1745,6713,6711],{"__ignoreMap":1743},[14,6715,6716,6718],{},[36,6717,6688],{}," Модель теряет фокус при слишком длинных инструкциях. Приоритизация помогает ей понять, что критично, а что — опционально.",[4166,6720,6722],{"id":6721},"антипаттерн-3-отсутствие-примеров","Антипаттерн 3: Отсутствие примеров",[14,6724,6725],{},[36,6726,6666],{},[1737,6728,6731],{"className":6729,"code":6730,"language":1742,"meta":1743},[1740],"Верни результат в формате JSON.\n",[1745,6732,6730],{"__ignoreMap":1743},[14,6734,6735],{},[36,6736,6677],{},[1737,6738,6741],{"className":6739,"code":6740,"language":1742,"meta":1743},[1740],"Верни результат в формате JSON. Пример:\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"user_id\": 123,\n    \"action\": \"created\"\n  }\n}\n",[1745,6742,6740],{"__ignoreMap":1743},[14,6744,6745,6747],{},[36,6746,6688],{}," Без примера модель может интерпретировать \"формат JSON\" по-своему (другие ключи, другая структура, вложенность).",[4166,6749,6751],{"id":6750},"антипаттерн-4-противоречивые-инструкции","Антипаттерн 4: Противоречивые инструкции",[14,6753,6754],{},[36,6755,6666],{},[1737,6757,6760],{"className":6758,"code":6759,"language":1742,"meta":1743},[1740],"Напиши максимально короткий код.\nДобавь подробные комментарии к каждой строке.\n",[1745,6761,6759],{"__ignoreMap":1743},[14,6763,6764],{},[36,6765,6677],{},[1737,6767,6770],{"className":6768,"code":6769,"language":1742,"meta":1743},[1740],"Напиши лаконичный код (без избыточных абстракций).\nДобавь PHPDoc только для публичных методов.\n",[1745,6771,6769],{"__ignoreMap":1743},[14,6773,6774,6776],{},[36,6775,6688],{}," Модель будет метаться между противоречиями и выдаст неоптимальный результат.",[4166,6778,6780],{"id":6779},"антипаттерн-5-ты-эксперт-без-конкретики","Антипаттерн 5: \"Ты эксперт\" без конкретики",[14,6782,6783],{},[36,6784,6666],{},[1737,6786,6789],{"className":6787,"code":6788,"language":1742,"meta":1743},[1740],"Ты эксперт по PHP.\n",[1745,6790,6788],{"__ignoreMap":1743},[14,6792,6793],{},[36,6794,6677],{},[1737,6796,6799],{"className":6797,"code":6798,"language":1742,"meta":1743},[1740],"Ты senior PHP-разработчик с 10-летним опытом в:\n- Laravel и Symfony\n- Clean Architecture и DDD\n- Оптимизации производительности\n- Безопасности веб-приложений\n\nТы следуешь принципам:\n- PSR-12 для стиля кода\n- SOLID для архитектуры\n- TDD для тестирования\n",[1745,6800,6798],{"__ignoreMap":1743},[14,6802,6803,6805],{},[36,6804,6688],{}," \"Эксперт\" — это размытое понятие. Конкретные навыки и принципы дают модели четкий контекст.",[4166,6807,6809],{"id":6808},"антипаттерн-6-игнорирование-формата-вывода","Антипаттерн 6: Игнорирование формата вывода",[14,6811,6812],{},[36,6813,6666],{},[1737,6815,6818],{"className":6816,"code":6817,"language":1742,"meta":1743},[1740],"Проанализируй этот код и скажи, есть ли баги.\n",[1745,6819,6817],{"__ignoreMap":1743},[14,6821,6822],{},"Модель вернет текст на 500 слов, который сложно распарсить.",[14,6824,6825],{},[36,6826,6677],{},[1737,6828,6831],{"className":6829,"code":6830,"language":1742,"meta":1743},[1740],"Проанализируй этот код. Верни результат СТРОГО в формате:\n{\n  \"has_bugs\": true\u002Ffalse,\n  \"bugs\": [\n    {\n      \"line\": номер_строки,\n      \"severity\": \"critical|warning|info\",\n      \"description\": \"описание\",\n      \"fix\": \"предложение по исправлению\"\n    }\n  ]\n}\n",[1745,6832,6830],{"__ignoreMap":1743},[14,6834,6835,6837],{},[36,6836,6688],{}," Без четкого формата вывод придется парсить вручную или писать сложный regex.",[123,6839,6841],{"id":6840},"чек-лист-хорошего-промпта","Чек-лист хорошего промпта",[14,6843,6844],{},"Перед отправкой запроса проверьте:",[1328,6846,6847,6858,6869,6880,6891,6902],{},[1331,6848,6849,6850],{},"Роль и контекст\n",[2016,6851,6852,6855],{},[1331,6853,6854],{},"Указана роль модели (кто она, какой опыт)",[1331,6856,6857],{},"Описан контекст задачи (зачем мы это делаем)",[1331,6859,6860,6861],{},"Четкая задача\n",[2016,6862,6863,6866],{},[1331,6864,6865],{},"Сформулирована одна конкретная задача (не \"сделай всё\")",[1331,6867,6868],{},"Использованы позитивные инструкции (\"делай X\", а не \"не делай Y\")",[1331,6870,6871,6872],{},"Требования\n",[2016,6873,6874,6877],{},[1331,6875,6876],{},"Приоритизированы (что критично, что опционально)",[1331,6878,6879],{},"Конкретны (PHP 8.5, а не \"современный PHP\")",[1331,6881,6882,6883],{},"Формат вывода\n",[2016,6884,6885,6888],{},[1331,6886,6887],{},"Указан точный формат (JSON, XML, Markdown)",[1331,6889,6890],{},"Дан пример ожидаемого ответа",[1331,6892,6893,6894],{},"Ограничения\n",[2016,6895,6896,6899],{},[1331,6897,6898],{},"Указаны лимиты (длина ответа, используемые библиотеки)",[1331,6900,6901],{},"Указано, что делать, если задача невыполнима (\"скажи 'не знаю'\")",[1331,6903,6904,6905],{},"Контекстные данные\n",[2016,6906,6907,6910],{},[1331,6908,6909],{},"Данные отделены от инструкций (XML-теги)",[1331,6911,6912],{},"Нет противоречий между инструкциями и данными",[123,6914,6916],{"id":6915},"практический-пример-от-плохого-к-идеальному-промпту","Практический пример: от плохого к идеальному промпту",[14,6918,6919,6922],{},[36,6920,6921],{},"Задача:"," Нужно написать PHP-класс для работы с кэшем.",[14,6924,6925],{},[36,6926,6927],{},"Уровень 1 — Плохо:",[1737,6929,6932],{"className":6930,"code":6931,"language":1742,"meta":1743},[1740],"Напиши класс для кэша на PHP.\n",[1745,6933,6931],{"__ignoreMap":1743},[14,6935,6936,6937,6940],{},"Результат: Простой класс с ",[1745,6938,6939],{},"file_put_contents",", без интерфейсов, без обработки ошибок.",[14,6942,6943],{},[36,6944,6945],{},"Уровень 2 — Лучше:",[1737,6947,6950],{"className":6948,"code":6949,"language":1742,"meta":1743},[1740],"Напиши класс Cache на PHP 8.5 для работы с файловым кэшем.\nИспользуй строгую типизацию. Добавь методы get, set, delete.\n",[1745,6951,6949],{"__ignoreMap":1743},[14,6953,6954],{},"Результат: Базовый класс с типизацией, но без интерфейсов, без TTL, без сериализации.",[14,6956,6957],{},[36,6958,6959],{},"Уровень 3 — Хорошо:",[1737,6961,6964],{"className":6962,"code":6963,"language":1742,"meta":1743},[1740],"Напиши систему кэширования на PHP 8.5:\n\n1. Интерфейс CacheInterface с методами:\n   - get(string $key, mixed $default = null): mixed\n   - set(string $key, mixed $value, int $ttl = 3600): bool\n   - delete(string $key): bool\n   - has(string $key): bool\n\n2. Реализация FileCache:\n   - Хранение в директории \u002Ftmp\u002Fcache\n   - Сериализация через serialize\u002Funserialize\n   - Автоматическая очистка истекших ключей при get()\n   - Обработка ошибок через CacheException\n\n3. Требования:\n   - declare(strict_types=1)\n   - PHPDoc для всех методов\n   - PSR-12\n   - Без внешних зависимостей\n",[1745,6965,6963],{"__ignoreMap":1743},[14,6967,6968],{},"Результат: Production-ready код с интерфейсом, реализацией, обработкой ошибок, документацией.",[14,6970,6971],{},[36,6972,6973],{},"Уровень 4 — Идеально (с CoT и примерами):",[1737,6975,6978],{"className":6976,"code":6977,"language":1742,"meta":1743},[1740],"Ты senior PHP-разработчик, специализирующийся на инфраструктурном коде.\n\nЗадача: Создать систему кэширования на PHP 8.5.\n\nШаг 1: Опиши, какие проблемы решает кэш (контекст)\nШаг 2: Спроектируй интерфейс CacheInterface\nШаг 3: Реализуй FileCache с учетом:\n  - Race conditions (два процесса пишут одновременно)\n  - Сериализации сложных объектов\n  - Атомарности операций\n  - Очистки истекших ключей\n\nТребования:\n- declare(strict_types=1)\n- PHPDoc для всех методов\n- PSR-12\n- Обработка ошибок через кастомные исключения\n\nПример использования:\n```php\n$cache = new FileCache('\u002Ftmp\u002Fcache');\n$cache->set('user:123', ['name' => 'Иван'], 3600);\n$user = $cache->get('user:123'); \u002F\u002F ['name' => 'Иван']\n``\n\nВерни результат в виде двух блоков кода: интерфейс и реализация.\n",[1745,6979,6977],{"__ignoreMap":1743},[14,6981,6982],{},"Результат: Архитектурно грамотный код с учетом edge cases, готовый к продакшену.",[123,6984,6986],{"id":6985},"для-менеджеров-как-формулировать-требования-для-llm-задач","Для менеджеров: как формулировать требования для LLM-задач",[14,6988,6989],{},"Если вы ставите задачу разработчику, который будет использовать LLM, включите в ТЗ:",[1328,6991,6992,6998,7004,7010,7016],{},[1331,6993,6994,6997],{},[36,6995,6996],{},"Входные данные:"," Что именно будет подаваться на вход модели? (текст, JSON, код, логи)",[1331,6999,7000,7003],{},[36,7001,7002],{},"Ожидаемый выход:"," В каком формате должен быть результат? (JSON с конкретной схемой, Markdown, PHP-код)",[1331,7005,7006,7009],{},[36,7007,7008],{},"Критерии качества:"," Что значит \"хороший результат\"? (валидный JSON, код без багов, ответ до 100 слов)",[1331,7011,7012,7015],{},[36,7013,7014],{},"Edge cases:"," Что делать, если задача невыполнима? (вернуть ошибку, сказать \"не знаю\", использовать fallback)",[1331,7017,7018,7021],{},[36,7019,7020],{},"Примеры:"," Дайте 2-3 примера \"вход → выход\".",[14,7023,7024],{},"Это сэкономит десятки итераций промптинга и ускорит разработку в разы.",[21,7026],{},[24,7028,7030],{"id":7029},"_7-эволюция-почему-простых-промптов-иногда-недостаточно-агенты-и-инструменты","7. Эволюция: Почему простых промптов иногда недостаточно (Агенты и Инструменты)",[14,7032,7033],{},"Но даже самые детальные промпты имеют ограничение. Модель видит только то, что вы написали в запросе.\nОна не видит ваш код, вашу базу данных, ваши файлы.",[14,7035,7036,7037,1052],{},"И здесь на сцену выходят ",[36,7038,7039],{},"агенты",[14,7041,7042],{},"В чем разница между простой LLM и агентом? Простая LLM — это мозг в банке.\nОна знает только свои веса и то, что вы написали в промпте.\nОна не видит ваш код, если вы его не скопировали (а скопировать весь проект невозможно — не влезет в контекст).",[14,7044,7045],{},"Агент — это LLM плюс инструменты. Это мозг с руками.\nАгент может принять решение вызвать функцию: прочитать файл, сделать запрос к базе данных, выполнить bash-команду.\nОн получает реальный результат и на его основе дает точный ответ.",[14,7047,7048,7049,7052,7053,7063],{},"Как это работает?\nМодель работает по циклу: видит задачу, понимает, что ей не хватает данных, и сама запрашивает инструмент.\nНапример: «",[17,7050,7051],{},"Мне нужно прочитать src\u002FConfig.php, чтобы дать совет","».\nОна возвращает структурированный запрос: «",[17,7054,7055,7056,7059,7060],{},"Вызови функцию ",[1745,7057,7058],{},"read_file"," с аргументом ",[1745,7061,7062],{},"src\u002FConfig.php","».\nВаш PHP-код перехватывает этот запрос, выполняет реальное чтение файла, возвращает результат обратно в модель.\nИ модель генерирует ответ на основе реального кода.",[14,7065,7066,7069],{},[36,7067,7068],{},"Эффект для разработчиков:"," Качество результата вырастает на порядок.\nВместо абстрактных советов по PHP вы получаете анализ вашего конкретного кода, потому что агент реально прочитал локальный файл через предоставленный ему инструмент.",[21,7071],{},[24,7073,7075],{"id":7074},"_8-заключение","8. Заключение",[14,7077,7078],{},"Подведем итоги.",[14,7080,7081],{},"LLM — это не магия, а управляемый вероятностный движок. Успех работы с ним зависит от трех факторов:",[1328,7083,7084,7090,7096],{},[1331,7085,7086,7089],{},[36,7087,7088],{},"Выбор модели:"," правильный размер и квантование под вашу задачу и ресурсы.",[1331,7091,7092,7095],{},[36,7093,7094],{},"Среда запуска:"," облако для скорости и мощности, локально для приватности и контроля.",[1331,7097,7098,7101],{},[36,7099,7100],{},"Структурированный промпт:"," использование XML-тегов, JSON Mode, детализация требований.",[14,7103,7104],{},"Чем лучше вы понимаете, как работает модель, тем предсказуемее результат.\nИ чем детальнее вы описываете задачу, тем точнее модель её решает.",[7106,7107,7108],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":1743,"searchDepth":3499,"depth":3499,"links":7110},[7111,7112,7119,7134,7135,7143,7163,7164],{"id":3545,"depth":3502,"text":3546},{"id":3569,"depth":3502,"text":3570,"children":7113},[7114,7115,7116,7117,7118],{"id":3594,"depth":3499,"text":3595},{"id":3629,"depth":3499,"text":3630},{"id":3676,"depth":3499,"text":3677},{"id":3749,"depth":3499,"text":3750},{"id":3797,"depth":3499,"text":3798},{"id":3832,"depth":3502,"text":3833,"children":7120},[7121,7122,7123,7124,7125,7126,7127,7133],{"id":3874,"depth":3499,"text":3875},{"id":3963,"depth":3499,"text":3964},{"id":4002,"depth":3499,"text":4003},{"id":4038,"depth":3499,"text":4039},{"id":4103,"depth":3499,"text":4104},{"id":4128,"depth":3499,"text":4129},{"id":4160,"depth":3499,"text":4161,"children":7128},[7129,7130,7131,7132],{"id":4168,"depth":4552,"text":4169},{"id":4207,"depth":4552,"text":4208},{"id":4245,"depth":4552,"text":4246},{"id":4269,"depth":4552,"text":4270},{"id":4302,"depth":3499,"text":4303},{"id":4457,"depth":3502,"text":4458},{"id":4487,"depth":3502,"text":4488,"children":7136},[7137],{"id":4497,"depth":3499,"text":4498,"children":7138},[7139,7140,7141,7142],{"id":4501,"depth":4552,"text":4502},{"id":4514,"depth":4552,"text":4515},{"id":4758,"depth":4552,"text":4759},{"id":6268,"depth":4552,"text":6269},{"id":6303,"depth":3502,"text":6304,"children":7144},[7145,7152,7160,7161,7162],{"id":6361,"depth":3499,"text":6362,"children":7146},[7147,7148,7149,7150,7151],{"id":6365,"depth":4552,"text":6366},{"id":6403,"depth":4552,"text":6404},{"id":6567,"depth":4552,"text":6568},{"id":6612,"depth":4552,"text":6613},{"id":6635,"depth":4552,"text":6636},{"id":6656,"depth":3499,"text":6657,"children":7153},[7154,7155,7156,7157,7158,7159],{"id":6660,"depth":4552,"text":6661},{"id":6692,"depth":4552,"text":6693},{"id":6721,"depth":4552,"text":6722},{"id":6750,"depth":4552,"text":6751},{"id":6779,"depth":4552,"text":6780},{"id":6808,"depth":4552,"text":6809},{"id":6840,"depth":3499,"text":6841},{"id":6915,"depth":3499,"text":6916},{"id":6985,"depth":3499,"text":6986},{"id":7029,"depth":3502,"text":7030},{"id":7074,"depth":3502,"text":7075},"AI","\u002Fcovers\u002Fllm-itself.webp","2026-07-23","Практическое руководство по большим языковым моделям: токены, температура, выбор модели, локальный и облачный запуск, форматы промптов и работа с агентами.",{},"\u002Fblog\u002Fllm-itself",{"title":3540,"description":7168},"blog\u002Fllm-itself",[3534,3535,7174,4990],"prompt","-dXCphS-6uU-LrCEXEV0ls9pH2CjEIfrAjquDXCoxoE",1792405819914]