Штучний Інтелект
LlamaIndex: легко доповнюйте свої програми LLM за допомогою спеціальних даних

Великі мовні моделі (LLM), такі як серія GPT OpenAI, були навчені на різноманітних загальнодоступних даних, демонструючи надзвичайні можливості у створенні тексту, резюмуванні, відповідях на запитання та плануванні. Незважаючи на їх універсальність, питання, яке часто ставлять, пов’язане з бездоганною інтеграцією цих моделей із користувальницькими, приватними чи закритими даними.
Компанії та окремі особи переповнені унікальними та спеціальними даними, які часто зберігаються в різних програмах, таких як Notion, Slack і Salesforce, або зберігаються в особистих файлах. Щоб використовувати LLM для цих конкретних даних, було запропоновано та експериментовано кілька методологій.
Тонка настройка представляє один із таких підходів, він полягає в коригуванні вагових коефіцієнтів моделі для включення знань із певних наборів даних. Однак цей процес не позбавлений труднощів. Це вимагає значних зусиль у підготовці даних у поєднанні зі складною процедурою оптимізації, що потребує певного рівня досвіду машинного навчання. Більше того, фінансові наслідки можуть бути значними, особливо при роботі з великими наборами даних.
Навчання в контексті з’явилося як альтернатива, приділяючи пріоритет створенню вхідних даних і підказок, щоб забезпечити LLM необхідним контекстом для генерації точних результатів. Цей підхід зменшує потребу в широкому перенавчанні моделі, пропонуючи більш ефективні та доступні засоби інтеграції особистих даних.
Але недоліком цього є його залежність від навичок і досвіду користувача оперативне проектування. Крім того, навчання в контексті не завжди може бути таким точним або надійним, як тонке налаштування, особливо при роботі з вузькоспеціалізованими або технічними даними. Попереднє навчання моделі на широкому діапазоні інтернет-тексту не гарантує розуміння конкретного жаргону чи контексту, що може призвести до неточних або нерелевантних результатів. Це особливо проблематично, коли приватні дані надходять із нішевого домену чи галузі.
Крім того, обсяг контексту, який можна надати в одній підказці, обмежений, і продуктивність LLM може погіршуватися зі збільшенням складності завдання. Існує також проблема конфіденційності та безпеки даних, оскільки інформація, надана в запиті, потенційно може бути чутливою або конфіденційною.
Оскільки спільнота досліджує ці методи, такі інструменти, як CallIndex зараз привертають увагу.
Це було розпочато Джеррі Лю, колишній науковий співробітник Uber. Експериментуючи з GPT-3 минулої осені, Лю помітив обмеження моделі щодо обробки приватних даних, таких як особисті файли. Це спостереження призвело до запуску проекту з відкритим кодом LlamaIndex.
Ініціатива залучила інвесторів, забезпечивши $ 8.5 мільйонів в нещодавньому раунді початкового фінансування.
LlamaIndex полегшує доповнення LLM за допомогою користувацьких даних, усуваючи розрив між попередньо підготовленими моделями та користувацькими випадками використання даних. За допомогою LlamaIndex користувачі можуть використовувати свої власні дані за допомогою LLM, відкриваючи можливість генерувати знання та міркувати за допомогою персоналізованої інформації.
Користувачі можуть безперешкодно надавати магістрам права власні дані, сприяючи створенню середовища, де генерування знань і міркування є глибоко персоналізованими та проникливими. LlamaIndex усуває обмеження контекстного навчання, надаючи більш зручну та безпечну платформу для взаємодії з даними, гарантуючи, що навіть ті, хто має обмежений досвід машинного навчання, зможуть використовувати весь потенціал LLM зі своїми особистими даними.
Концепції високого рівня та деякі ідеї
1. Доповнена генерація пошуку (RAG):
RAG — це подвійний процес, призначений для поєднання LLM із користувальницькими даними, таким чином підвищуючи здатність моделі надавати більш точні та обґрунтовані відповіді. Процес включає в себе:
- Етап індексування: це підготовчий етап, на якому закладається основа для створення бази знань.
- Стадія запиту: Тут базу знань шукають відповідний контекст, щоб допомогти магістрам у відповідях на запити.
Подорож індексування з LlamaIndex:
- Роз'єми даних: Думайте про з’єднувачі даних як про паспорт ваших даних до LlamaIndex. Вони допомагають імпортувати дані з різних джерел і форматів, інкапсулюючи їх у спрощене представлення «Документа». З’єднувачі даних можна знайти в LlamaHub, сховищі з відкритим кодом, наповненому завантажувачами даних. Ці завантажувачі створені для легкої інтеграції, що дозволяє працювати з будь-якою програмою LlamaIndex.
- Документи / Вузли: Документ схожий на звичайну валізу, яка може містити різні типи даних, будь то PDF, вихід API або записи бази даних. З іншого боку, вузол — це фрагмент або «фрагмент» документа, збагачений метаданими та зв’язками з іншими вузлами, що забезпечує надійну основу для точного отримання даних у майбутньому.
- Індекси даних: Після прийому даних LlamaIndex допомагає індексувати ці дані у форматі, який можна отримати. За лаштунками він розділяє необроблені документи на проміжні представлення, обчислює векторні вбудовування та виводить метадані. Серед індексів часто вибирають «VectorStoreIndex».
Типи індексів у LlamaIndex: ключ до впорядкованих даних
LlamaIndex пропонує різні типи індексів, кожен для різних потреб і випадків використання. В основі цих індексів лежать «вузли», як обговорювалося вище. Давайте спробуємо зрозуміти індекси LlamaIndex з їхньою механікою та застосуванням.
1. Індекс списку:
- Механізм: Індекс списку вирівнює вузли послідовно, як список. Після поділу вхідних даних на вузли, вони впорядковані лінійним чином, готові до запитів або послідовно, або через ключові слова чи вбудовування.
- Перевага: цей тип індексу найкращий, коли потрібно виконувати послідовні запити. LlamaIndex забезпечує використання всіх ваших вхідних даних, навіть якщо вони перевищують ліміт токенів LLM, розумно запитуючи текст з кожного вузла та уточнюючи відповіді під час навігації вниз по списку.
2. Vector Store Index:
- Механізм: Тут вузли перетворюються на векторні вбудовані елементи, які зберігаються локально або в спеціалізованій векторній базі даних, наприклад Мільвус. Під час запиту він отримує top_k найбільш схожих вузлів, направляючи їх до синтезатора відповідей.
- Перевага: якщо ваш робочий процес залежить від порівняння тексту на семантичну подібність за допомогою векторного пошуку, можна використовувати цей індекс.
3. Індекс дерева:
- Механізм: у деревоподібному індексі вхідні дані перетворюються на деревовидну структуру, побудовану знизу вгору з листових вузлів (вихідних фрагментів даних). Батьківські вузли з’являються як зведення листових вузлів, створених за допомогою GPT. Під час запиту індекс дерева може переходити від кореневого вузла до листових вузлів або створювати відповіді безпосередньо з вибраних листових вузлів.
- Перевага: за допомогою індексу дерева запити до довгих фрагментів тексту стають більш ефективними, а витяг інформації з різних сегментів тексту спрощується.
4. Індекс ключових слів:
- Механізм: карта ключових слів із вузлами утворює ядро індексу ключових слів. Під час запиту ключові слова вибираються із запиту, і лише зіставлені вузли потрапляють у центр уваги.
- Перевага: якщо у вас є чіткі запити користувача, можна використовувати індекс ключових слів. Наприклад, перегляд медичних документів стає більш ефективним, якщо зосередитися лише на документах, що стосуються COVID-19.
Встановлення LlamaIndex
Встановлення LlamaIndex є простим процесом. Ви можете встановити його безпосередньо з Pip або з джерела. (Переконайтеся, що у вашій системі встановлено python, або ви можете скористатися Google Colab)
1. Установка з Pip:
- Виконайте наступну команду:
pip install llama-index
- Примітка:: під час встановлення LlamaIndex може завантажувати та зберігати локальні файли для певних пакетів, таких як NLTK і HuggingFace. Щоб указати каталог для цих файлів, використовуйте змінну середовища «LLAMA_INDEX_CACHE_DIR».
2. Встановлення з вихідного коду:
- Спочатку клонуйте репозиторій LlamaIndex з GitHub:
git clone https://github.com/jerryjliu/llama_index.git
- Після клонування перейдіть до каталогу проекту.
- Вам знадобиться Poetry для керування залежностями пакетів.
- Тепер створіть віртуальне середовище за допомогою Poetry:
poetry shell
- Нарешті, встановіть основні вимоги пакета з:
poetry install
Налаштування вашого середовища для LlamaIndex
1. Налаштування OpenAI:
- За замовчуванням LlamaIndex використовує OpenAI
gpt-3.5-turbo
для створення тексту іtext-embedding-ada-002
для пошуку та вбудовування. - Щоб використовувати це налаштування, вам потрібно мати
OPENAI_API_KEY
. Отримайте його, зареєструвавшись на веб-сайті OpenAI і створивши новий маркер API. - У вас є можливість налаштувати основну велику мовну модель (LLM) відповідно до потреб вашого проекту. Залежно від вашого постачальника LLM вам можуть знадобитися додаткові ключі та маркери середовища.
2. Налаштування локального середовища:
- Якщо ви не бажаєте використовувати OpenAI, LlamaIndex автоматично перемикається на локальні моделі –
LlamaCPP
таllama2-chat-13B
для створення тексту таBAAI/bge-small-en
для пошуку та вбудовування. - використовувати
LlamaCPP
, дотримуйтеся наданого посібника зі встановлення. Переконайтесь у встановленніllama-cpp-python
пакет, ідеально скомпільований для підтримки вашого GPU. Це налаштування використовуватиме близько 11.5 ГБ пам’яті для ЦП і ГП. - Для локальних вбудовувань виконайте
pip install sentence-transformers
. Це локальне налаштування використовуватиме близько 500 МБ пам’яті.
За допомогою цих налаштувань ви можете адаптувати своє середовище, щоб або використовувати потужність OpenAI, або запускати моделі локально відповідно до вимог вашого проекту та ресурсів.
Простий варіант використання: запит до веб-сторінок за допомогою LlamaIndex і OpenAI
Ось простий сценарій Python, щоб продемонструвати, як ви можете запитувати веб-сторінку для отримання певної інформації:
!pip install llama-index html2text
import os from llama_index import VectorStoreIndex, SimpleWebPageReader # Enter your OpenAI key below: os.environ["OPENAI_API_KEY"] = "" # URL you want to load into your vector store here: url = "http://www.paulgraham.com/fr.html" # Load the URL into documents (multiple documents possible) documents = SimpleWebPageReader(html_to_text=True).load_data([url]) # Create vector store from documents index = VectorStoreIndex.from_documents(documents) # Create query engine so we can ask it questions: query_engine = index.as_query_engine() # Ask as many questions as you want against the loaded data: response = query_engine.query("What are the 3 best advise by Paul to raise money?") print(response)
The three best pieces of advice by Paul to raise money are: 1. Start with a low number when initially raising money. This allows for flexibility and increases the chances of raising more funds in the long run. 2. Aim to be profitable if possible. Having a plan to reach profitability without relying on additional funding makes the startup more attractive to investors. 3. Don't optimize for valuation. While valuation is important, it is not the most crucial factor in fundraising. Focus on getting the necessary funds and finding good investors instead.
За допомогою цього сценарію ви створили потужний інструмент для отримання конкретної інформації з веб-сторінки, просто поставивши запитання. Це лише проблиск того, чого можна досягти за допомогою LlamaIndex і OpenAI під час запиту веб-даних.
LlamaIndex проти Langchain: вибір на основі вашої цілі
Ваш вибір між LlamaIndex і Лангчейн залежатиме від мети вашого проекту. Якщо ви хочете розробити інтелектуальний інструмент пошуку, LlamaIndex є надійним вибором, оскільки він відмінно підходить як розумний механізм зберігання для пошуку даних. З іншого боку, якщо ви хочете створити систему на зразок ChatGPT із можливостями плагінів, Langchain — це ваш вибір. Це не тільки сприяє створенню кількох екземплярів ChatGPT і LlamaIndex, але й розширює функціональність, дозволяючи створювати багатозадачні агенти. Наприклад, за допомогою Langchain ви можете створювати агентів, здатних виконувати код Python, одночасно здійснюючи пошук у Google. Коротше кажучи, хоча LlamaIndex чудово справляється з обробкою даних, Langchain організовує кілька інструментів для надання цілісного рішення.

Логотип LlamaIndex Ілюстрація, створена за допомогою Серед подорожі