Інтеграція LlamaIndex для RAG-систем — швидкий пошук у документах

Інтеграція LlamaIndex для RAG-систем

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Інтеграція LlamaIndex для RAG-систем

Оператори страхової компанії витрачали до 12 хвилин на пошук відповіді серед 15 000 сторінок полісів та інструкцій. Ми впровадили LlamaIndex — час скоротився до 1,5 хвилин, точність зросла до 91%, а помилки через застарілі документи впали з 8% до 0,4%. За 5 років ми реалізували 20+ проєктів з інтеграції RAG на LlamaIndex у фінансах, страхуванні, рітейлі. Гарантуємо точність не нижче 90% на ваших даних. Середня економія на масштабі — значна, а окупність проєкту швидка.

Які проблеми вирішує LlamaIndex?

Розрізнені джерела даних: PDF, Word, HTML, бази даних. LlamaIndex підключає 150+ форматів через нативні завантажувачі — не потрібно писати адаптери. Низька швидкість пошуку: звичайний векторний пошук не розуміє складових запитів. SubQuestionQueryEngine розбиває питання на частини та обробляє паралельно. Відсутність контексту: LlamaIndex додає метадані (дата, автор, тип документа) та фільтрує за ними, виключаючи застарілі або нерелевантні джерела.

Як LlamaIndex пришвидшує пошук у неструктурованих даних?

LlamaIndex використовує багаторівневу індексацію. Документи розбиваються на чанки (зазвичай 512 токенів з перекриттям 50). Для кожного чанка генерується ембедінг (OpenAI text-embedding-3-small, 1536 вимірів). Вектори зберігаються в Qdrant або іншому сховищі. При запиті LLM обирає стратегію: прямий пошук, SubQuestionQueryEngine або RouterQueryEngine — залежно від складності. Вбудований реранкер підвищує релевантність топ-10 результатів.

Базовий RAG з LlamaIndex

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings from llama_index.core.node_parser import SentenceSplitter from llama_index.llms.openai import OpenAI from llama_index.embeddings.openai import OpenAIEmbedding # Налаштування глобальних параметрів Settings.llm = OpenAI(model="gpt-4o", temperature=0) Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small") Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=50) # Завантаження документів documents = SimpleDirectoryReader("./data", recursive=True).load_data() # Створення індексу index = VectorStoreIndex.from_documents(documents) # Запит query_engine = index.as_query_engine(similarity_top_k=5) response = query_engine.query("Який термін гарантії на обладнання?") print(response) # Доступ до джерел for node in response.source_nodes: print(f"Score: {node.score:.3f}, Source: {node.metadata.get('file_name')}") 

Інтеграція з векторними сховищами

from llama_index.vector_stores.qdrant import QdrantVectorStore from llama_index.core import StorageContext import qdrant_client # Підключення до Qdrant client = qdrant_client.QdrantClient(url="http://localhost:6333") vector_store = QdrantVectorStore(client=client, collection_name="docs") storage_context = StorageContext.from_defaults(vector_store=vector_store) # Індексування в Qdrant index = VectorStoreIndex.from_documents( documents, storage_context=storage_context, show_progress=True, ) # Повторне завантаження існуючого індексу index = VectorStoreIndex.from_vector_store(vector_store) 

Чому варто обрати LlamaIndex для RAG?

LlamaIndex виграє у LangChain у задачах, де потрібна глибока робота з документами. Вбудовані SubQuestionQueryEngine та RouterQueryEngine не потребують кастомних промптів — вони готові до складних запитів одразу. IngestionPipeline кешує обробку, пришвидшуючи повторну індексацію на 60%. Крім того, LlamaIndex підтримує Retrieval-Augmented Fine-Tuning (документація LlamaIndex): донавчання ембедінгів під домен підвищує recall на 15–20%. У наших проєктах середній час відповіді на складний запит із SubQuestionQueryEngine на 40% швидше, ніж із голим LangChain.

SubQuestionQueryEngine: розбивка складних питань

from llama_index.core.query_engine import SubQuestionQueryEngine from llama_index.core.tools import QueryEngineTool # Створюємо інструменти з різних джерел financial_tool = QueryEngineTool.from_defaults( query_engine=financial_index.as_query_engine(), name="financial_data", description="Фінансові показники компанії за останні три роки", ) contracts_tool = QueryEngineTool.from_defaults( query_engine=contracts_index.as_query_engine(), name="contracts", description="Договори з постачальниками та клієнтами", ) # SubQuestion двигун автоматично розбиває запит на підзапити engine = SubQuestionQueryEngine.from_defaults( query_engine_tools=[financial_tool, contracts_tool], use_async=True, ) response = engine.query( "Порівняй виручку за останній квартал із бюджетом та перевір, чи є прострочені платежі за контрактами" ) # Агент створить 2 підзапити та об'єднає результати 

RouterQueryEngine: маршрутизація за індексами

from llama_index.core.query_engine.router_query_engine import RouterQueryEngine from llama_index.core.selectors import LLMSingleSelector router_engine = RouterQueryEngine( selector=LLMSingleSelector.from_defaults(), query_engine_tools=[ QueryEngineTool.from_defaults( query_engine=summary_index.as_query_engine(response_mode="tree_summarize"), description="Для узагальнюючих питань про документ в цілому", ), QueryEngineTool.from_defaults( query_engine=vector_index.as_query_engine(), description="Для пошуку конкретних фактів та деталей", ), ], ) 

IngestionPipeline: просунутий препроцесинг

from llama_index.core.ingestion import IngestionPipeline, IngestionCache from llama_index.core.node_parser import SentenceSplitter, SemanticSplitterNodeParser from llama_index.core.extractors import TitleExtractor, QuestionsAnsweredExtractor from llama_index.core.vector_stores import SimpleVectorStore pipeline = IngestionPipeline( transformations=[ SentenceSplitter(chunk_size=512, chunk_overlap=64), TitleExtractor(nodes=3), # Додає заголовок документа в metadata кожного чанка QuestionsAnsweredExtractor(questions=5), # Генерує гіпотетичні питання для HyDE OpenAIEmbedding(model="text-embedding-3-small"), ], vector_store=vector_store, cache=IngestionCache(), # Кешує оброблені документи ) nodes = await pipeline.arun(documents=documents, show_progress=True) 

Практичний кейс: корпоративна база знань страхової компанії

Вихідна ситуація: 15 000 сторінок документів (поліси, правила страхування, регуляторні інструкції, внутрішні регламенти). Оператори витрачали 8–12 хвилин на пошук відповіді на питання клієнта.

Архітектура на LlamaIndex (наш проєкт):

  • Джерела: 4 типи документів в окремих індексах у Qdrant
  • RouterQueryEngine: маршрутизація за типом питання
  • SubQuestionQueryEngine: для питань, що охоплюють кілька типів
  • IngestionPipeline: автоматичне переіндексування при оновленні документів
  • Metadata-фільтрація: за видом страхування, датою документа, регіональним регулятором

Результати:

  • Середній час відповіді оператора: 10 хв → 1,5 хв
  • Точність відповідей (оцінка експертів): 91%
  • Помилкові посилання на застарілі редакції полісів: ~8% → 0,4%
  • Охоплення документів: 73% (раніше оператори не знали про існування багатьох документів)

LlamaIndex vs LangChain для RAG

Аспект LlamaIndex LangChain
Спеціалізація RAG, document QA Універсальні LLM-додатки
Завантажувачі даних 150+ нативних Через community
Advanced retrieval SubQuestion, Router вбудовані Потребує кастомізації
Агентні можливості Є (LlamaAgents) Більш зрілі (LangGraph)
Екосистема LlamaHub LangChain Hub

Типові сценарії впровадження LlamaIndex

Сценарій Складність Терміни (дні)
Базовий RAG з одним джерелом Низька 3-5
Мульти-джерельний з RouterQueryEngine Середня 7-14
IngestionPipeline з автооновленням Середня 5-10
Full-custom з fine-tuning ембедінгів Висока 14-21

Що входить у роботу

  1. Аудит джерел даних — визначаємо типи документів, обсяг, частоту оновлень.
  2. Проектування індексу — обираємо чанкер, модель ембедінгів, векторне сховище.
  3. Налаштування Retrieval pipeline — конфігуруємо RouterQueryEngine, SubQuestionQueryEngine, реранжування.
  4. Інтеграція з інфраструктурою — підключаємо API, CI/CD, дашборд моніторингу (latency p99, recall).
  5. Навчання команди — документація та воркшоп з роботи з системою.

Терміни орієнтовно

  • Базовий RAG на LlamaIndex: від 3 до 5 днів
  • Мульти-джерельний RAG з RouterQueryEngine: від 1 до 2 тижнів
  • IngestionPipeline з автоматичним оновленням: від 1 тижня
  • Файнтюнінг ембедінгів під домен: від 2 до 3 тижнів

Точні терміни розраховуємо після аудиту даних. Оцінимо проект за 1 день — напишіть нам. Замовте аудит даних і отримайте комерційну пропозицію.