AI-поиск по документации: RAG и семантический поиск

В Confluence 1200 страниц, полсотни авторов — никто не помнит, где лежит инструкция по VPN. Сотрудники тратят в среднем 20 минут на поиск, а чаще переспрашивают в чатах. Keyword-поиск выдаёт список статей без понимания контекста. 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
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

В Confluence 1200 страниц, полсотни авторов — никто не помнит, где лежит инструкция по VPN. Сотрудники тратят в среднем 20 минут на поиск, а чаще переспрашивают в чатах. Keyword-поиск выдаёт список статей без понимания контекста. RAG-система меняет это: вы задаёте вопрос — получаете ответ с цитатами за 10 секунд. Мы разрабатываем такие системы более 5 лет и внедрили 15+ проектов. Средняя экономия составила $1 500 в месяц, а окупаемость — 4 месяца. Для одного клиента экономия достигла $15 000 в год за счёт сокращения времени инженеров.

Как работает семантический поиск?

Сборка индекса на LlamaIndex с Qdrant в качестве векторного стора и моделью эмбеддингов HuggingFace. Документы разбиваются на чанки, векторизуются и сохраняются в векторной БД. По запросу ищутся семантически близкие чанки, реранжируются cross-encoder моделью, и LLM генерирует финальный ответ с цитатами. Для русско-английских баз используем multilingual-e5-large (1024d) — он даёт на 15% больше recall, чем BGE-small. Источник: документация LlamaIndex. Вот ключевой фрагмент кода:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.core.node_parser import SentenceSplitter from llama_index.core.retrievers import VectorIndexRetriever from llama_index.core.query_engine import RetrieverQueryEngine from llama_index.core.postprocessor import SentenceTransformerRerank from llama_index.vector_stores.qdrant import QdrantVectorStore from llama_index.embeddings.huggingface import HuggingFaceEmbedding import qdrant_client embed_model = HuggingFaceEmbedding( model_name="intfloat/multilingual-e5-large", embed_batch_size=32 ) splitter = SentenceSplitter( chunk_size=512, chunk_overlap=64, paragraph_separator="\n\n" ) reranker = SentenceTransformerRerank( model="cross-encoder/ms-marco-MiniLM-L-6-v2", top_n=5 ) client = qdrant_client.QdrantClient(url="http://localhost:6333") vector_store = QdrantVectorStore(client=client, collection_name="kb_docs") index = VectorStoreIndex.from_vector_store( vector_store=vector_store, embed_model=embed_model ) query_engine = RetrieverQueryEngine( retriever=VectorIndexRetriever(index=index, similarity_top_k=15), node_postprocessors=[reranker], ) 

Почему parent-child chunking необходим?

Документация иерархична: раздел, подраздел, параграф. Наивный чанкинг по 512 токенов разрезает логические блоки. Решение — parent-child chunking: мелкие чанки для поиска, крупные для контекста. Это даёт faithfulness +12% и relevance +18% по сравнению с flat chunking.

Параметр Flat chunking Parent-child chunking
Faithfulness (RAGAS) 0.68 0.76
Relevance (RAGAS) 0.72 0.85

Как настроить инкрементальное обновление?

Ключевые шаги настройки RAG-пайплайна
  1. Соберите список всех источников (Confluence, Notion, Google Docs).
  2. Выберите модель эмбеддингов (multilingual-e5-large для русского+английского).
  3. Настройте parent-child chunking с размером parent=1024 токенов, child=256.
  4. Разверните векторную БД (Qdrant или pgvector).
  5. Реализуйте инкрементальный сборщик изменений по API.
  6. Подключите реранкер (cross-encoder) для повышения точности.
  7. Интегрируйте LLM (GPT-4o или Claude) для генерации ответов.
class DocumentationIndexer: def __init__(self, confluence_client, vector_store): self.confluence = confluence_client self.index = vector_store self.last_indexed = {} async def incremental_update(self): all_pages = self.confluence.get_all_pages(space_key="KB") for page in all_pages: page_id = page["id"] modified = page["version"]["when"] if self.last_indexed.get(page_id) == modified: continue self.index.delete(filter={"page_id": page_id}) content = self.confluence.get_page_body(page_id) nodes = self._parse_and_chunk(content, page) self.index.add(nodes) self.last_indexed[page_id] = modified return {"updated": len([p for p in all_pages if self.last_indexed.get(p["id"]) != p["version"]["when"]])} 

Инкрементальное обновление выполняется раз в час, что гарантирует актуальность без переиндексации всего корпуса.

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

Этап Длительность Что делаем Результат
Аналитика 1–2 дня Анализируем структуру документации, типы документов, частоту запросов Техническое задание и прототип на 10–20 документах
Проектирование 2–3 дня Выбираем модель эмбеддингов, векторную базу, схему чанкинга Документ архитектуры решения
Реализация 1–4 недели Разрабатываем пайплайн индексации, конфигурируем ретривер и LLM, интегрируем с Confluence/Notion и Slack Работающая система на тестовом наборе
Тестирование 3–5 дней Оцениваем по RAGAS (faithfulness, relevance, precision), проводим A/B тест Отчёт с метриками и рекомендации
Развёртывание 2–3 дня Разворачиваем на инфраструктуре клиента, настраиваем CI/CD Продуктивный контур, документация администратора

Что входит в работу

  • Документ архитектуры решения с обоснованием выбора модели и векторной базы.
  • Пайплайн индексации с parent-child chanking и инкрементальным обновлением.
  • Интеграция с Confluence, Notion или Google Docs через API.
  • Slack-бот или веб-интерфейс для запросов с цитированием источников.
  • Административная панель для мониторинга запросов и метрик (RAGAS).
  • Документация администратора и обучение команды (2 часа).
  • Поддержка в течение 1 месяца после запуска.

Типичные ошибки

  • Игнорирование иерархии документов. Parent-child chunking обязателен — иначе теряете до 18% relevance.
  • Редкое обновление индекса. Настройте инкрементальный пайплайн раз в час.
  • Выбор слабой модели эмбеддингов. Для русско-английской документации multilingual-e5-large (1024d) или BGE-M3 — минимум. BGE-small теряет 15% recall.
  • Отсутствие реранкера. Без cross-encoder точность топ-3 падает на 10–20%.
  • Пренебрежение безопасностью. Настройте фильтрацию prompt injection и аудит запросов.

Кейс: IT-компания, 200 человек, 1200 статей. Среднее время ответа — 1,4 сек, accuracy 82%. Количество повторных вопросов в #general упало на 43% за первый месяц. Проект окупился за 4 месяца — средняя экономия $12 000 в год.

Свяжитесь с нами для оценки вашего проекта. Получите консультацию по внедрению RAG-поиска на ваших данных. Закажите демо-доступ к готовой системе на тестовом наборе документов.