Архитектура RAG: часть вторая — Advanced RAG

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Контекст

Итак, первое важное изменение - это значительный рост размера контестного окна и падение стоимости токенов. Например размер окна в самой большой медели Клод от Антропик составляет 200+ тыс токенов, а Gemini, судя по последним новостям до 10млн. В таких условиях для многих задач RAG просто не требуется (или не все его компоненты), т.к. все данные можно поместить в контекстное окно. Мы уже столкнулись на практике с несколькими проектами в финансово-аналитической сфере, где задача составления инвестиционных проспектов на основе отчености компаний, была полностью решена без использования векторной базы данных как промежуточного хранилища. Тенденция на удешевление токенов и увелчичение контекстного окна явно продолжится, поэтому актуальность использования сторонних для LLM механизмов будет падать. Но пока они еще требуются.

Если же (вдруг) размера контекста все же не хватает, то в люди придумали разные методы суммаризации и сжатия контекста. В langchain появился класс, направленный на это: ConversationSummaryMemory

memory = ConversationSummaryMemory(llm=OpenAI(temperature=0))
memory.save_context({"input": "hi"}, {"output": "Hello there!"})

memory.load_memory_variables({})
   {'history': '\nThe human greets the AI, to which the AI responds.'}

llm = OpenAI(temperature=0)

conversation_with_summary = ConversationChain(
   llm=llm,
   memory=ConversationSummaryMemory(llm=OpenAI()),
   verbose=True
)

conversation_with_summary.predict(input="Hi, what's up?")

Карта Знаний

С ростом количества данных, в которых LLM приходится ориентироваться становится куда более важным возможность ориентироваться в данных. Иногда, без возможности проанализировать структуру данных и некоторые другие атрибуты не возможно ими нормально пользоватся. Например, допустим источником данных является вики компании. В вики есть страница с телефоном данной компании, но это никак явно нигде не указанно. Итак - как ЛЛМ понять что это телефон компании? Непонятно, поэтому на вопрос о телефлне компании стандартный RAG ничего не выдаст (т.к. не видит никакой взаимосвязи). Как человек понимает что это телефон компании в данном случае? Очень просто, страница хранится в подкаталоге, который называется “Информация о компании”. Т.е. человек способен из конвенции о том как данные хранятся (т.е. из структуры или иначе метаданных) понять о чем эти данные и эффективно их использовать. В случае с LLM данная проблемма решается с помощью Knowledge Graphs с метаданными (они же Knowledge Maps), т.е. LLM имеет не только данные в чистом виде но и данные о структуре хранения и связях разных data entites в данных. Т.е. понимает что эти данные означают. Этот подход называют еще Graph Retreival Augumented Generation или GraphRag.

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

Пример графа знаний
Пример графа знаний

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

В значительной степени этот процесс можно автоматизировать с помощью LLM (сюрприз

Источник: https://habr.com/ru/companies/raft/articles/818781/


Интересные статьи

Интересные статьи

Platform Engineering — один из главных технологических трендов 2024 года. По оценке Gartner, к 2026 году 80% компаний, занимающихся разработкой, будут иметь внутренние платформенные сервисы и кома...
Не судите строго, это моя первая статья, наверное если бы я был гуру Nginx и "Линуха", то скорее всего боли и страданий бы не было.С чего все началось? Одним днем мне понадобилось реализовать довольн...
С сегодняшнего дня мы начинаем серию публикаций адаптированного и дополненного перевода "Карманной книги по TypeScript". Каждое значение в JavaScript при выполнении над ним ...
В этом году, когда из-за пандемии все мероприятия перешли в онлайн, мы уже проводили «фестивальчик на удалёночке» TechTrain. Теперь число заражений снова бьёт рекорды, вопрос «как и...
В прошлой статье мы познакомились с RFID-метками, которые незримо окружают нас в быту. Сегодня продолжим разбираться с бытовым применением меток и взглянем на метки китайского производства. ...