Интеграция LlamaIndex для RAG-пайплайнов в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Интеграция LlamaIndex для RAG-пайплайнов в мобильном приложении
Сложная
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция LlamaIndex для RAG-пайплайнов в мобильном приложении

RAG (Retrieval-Augmented Generation) решает фундаментальный изъян LLM: модель не знает ваших данных. LlamaIndex — это специализированный фреймворк именно для RAG, в отличие от LangChain с широким охватом. Парсинг документов, чанкинг, индексирование, retrieval — в LlamaIndex всё это проработано глубже.

Архитектура RAG для мобильного приложения

Мобильный клиент работает с бэкендом через REST API. LlamaIndex живёт на сервере и отвечает за весь цикл: индексирование документов → retrieval по запросу → генерация ответа с контекстом.

[Мобильный клиент]
    │ POST /api/query {"question": "...", "user_id": "..."}
    ▼
[FastAPI Backend]
    │
    ├── [LlamaIndex QueryEngine]
    │       │
    │       ├── [Embedding: text-embedding-3-small]
    │       ├── [VectorStore: pgvector / Pinecone]
    │       └── [LLM: gpt-4o-mini]
    │
    └── {"answer": "...", "sources": [...]}

Индексирование документов

LlamaIndex парсит PDF, Word, Notion, Google Docs, HTML через SimpleDirectoryReader или специализированные ридеры. Чанкинг — разбивка документа на фрагменты для индексирования:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.vector_stores.postgres import PGVectorStore
from llama_index.core.node_parser import SentenceSplitter

# Конфигурация глобальных настроек
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.1)
Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=50)

# Загрузка и индексирование
documents = SimpleDirectoryReader("./docs").load_data()
vector_store = PGVectorStore.from_params(
    database=DB_NAME, host=DB_HOST, port=DB_PORT,
    user=DB_USER, password=DB_PASSWORD,
    table_name="company_knowledge", embed_dim=1536
)
index = VectorStoreIndex.from_documents(documents, vector_store=vector_store)

Размер чанка — ключевой параметр. Чанк 512 токенов подходит для документации с разными разделами. Для длинных нарративных текстов — 1024–2048 с большим overlap (100–200 токенов).

Продвинутый retrieval: проблемы и решения

Наивный RAG — топ-K по cosine similarity — часто возвращает нерелевантные чанки при сложных вопросах. LlamaIndex предлагает несколько стратегий:

Hybrid search (BM25 + векторный): ключевые слова для точного поиска, embeddings для семантического. Особенно помогает при специфических терминах (артикулы, имена, даты).

Re-ranking: первичный retrieval возвращает топ-20, кросс-энкодер переранжирует и оставляет топ-4. Cohere Rerank — managed вариант, cross-encoder/ms-marco-MiniLM-L-6-v2 — open-source:

from llama_index.postprocessor.cohere_rerank import CohereRerank

reranker = CohereRerank(api_key=COHERE_API_KEY, top_n=4)
query_engine = index.as_query_engine(
    similarity_top_k=20,
    node_postprocessors=[reranker]
)

HyDE (Hypothetical Document Embeddings): перед retrieval генерируем гипотетический ответ, ищем по его embedding вместо embedding вопроса. Работает, когда вопросы и документы формулируются в разном стиле.

Мультидокументный retrieval и routing

Если база знаний разбита по типам (политики, инструкции, FAQ) — router направляет запрос к нужному под-индексу. Это снижает шум в retrieved контексте:

from llama_index.core.tools import QueryEngineTool
from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.selectors import LLMSingleSelector

policy_engine = policy_index.as_query_engine()
faq_engine = faq_index.as_query_engine()

router = RouterQueryEngine(
    selector=LLMSingleSelector.from_defaults(),
    query_engine_tools=[
        QueryEngineTool.from_defaults(policy_engine, description="Политики компании и регламенты"),
        QueryEngineTool.from_defaults(faq_engine, description="Часто задаваемые вопросы"),
    ]
)

Обновление индекса

Документы меняются. Стратегии обновления: полная переиндексация (дёшево для небольших корпусов, раз в сутки), инкрементальное добавление новых документов, удаление устаревших по метаданным. LlamaIndex поддерживает refresh_ref_docs() для инкрементального обновления без пересоздания всего индекса.

Процесс работы

Аудит документальной базы → выбор стратегии чанкинга → индексирование → настройка retrieval pipeline → A/B тест наивного vs гибридного поиска → API для мобильного клиента.

Ориентиры по срокам

Базовый RAG с pgvector — 3–5 дней. Гибридный поиск с реранкером — 1–2 недели. Мультидокументный роутер с инкрементальным обновлением — 2–3 недели.