3 подхода делать RAG, которым не учат AI-энджоеры с ютуба, но который сильно лучше работает на практике – по опыту моих друзей и меня
Стандартный подход к RAG подробно описан здесь: https://t.me/bogdanisssimo/195
Коротко, идея: мы хотим снабжать LLM нашим контекстом, чтобы она отвечала оглядываясь на него. Стандартный подход: нарезаем документы нашего контекста на чанки. Превращаем каждый чанк в эмбеддинг. На инференсе превращаем запрос пользователя в эмбеддинг, находим похожие документы. Кидаем в контекст. Звучит клёво и логично, но на практике добиться высокой точности бывает очень сложно
А как можно по-другому?
Идея #1. Хранить документы в PostgreSQL или другой не-векторной БД. Каждый документ размечается по некому набору полей (например, цена / локация / тип / время / другие параметры). Просить LLM-маршрутизатор выдать через SO параметры (или даже напрямую просить SQL, if you are brave enough), отфильтровать / отсортировать - подсунуть в контекст. Нет эмбеддингов - нет проблем. Retrieval есть? Есть.
Идея №2. Кидать все документы в контекст дешёвой и быстрой LLM-маршрутизатора, просить выделить релевантный запросу контекст для основной модели. Плюсы: подходит как для атомарных фактов (аля найти иголку в стоге сена), так и для верхнеуровневых выводов, когда нужно агрегировать некое знание сразу по большому числу документов. Снова, нет эмбеддингов - нет проблем. Мелкая LLM сильно лучше справляется с ретривалом, чем эмбеддер + косинусная близость. В большинстве юзкейсов не так много данных, чтобы бить по деньгам, тем более сейчас довольно дешёвое кеширование токенов у LLM-провайдеров.
Идея №3. Делаем или классический RAG, или один из перечисленных, но вместо слепого разбития на чанки по какому-то автоматизированному правилу, просим LLM сделать саммари и/или выделить ключевые идеи и/или выделить атомарные факты (желательно не скупиться по качеству модели, процедуру делаем 1 раз). У стандартного RAG проблема что большинство чанков (если вы будете их логировать и смотреть глазками) будет мусор, пустота, вода. А как известно, мусор на входе – мусор на выходе. После такой более въедливой обработки вы получите и на порядок меньше токенов, и в них будет сильно плотнее информация.
Делитесь постом если было полезно
Ваш @bogdanisssimo 🥰
Post #2047
6.18K