Одна из основных проблем при использовании больших языковых моделей это практически неустранимые галлюцинации, возникающие при ответах на вопросы по загруженным документам. Задача "поговорить со своими документами" возникает очень часто, и как правило, она решается с помощью промптинга - вы загружаете вашу статью, договор или другой документ и пишете промпт "Ответь на вопрос по тексту:". Этот способ работает, но у него есть существенные недостатки: размер документа ограничен 1-3 страницами, рандомное возникновение галлюцинаций - неправильных ответов, выглядящих правдоподобно.  В этой статье мы показываем работающие кейсы и синергию подходов, реализованных нами в рамках разработки агента вопросно ответной системы - FractalGPT QA агента. В частности, с помощью алгоритма Fractal answer synthesis и интерпретируемого ИИ нам удается существенно снизить % галлюцинаций и стабильно сильно повысить точность и полноту ответов. Если читать теорию не охота - можно сразу промотать на кейсы. FractalGPT QA агента доступен в закрытой бете, запрос на тест QA системы по базе знаний можно оставить тут. Retrieval-augmented generation дословно переводится как "Генерация с расширенным извлечением" и по сути она частично решает главную проблему языковых моделей - использование для ответов устаревших данных из "весов", что приводит к неправильным ответам. Например, такая проблема часто возникает, когда дать ответ нужно про актуальные события, даты или по некой внешней базе знаний(корпоративной), к которой вообще у модели не могло быть доступа. Сам по себе подход RAG не новый и существует множество его реализаций - сейчас в основном типичным хорошим решением предлагается нарезать документ на сниппеты (кусочки текста, например разделы, абзацы), добавлять их в индекс, с помощью таких библиотек как LangChain, а затем с помощью векторной базы искать сниппеты, в которых могут находиться ответы и с помощью LLM (ChatGPT, GPT-4, локальной модели) генерировать ответ. Такое решение, например предлагается во множестве обзорных роликов, например тут. Подробнее о подходе RAG можно прочитать на странице доков HuggingFace, недавно на Хабре вышла статья о русскоязычном помощнике, построенном на базе трансформерной модели Saiga (saiga_mistral_7b_lora). Прежде, чем отметить недостатки и слабые места вопросно-ответных систем нужно сначала понять общую схему того, как подход работает. Схематично, типичное решение выглядит так: Нарезать документ на сниппеты, каждый не более чем контекст модели минус промпт токенов Создать индекс из сниппетов в векторной базе данных (Pinecone, chromadb) С помощью эмбеддингов OpenAi получить вектора вопроса пользователя Найти в векторной базе сниппеты, наиболее близкие к вектору вопроса С помощью LLM (ChatGPT, GPT-4, Gigachat, YandexGPT, FractalGPT LLM, Mistral, Zephyr) сгенерировать конечный ответ на вопрос, используя текст сниппетов В интернете довольно много туториалов и схемы обычно выглядят так: Давайте посмотрим что не так с этой схемой: Размер контекста должен быть не более 4096 токенов (порядка 1000 слов на русском языке, 1-2 страницы А4). Есть модели с большим контекстом: 16k и даже Claude 100k, но этого тоже часто не хватает. В итоге, если у вам нужно проанализировать реферат, книгу, законы, конструкторскую документацию, регламенты вашей компании и построить на базе этих документов вопросно-ответную систему - этого сделать на текущих LLM не получится, контекст этих документов составляет сотни страниц. Векторные базы ищут плохо. Наши опыты показывают, что если ваш текст изобилует терминами, является техническим, содержит аббревиатуры(маркировки, номера), названия деталей, статей законов, разделов и тп - то эмбеддинги будут ошибаться и не находить участки с правильным ответом. LLM галлюцинируют в рандомных местах. Как говаривал Воланд - плохо не то, что LLM галлюцинируют, а то, что они делают это внезапно. В нашей статье на Хабре об алгоритме Fractal answer synthesis мы разобрали основные причины галлюцинаций - ответы разбросаны по сниппетам, извлеченным из текста, связи между ними нет, сами сниппеты могут нарушать логику и очередность событий (например, если текст с хронологией) из-за разрывов при сплите. А если сниппеты недостаточно хорошо извлечены на 2м шаге - практически точно в ответе будет правдоподобная галлюцинация. Промт инжиниринг нестабилен. Мы также проверяли что будет, если с помощью промтов мы будем говорить модели "Отвечай только по тексту, не искажай термины" и другие подобные промты для снижения галлюцинаций или для управления длиной и структурой ответа. К сожалению работают промты нестабильно - иногда они улучшают ответ и его полноту, но могут приводить и к галлюцинациям, это требует дальнейшего изучения именно в сеттинге retrieval. Типичные, перечисленные выше проблемы Retrieval-Augmented Generation мы пытались решить еще в августовской статье с релизом QA системы с ограниченным функционалом - вопросы можно было задавать только по теме нейросетей и ML, Ai. Нам удалось исправить и улучшить результаты у всех 3х причин плохих ответов в RAG системах: недавно мы завершили тесты своих собственных обученных моделей.В целом, апгрейд RAG сделан следующий: Внедрили Fractal answer synthesis.  Обучили несколько своих моделей решать универсальную задачу извлечения графовой структуры текста(по сути "извлечения знаний") - это позволяет находить неочевидные связи между структурными элементами статей, инструкций и различных регламентов, дисклеймеров: связи устанавливаются на разных уровнях, начиная от предложений и заканчивая темпоральными, логическими, причинно-следственными(NLI задача), онтологическими (часть-целое, common sense, отношения между сущностями, учет связей таксономии "входит в", часть множества, цели, принадлежность, вложенность) Сделали собственный векторный поиск. Сильно доработали подход Pinecone и других векторных баз - наше решение по метрикам близости гораздо лучше находит "близкие" по смыслу тексты с учетом конкретной предметной области. Работает поиск терминов, жаргона, например вы можете своими словами описать термин в вопросе и система поймет это (пример ниже с РИД - результатом интеллектуальной деятельности).При этом модель достаточно универсальная. Давайте проверим как FractalGPT QA агент "прочитывает" pdf документы и действительно ли он понимает когда отвечать нужно, а когда данных для этого недостаточно. Было проведено тестирование нашей системы на задаче ответа по вопросам лекционного материала (классическое тестирование студентов). Тест состоял из 20 вопросов на тему "Антикоррупционная деятельность". В результате наша система смогла дать правильные ответы на 20/20 вопросов, со 100% точностью, при том, что суммарный объем лекций составил 132 страницы! Ответы были не только правильными, но и более полными. Кейсы ниже с ответами по документам были сделаны на общедоступных pdf файлах, скачать их можно по ссылкам: гражданском кодексе РФ с изменениями (19 страниц, т.к. в бете есть лимит), лекции по нечеткой логике, статье о конструкторской документации на изделия машиностроения с сайта extxe.com. Почему эти документы? - Они сложные и на них даже лучшие LLM часто галлюцинируют. На вопрос "Является ли Чатгпт автором результата интеллектуальной деятельности, если он сгенерировал некий текст" - оригинальный ChatGPT срывается и начинает отвечать не по тексту а сам(даже промт не помог), а FractalGPT дает верный ответ по тексту загруженного документа. Очень важно правильно формулировать вопрос - в кейсе ниже в вопросе "О чем гласит подпункт в редакции, введенной в действие с 1 октября 2014 г ?" нет уточнения какой именно подпункт имеется ввиду. Если такое уточнение дать, то ответ будет верным. ("О чем гласит подпункт в редакции, введенной в действие с 1 октября 2014 г, там где про РИД в сложном объекте ?") Теперь зададим вопрос по конструкторской документации - и здесь ответы достаточно хорошие и полные, с учетом терминов, специфичных для данной отрасли. Очень важно получать ответы без галлюцинаций и в образовательной деятельности - для студентов, преподавателей, ученых, аналитиков. Только представьте, что студенту ответ дается неверным - это вызовет не просто скандал, а подорвет весь смысл изучения и проверки своих знаний. Наше решение RAG хорошо справляется с символьными вопросами. Обратите внимание, что первый вопрос "И или Л будет высказывание о событии до начала события?" является вопросом на обобщение и логическому выводу из знаний, содержащихся в тексте - прямого ответа на него в документе нет - поэтому корректное поведение это не делать никакого вывода(в жизни мы часто делаем такое обобщение, но это тема отдельной статьи - о тех случаях, когда это делать нужно строго по правилам той отрасли, которую мы обсуждаем). Однако, если привести конкретный пример из документа, то ответ уже можно получить вполне конкретным. Недостатки типичного RAG ярко видны на научных вопросах - "Что такое молекулярные эффекты оксида азота" - как видим, система, использующая ChatGPT и GPT-4 выдает галлюцинацию про четырехмерное пространство(!!), а наша система дает фактический и правильный ответ. Кстати, собственный RAG на базе Fractal answer synthesis позволил нам снизить и стоимость запроса в систему в 2 раза относительно средней цены типичных LLM, равной порядка 0.5 центов - у нас она составляет 0.1 сента за 1k токенов на вход и 0.2 цента за 1k токенов на выход генерации. Как потестить FractalGPT QA агент вышел в закрытую бету - вы можете оставить заявку на демо заполнив форму. Больше новостей в нашем чате по FractalGPT: https://t.me/fractal_gpt   Подробнее о мультиагентной системе.  Программист