Transcription
Я вот сейчас делаю контент про LLM и иногда замечаю такие комментарии, что-то типа: "LLM пишет код не очень хорошо" или "LLM пишет код некачественный", "LM пишет код небезопасный". Для меня лично это выглядит очень смешно.
Это примерно, как сказать: "У меня кастрюля варит плохой борщ" или что-то типа: "У меня фотоаппараты делают плохие фотографии" или "Я купил кисточку, и они, кисточки, рисуют плохие картины". Вот это настолько же звучит странно.
Я, конечно, понимаю, что LLM там бывают разные. Есть LLM, которые лучше пишут код. Есть, которые хуже пишут код. Но вот без какого-то контекста просто сказать всем, то есть сделать такое обобщение, что вот "весь и там весь всем, все пишут плохой код" – это звучит настолько же глупо, как сказать: "Кастрюля варит плохой борщ".
То есть человек обычно, который вообще никак не разбирается, как запускать LM, как её настраивать, с какими параметрами запускать, как агента настраивать. Он просто как попало что-то где-то там, э-э, взял какую-то, он не знает какую, он не знает, как с ней работать, он какой попало промпт промпт написал и получил какую-то ерунду. И он сделал вывод, значит, классный такой, что "вот всем пишут плохой код". Это очень странный вывод.
И мне кажется, что уже плотненько так вошли в нашу жизнь. Они пишут код лучше, чем большинство программистов. Это уже точно. Кстати, когда какой-то программист говорит, что LLM пишет код некачественный или небезопасный, то обычно этот программист никогда не может дать критерии до оценки. Ну то есть, давай вот, если кто-то уверен, что LM, если кто-то так считает, что LM пишет код некачественный и небезопасный, давайте проведём эксперимент. Я готов на эксперимент. Дайте критерии качества и безопасности до того, как мы будем проводить эксперимент. А потом мы возьмём код, который написан лмкой, и возьмём ваш код, который написан руками, и прогоним его через вот эти вот критерии, которые вы заранее сформулируете, чтобы у нас был абсолютно точный ответ, какой код безопасный, какой небезопасный или какой качественный, какой некачественный. Но обычно такие критерии, они придумываются постфактум. То есть ты сначала должен дать человеку какой-то код, он на него посмотрит и придумает, а что же тут плохого, некачественного или не небезопасного. А вот почему-то код, который написан человеком, он всегда качественный, всегда безопасный. И проблем, конечно, никогда не было до этого.
Короче говоря, для тех, кто хочет разобраться, я вот и пытаюсь сделать этот ролик, чтобы у вас не было вот таких вот предубеждений о том, что "всем плохо пишет код". Нужно научиться работать с ЛМ. Для начала, это всё-таки выбор модели. Вот на, я уже говорил, что прямо на сегодняшний день самая такая нормальная модель, которую можно локально запустить – это Quen 3,627B. Э-э, эту модель нужно и запускать с правильными параметрами. У меня прошлый ролик был о том, как запускать эту модель. То есть, если вы будете запускать её просто с дефолтными параметрами, то код она может выдавать не очень хорошо, потому что у модели есть параметры типа "температура" и куча остальных. Посмотрите предыдущий ролик, в в нём я рассказываю именно вот о запуске, о всех этих ключах, с которыми нужно запустить модель, чтобы она действительно помогала вам генерировать хороший код.
Кроме того, важно настроить правильно и выбрать нормального агента, потому что агент – это тоже крайне важно. Сама модель, она ничего не умеет. То есть сама модель просто может выдавать какой-то ответ. А агент делает огромное количество работы. Агент может запускать какие-то программки, то есть мелкие там lscd и так далее. Агент может читать файлы, агент может обращаться к разным частям системы, агент может, а использовать всякие МЦП. И агент – это сильно важно. То есть не из мм, ну как бы, от не только от модели всё зависит, ещё много чего зависит от агента. Если вы используете VS-код, то можете глянуть, например, на Cine или на Killкод. Это, наверное, наиболее наиболее адекватные агенты. Если нет, то можете глянуть на пи. Мне сейчас нравится. Довольно классный агент. Там сайт p.def. Можете зайти посмотреть на что это такое.
Агента нужно не просто скачать. Если вы просто скачали какого-то агента, то он тоже ничего не знает о вас. Агента нужно ещё и настроить. И у агента есть вот файлы настройки. Самый, наверное, глав главный файл у агента – это System MD. И System MD он лежит в э-э, в Линуксе или в Маке. Это вот в вашем конфиге. То есть, например, там в вашей домашней директории есть точка config папка и там пи, и в нём лежит system MD. Это такой глобальный файлик, который вы можете перенастроить. И в большинстве случаев именно этот файл лучше, наверное, не трогать. Это такой вот дефолтный э-э, дефолтный config, дефолтный промпт, да, который а дефолтный systemмпт, который разработчики зашили внутрь. То есть там написано, как агент должен себя вести, да, какой у него характер, то есть как он отвечает вам и что он должен делать, а что нет. То есть, э, вообще лучше этот файл не трогать, просто знайте, что он есть. Но если вы точно знаете, что вам нужно, то можете, конечно, его переопределить.
Если вы хотите что-то просто добавить, то лучше использовать файл, который называется append system.m. То есть это этот файл нужен для того, чтобы именно добавить что-то к агенту. И лучше всего его трогать, когда вы специально делаете какого-то агента под какую-то конкретную задачу. Например, ты делаешь агента, который только ревьювит код, да? Когда вот какое-то дефолтное поведение агента вам как-то сильно мешает, когда агент пытается быть каким-то универсальным помощником, да, а вы хотите от него что-то одного. Или когда вы хотите дефолтное поведение поменять, вот, например, вы хотите, например, чтоб вам агент всегда там отвечал на русском, например, а не на английском. Или вы хотите какой-то стиль общения его поменять, тогда можно туда лезть.
Ещё у нас есть глобальный файл, который называется Agents MD. То есть у нас есть System MD и Agents MD. System – это файл, который описывает, кто вообще такой агент. А system – это описывает о том, что он вообще знает о о твоей работе. То есть system говорят говорит о том, как он должен себя вести, а Agents MD – это вот ваш стек, ваши процессы, как мы где-то работаем, как мы где-то не работаем. То есть что-то больше о работе. Именно у нас также есть ещё и Agent MD, не глобальный. То есть есть глобальный, который в конфиге лежит, а есть проектный, который лежит всегда в корне проекта agent MD. И тут он уже описывает именно сам проект. То есть у вас условно можно может быть два проекта, один на Пайthне, например, один на каком-нибудь ГОe. И вы по-разному, значит, описываете именно вот эти файлы с точки зрения проекта. Например, вы можете туда записать какие-то правила, типа: "не удаляй никакие файлы без подтверждения" или "не комитети не пуш без подтверждения" или "перед большим рефакторингом сначала покажи план и согласуй его со мной". "Все комментарии пиши на английском в коде". "Название всех переменных на английском" или "не переписывай то, чего тебя просили не трогать". Или "если видишь какую-то проблему, то сначала расскажи о ней и не трогай без спроса". Вот какие-то такие вещи. Также в этом файле описываются именно какие-то вещи относительно вашего стека. Как писать код, как не писать код, какие использовать плагины, какие не использовать, как называть функции, как с кодом работать и так далее.
Но ещё довольно важно, как вы пишете промпты. От того, как вы пишете запрос, сильно зависит и ответ, который вы получаете. Э-э, это точно также, как и, знаете, вот у программистов, если я, например, работал продактом и вообще, когда ты придумываешь какую-то фичу и приносишь её программистам, от тебя требуют большой документации. Ты должен всё расписать. Иногда на фиче ты пишешь по шесть листов, да, детально описывая, как что должно работать, чтобы программисту должно было быть понятно это всё. Но программисты при этом сами, когда пишут промпты, они не задумываются о том, что промпты должны быть ясные. И меня это вообще удивляет. И меня удивляют вот люди, которые даже в комментариях, некоторые программисты вообще сейчас прямо заявляют прямо о том, что "я не хочу писать текст, я хочу просто программировать. Мне писать текст неинтересно". Вот такие люди, мне кажется, первыми идут на выход сейчас. Вот точно. Если ты не умеешь формулировать свою мысль, не хочешь нормально излагать, если ты раньше вот программисты, они действительно ничего не писали. Были программисты, я знаю, которые вот просто читали что-то и писали код. Они не писали ни документацию, за них это какой-нибудь технический писатель писал. Они не писали требования, ничего. И вот, знаете, даже радостность, что сейчас вот эта вот эпоха уходит, когда за программиста, вот так вот программиста окружили и всё для него делали для того, чтобы он только прочитал и написал код. Но вот сейчас такие программисты не нужны. И сейчас такие программисты, которые ничего не писать не могут, ничего, они сильно удивляются, что оказывается нужно требования какие-то писать.
И в моём предыдущем видео я показываю, как у меня моя лэмка написала код по документации, и куча программистов пишет: "Господи, а что делать, если у меня нет документации? А если у меня документации код наплакал, то что мне делать?" И сидишь и думаешь: "Господи, ты что, пишешь проекты, у тебя вообще нет документации?" Или некоторые программисты говорят о том, что "документацию писать – это половина работы", да? И думаешь: "Господи, а что, ты до лмок никогда не писал документацию вообще? Это же, ну, для меня лично это очень странно, когда у тебя есть какой-то проект и нет вообще к нему документации или когда программист не хочет писать документацию." Вот это вот очень странно. Поэтому, мм, ну, очень важный навык сейчас – это умение нормально писать промпт, писать документацию и вообще не забивать на это, как сейчас вот просто меня удивляют программисты, которому которые этому удивляются.
И поэтому и промпты сейчас надо тоже писать нормально. То есть не надо писать: "Напиши мне функцию сортировки". Надо нормально написать: "Напиши мне там функцию на Python 311, которая сортирует там список по ключу date ээ формат какой-нибудь ISO 8611 без внешних библиотек". Вот так. То есть промпт должен быть полный. Но когда человек пишет какой-то промпт: "Напиши мне хорошо", а у него оказывается, что ему выдали плохой код, то, ну, наверное, нужно начать с себя, а не обвинять лэмку в том, что лэмка выдаёт тебе плохой код. Точно так же, когда вы и пишите: "А почему не работает", то вас лэмка тоже не сможет понять. Напишите тоже промпт лэмки по-человечески, как вы заводите, например, баг куда-нибудь. Вы же не не пишите просто: "У меня ничего не работает". Вы же описываете баг по-человечески. Также ээ также лэмки, если что-то не работает, вы должны тоже описывать что-то по-человечески. Там: "У меня не работает там функция calculate, она возвращает non вместо числа, когда я ей передаю такое-то значение. А вот код, ожидаю получить вот это, получаю вот это". По-нормальному. Но как будто бы некоторые программисты вот на это уже не способны, потому что всю жизнь за них всё делали. Им писали документацию, за них писали документацию, им писали вот всё про фичи. Они только садились и писали код. Такие уже не нужны.
Кроме того, если вы используете LLM для того, чтобы писать код, невероятно важная вещь, кроме кроме агента – это настроить МЦП. МЦП – это протокол, то есть сам агент мало что умеет без МЦП. Некоторые агенты сейчас становятся всё более, э, всё больше умеют. То есть раньше, например, такие МЦП там, как File System или как Git надо было отдельно подключать. Сейчас уже большинство агентов умеют читать сразу же ваши файлы без вот этих МЦП и без MЦП Git, потому что это уже встроено. Но всё равно есть некоторые МЦП, которые нужно подключать. МЦП – это такое вот расширение для агента. То есть у вас он даёт дополнительный э контекст агенту. МЦП – это просто такой стандарт протокола. И, собственно, этот протокол позволяет агенту обращаться к какому-то сервису для получения дополнительного контекста.
Некоторые вещи очень важные, наверное, для всех программистов. Вот Контекст 7 – это такой вот МЦП, когда агент у вас пишет код с использованием какой-то библиотеки, он тянет документацию прямо с официального источника и которая актуальна на сегодняшний день. Поэтому вот МЦП, которое называется Контек 7. Прям очень важная штука. Практически, наверное, всегда, на чём бы вы ни программировали, вот всегда подключайте этот МЦП. Обычно просто лэмка, она зафиксирована на какую-то дату, и поэтому она вообще не обладает данными о последних каких-то библиотеках и поэтому может не знать. А с именно с этим ээ с Контек 7 она вот, собственно, понимает, что есть ээ какие-то обновления и как именно нужно вообще писать код.
Также ещё очень классная штука – это search. Нет, не search, se ngx, э-э, такая такой MCP-сервер для поиска. То есть по умолчанию опять же у нас наша LLM не может ничего искать в интернете. Она ограничена вот теми знаниями, которые у неё, которыми её обучили. А с помощью этого МЦП сеервера она сможет ходить ходить куда-то в интернет и искать какие-то какие-то вещи. Как раз Sir XNG, он позволяет искать везде. Есть ещё MCP, который называется FCH, и он идёт уже по конкретному какому-то урлу и там берёт какую-то информацию.
Кроме того, у нас есть такая штука, как рег. Наверное, про рек можно вообще сделать отдельный большой ролик, но если коротко, то – это такая штука, которая помогает искать в каких-то больших объёмах данных. То есть, если у вас сильно большой проект или у вас есть проект, который там разбит на большое количество проектов, то рек помогает с поиском. То есть он ваши какие-то документы разбивает на чанки, потом на эмбединги и потом осуществляет поиск. Все вот эти вот чанки, они хранятся в векторной базе данных. Есть разные векторы, векторные базы данных, там Neofj или quadrant. И это всё тоже поднимается как сервис. И вот хранится хранится там. А МЦ, а ваш агент по МЦП протоколу может обращаться вот к этому РК и получать какие-то, э-э, короче, быстро вести поиск по каким-то вот файлам, э-э, для того, чтобы весь контекст проекта вашего не грузить в лмку. Это часто не нужно, если у вас небольшой проект, но если проект большой или если в проекте огромное количество информации какой-то, это очень хорошо помогает. Например, если вы какой-нибудь юрист, например, и вы хотите сделать какого-то помощника, который помогает вам по какому-то праву, и он помогает не просто выдумывая что-то, а он должен ссылаться на какие-то конкретные законы. И вы можете взять и какие-нибудь все кодексы там Российской Федерации взять и сгрузить ему, дать регу задание, чтобы он это всё индексировал. А потом вы ищете конкретно по вот этим документам что-то, и ваш агент очень может быстро по этому по всему ориентироваться.
В общем-то, всё. Э-э, помните, что LM – это не какая-то магическая штука, которая может работать, а может не работать или может давать плохой код или неплохой код. Это просто инструмент, которым вы пользуетесь. Точно так же, как не кастрюля вам варит борщ, а вы варите борщ самостоятельно. Точно также и ЛМ настраиваете вы. Не она вам что-то выдала, а вы так настроили её, что она вам теперь выдаёт вот это. В общем-то, всё. M.