web analytics

RAG мертв?: Anthropic говорит «нет»

Sztuczna Inteligencja (ИИ/AI)

Ваша система RAG не дает четких ответов? Новый контекстный подход Anthropic к поиску может изменить то, как ваша система обрабатывает и извлекает данные. Узнайте, как повысить точность и получить более умные ответы, в этой обязательной к прочтению статье.

Многие разработчики боролись с ограничениями систем RAG, поэтому контекстный подход Anthropic к поиску вызвал значительный интерес в отрасли. Другие говорили, что RAG мертв, и вам следует просто использовать CAG, но что делать, если ваша база знаний не подходит.

Ваша система RAG забывает, куда она положила ключи: как контекстный поиск Anthropic решает проблему контекста
Вы когда-нибудь задавали системе RAG конкретный вопрос, а потом получали раздражающе неопределенный ответ? Вы не одиноки. Вот как умное усовершенствование меняет правила игры.

Представьте себе: вы создали элегантную систему RAG (Retrieval Augmented Generation) для документации вашей компании. Вы спрашиваете ее: «Каков был рост нашей выручки во втором квартале 2023 года?», и она уверенно отвечает: «Выручка выросла на 3% по сравнению с предыдущим кварталом». Отлично, но… какая компания? Какой квартал? Ваша система просто вручила вам кусочек пазла, не показав коробку.

Если вы работали с системами RAG, вы, вероятно, уперлись в эту стену. Хорошие новости? Недавно Anthropic представила обманчиво простое решение под названием «контекстный поиск», которое показывает замечательные результаты — снижение сбоев поиска до 49% при сочетании с существующими методами.

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

Проблема контекста: когда хорошие куски становятся плохими
Прежде чем перейти к решению, давайте разберемся, почему стандартные системы RAG испытывают трудности с контекстом. В типичном конвейере RAG вы делаете что-то вроде этого:

  1. Разбейте документы на части (обычно по несколько сотен токенов каждая)
  2. Генерация вложений для каждого фрагмента
  3. Сохраните эти вложения в векторной базе данных.
  4. При поступлении запроса найдите наиболее семантически схожие фрагменты
  5. Отправьте эти фрагменты вашему LLM, чтобы получить ответ

Это прекрасно работает для многих вариантов использования. Спросите о «лучших практиках машинного обучения», и вы, скорее всего, получите соответствующие фрагменты о методах машинного обучения. Но вот где все становится сложнее.

Представьте, что ваш документ содержит несколько квартальных отчетов для разных компаний. Когда вы делите документ на части, эта важная часть, гласящая «выручка выросла на 3%», отделяется от контекста, который идентифицирует ее как «результаты Acme Corp за второй квартал 2023 года». Ваша модель встраивания видит «рост выручки» и думает «это финансово значимо!», но не имеет представления о том, к какой компании или периоду времени она относится.

Временный подход: поиск по ключевым словам спешит на помощь?

Многие разработчики пытались исправить эту проблему, добавляя поиск по ключевым словам (например, BM25) вместе с семантическим поиском. Это помогает, когда вы ищете конкретные термины, такие как коды ошибок. Введите «Ошибка TS-99», и поиск по ключевым словам укажет ее, в то время как чистый семантический поиск может вернуть общие руководства по устранению неполадок.

Но даже этот двойной подход имеет ограничения. Если в ваших документах несколько раз упоминается «доход вырос на 3%» для разных контекстов, поиск по ключевым словам сам по себе не определит, какой экземпляр вам нужен. Вы все еще упускаете эту важную контекстную информацию.

Знакомство с контекстным извлечением: обучение фрагментов запоминанию их происхождения

Вот где подход Anthropic становится умным. Вместо того, чтобы пытаться исправить механизм поиска, они улучшают сами фрагменты. Основная идея элегантно проста: перед сохранением фрагмента предварите его соответствующей контекстной информацией.

Давайте рассмотрим наш пример дохода:

Исходный фрагмент: «Выручка выросла на 3% по сравнению с предыдущим кварталом»

Контекстуализированный фрагмент: «Этот фрагмент взят из отчета о результатах деятельности корпорации Acme за второй квартал 2023 года. Выручка выросла на 3% по сравнению с предыдущим кварталом»

Теперь и ваша модель встраивания, и поиск по ключевым словам имеют полную картину. Когда кто-то ищет «доход Acme Q2 2023», оба поисковых механизма могут уверенно определить это как релевантный фрагмент.

Реализация: заставить LLM выполнять тяжелую работу

Вы можете подумать: «Отличная идея, но я не буду вручную добавлять контекст к тысячам фрагментов». Вот где реализация становится интересной. Anthropic предлагает использовать LLM (они рекомендуют свою эффективную модель Claude Haiku) для автоматической генерации этого контекста.

Вот процесс:

  1. Возьмите ваш документ и разбейте его на части обычным способом.
  2. Для каждого фрагмента отправьте как полный документ, так и конкретный фрагмент LLM
  3. Используйте подсказку, которая инструктирует LLM о необходимости создания краткого контекстного утверждения.
  4. Добавить этот контекст к исходному фрагменту
  5. Создавайте вложения и обновляйте индекс BM25, используя эти обогащенные фрагменты

Быстрое проектирование здесь имеет решающее значение. По сути, вы просите LLM сыграть роль детектива: «Учитывая этот полный документ и этот конкретный фрагмент, напишите краткий контекст, который поможет кому-то понять, где этот фрагмент вписывается в общую картину».

Цифры: действительно ли это работает?

Показатели Anthropic впечатляют. Используя только контекстные вложения, они увидели снижение частоты неудач поиска на 35% (с 5,7% до 3,7% для поиска топ-20). Когда они объединили контекстные вложения с контекстным BM25, улучшение подскочило до 49% меньше неудач.

Но вот где становится действительно интересно. Когда они добавили рераннер вдобавок ко всему, средний уровень ошибок поиска снизился с 5,7% до всего лишь 1,9%. Это огромное улучшение для того, что можно назвать этапом предварительной обработки и умной инженерией подсказок.

Компромиссы: бесплатного обеда не бывает

Прежде чем вы ринетесь внедрять это, давайте поговорим о расходах. Добавление контекста означает:

  1. Большие фрагменты : каждый фрагмент увеличивается на 50–100 токенов, что немного уменьшает количество токенов, которые можно поместить в контекстное окно LLM.
  2. Расходы на обработку : необходимо выполнить вызов LLM для каждого фрагмента во время индексации.
  3. Накладные расходы на хранение : Ваша векторная база данных и поисковые индексы увеличиваются

Anthropic оценивает единовременную стоимость обработки примерно в $1,02 за миллион токенов. Это может показаться небольшим, но если вы имеете дело с миллионами документов, это складывается в сумму. Хорошей новостью является то, что такие функции, как оперативное кэширование, могут сократить это до 90%, особенно при обработке похожих документов.

Когда использовать контекстный поиск (а когда его лучше пропустить)

Вот практическое дерево решений:

Используйте контекстный поиск, когда:

  • Ваши документы содержат несколько сущностей, периодов времени или контекстов.
  • Вам нужна высокая точность для конкретных целевых запросов
  • Ваша база знаний слишком велика для степеней LLM с длинным контекстом (более 200 тыс. токенов)
  • Цена ошибок при поиске данных высока (например, юридические документы, финансовые отчеты).

Рассмотрите альтернативные варианты, если:

  • Ваша база знаний мала (менее 200 тыс. токенов или 1 МБ, если вы используете Gemini, например) — просто используйте LLM с длинным контекстом
  • Ваши документы уже хорошо структурированы и имеют понятный контекст
  • Вы работаете с однородным контентом, фрагменты которого являются самостоятельными.

Советы по внедрению с передовой

На основе экспериментов Anthropic и предоставленного ими кода можно дать несколько практических советов:

  1. Настройте контекстную подсказку : Подсказка для финансовых документов требует иного контекста, чем для технической документации. Экспериментируйте и повторяйте.
  2. Выбирайте модель встраивания с умом : в ходе тестов лучше всего показала себя модель Gemini Text-004 от Google, а также хорошие результаты продемонстрировала модель встраивания Voyage.
  3. Не экономьте на повторном ранжировании : сочетание контекстного поиска и повторного ранжирования показало наилучшие результаты. Рассмотрите возможность использования таких сервисов, как API повторного ранжирования Cohere.
  4. Извлеките больше данных, затем отфильтруйте : Anthropic добился успеха, изначально извлекая 20 фрагментов, а затем используя повторное ранжирование для выбора лучших из них.
  5. Тестируйте с вашими реальными данными : предоставленные контрольные показатели основаны на определенных наборах данных. Ваши результаты могут варьироваться в зависимости от типов документов и шаблонов запросов.

Общая картина: RAG не умер

С LLM, которые щеголяют все большими контекстными окнами, вы можете задаться вопросом, не устаревает ли RAG. Работа Anthropic говорит об обратном. Даже с контекстными окнами в 200 тыс.+ токенов RAG остается более экономически эффективным и масштабируемым для больших баз знаний. Контекстный поиск делает RAG лучше, а не устаревшим.

Подумайте об этом так: LLM с длинным контекстом — это как фотографическая память на все, что вы в данный момент смотрите. RAG — это как хорошо организованная библиотека с умным библиотекарем. Контекстный поиск только что дал этому библиотекарю гораздо лучший карточный каталог.

Подведение итогов: небольшие изменения, большое влияние

Контекстный поиск — это не революционная новая архитектура или сложная инновация нейронной сети. Это умный шаг предварительной обработки, который признает простую истину: контекст имеет значение. Гарантируя, что каждый фрагмент несет свой собственный контекст, мы не боремся с ограничениями встраиваемых моделей или поиска по ключевым словам — мы работаем с ними.

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

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

Готовы реализовать контекстный поиск? Anthropic поделился своим кодом с рабочими примерами. Начните с их блокнотов и адаптируйте подход к вашему конкретному варианту использования. Ваше будущее «я» (и ваши пользователи) будут вам благодарны.

Источник:
https://medium.com/@richardhightower/is-rag-dead-anthropic-says-no-290acc7bd808

Rate article
( No ratings yet )

Leave a Reply