Графові RAG: Відкриваємо Семантичний Всесвіт Знань
Привіт, друзі! З вами Ліла Харт, і от, сьогодні я занурююся в захопливий світ генерування відповідей, десь так. З використанням розширеного ну, пошуку (RAG), але з невеликою родзинкою – графовий RAG, або GraphRAG. Уявіть припустимо, собі: замість простих векторних баз даних, ми. Насправді, використовуємо потужність графових баз даних, щоб розкрити глибини знань. Це як відкрити двері до нового виміру, де зв’язки. Між даними мають значення типу, не менше, ніж самі дані, якось так. Чесно кажучи,
Що таке GraphRAG оскільки і чому це важливо?
У традиційних системах RAG ми часто використовуємо векторні бази даних, щоб зберігати інформацію у вигляді векторів (ембедингів), а потім шукаємо відповіді на питання, використовуючи семантичний пошук. Але GraphRAG пропонує дещо інше: він організовує дані у формі графу знань. Тут вузли – це дані, а ребра – зв’язки між ними. Все це дозволяє нам вийти за рамки простих семантичних відповідностей і досліджувати тонкі взаємозв’язки та контекст.
Уявіть, що ви скажімо, хочете дізнатися більше про співробітників компанії, їхні ролі та відділи. Чесно кажучи, замість простого пошуку за ключовими словами “Джон” або “директор”, GraphRAG може відповісти на питання: “З ким співпрацює Джон? ” і надати вам відповідь, розширюючи ваше розуміння не лише окремих фактів, а й контексту. Чесно кажучи,
Ключові перетворення: від тексту до графів
Першим кроком у створенні GraphRAG є перетворення неструктурованих даних у структуровані дані у форматі графу. Це завдання припустимо, покладаємо на велику мовну модель (LLM). LLM аналізує текст і визначає:
- Сутності: Люди, посади, відділи. Компанії – усе, що може бути представлене як вузол у графі. Справа в тому, що
- Відношення: Як ці сутності пов’язані між собою – наприклад, “Джон працює в” (до відділу), “Джон співпрацює з” (з іншими співробітниками).
Після цього структуровані дані надходять у графову. Базу даних, яка виконує роль потужного “мозку” нашої системи. Дивно,
У відеоуроці, який я переглянула декілька разів, щоб повністю розібратися. З цією темою, ми використовували Neo4j – чудову відкриту графову базу даних. Але, звісно, ви можете використовувати будь-яку іншу графову базу, яка вам подобається.
Практичний приклад: Створення графу знань
Щоб оживити нашу систему, нам знадобиться кілька ключових компонентів:
- .
-
База даних: Створюємо локальний екземпляр Neo4j, використовуючи контейнеризацію (в нашому випадку Podman, але Docker також підійде). Не забудьте встановити необхідні плагіни, такі як APOC, щоб розширити функціональність бази даних.
-
Віртуальне середовище Python: Створення чистого середовища для встановлення залежностей є важливою практикою.
-
Python бібліотеки: Встановлюємо всі необхідні бібліотеки, такі як:
osтаgetpassдля налаштування облікових даних.langchainдля взаємодії з LLM, створення графових документів та взаємодії з базою даних Neo4j. Дивно,ibm_watsonx_aiдля взаємодії з LLM.
-
Налаштування LLM: Ми коригуємо параметри LLM, такі як температура. Та максимальна кількість токенів, щоб вона генерувала якомога більше деталей та мінімізувала ймовірність галюцинацій.
-
Дані: Ми використовуємо текстові дані, які описують співробітників, їхні посади та відділи. Насправді,
-
Перетворення в граф: LLM перетворює текст у набір вузлів і зв’язків. Ми визначаємо дозволені типи вузлів та зв’язків, щоб отримати найточніше представлення знань, приблизно так.
-
Додавання даних в граф: Використовуючи функцію
addGraphDocuments, ми вставляємо отримані дані в графову базу даних.
Візуалізація та запити Cypher
Після заповнення графу, ми можемо його візуалізувати в браузері і переконатися, що всі дані були правильно представлені. Це, звісно, важливо, адже ми хочемо мати надійну основу для наших подальших запитів.
Для запитів до графової бази даних ми використовуємо мову Cypher – це “SQL для графів”. Cypher дозволяє нам ефективно знаходити інформацію про вузли, зв’язки та шляхи в графі.
В прикладі, скажімо, ми створили два типи промтів для нашої LLM:
- Cypher prompt: Інструкції. Насправді, для LLM генерувати коректні запити Cypher на основі природної мови (тобто як перекласти питання в код). Для цього використовується шаблон FewShotPromptTemplate, який надає моделі. Кілька прикладів та обмежує її вихід лише Cypher-запитом.
- QA prompt: Інструкції для LLM бачите, щодо перетворення результатів запиту Cypher на природну мову (тобто як відповісти на питання користувача, використовуючи інформацію з бази даних). Тут ми також використовуємо FewShotPromptTemplate з прикладами питань. Звичайно, та відповідями, уявіть собі, щоб модель розуміла як взаємодіяти з користувачем.
Створення Chain приблизно, для відповідей на питання
На наступному кроці ми об’єднуємо. Cypher-промт, QA-промт, граф знань та LLM, щоб створити так званий “question answering chain”. Це дозволяє нам ставити питання природною мовою і отримувати відповіді, отримані з графової бази даних. Ми також коригуємо параметри LLM, наприклад, температуру і лінійний штраф за довжину, щоб забезпечити короткі та відповідні відповіді. Все це дозволяє нам максимально ефективно використовувати потенціал GraphRAG.
Демонстрація: Справжня магія GraphRAG
Тепер найцікавіше! Ми можемо ставити питання природною мовою та отримувати відповіді від нашої системи. Цікаво, ось кілька прикладів:
- “Яка посада у Джона? ” -> “Джон є директором відділу цифрового маркетингу. “
- “З ким співпрацює Джон але ” -> “Джон співпрацює з Джейн. “
- “В якому відділі працює Джейн і ” -> “Джейн працює у виконавчому відділі. “
- “З ким співпрацює Джейн? ” -> “Джейн співпрацює з Шерон та Джоном. “
десь так,
Як бачите, GraphRAG дозволяє отримати не лише. Прості факти, але й інформацію про взаємозв’язки між різними сутностями.
GraphRAG vs. VectorRAG: У чому різниця?
Основна відмінність полягає в тому, як ми “зберігаємо” та “отримуємо” інформацію. Цікаво, у VectorRAG ми використовуємо ембединги та семантичний пошук. Тоді як GraphRAG оперує графами знань та Cypher-запитами.
GraphRAG має низку переваг:
- Структуровані дані:. Він використовує структуру графу, щоб розуміти зв’язки між елементами.
- Контекст: Він може забезпечити більше контексту, ніж просто семантичний пошук.
- Сумаризація: GraphRAG краще підходить для отримання узагальнених даних та інформації про групи вузлів. Звичайно,
Звісно, іноді може бути корисним поєднати обидва підходи (VectorRAG + GraphRAG) у так званих “гібридних RAG-системах”.
Підсумок: перспективи GraphRAG
GraphRAG – це потужний. Інструмент, який може докорінно змінити спосіб взаємодії з інформацією. Він особливо корисний для роботи з даними, що містять складні взаємозв’язки, такі. Як знання розумієте, про співробітників, управління знаннями, соціальні мережі, наукові дослідження та багато іншого.
Я розумієте, сподіваюся, що ця стаття надихнула вас на. Експерименти з GraphRAG і типу, розкрила для вас дивовижний світ знань, в такому дусі. Безумовно, не забудьте ознайомитися з посиланням на GitHub, щоб спробувати GraphRAG самостійно.
Дякую за увагу! Простіше розумієте, кажучи, до нових зустрічей, друзі!







