В “Системном мышлении” переписал ещё 3%, так что прошёл экватор – осталось ровно 50%. Вот один абзац из сегодняшнего куска, там идёт продолжение темы про интересы. Важные объекты и их связи из мета-мета-модели дают чеклист того, о чём нужно обязательно подумать, и что вам обязательно нужно сделать в ходе разговора:
• Увести ваше внимание с актёра на его практику, определить её по делам и словам
• Переобозвать агента по роли
• понять предмет ролевого интереса собеседника::роль
• понять предпочтение собеседника::роль в предмете интереса (скажем, какой-то архитектурной характеристике)
• Разделить переговоры по отражающему предмет интереса методу описания и значению важной характеристики (одни сложные переговоры по двум темам сразу много хуже двух более простых по разным темам)
• Учесть в этих переговорах наличие других ролей с аналогичными предметами интереса, включить актёров, играющих эти роли, в переговоры. Нельзя «договориться со всеми»! Любая потом договорка этих «всех» между собой сорвёт их договорённости с вами. Единственный выход – договорить всех вокруг себя! Предмет интереса может быть у этих «всех» один и тот же, но предпочтения — разные! И ещё по ходу проекта могут меняться приоритеты в интересах: в какой-то момент «цена решает всё», но потом через месяц окажется, что «за ценой не постоим, но вот вес системы решает всё!», будьте к такому готовы.
В 2014 году у меня была статья на тему полиполиглотности (Полиполиглотность: ailev — LiveJournal), там ставился вопрос на тему “Сколько языков надо знать образованному человеку” (и ещё были уточнены затраты времени на изучение языков, “Как зажечь мастерство”, Как зажечь мастерство: ailev — LiveJournal). Там речь шла в том числе о классах языков (естественные языки, искусственные языки коих пару тысяч на выбор в https://cals.info/language/?jrk, псевдокоды типа “архитектурных языков” и всяческих “языков моделирования” в том числе неклассических типа labanotation Labanotation - Wikipedia, языки программирования, строго формальные языки вроде Agda и Coq). Но можно вспомнить ещё и гирлянды букв, о которых рассуждал Рома Михайлов (Вчера у нас сложилась беседа с одним физиком, но она как началась… - САП — LiveJournal и там ищите “гирлянда” в комментах). И проект FUNC от Алана Кея (материалы в https://tinlizzie.org/IA/index.php/Papers_from_Viewpoints_Research_Institute), где он предлагал сложные DSL, сокращающие в разы и разы объём программирования. Потом дискуссию о DSL standalone и embedded, потом победили embedded (Хост-языки для встроенных DSL перестают упоминаться. Но они есть.: ailev — LiveJournal) и появились вопросы к хост-языкам, для качественного моделирования на DSL надо было подхакивать компилятор хост-языка (lytdybr: ailev — LiveJournal и там дальше по ссылкам, особенно раздел “Computer science в поддержку моделирования: хитрая физика ведёт к хитрой математике, которая ведёт к хитрым языкам, которые ведут к хитрым компиляторам” в Цифровые двойники: физика ведёт математику, математика ведёт компьютерную науку: ailev — LiveJournal), те же “языки на языках”. Ох, я когда-то этим язычеством увлекался, там много интересного. Тот же Ian Piumatra поминал не то что DSL, но mood-specific languages (2008, Языко-ориентированный подход, и даже "языки настроения" (mood-specific languages): ailev — LiveJournal), а в 2009 я писал что-то типа манифеста “Йа – язычнег, дайте мне капище”, Йа -- язычнег, дайте мне капище.: ailev — LiveJournal, где развивал тему множества DSL языков и как с ними совладать). Про тематику SysMoLan я вообще молчу, ибо это оказался промах (вот я это признавал в 2021 году, но ещё как-то рыпался, это было до ChatGPT и Copilots – Системное моделирование на SysMoLan в IME Codia (interactive modeling environment СOda + julIA): ailev — LiveJournal): не учитывалось, что нужно иметь множество уровней формальности изложения, и в онтологическом дереве (“пирамиде знаний”) разные онтологические уровни иметь представленными на языке разной формальности, верхние из которых вообще излагать текстом, подробней я докладывал в разных местах (последний раз на вебинаре https://youtu.be/ilcpsnL1esw, и даже на ontolog forum на ломаном английском https://www.youtube.com/watch?v=G4S-Zrc5qUk). И дальше выход на Software 3.0 (когда интерактивно код пишется на естественном языке, а не на каком-то формальном языке, а вся формализация идёт под капотом – “перевод на дифференцируемый язык высокого уровня Software 2.0 – Дифференцируемое всё: от чёрно-белой картины мира к рябенькой: ailev — LiveJournal, затем оптимизация кода, затем вычисление на машинном языке Software 1.0”). Это не отменяет размышления о языках и не отменяет вопрошания о полиполиглотности, который и для LLM остаётся. Так, современные LLM в их варианте основных провайдеров умности – все они не говорят на системном языке третьего поколения. Так что проблема полиполиглотности как “много классов языков, а в них по многу языков” остаётся, о ней надо думать.
К теме полиполиглотности и обучения в частности, сегодня вспомнили в одном из чатов старинные отмазки «Почему я не выучил английский» в 12 временах английского языка:
Present Simple — У меня никогда нет времени, я всегда очень занят.В чате блога обсуждали сегодня безопасников (с Telegram: Contact @ailev_blog_discussion). У меня какой-нибудь “директор по безопасности” регулярно в группах. Это очень модно, но мало кто понимает, что там делать с этой “безопасностью”. Начинать надо с табуирования слова “безопасность” (ибо под ним ни одной идеи обычно). И тогда оказывается, что есть какая-нибудь “сигнализация”, и разговор идёт в разы и разы быстрее, мы из размахивания руками попадаем в материальный мир обычной инженерии проектов этой самой “сигнализации”, под которыми обычные какие-то эксплуатационные задачи мониторинга, поиска неожиданностей и любых других поломок. Неотличимо становится от какой-то прикладной инженерии, в систему вставляются какие-то чисто технические вещи, чтобы выдерживать какие-то специфические требования “поломок” (ну вот ровно как в двигатель вставляют код реагирования на ситуацию, когда в каком-то трубопроводе упало давление – “поломка”, это ж не “безопасность”, а “проектная авария”. Бывает и “запроектная авария”, которую не предусматривали, там общий resilience в работе. Вот так и к “поломкам безопасности” надо относиться, без придыхания и слова “безопасность” (тем более без различения safety и security в русском, “защита” вообще редко говорится). А дальше Donald Firesmith говорил, что безопасники только по недоразумению не системные инженеры, ибо тоже рассматривают систему целиком и отслеживают свойства системы целиком. Потом я опускаю довольно длинное рассуждение и прихожу к тому, что безопасники по факту полные аналоги архитекторов — у них примерно такой же pipeline (включая всякие требования по ADR и fit function, когда речь идёт о коде) и ровно те же -ilities, что у архитекторов. Отсюда все эти попытки “проблем нормальной работы” выдать как “проблемы безопасности” (скажем, “экономическая безопасность”). Я сам поэтому не выделяю безопасность в отдельную от чего-то в разработке (и там архитектурный и безопасный “технический долг” и ADR и аналоги из безопасности) и архитектуре (предложение платформы/библиотеки в том числе и ограничения по коммуникации, как и у архитектора, поэтому не дублируем работу архитектора). А вот в администрировании я явно поминаю безопасников, ибо они идут по общему конвейеру и свои тесты должны положить туда же, куда архитекторы кладут свои fit function. Так что смело берём современные книжки по архитектуре и DevOps/SRE/Platform Engineering — вот это оно и есть. И дружим с архитектором, идём по его накатанному маршруту и используем его формы работы (если он, конечно, соображает, что делает). Если с архитектурой проблемы, то и с безопасностью будут проблемы.
Past Simple — Я учил английский в школе, но это не помогло.
Future Simple — Начну с понедельника.Present Continuous — Я работаю на двух работах.
Past Continuous — Всю прошлую неделю я плохо спал, башка не варит.
Future Continuous — Буду учить, когда найду свободное время и деньги.Present Perfect — Я попробовал, но ничего не получилось.
Past Perfect — Купил самоучители, в итоге разговаривать не научился.
Future Perfect — Ближе к Новому году найду время и стану учить.Present Perfect Continuous — Учу уже пять лет, но знаю только London is the capital.
Past Perfect Continuous — Раньше на курсы ходил, в итоге завалил экзамен все равно.
Future Perfect Continuous — В сентябре будет десять лет, как я пытаюсь учить английский.
На этой неделе весь мир обсуждает нейросимволические вычисления, в которых LLM вызывается из какого-то фреймворка, в котором её заставляют много раз по-разному подумать над задачей (переформулировать, сгенерировать новые проблемы в богатом мире, предложить решение для текущих и новых проблем, проверить решение, и т.д. – и думать столько, сколько надо, чтобы выдать таки решение, которое затем легко проверяется формально, “подбор решения как ключа в криптографии”):
– DeepMind по-прежнему делает упор на огромные массивы синтетических примеров, “породим синтетический мир, и запустим туда агентов обучаться”. Это делалось в во всей линейке Alpha: AlphaFold, AlphaGo, AlphaCode, а самое свежее – AlphaGeometry, AlphaGeometry: An Olympiad-level AI system for geometry - Google DeepMind. Для меня это путь сразу по нескольким трендам: реализация замечания Stanley про “генераторы проблем” с goldilock для агента (подробней писал в Измерение интеллекта: занимаемся миром/средой/окружением/контекстами/domain, становимся демиургами: ailev — LiveJournal), что выход на open-endedness в решении проблемы создания достаточно богатых миров (тут был не слишком богатый мир геометрии, а генерировалось 100млн ситуаций), а не продвинутых алгоритмов (то есть “синтетические данные, а не продвинутые нейронки”), второе – это работа с критикой в части логики (лёгкая проверка против трудного порождения решения, P!=NP как раз тут, “подбор решения как ключа в криптографии”, критик как раз логический, а нейросетка только генерит варианты решения в цикле). Разнообразие ходов генерации тоже контролируется алгоритмически.
– подход AlphaCodium (отсылка к “Alpha от Codium.ai” очень внятный), который уделывает в том числе и AlphaCode, и варианты chain-of-thought, State-of-the-art Code Generation with AlphaCodium - From Prompt Engineering to Flow Engineering | CodiumAI. В тексте много интересных идей, например, неявная критика тезиса Sutton (график computational effort vs accuracy: если у тебя неограниченный вычислительный ресурс для задачи, то можно посвятить ей универсальный алгоритм, и он когда-нибудь решит задачу, но вот если ухитриться сделать не универсальный алгоритм, а точный, то можно достичь решения влёгкую. И дальше предложен путь для этого, причём опора таки на “универсальный алгоритм с любой LLM как бэкендом” (а не fine-tuned на кодах, как у DeepMind AlphaCode и AlphaCode2), где говорится про не про chain или graph, а сразу о flow с последовательностью шагов препроцессинга в подготовке задачи (основная идея там для меня – это separation of concern со всякими рефлексиями как описаниями проблемы, обращение к S2 в части смарт догадок о причинности входных и выходных данных, а также смарт догадки о допорождение мира в части тестовых примеров, усиление критики), а затем итеративно-эволюционная часть на всех этих smart догадках и предложение о smart mutations в генерации кода и заодно проверке догадок и по поводу решающего проблему кода и по поводу нагенерированных проблемных ситуаций мира, то есть дополнительных тестов). И там ещё интереснейший ход на то, что стадия препроцессинга идёт не совсем в естественном языке, и не в JSON, а в YAML как сериализационном языке, YAML - Wikipedia, ибо generated code often contains single-quote, double-quote, special characters, and so on. LLMs will struggle to validly place these characters inside a JSON format, since a JSON output needs to be surrounded with initial double quotes. In contrast, YAML output with block scaler must only obey indention. Any text or code with proper indention will be a legal one. In addition, YAML output has fewer tokens, hence reducing cost and inference time, and also resulting in increased quality as the model needs to pay attention to fewer tokens that are not essential. По токенам там примерно 64 токена YAML на 80 токенов JSON, хотя синтаксически GPT-4 поддерживает именно JSON для сериализаций. Но: Clearly, generating the code while maintaining only indention is simpler, more readable, and less error-prone. А в критике YAML (даже в википедийной статье отражено) говорят ровно наоборот: людям проще ошибиться в отступах!
– тот же ход на программируемое flow с LLM, но понимаемый как скриптование этого flow на специальном DSL с автоматическим кэшированием key-value (https://medium.com/@plienhar/llm-inference-series-3-kv-caching-unveiled-048152e461c8) сделан с предложением фреймворка SGLang, Fast and Expressive LLM Inference with RadixAttention and SGLang | LMSYS Org. Основное там даже не поддержка самых разных сценариев, но использование автоматического механизма переиспользования этого самого кэширования, его назвали RadixAttention. Победа в 5 times higher throughput compared to existing systems, но для этого пришлось обобщить самые разные сценарии flow, чтобы описать это как Easy LLM Programming with SGLang (Structured Generation Language for LLMs). Чёрт с ним, с KV cach, но сама идея скриптования использования LLM (ибо LLM становится ощутимо умнее, если ей сказать “подумай”, а не “думни разок”) и иметь для этого DSL (на сегодня он встраиваемый в Python) – это уже общее место.
Картинка сегодня авторства you.com – она изображает системного мыслителя в будущем. Все эти нейросетки отображают народные чаяния, в данном случае народный образ мыслителя, народный образ системности и народный образ будущего. При этом мы знаем, кто промыл народные мозги этими образами: Голливуд!