– Мне не хватает DeepResearch, он дает слишком поверхностные и отрывочные результаты, приходится дальше копать вручную. Я бы хотел такую программу, чтобы я задал какую-то тему, ИИ ночью хорошенько покопался в интернете и подготовил локальную базу знаний. Чтобы утром я для моей работы получил полную коллекцию перепроверенной и структурированной информации.
– Я бы тоже хотел такую, но пока задача решается лишь частично - получаем или немного красиво оформленного, или много всего подряд. С утра вы предпочитаете заняться поиском недостающего или убиранием избыточного?
Ниже очерчу проблемы популярных LLM, которые пока не решаемы принципиально, можно лишь ослабить их влияние для выполнения некоторых задач исследовательского типа. Только очерчу проблемы, в статье не будет предложения с решением.
Статья появилась в результате небольшого обсуждения и содержит частное мнение, с которым можно не соглашаться. Можно даже потыкать пальцем в ошибки автора и подсказать давно существующее решение всех его проблем - автор за это скажет большое спасибо.
NB: Я предполагаю, что читатель знаком с терминами LLM, GPT, RAG, ИИ, нейросеть, мультиагентный оркестр - если эти слова не выглядят понятными, то статью можно не читать, вы не встретитесь с описанными проблемами. И я знаю, что LLM обладают не знаниями, а весами, откалиброванными в процессе обучения, и отлично знаю, что нейронки не размышляют, а лишь показывают наиболее вероятные токены для продолжения последовательности. Подобные технические детали никак не отменяют сказанного ниже, точность в терминологии здесь не принесет пользы, и для ясности изложения я буду использовать не совсем верные, но уместные аналогии.
Для введения начну с нескольких практических примеров.
Я - программист. У меня есть проект с базой разношерстного кода, стилей, шаблонов, библиотек, соглашений, отрывков документации и каких-то тестов. Я хочу задействовать ИИ для внесения изменений. В идеале, ИИ должен учитывать всю имеющуюся информацию, чтобы изменения органично вплетались, не добавляя проблем. Да, уже есть IDE, где ИИ-копилоты помогают писать и отлаживать код, но ни один из них не способен полноценно работать с кодом большого проекта.
Я - писатель. У меня есть черновик книги, где действуют какие-то персонажи в каких-то локациях, есть угрозы и надежды, есть качели вызовов и побед, есть нужды читателя, привычки писателя и требования редакции. Я хочу привлечь ИИ к вычитке книги, чтобы он указал на проблемы с сюжетом, стилем и грамматикой. В идеале, ИИ должен учитывать всю имеющуюся информацию, чтобы найти все проблемы с персонажами, локациями, сюжетом, качелями и так далее. Разве что грамматику и стиль не сложно поправить, проверяя абзац за абзацем, но для более серьезной вычитки нужно нечто большее.
Я - учитель. Мне нужно дать ученикам текст учебника по новой теме, которая уже актуальна, но пока размазана по тысячам устаревших книг, малограмотных статей и громких псевдоновостей, густо посыпанных рекламным мусором и частными мнениями. Я хочу привлечь ИИ к сбору и структурированию информации в неком локальном хранилище, чтобы компьютер ночью поработал автоматически, и утром я получил основу для создания учебника. В идеале, ИИ должен постоянно перечитывать всю накапливающуюся информацию, чтобы выделять места для дополнений, сокращений и перепроверки.
Я - ученый, менеджер, проектировщик или еще кто-нибудь, кому нужно, чтобы нейронка работала с моими данными. И чтобы нейронка отдавала приоритет моим материалам, а не тому, что в неё заложили год назад при обучении всему подряд. У меня этих материалов гигабайты, и я ежедневно обновляю и пополняю коллекцию заметок, статей и книг в ходе своей работы.
В подобных случаях современный ИИ хромает на четыре лапы. Вижу четыре проблемы.
Во-первых, свежесть данных - чем модель больше, тем вероятнее, что её знания о мире заканчиваются далеким прошлым. Даже полгода в некоторых задачах - это слишком много, а речь идет обычно о нескольких годах. Между сбором данных для обучения и принятием нейросети в работу проходит немало времени, поэтому даже умнейшая облачная нейросеть не в курсе последних новостей и новинок. LLM нужно постоянно подкармливать свежей информацией.
Во-вторых, размер контекста - ИИ в современной GPT архитектуре хорошо работает только с теми знаниями, которые он усвоил в процессе обучения. Мы можем подкидывать ему дополнительную информацию в промпте, но окно ввода для задачи контекста не резиновое. И избыток информации на входе снижает возможности модели по решению конкретной задачи, внимания ИИ не хватает на удержание всего подряд. Контекст хорошо воспринимается только тогда, когда он содержится внутри LLM.
В-третьих, многофакторность - если мы хотим получать глубокую экспертизу в ответах модели, то нам следует четко задавать роль и выделять одну ключевую задачу в каждом запросе. Приходится выдерживать баланс между количеством запросов и качеством ответов, учитывающих множество факторов. Нельзя просто так взять и получить всё и сразу, нужно дробить задачи, многократно увеличивая количество запросов. И дробление запросов приводит к дроблению контекста, что плохо сказывается на ответах.
В-четвертых, если я стану работать с умнейшими представителями из облачных ИИ, мне это влетит в тяжелую копеечку - никто не захочет обрабатывать бесплатно тысячи запросов для проработки объемного материала . Умнейшие ИИ требуют дорогого железа, которое потребляет прорву дорогого электричества, не говоря уже о владельцах и команде разработчиков, которые не являются альтруистами-бессеребренниками.
А если я стану работать с локальными ИИ, то мне придется сильно заморочиться отладкой промптов и механизмами поиска свежей информации в интернете. Потому что локальные ИИ глупее чемпионов в рассуждениях, и их знания страшно далеки от "всех знаний человечества" и по объему, и по свежести. И проблема дороговизны сменится на проблему длительности работы (больше запросов, железо слабее).
Итого - чтобы ИИ мог решать задачи по поиску проблем и возможностей улучшения в больших массивах информации, нам нужно как-то помочь ему с доступом к свежим и объемным данным, причем делать это многократно и желательно не за большие деньги.
Разбирающийся в теме читатель уже несколько раз воскликнул - есть же RAG, MCP и прочие способы подкидывать в нейронку свежую информацию, давно реализовано и успешно используется. Не спешите, пожалуйста, ниже я непременно упомяну эти и другие способы, а заодно прокомментирую, почему они не решают проблему кардинально, а лишь смягчают или маскируют её.
GPT - это архитектура современных нейронок, которая быстро думает, но тяжело обучается. Нейронка быстро выдает умные ответы, опираясь на свои внутренние знания, но изменение этих знаний - задача сложная, требует много времени и дорогостоящего оборудования. Принцип "долго обучается, но быстро думает" хорошо подходит для решения многих задач. Но что если нужно, чтобы новое обдумывалось не хуже старого?
Если мы хотим, чтобы нейронка в своих ответах опиралась на свежие данные, то нам нужно эти данные как-то подкидывать ей при запросах. Можно просто запихивать в промпт, но промпт не резиновый. Да, предпринимаются попытки в новых моделях увеличить размер окна контекста, которое нейронка сможет воспринимать, но и увеличенного зачастую не хватает. Плюс следует учитывать, что огромное окно контекста неизбежно снижает скорость и точность работы, просто потому что текст на входе - это совсем не то же, что усвоенные при обучении знания.
Создатели больших облачных нейросетей давно столкнулись с этой проблемой. Как только были реализованы инструменты размышлений и веб-поиска, начались первые попытки создания процессов исследований, которые сразу получили громкое название глубоких - DeepResearch.
По сути вполне очевидное решение - мы даем модели время подумать, пособирать свежую информацию и собрать ответ, который будет заметно лучше, чем если бы модель попыталась ответить, опираясь исключительно на свои собственные знания. Сумма возможности поискать и возможности поразмыслить равна повышению качества ответа.
Главная проблема DeepResearch - информация подтягивается для каждого отдельного запроса. Нет процесса накопления и структурирования этой информации для переиспользования при последующих запросах, и речь сейчас о глубине, а не о простом кешировании (со сложной проблемой инвалидации). Умнейшие нейросети не основательно прорабатывают какую-то тему, а ищут по верхам. Так называемые Глубокие Исследования слишком часто занимаются всего лишь пересказом популярных статей, которые первыми попадаются в результатах поиска.
Менее очевидная проблема - DeepResearch предполагает использование дорогостоящего продукта. Да, можно несколько раз в день плохонькие версии исследований запускать бесплатно, но что если мы хотим решать подобные задачи сотни раз в день? Разве что подавать заявки на конкурс для получения исследовательских грантов.
Большие и уважаемые Компании старательно работают над углублением исследований и критичным подходом к найденным материалам, но в результатах пока видны не решение, а смягчение проблемы при увеличении длительности и стоимости исследований.
Если хочешь сделать что-то хорошо, сделай это сам (народная мудрость). Представим гипотетическую систему, которая реализует DeepResearch локально. Некий оркестр узкоспециализированных агентов получает задачу по сбору какой-то информации и работает всю ночь, подготавливая базу, которую с утра человек начнет использовать для своей работы. И чтобы в течение дня небольшие изменения можно было сразу добавлять.
Каждый из этапов работы такой системы выглядит реализуемым. Нужно:
Подтягивать факты из своих источников или интернета, отсеивая очевидный мусор (не забываем кеширующий слой скачиваемого, чтобы избежать повторных запросов).
Работать над коллекцией знаний: разбивать разросшееся, объединять родственное, убирать дубликаты, верифицировать сомнительное, выделять ключевое и т.д.
Аналогично для структуры: разбивать, объединять, углублять, проверять, выделять…
Строить формальные онтологии и семантические связи между сущностями для сохранения мета-контекста (нужно не всегда).
При повторных запусках отслеживать новинки, определяя на лету ценность и место в структуре (здесь поможет немного ручной работы по фильтрации источников).
Для постановки задач отдельным инструментам нужно реализовать оценки и критерии, чтобы принимать решения о необходимости что-то проверить, объединить, разделить, переместить, перефразировать и т.д.
Увы, умное пополнение локальной базы знаний - пока несбыточная мечта. И проблемы уже упомянуты выше: окно контекста и рост количества запросов. Плюс добавляется новая проблема - нельзя надежно сформулировать критерии (оценки оценок) для принятия решений (формирование нужд).
В идеале нужно огромное окно контекста и множество инструментов для локального вмешательства. Невозможно поработать над частью структуры, если не видишь общую задачу, уровни сверху и снизу плюс наполнение разделов. Невозможно качественно написать "главу книги", если не понимаешь контекст, в котором эта глава находится.
Невозможно выискивать ответы, если не видишь вопросов. И невозможно придумывать вопросы, если не загрузил в голову всю информацию для получения целостной картины - нужно постоянное масштабирование, прыжки по уровням, подтягивание аналогий, переключение сфер и так далее. С одной стороны, ничего принципиально нерешаемого. С другой же, система по сложности начинает приближаться к разуму.
Память человека ничуть не похожа на RAG-базу. Во-первых, человеческая память делится на принципиально разные базы данных: несколько уровней оперативной и несколько уровней долговременной, чувственные образы, банк абстракций, семантические правила, оценки, установки, реакции и так далее. Во-вторых, к памяти прилагается запутанный клубок из десятков узкоспециализированных нейросетей, каждая из которых сильно отличается от GPT. И работает с памятью механизм моделирования реальности, а поисковый механизм опирается либо на продукт моделирования, либо на сырые чувства. Из этого многообразия сейчас интересна именно память, хранящая абстракции.
Если грубо упростить, то GPT - это поисковая система, только поиск идет не в старой доброй базе фиксированных текстов, а в латентном пространстве абстракций, смыслов. Мы можем извлекать уже не информацию, а знания, вложенные в LLM при обучении. Это позволяет нейронкам работать быстрее и выглядеть умнее, чем обычные поисковые сервера. Проблема только в добавлении новых знаний в базу для поиска.
Реализация абстракций - это маленький шаг от простых программ в сторону разума. И следующий возможный шаг - это внедрение системы оценок. Человеческое восприятие при распознавании того или иного объекта в потоке входящей информации сразу навешивает на него таблички с оценками: угрожает ли это, съедобно ли, могу ли я в это поместиться, могу ли я это передвинуть, могу ли я это сломать, имеет ли это социальное значение, нет ли элементов новизны... Оценки необходимы для работы следующих механизмов, которые создают решения и мотивы.
Упомянутая гипотетическая система "умный агент для наполнения локальной базы по заданной теме" обязана иметь систему оценок, чтобы для каждого раздела уметь по каким-то критериям определять достаточность, избыточность, интересность, полезность, релевантность контексту, достоверность и так далее, чтобы принимать решения о необходимости искать дополнения, разделять на подразделы или сокращать, подчеркивать в иерархии, сохранять от изменений, передвигать, перепроверять и так далее.
Система оценок создает пространство возможностей, дополнительно подключаются механизмы установок, нужд - у человека здесь еще есть сложные модули потребностей, целеполагания и выбора, но в случае ИИ они избыточны. Для автоматизации достаточно упрощенной цепочки принятия решений: установки - критерии - оценки - нужды - очередь действий.
И механизмы восприятия следует упростить. Например, как работает механизм воспоминаний в мозге:
Кто-то выбирает сюжет.
Из банка абстракций по весам выдергиваются токены смыслов.
К ним из базы чувственных образов крепятся краски.
Итоговая картина собирается в механизме моделирования реальности и предстает перед мысленным взором сознания.
Поверьте, вы не хотите реализовывать уровень сознания с упомянутым мысленным взором, поскольку он решает свою специфическую задачу, которая сильно выходит за рамки "пособирать информацию по такой-то теме". Вам не нужно реализовывать подобие человеческой памяти и человеческой способности к рассуждениям. Тем более, что помимо чрезмерной сложности такое решение будет порождать и очевидные риски.
Но некоторые части разума таки придется создавать, если мы хотим получить интеллект достаточно умный для задачи сбора данных.
Кеширующая память для сырой информации из интернета или локальных справочников.
Долговременная память для усваиваемых данных - очищенные подробные пересказы с минимумом искажений.
Экспертиза - внутренние знания модели, полагаться на них не будем, но они важны для того, чтобы модель вообще понимала, о чем идет речь.
Служебная память для управляемой структуры - сжатые пересказы для помещения "всего" для ориентирования в контексте.
Оперативная память для подготовки информации к передаче в контекст - сложный гибрид поиска и пересказа с сохранением точности.
Внутренние установки - инструкции от пользователя, задающие направление и ограничения.
Оценки - периодически обновляемые метки на отдельных частях структуры и данных (не путать с кнутами, пряниками и метриками качества в системах ранжирования, которые используются при обучении нейронок).
Критерии и нужды - помогают среди оценок находить те, которые требуют вмешательства (труднейшая для реализации часть системы).
Очередь задач для агентов, которые будут заниматься внесением изменений.
Агенты - десяток на работу с данными (формулировка недостающего, поиск, подготовка, валидация, изменения), десяток на работу со структурой (список аналогичен предыдущему), десяток служебных (оценщики, постановщики задач, рефлексия, сигнализация).
Механизм управления вниманием - фокусировка усилий на задачах, которые сейчас более актуальны (дирижеров может быть больше одного).
Метакогнитивный контроллер для вдумчивого управления процессом достижения главной цели (надсмотрщик нужен при неоднородности данных и при внезапных изменениях в установках).
Кого забыл?
Здесь я постарался задать лишь основу - список модулей, которых будет достаточно для запуска “автоматической системы сбора данных по заданной теме”. С ростом локальной базы накопленной информации придется масштабировать систему, вводить базу источников с оценками доверия и веса, усложнять иерархию агентов, реализовать делегирование, выверять критерии и прорабатывать разрешение споров и т.д.
И главная причина, по которой список получился громоздким, - одинокий агент не обладает метакогницией, то есть при обдумывании своей задачи не видит картины в целом. Агент не может быть достаточно умным по четырем причинам, которые я перечислил в начале этого текста: свежесть, объем, многофакторность, цена. Со скрипом мы можем реализовать один метакогнитивный контролер, но только для задачи общей координации, он не подходит для сотен мелких операций, слишком тяжел и неповоротлив.
А теперь поговорим о существующих способах ослабить влияние проблем с добавлением в нейросеть новых знаний.
Да, есть возможность дообучать готовую модель (fine-tuning) новыми знаниями, получается заметно дешевле и быстрее, чем обучение всему с нуля, но всё еще не дешево и не быстро. И файн-тюнинг имеет свои недостатки - дообучаемая модель легко обзаводится провалами в памяти (catastrophic forgetting) и ошибками в работе (вплоть до зацикливания и генерации бреда).
Есть подходы, которые позволяют моделям постепенно адаптироваться к новым данным без полного переобучения. Например, онлайн-обучение, в отличие от классического файн-тюнинга, предполагает обновление модели чуть ли не в реальном времени. Инкрементальное обучение (например, Elastic Weight Consolidation) пытается минимизировать забывание старых знаний, добавляя новые данные постепенно. Но и здесь остаются основные проблемы файн-тюнинга - стоимость переобучающего железа и сложность сохранения стабильности модели.
Существуют способы снижения затрат, такие как оптимизация моделей (например, квантизация, прунинг, дистилляция), использование специализированных ускорителей (TPU, FPGA) или разработка более эффективных алгоритмов обучения. Но мы наблюдаем эволюцию, а не революцию - проблемы нехватки контекста и внимания слабеют, а не уходят полностью.
Если переобучение нейронки чревато, то можно просто подкидывать ей новые знания вместе с запросом - поищи решение, опираясь на такие-то данные.
Чтобы подкидывать не всю новую информацию, а только относящуюся к текущему вопросу, мы можем задействовать RAG - это такая технология (Retrieval Augmented Generation), которая извлекает релевантные данные из внешней базы знаний и автоматически добавляет в запрос только информацию, которая нужна для поиска ответа. Но на практике получается слишком далеко от идеала.
Упрощенное представление о том, как работает RAG:
Мы берем толстую книгу, разрываем её на отдельные страницы, каждую страницу режем на несколько кусочков, кусочки складываем в стопку и индексируем по словам, которые нам кажутся ключевыми.
Когда нужно найти ответ на какой-то вопрос по этой книге, мы выбираем несколько кусочков, которые нам кажутся наиболее подходящими, и опираемся на них при ответе.
Шпаргалки из RAG не помогут с такими запросами, когда для ответа нужен пересказ сюжета всей книги. Но с такими задачами помогут справиться векторные базы данных (Pinecone, Weaviate, Milvus, ChromaDB и т.д.) - это специальный формат хранения, чем-то напоминающий внутренние веса нейросетей. То есть поиск при RAG будет осуществляться по смыслам, а не по словам. Однако, и в этом случае не получается уйти от ограничений на количество релевантных фрагментов, а также от потери связей между фрагментами (если связи сложные или выходят за пределы выборки).
И главный недостаток RAG - эта система не может управлять своей базой данных. Во-первых, мы не можем узнать, чего не хватает, на запросы недостающего вполне может возвращаться галлюцинация или ошибка поиска. А уж удалить или изменить ошибочное - задача "со звездочкой". Приходится делать параллельное хранилище со своими агентами для перезаписывания основной базы, которая используется для чтения.
Мы можем также задействовать MCP - это тоже технология (Model Context Protocol), которая позволяет автоматически добавлять в запрос информацию на какую-то тему. Информация будет более точной и менее обрывочной, поскольку специальный сервер будет её старательно подготавливать. Но процесс пересказа уменьшает точность и добавляет накладных расходов. Плюс MCP-сервера обычно имеют узкую специализацию, и для решения комплексных задач приходится подключать десятки разных инструментов, что не добавляет решениям ни скорости, ни дешевизны.
В лучшем случае поиск наиболее подходящих кусков будет не по ключевым словам, а по векторным представлениям, и дополнительно будут подтягиваться кусочки связанные с лучшими, и информация будет специально подготовлена отдельными серверами, но в любом случае контекст будет далеким от полноты. Мы будем получать неполноценные ответы на сложные запросы. И никак не решим проблему ограничения на размер контекста.
Дальше пошли модели с дополненной памятью (Memory-augmented models) - в их архитектуре постарались вообще отделить знание от вычислительных возможностей. Если упростить, то чем-то напоминает RAG с векторным хранилищем. Однако эти модели (например: Neural Turing Machines, Dynamic Memory Networks, Differentiable Neural Computer) уступают привычным трансформерам по сложности, скорости, масштабируемости, универсальности и не только. Пока уступают, а потом посмотрим.
RAG, MCP и прочие подобные технологии - это костыли, призванные хоть как-то компенсировать невозможность эффективно запихнуть в модель новые данные без дорогостоящего и длительного процесса переобучения этой модели. И пока на смену нынешним GPT не пришли другие архитектуры, мы будем продолжать использовать костыли.
Если задача слишком сложна для имеющихся систем, то её можно декомпозировать - разделить на простые шаги.
Представьте оркестр, где музыканты играют свои разные партии, создавая музыку - узкоспециализированные агенты выполняют свои роли, решая общую задачу. Кто-то выискивает новые данные, кто-то подготавливает найденное, кто-то укладывает свежие факты в существующую структуру, кто-то причесывает изменяющуюся структуру, кто-то проверяет на ошибки... Зачастую такой подход решает часть проблем многофакторности и размера контекста.
Для реализации оркестровых механизмов уже есть и развиваются многоагентные фреймворки (AutoGen, LangChain, N8N и т.д.). Уже можно не заморачиваться базовыми операциями по обмену данными, а сосредоточиться на уровне управления схемами взаимодействия агентов, нанимая в оркестр готовых музыкантов. Но даже с использованием проработанных фреймворков можно заметить ограниченность возможностей по координация и масштабируемости. Задача автоматического пополнения локальной базы знаний по-прежнему упирается в проблемы контекста и критериев.
Кстати, то, что мы по привычке называем облачными LLM типа GPT, иногда тоже уже является иерархическими моделями из десятков блоков (предпроцессорных и постпроцессорных), каждый из которых решает свою подзадачу. Например, в задачах обработки текста иерархическая модель может сначала определить необходимую глубину размышлений и выбрать подходящий сценарий (от Chain of Thought до Graph of Everything), затем выделять ключевые сущности, построить отношения между ними, а потом уже приступать к генерации выводов. Иерархические модели могут быть частью архитектуры LLM (например, в виде каскадных трансформеров) или внешней системы, координирующей работу нескольких моделей или агентов.
Уже ведутся исследования в области нейросимволического ИИ или гибридных моделей, в которых пытаются объединить преимущества нейронных сетей (обработка данных) и символических систем (логика, структурирование), чтобы лучше имитировать человеческую память и рассуждения. Такие исследования пытаются нащупать путь к решению существующих проблем, но пока не являются признанным решением. Нейросимволические ИИ только-только переходят в стадию прототипирования, насколько я знаю.
Эволюция железа, программ и процедур обучения понемногу снижает издержки, но всё же не позволяет кардинально решить проблему глубины и длительности работы или дороговизны, особенно при использовании мультиагентных систем и больших контекстов.
Я по-прежнему считаю, что GPT с принципом "долго запрягаем, но быстро ездим" - это тупиковая ветвь. Их архитектурный недостаток принципиально непреодолим.
Существуют архитектуры альтернативные чистым трансформерам, такие как Longformer, Reformer или BigBird, они разработаны для работы с более длинными последовательностями без огромных вычислительных затрат. Проще говоря, они позволяют существенно и недорого увеличить размер контекста, но при этом разреженность внимания (sparse attention) неизбежно приводит к ухудшению восприятия (рассеянность). И фокусировка лишь на части токенов приводит к потере связей между удалёнными частями текста, что критично для задач, требующих целостного понимания. Longformer использует комбинацию локального и глобального внимания, чтобы сохранить ключевые связи, а BigBird применяет случайные связи для имитации полноты контекста, но частичные решения неизбежно приводят к снижению точности и порождают необходимость дополнительного поиска ошибок в результатах.
Эволюция идёт своим чередом, умные люди стараются оптимизировать или подпереть костылями наиболее слабые места. Продвинутые DeepSearch обрабатывают полтысячи источников и думают полчаса, чтобы создать один отчет. Когда-нибудь количественные изменения вполне могут породить качественный скачок. И весьма вероятно, что это будет не новая архитектора на смену GPT, а сложносочиненная система из десятка разных хранилищ и десятка разных обработчиков - устройство биологического мозга как бы намекает на необходимость такого подхода. Декомпозировать нужно не только задачи, но и исполнителя.
Ну а пока нам остается только следить за прогрессом китов индустрии и отлаживать свои личные мультиагентные оркестры, пытаясь получить не идеальный, но удовлетворительный результат для наших личных задач.