Полгода я пытался заставить ИИ не врать в сметах. В итоге понял, что проблема была не в ИИ.
Давайте немного по порядку, я - сметчик.
Не разработчик, не ML-инженер, не дата-сайентист. Десять лет считаю сметы по московским городским контрактам: благоустройство, строительство и т.д. Работаю как в программном модуле Смета.ру, так и в хорошо знакомом для всех сметчиков инструменте – Excel. Постоянное взаимодействие с заказчиком и экспертизой, отработка замечаний, корректировок, обновление индексов, загрузка новых дополнений в базу.
Со стороны, скорее всего, работа сметчика выглядит довольно просто. Есть проект объекта, конструктива или проект озеленения. Есть программа Смета.ру. Есть расценки. Сиди и считай.
На самом деле огромная часть времени уходит не на расчет как таковой. Расчет - это технический аспект, как раз самая понятная часть. Гораздо больше времени уходит на поиск нужной информации.
И тут начинается «хождение по мукам» – поиск нужной расценки, определиться с составом работ, понять какой коэффициент применять, что написано в технической части сборника, какое письмо или методика сейчас актуальны.
Иногда само исправление занимает несколько минуты. А поиск нужной информации, или как это правильно сделать – час или и того больше. Кто работает со сметами меня поймет.
У меня недавно была обычная рабочая ситуация: эксперт написал замечание по материалам, принятым по конъюнктурному анализу. Нужно было пересчитать их в базисный уровень цен, правильно показать индекс, правильно разнести значения по графам и еще понять, как это вообще реализовать в Смета.ру.
Реализовать пересчет в самой программе оказалось несложным.
Но, до того, как я это сделал – мне пришлось открыть несколько документов, письма, методику, потом снова программу, потом допер, что смотрю не туда, и все по новому кругу.
И вот в такие моменты начинаешь осознавать - я вроде сметчик, и уже есть достаточно опыта, но полдня трачу на поиск необходимой информации по всей нормативной базе, документации.
Когда появились ИИ-шки, первая мысль была простая, а почему нельзя просто спросить, как у коллеги за соседним столом.
Например:
- Какая здесь расценка?
- Что входит в норматив?
- Почему эксперт требует именно это?
- Какой норматив накладных по этому виду работ?
- Где это написано?
Я, да и как большая часть пользователей ИИ-шек, попробовал ChatGPT. Сначала было ощущение, что все, наконец-то, решено. Потом окунулся в реальную работу. И все стало не так радужно, как я себе представлял.
ИИ-шка отлично объясняла.
Вот вся правда моего взаимодействия с ИИ.
Если спросить, чем ресурсный метод отличается от базисно-индексного, он отвечает нормально. Если попросить простыми словами объяснить смысл замечания эксперта, то часто помогает. Если нужно написать письмо заказчику или разложить сложную формулировку человеческим языком - тоже имеет место быть.
Проблема начиналась там, где нужна была точная инфа.
Я задавал вопрос по нормативу. Он отвечал. Красиво. Уверенно. И неправильно. Причем это выглядело достоверно, но увы, это была лишь иллюзия.
У меня не было ощущения, что ИИ сомневается. Он не писал: «Я не уверен» или «Проверьте источник». Он отвечал так, будто только что открыл нужный норматив.
Сначала решил, что сам плохо сформулировал вопрос.
Второй раз - что неудачная модель.
Третий раз - что нужно написать более жесткий промпт.
Потом я начал специально задавать вопросы, ответы на которые знал сам.
И в итоге после нескольких проб и ошибок стало понятно, что проблема системная.
Вот тут важно для понимания - ИИ-шка может придумать расценку, коэффициент, документ или ссылку на норматив. И делает это более чем убедительно.
Для обычного общения с ИИ это неприятно, но для сметы, где каждая цифра под прицелом контрольных органов - опасно. Потому что в сметах нет «почти правильно». Либо значение взято из действующего норматива. Либо это фальсификация.
Сначала я пошел самым очевидным путем. Начал писать инструкции.
Не выдумывай. Отвечай только на основании документов. Если не знаешь - скажи, что не знаешь. Не используй непроверенные данные. Не придумывай коэффициенты. Не называй расценки без источника.
Промпты (инструкции) становились длиннее. Ответы были уже более аккуратными. Ошибок становилось все меньше.
Но они не исчезли. И это было самое неприятное.
ИИ мог десять раз ответить нормально, а на одиннадцатый - снова выдать ересь. То есть доверять ему, как самому себе, все равно было нельзя.
В какой-то момент я понял, что пытаюсь решить задачу как-то однобоко.
Я пытался заставить языковую модель быть справочником нормативов.
Но зачем?
У меня уже есть нормативная база. Есть документы. Есть расценки. Есть технические части. Есть индексы. Есть письма.
Зачем просить нейросеть помнить или угадывать то, что уже существует в виде данных?
Вот здесь я вернулся к начальной точке своего пути.
Я разделил задачи по их типу. Если вопрос требует точного значения - отвечает база знаний. Если вопрос требует объяснения - отвечает языковая модель. Вроде ничего сложного, но для меня именно это стало главным поворотом.
Раньше я пытался сделать так: пользователь – LLM (LLM — это "умный текстовый движок", который читает текст, понимает смысл и генерирует ответы) - ответ. И постоянно ловил галлюцинации.
Потом схема стала другой: сначала классификация вопроса, оттуда в поиск по базе, потом проверка источника, и только потом ответ. Объяснение - через LLM, но только там, где не нужна точная цифра.
Другими словами, ИИ больше не придумывает норматив. Он вообще не имеет права его придумывать. Если в базе есть значение - оно подставляется из базы. Если значения нет - ИИ должен сказать: «Не найдено». Без фантазий. Без догадок. Без «скорее всего». Без попытки угадать.
Я для себя определил правило:
Лучше честное «не нашел», чем уверенное вранье. В сметах это нормальное рабочее требование.
Я думал, что самым сложным для меня будет - подключить нейросеть. Ошибся. Самым сложным оказалось - заставить ИИ понимать, что у него спрашивают. Пользователю не обязательно писать красиво. И сметчику тем более.
Один напишет: ТСН 47-01-017-05
Другой: дай расценку на посадку дерева
Третий: как посчитать липу с комом
Четвертый вообще наговорит голосом: посмотри посадку деревьев с комом, сколько там базис и что входит.
Для человека это обыденные запросы. Для ИИ, как программы - разные задачи.
Один запрос по коду. Второй по названию. Третий по смыслу. Четвертый смешанный: там и поиск, и расчет, и объяснение состава работ.
В процессе работы с ИИ пришлось сделать предварительную классификацию. Условно все вопросы делятся на несколько типов: найти расценку по коду; найти расценку по описанию; посчитать стоимость по объему; объяснить норматив или замечание; найти источник; и отдельно - уточнить вопрос, если данных не хватает. Это тоже самостоятельный тип, не продолжение предыдущего.
Все это сильно поменяло качество ответов. Потому что подход с одним универсальным поиском работал плохо. Он пытался одинаково обрабатывать разные по своей сути вопросы.
Вопрос «что такое накладные расходы» и вопрос «какой процент накладных применить здесь» - это не одно и то же.
В первом случае нужна смысловая нагрузка.
Во втором - точное значение из источника.
В таких случаях обычно говорят: «Ну так нужен RAG». Да, нужен. Но, просто прикрутить RAG недостаточно. Если совсем примерно, RAG - это когда ИИ сначала получает фрагменты из базы знаний, а потом отвечает с учетом найденного контекста. Звучит неплохо. Но в сметах есть нюанс. Если ИИ нашла похожий фрагмент, это еще не значит, что она нашла правильный фрагмент. В нормативной базе много похожих формулировок. Похожие виды работ. Похожие коды. Похожие названия. Похожие технические части. И если ошибиться на этапе поиска, модель потом очень уверенно объяснит недостоверный источник.
И все вышеперечисленное заставило меня отнестись к поиску не как к «найди что-нибудь похожее», а как к отдельной задаче. Для запросов по коду нужен один механизм. Для поиска по смыслу - другой. Для объяснений - третий. Для расчета - четвертый.
Самое важное здесь - не позволять ИИ влезать туда, где должна работать база знаний.
У LLM есть «побочка». Она из кожи вон вылезет, только чтобы быть полезной. Даже когда данных попросту не хватает. Для обычного помощника - собеседника это плюс. Для профессионального инструмента – огромный минус. Мне пришлось специально учить ИИ быть пресной в ответах. Если нет точного совпадения – попросту не отвечать. Если найдено несколько похожих вариантов - не выбирать самовольно, а уточнять. Если нет единицы измерения - уточнить. Если нет конкретного объема - не считать. Если источник не найден – так и написать, что источник не найден.
Для пользователей ИИ это кажется очевидным. Для чат-бота - нет. Мои первые версии пытались «додумать».
Например, если я описывал работу словами, система находила похожую расценку и сразу выдавала ответ.
В тестовом режиме это было удобно. В реальности - опасно. Потому что похожая расценка не всегда правильная. После этого я применил правило: если уверенность поиска ниже порога или найдено несколько схожих вариантов, чат-бот не должен показывать, что все понял. Он в обязательном порядке должен спросить. Да, это не очень эффектно. Зато надежнее.
Сначала я полагал, что голосовой ввод текста - это просто приятная фишка. Потом осознал, что для работы это очень удобно. Когда сидишь за компьютером, можно печатать. Но, когда ты в дороге, на объекте, в переписке, между звонками - удобнее просто наговорить вопрос.
Например: посмотри расценку на подготовку почвы под газон и, что там с растительной землей?
Или: найди по ТСН посадку деревьев с комом и посчитай на десять штук.
Голосовой ввод – замечательно, но вылезла новая проблема.
Пользователи ИИ иногда наговаривают текст еще менее четко и аккуратно, чем пишут. Там больше не нужных междометий, больше обрывков фраз, больше разговорных формулировок и сленга. Поэтому после распознавания текста нужен еще один этап нормализации: отсеять лишнее, выделить суть, понять единицы измерения, найти объект запроса. И снова та же логика: ИИ может помогать понять фразу, но не должна сама придумывать норматив или еще что-либо.
Сейчас ИИ-шка умеет искать расценку по коду и по описанию, считать по объему, показывать базисную стоимость, объяснять состав работ, помогать разбирать замечания экспертизы, работать с голосовыми запросами, и отвечать правдоподобно, если данных не хватает или их нет в должном количестве. Последнее для меня самый важный пункт. Потому что нормальный профессиональный инструмент должен уметь не отвечать и быть максимально правдивым. Как бы это не звучало странно, но именно так. А вот визави, он же плохой помощник - собеседник всегда дает ответ.
Хорошо заточенный помощник иногда говорит: Не нашел точного совпадения. Уточни код расценки или вид работ.
И этому ответу стоит доверять больше.
По результату пройденного пути, эмпирическим путем, вывод у меня получился довольно неприятный для любителей красивых демонстраций возможностей языковых моделей. ИИ нельзя просто «подключить к профессии». Необходимо точно понимать саму профессию.
Если бы я не был сметчиком - практиком, скорее всего, я бы многие ошибки даже не и заметил. ИИ-шка выдала бы первую подходящую расценку - ну и хорошо. Нашла бы похожий коэффициент - вроде нормально. Сослалась бы на документ - тоже выглядит убедительно.
Но когда ты более десяти лет работаешь с экспертизой, ты чувствуешь, где и что не так. Не всегда сразу можешь доказать, но глаз цепляется. Именно опыт и только он является важнейшей составляющей. Код можно написать. Библиотеку можно найти. Сервер можно поднять. С API можно разобраться. А вот понять, где ИИ профессионально врет, без опыта почти невозможно.
Потому что это не замена сметчику. И, честно говоря, я не верю в замену сметчика одним чат-ботом.
Сметчик отвечает не только за подбор расценки, да и набранную смету в целом. Он отвечает за логику расчета, состав работ, проектные решения, замечания заказчика, экспертизу, оформление, защиту позиции. Чат-бот ускоряет поиск. Убирает часть рутины. Помогает проверить себя. Быстро поднимает нужный источник. Но решение все равно, в конечном итоге, остается за человеком. И ответственность тоже остается на человеке. Для меня это нормальное положение вещей.
Я не хочу, чтобы ИИ «сам считал смету». Я хочу, чтобы он предоставил мне полдня свободного времени, быстро найдя нужную информацию.
Если бы я начинал заново, я бы не тратил кучу времени на промпты. Да, промпты важны. Но, они не решают проблему предоставления достоверной информации. Я бы сразу сформировал нормальную структуру базы, разделил типы запросов, задач и ввел строгое правило: цифры только из источника. ИИ-шку можно заменить. Интерфейс можно переписать. Telegram и ему подобные можно поменять на веб версию. Голосовой ввод можно добавить позже. Но, если на старте не разделить факты и объяснения, ИИ будет привлекательным, удобным и опасным одновременно.
Я пишу про сметы, потому что это моя работа и она мне нравится. Люблю работать с цифрами. Но, такая проблема не только в сметном деле. Та же история прослеживается в юриспруденции, в медицине, в бухгалтерии, в проектировании, в закупках.
В любой области, где есть нормативы, регламенты, базы, письма, инструкции - нельзя просто дать LLM доступ к документам и надеяться, что она разберется и сделает за тебя все на должном уровне, слишком велика цена ошибки.
Я думаю, что будущее не за языковыми моделями, которые пытаются помнить все, а за моделями, которые умеют быстро находить нужную информацию в проверенных/достоверных источниках и работать с ней. С таким подходом ИИ не заменяет нормативную базу - он становится удобным инструментом для работы с ней. Насколько это поможет в самых спорных и неоднозначных случаях, покажет только реальная практика.