Инъекция промптов для LLM с длинным контекстом как альтернатива RAG?

Реально ли внедрять документы среднего размера (например, до 100 КБ) в контекст сессии бота-персоны Discourse AI через системный промпт?

ОБЛАСТЬ ПРИМЕНЕНИЯ

Пользовательская персона AI, связанная с частной LLM, такой как Llama3-8b, на экземпляре AWS, где оплата производится за час, а не за токен. То есть количество токенов запроса/ответа не имеет значения, а сервер обладает значительными вычислительными мощностями CUDA, поэтому производительность находится на высоком уровне. Следовательно, RAG может быть необязательным?

(Альтернативный вариант использования: LLM Gemini 1.5, где вызовы API бесплатны)

ЦЕЛЬ

Уменьшить количество компонентов в конвейере и повысить точность, избегая поиска по сходству.

ЭКСПЕРИМЕНТ

Неформальное тестирование персоны AI с использованием Gemini 1.5 Pro, где текстовый документ объемом ~20 тыс. токенов был вставлен в системный промпт.

Я задал несколько вопросов, ответы на которые, как я знал, содержались только в документе. На все вопросы были даны правильные ответы. Следовательно, я предполагаю, что модель прочитала 20 тыс. токенов из промпта и анализировала их при каждом вопросе?

Есть ли недостатки у такого подхода в случаях, когда сессии и содержимое контекста не слишком велики?

Большое спасибо.



ПОДРОБНОСТИ — Удаление контекста из промпта в середине сессии

Когда я удалил внедренный в промпт контент в середине сессии и продолжил задавать вопросы, Gemini продолжал давать правильные ответы, но после нескольких вопросов потерял контекст и перестал справляться. Как и следовало ожидать, Gemini 1.5 способен сохранять контекст в течение нескольких витков диалога в рамках сессии, но не бесконечно.

Буду признателен за любые мысли, комментарии и рекомендации!

Да, у нас есть логика усечения, которая зависит от количества токенов, разрешённых LLM. Для моделей Gemini 1.5 мы установили порог довольно высоко (до 800 тысяч).

Это должно работать, но каждое взаимодействие может быть очень дорогим.

В целом я обнаружил, что ограничение контекста помогает моделям оставаться более сфокусированными, но в долгосрочной перспективе (через 2–5 лет) RAG может оказаться бессмысленным, и у нас будет так много токенов и возможностей для фокусировки, что это перестанет иметь значение.

Несмотря на мои вопросы о переполнении промптами… мне на самом деле нравится RAG. .

По моему мнению, работа, которую вы ведете с мощными движками встраивания, сейчас очень эффективна и полезна… но я также согласен, что RAG… возможно, обречен.

Как сказал Сэм Альтман в недавнем интервью: остерегайтесь бизнес-моделей и планов проектов, которые мешают работе LLM! Мы вас переедем! .. или что-то в этом роде..

Так что в конечном итоге… возможно, мы захотим просто передавать наши данные LLM без множества конвейеров предобработки, которые проходят путь: низкая размерность (вход) → высокая размерность (встраивание) → низкая размерность (формирование промпта) → высокая размерность (вывод трансформера) → низкая размерность (выход)… и готово!

Вот немного информации о сравнении RAG и длинного контекста, на которую я наткнулся… еще не прослушал всё, но, кажется, это может быть актуально.. (не аффилирован ни с кем из этого видео :-)>

ДОПОЛНЕНИЕ

Я всё-таки посмотрел то видео о Gradient и длинном контексте Llama3. Оно напоминает нам, что контекст включает в себя всё, что задействовано:

  • Ввод пользователя
  • Вывод LLM
  • Контрольные токены
  • Системные инструкции

… поскольку окно сдвигается, часть данных выпадает из внимания… но упоминалось, что в сессиях, где окно контекста заполнено, возможна «защита» системного промпта.

Также существуют вопросы «максимального размера ввода» и исходной «длины последовательности», на которой обучалась модель, которые могут влиять на ситуацию.

Ниже приведён пример работы с заполнением длинного контекста промптом:

В целом кажется вполне возможным создать команду AI-персонажей Discourse, у каждого из которых будет большой объём специализированного контента или кодовой базы для запросов (не забывая при этом о высокой стоимости при оплате за токен!).

Но разве это не просто (очень неэффективная) «статическая» версия RAG?

Единственное отличие RAG от этого подхода заключается в том, что она выбирает и включает релевантные фрагменты контента, а не весь контент целиком.

Верный аргумент, безусловно. На мой взгляд, простого ответа нет.

Думаю, всё зависит от конкретного случая использования.

RAG хорошо работает для некоторых приложений, но для других, более детерминированных задач (например, ответы на вопросы клиентов, платежи, медицина и т. д.) я и другие сталкивались с проблемами в получении высокой точности при поиске векторов RAG в течение прошлого года. То есть бот либо упускает информацию, либо выдумывает её (низкий полнот и низкая точность в терминах информационного поиска), что хорошо задокументировано Стэнфордом, Google и другими.

Возникает вопрос: зачем бросать в LLM кучу фрагментов, если можно предоставить ей весь корпус? По крайней мере, при внедрении контекста, когда LML неточна, у вас меньше параметров для настройки.

Хорошо, это не сработает для обширных библиотек документов или кода, но для небольших и средних баз контента это пока работает отлично… Я работаю над проектом, который формально тестирует это! Скоро будет больше информации… Спасибо.

PS. Чтобы сделать ещё интереснее: у меня были хорошие результаты с внедрением контекста + дообучением, и появляются новые подходы, сочетающие RAG и внедрение контекста! И так далее.

Также смотрите:

https://pub.towardsai.net/why-rag-applications-fail-in-production-a-technical-deep-dive-15cc976af52c

ДОПОЛНЕНИЕ 2

Вот тест в формате вопрос-ответ с использованием белого документа (~20 тыс. токенов) в контексте инъекции промптов против RAG (контент и настройки были максимально идентичны. LLM = Gemini-1.5-Pro).

АНАЛИЗ:

RAG работает нестабильно: иногда находит ответ, иногда нет.


:github_check: Успешная инъекция промпта:


:x: Сбой RAG:


Трассировка запроса RAG:

Мне удалось заставить RAG отвечать на вопросы из загруженного файла в начале документа, а при настойчивости он может обращаться и к середине, и к концу… так что это не полный провал. Однако он работает нестабильно и, на мой взгляд, с ним сложнее иметь дело : )

Вот тестовый файл на случай, если кто-то захочет поэкспериментировать:

Файл содержит эти уникальные «иголки» BME haystack, которые гарантированно не встречаются в внешних копиях статьи в интернете.

Начало:

Корректор: Фелониус Монко

Середина:

Примечание редактора: Серия стабильности Гольдиха была открыта Морисом Гольдихом. Хотя первоначальный порядок потенциала выветривания минералов, предложенный Гольдихом, был качественным, более поздние работы Михала Ковальского и Дж. Дональда Римштида перевели эту серию в количественные показатели. Благодарим доктора Гомеса Пайла из Университета Верхнего Мичигана (NMU) за это уточнение.

Конец:

Dang, S. et al. Cryo-EM structures of the TMEM16A calcium-activated chloride channel. Nature 552, 426429 (2017).

Equatics-paper1-with-unique-haystack-needles-v116.txt (71.8 KB)

Все комментарии, критика и рекомендации будут высоко оценены! В дальнейшем я проведу тестирование с использованием большего количества LLM, моделей векторизации и т. д.

ПРИМЕЧАНИЕ:

Мне удалось повторно запустить описанный выше тест с использованием GPT-4o (контекст 128k), убедившись в применении настроек большого токена / чанка.. но для моего кейса использования Q/A по белой книге это по-прежнему очень нестабильно.. (потеря в середине, потеря в конце и т.д.) ..вот мои настройки, если кто-то захочет повторить и доработать. .Буду рад, если мы сможем найти правильные настройки для этого случая :

КАСТОМНЫЙ ИИ-ПЕРСОНА
Включено? Да
Приоритет Да
Разрешить чат Да
Разрешить упоминания Да
Визуализация включена Нет
Имя Rag Testing Bot 3
Описание Тестирование RAG против инъекции промпта в длинный контекст
Модель языка по умолчанию GPT-4o-custom
Пользователь Rag_Testing_Bot_bot
Разрешенные команды Категории, Чтение, Резюме
Разрешенные группы trust_level_4
Системный промпт Отвечайте максимально полно на основе предоставленного контекста об исследованиях по удалению углерода Equatic из прикрепленного файла. Не придумывайте контент. Не используйте контент, внешний по отношению к этой сессии. Сосредоточьтесь на предоставленном контенте и создавайте ответы на его основе максимально точно и полно.
Макс. постов в контексте 50
Температура 0.1
Top P 1
Загрузки Equatics-paper1-with-unique-haystack-needles-v116.txt
Токенов в чанке загрузки 1024
Перекрытие токенов чанка загрузки 10
Поиск чанков в диалоге 10
Модель языка для консолидатора вопросов GPT-4o-custom
КАСТОМНЫЙ БОТ
Отображаемое имя GPT-4o-custom
Название модели gpt-4o
Сервис, хостящий модель OpenAI
URL сервиса, хостящего модель https://api.openai.com/v1/chat/completions
API-ключ сервиса, хостящего модель D20230943sdf_fake_Qqxo2exWa91
Токенизатор OpenAITokenizer
Количество токенов для промпта 30000