scientific-rag / docs /assignment.md
DenysKovalML's picture
docs: add assignment and set up tasks
9f5d87b

A newer version of the Gradio SDK is available: 6.5.1

Upgrade

RAG Question Answering – LLM проєкт

Ви маєте створити систему, яка відповідає на запитання користувача (question answering) й при цьому використовує сторонні документи як джерело знань. Обов'язковим є використання підходу retrieval-augmented generation.

Це завдання можна виконувати командою до двох-трьох людей.

Дедлайн: 16 грудня 2025 року Лекція: RAG Live coding: RAG live coding

Джерело документів

Ви маєте самостійно знайти та обрати джерело документів для пошуку. Це можуть бути готові датасети (подивіться https://huggingface.co/datasets). Ви також можете створити власний датасет, наприклад, завантаживши певні сторінки або сайти.

Альтернативою пошуку по багатьох документам є пошук по одному або кількох довгих документах, таких як книги.

Chunking

Ми не будемо працювати з оригінальними документами, оскільки вони можуть бути дуже довгими. Натомість документи необхідно розбити на невеликі шматочки (chunks).

Можете зробити це вручну, простий приклад був на лекції. Або використайте сторонню бібліотеку, але будьте готові пояснити, що вона робить.

Retriever

Імплементуйте пошук релевантних документів двома методами: по ключових словах (BM25) та семантичний пошук. Можете використовувати сторонні бібліотеки, наприклад:

Додайте можливість вмикати/вимикати пошук по ключових словах, семантичний пошук або весь пошук. Це допоможе краще зрозуміти, як різні методи працюють для різних запитів.

Знайдіть 1-2 запити, для яких краще справляється BM25 і ще 1-2 запити, для яких кращі результати повертає dense retriever.

Мовна модель (LLM)

Ви вільні вибрати мовну модель для задачі. Тут є два варіанти:

Опція 1. Моделі, запущені на сторонніх серверах. Найзручніший та найшвидший варіант для початку. Всі наведені сервіси є платними, але багато з них дають безкоштовний доступ. Безкоштовний доступ має обмеження за кількістю запитів на хвилину, але є цілком достатнім для цього завдання.

Приклади сервісів та моделей:

  • OpenAI gpt-5-mini та Antropic Sonnet -- популярні, але платні варіанти.
  • Groq надає безкоштовний доступ до кількох відкритих моделей.
  • OpenRouter має кілька безкоштовних опцій, але можуть бути проблеми зі швидкістю та стабільністю.
  • Також можна покласти невелику суму на OpenRouter та витрачати її на різні моделі.

Щоб не залежати від API конкретного провайдера, раджу використовувати бібліотеку LiteLLM . Приклади використання:

💡 Якщо не знаєте, що обрати, спробуйте Groq або OpenRouter.

Опція 2. Вільні моделі, запущені на вашому комп'ютері або сервері. Якщо ваш комп'ютер не оснащений GPU, то швидкість генерації буде малою. Зате ви матимете повний контроль над моделлю. Це не особливо потрібно для цього завдання, але може бути важливим в інших проєктах. Вільні моделі можна запускати багатьма способами:

Reranker

Для імплементації реранкера вам знадобиться cross-encoder модель. Корисні посилання:

Metadata filtering

Я не очікую виконання цього кроку в даній роботі. Однак якщо ви це імплементуєте та продемонструєте ефективність, це будуть додаткові бали. У такому разі вам необхідно буде:

  • Дістати метадані з документів. У якихось датасетах частина метаданих може бути наявна (наприклад, автор документа, джерело, дата створення). Інші типи метаданих можна дістати самостійно за допомогою LLM (наприклад, тип документа: звіт, блог, есе, технічний документ тощо)
  • Зберегти метадані в базі даних
  • Під час надходження запиту від користувача, згенерувати фільтри. Наприклад, для запиту "Хто був завкафедри СШІ у 2023 році?" згенерований фільтр може бути WHERE YEAR(creation_date) = 2024
  • Відфільтрувати документи перед тим, як подавати їх реранкеру.

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

Цитування

Від справжньої RAG системи очікується, що вона повертатиме посилання на документи, які підкріплюють її відповідь. Наприклад, так:

Чи можете ви зробити подібну функціональність у вашій системі? Гарне форматування не важливе, достатньо показати номер джерела в тексті у квадратних дужках. Наприклад: LGTM stands for “Looks Good To Me” [1]. І окремо показати перелік пронумерованих чанків.

Це необов’язкове завдання за додаткові бали.

Векторні бази даних

Використання векторних баз даних дозволяється, але не є обов’язковим і не впливає на бали.

Інтерфейс користувача

Для створення вебінтерфейсу до вашого додатка можна використовувати будь-які фреймворки та технології. Однак я наполегливо рекомендую спробувати один з двох фреймворків, спеціально створених для швидкого написання прототипів та демок моделей машинного навчання:

Кілька порад при створенні інтерфейсу:

  • Додайте короткий опис вашого сервісу на вебсторінку.
  • Додайте текстове поле для вводу LLM ключа, щоб не зберігати ключ в коді.

Deployment

Готовий додаток можна розмістити на безплатному сервісі HuggingFace Spaces. Інструкція є, наприклад, тут: https://huggingface.co/docs/hub/en/spaces-sdks-gradio

Здача роботи

Для зарахування роботи необхідно відправити source code, посилання на запущений сервіс та короткий опис виконаної роботи. В описі роботи вкажіть у вільному форматі:

  • Задачу, яку ви розв'язували

Короткий опис компонентів:

  • Джерело даних
  • Chunking
  • LLM
  • Retriever
  • Reranker
  • Citations
  • UI
  • Інше Для відсутніх компонентів поставте "N/A" або "-".
  • При командному виконанні, напишіть хто брав участь в якій частині проєкту.
  • Посилання на запущений сервіс.
  • Інструкції з запуску, якщо є особливості.
  • Посилання на source code або архів з ним.

Контакти

Якщо під час виконання роботи у вас виникатимуть питання, ви можете:

  • Запитати в чаті курсу на Discord.
  • Залишити коментар у цьому документі.
  • Запитати голосом або в чаті перед початком лекції.
  • Написати мені в приватні.