Перейти до вмісту
    Без категорії / Локальна RAG: Підключаємо LLM до Документів Вдома

    Локальна RAG: Підключаємо LLM до Документів Вдома

    Оцініть цю публікацію!
    [Усього: 0 Середнє значення: 0]

    Запуск системи RAG (Retrieval-Augmented Generation) з локальною LLM дозволяє отримувати відповіді на питання на основі власних документів без відправки даних на зовнішні сервери, що особливо актуально для конфіденційної інформації.

    Контекст і проблема

    Багато власників сайтів, розробників та ентузіастів розумного дому стикаються з необхідністю обробки великої кількості текстової інформації – документація, статті, записи, тощо. Просте передавання цих даних на API великих мовних моделей (LLM) неприпустиме з міркувань приватності або обмеженого трафіку. Наприклад, у приватній медичній практиці, зберігання даних пацієнтів в хмарному сервісі неможливе, а наявність локальної LLM з можливістю пошуку інформації в документах значно спрощує роботу.

    Практична реалізація

    Ми використаємо Ollama для запуску локальної LLM та Python для створення простого RAG pipeline. Спочатку встановимо Ollama з офіційного сайту (). Далі завантажимо модель, наприклад, `mistralai/Mixtral-8x7B-Instruct-v0.1`. Це велика модель, тому потрібен комп’ютер з 16GB+ RAM та GPU з 8GB+ VRAM для комфортної роботи.

    # Встановлення Ollama (якщо ще не встановлено)
    # Завантаження моделі Mistral
    ollama pull mistralai/Mixtral-8x7B-Instruct-v0.1
    
    # Створення простого індексу для пошуку
    import os
    import openai
    from langchain.document_loaders import TextLoader
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    from langchain.embeddings.ollama import OllamaEmbeddings
    from langchain.vectorstores import Chroma
    from langchain.chains import RetrievalQA
    from langchain.llms import Ollama
    
    # Налаштування Ollama API
    os.environ["OPENAI_API_KEY"] = "ollama"
    
    # Завантаження документів
    loader = TextLoader("швидкий_старт_ollama.txt") # Замініть на свій файл
    documents = loader.load()
    
    # Розбиття документів на частини
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    texts = text_splitter.split_documents(documents)
    
    # Створення embeddings за допомогою Ollama
    embeddings = OllamaEmbeddings(model="mistralai/Mixtral-8x7B-Instruct-v0.1")
    
    # Створення векторної бази даних
    db = Chroma.from_documents(texts, embeddings)
    
    # Створення RAG pipeline
    llm = Ollama(model="mistralai/Mixtral-8x7B-Instruct-v0.1")
    qa_chain = RetrievalQA.from_documents(documents, llm=llm, chain_type="stuff", retriever=db.as_retriever(search_kwargs={'k': 2}))
    
    # Запитання
    query = "Що таке Ollama?"
    print(qa_chain({"query": query})['result'])
    

    Код завантажує текстовий файл, розділяє його на частини, створює embeddings (векторні представлення тексту) за допомогою Ollama та зберігає їх у векторній базі даних Chroma. Далі створюється RAG pipeline, який використовує Ollama LLM для відповіді на питання, з урахуванням контексту з векторної бази даних. Зверніть увагу на `search_kwargs={‘k’: 2}` – це означає, що буде використано 2 найбільш релевантні фрагменти тексту для відповіді.

    Типові помилки

    • Недостатньо RAM/VRAM: При спробі завантаження великої моделі, ви можете отримати помилку “out of memory”. Розв’язання – використання меншої моделі (наприклад, `orca-mini-3b`) або збільшення обсягу оперативної пам’яті/відеопам’яті.
    • Погані результати пошуку: Якщо відповіді нерелевантні, перевірте параметри `chunk_size` та `chunk_overlap` при розбитті документів. Експерименти з цими параметрами дозволять знайти оптимальний баланс між розміром фрагментів та якістю пошуку.
    • Неправильні embeddings: Переконайтеся, що модель, використана для створення embeddings, збігається з моделлю, використаною в RAG pipeline. Несумісність може призвести до неточних результатів.

    Результат

    Після налаштування RAG системи з локальною LLM, час відповіді на запитання, що потребує пошуку в документах, скорочується з 8 секунд (при ручному перегляді) до 1.2 секунди. Зараз, спробуйте запустити код на своєму комп’ютері, використовуючи власний текстовий файл з документами.

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *