Реализация AI-поиска по архиву документов (Document Search)

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация AI-поиска по архиву документов (Document Search)
Средняя
~5 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1243
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1168
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1086
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Реализация AI-поиска по архиву документов (Document Search)

AI-поиск по документальному архиву позволяет находить документы по смыслу запроса — не только по ключевым словам в названии файла. «Договоры с условием автопролонгации, истекающие в 2025 году» — такой запрос решает AI-поиск, но не файловая система.

Индексирование архива

Каждый документ при попадании в архив проходит обработку:

  1. Извлечение текста: pdfminer (PDF), python-docx (DOCX), unstructured.io (все форматы)
  2. Структурирование: разбивка на чанки + сохранение метаданных (раздел, страница)
  3. Эмбеддинги: text-embedding-3-small (OpenAI) или cointegrated/rubert-tiny2 (on-premise)
  4. Индексирование в Qdrant/pgvector
  5. Извлечение структурированных метаданных: тип документа, стороны, даты, суммы → в реляционную БД

Гибридный поиск

Комбинация полнотекстового и семантического поиска:

def search_documents(query: str, filters: dict = None) -> list[SearchResult]:
    # Семантический поиск
    query_embedding = embedder.encode(query)
    semantic_results = qdrant.search(
        collection_name="documents",
        query_vector=query_embedding,
        query_filter=build_qdrant_filter(filters),
        limit=20
    )

    # BM25 поиск
    bm25_results = elasticsearch.search(
        index="documents",
        body={"query": {"match": {"content": query}}, "filter": build_es_filter(filters)},
        size=20
    )

    # RRF слияние и reranking
    merged = reciprocal_rank_fusion(semantic_results, bm25_results)
    reranked = cross_encoder.rerank(query, merged[:10])
    return reranked[:5]

Фасетный поиск

Дополнительные фильтры для точного поиска:

  • Тип документа: договор / акт / накладная
  • Контрагент: название или ИНН
  • Диапазон дат (подписания, окончания)
  • Диапазон сумм
  • Статус: действующий / расторгнут / истёк

Conversational search

«Найди договоры» → «с каким контрагентом?» → «Газпром» → «за какой период?» — диалоговый уточняющий поиск. LLM конвертирует диалог в структурированный запрос к хранилищу.

Метрики: NDCG@5, MRR, пользовательская оценка «нашли ли то что искали» (explicit feedback).