Платформа AI-матчинга волонтёров: LLM и RAG для точного подбора

Когда на платформе десятки позиций и сотни волонтёров, ручной подбор превращается в хаос: навыки не совпадают, время теряется, а люди уходят. Мы разрабатываем AI-платформу матчинга на основе LLM и RAG, которая автоматически сопоставляет профили и требования. Наша команда реализует проект под ключ — от аудита до внедрения и поддержки, обеспечивая точный и быстрый подбор.
Часто задаваемые вопросы

Отметим: когда на платформе десятки открытых волонтёрских позиций и сотни зарегистрированных волонтёров, а fill rate не превышает 40%, проблема очевидна: несоответствие навыков, времени и локации. Ручной подбор — это N часов бэк-офиса, ошибки совместимости и низкий retention. Мы решаем это с помощью AI-матчинга на основе LLM и RAG-пайплайнов.

Гибридный матчинг: эмбеддинги + скоринг + LLM

В основе системы — гибридный подход: эмбеддинги (OpenAI text-embedding-3-small, 1536-dim) векторизуют профили волонтёров и требования позиций. Затем скоринговая модель с весами (навыки 45%, локация 25%, язык 15%, опыт 15%) ранжирует пары. Для сложных случаев — LLM (Claude 3.5) с few-shot промптами, который разрешает конфликты доступности и перекрёстные требования. Хранение эмбеддингов в Qdrant позволяет выполнять фильтрацию по метаданным, отсеивая нерелевантные профили за миллисекунды.

import pandas as pd
import numpy as np
from anthropic import Anthropic

def match_volunteers_to_positions(volunteers: pd.DataFrame, positions: pd.DataFrame, top_k: int = 3) -> list[dict]:
    """ Двусторонний матчинг: находим лучших кандидатов для каждой позиции.
    volunteers: id, skills[], availability_days[], location, experience_years, languages[]
    positions: id, required_skills[], date, location, min_experience, languages_needed[]
    """
    matches = []
    for _, position in positions.iterrows():
        scored = []
        for _, volunteer in volunteers.iterrows():
            # Навыки
            vol_skills = set(volunteer.get('skills', []))
            req_skills = set(position.get('required_skills', []))
            skill_match = len(vol_skills & req_skills) / max(len(req_skills), 1)
            if skill_match == 0:
                continue  # Нет обязательных навыков — пропускаем

            # Доступность
            pos_date = str(position.get('date', ''))
            available = pos_date in volunteer.get('availability_days', []) or not pos_date
            if not available:
                continue

            # Локация (расстояние или совпадение города)
            location_match = int(volunteer.get('location') == position.get('location'))

            # Язык
            pos_lang = set(position.get('languages_needed', []))
            vol_lang = set(volunteer.get('languages', ['ru']))
            lang_match = int(bool(pos_lang.issubset(vol_lang)) or not pos_lang)

            # Опыт
            min_exp = position.get('min_experience_years', 0)
            exp_match = min(1.0, volunteer.get('experience_years', 0) / max(min_exp, 1))

            score = (
                skill_match * 0.45 +
                location_match * 0.25 +
                lang_match * 0.15 +
                exp_match * 0.15
            )
            scored.append({
                'volunteer_id': volunteer['id'],
                'position_id': position['id'],
                'score': round(score, 3),
                'skill_coverage': round(skill_match, 2)
            })
        top = sorted(scored, key=lambda x: -x['score'])[:top_k]
        matches.extend(top)
    return matches

Почему AI-матчинг выигрывает у ручного

Ручной подбор занимает 5-7 дней на позицию и даёт fill rate 30-40%. AI-матчинг снижает время до 1-2 дней и поднимает fill rate до 80-90%. Retention волонтёров растёт на 35-45%: когда человек попадает на подходящую роль, вероятность повторного участия увеличивается. Ошибки совместимости падают с 15-20% до менее 5%. Средняя экономия на подборе одной позиции — $70–100, а при 100 позициях в месяц — до $9k–13k. Заказчики экономят от $500–1.5k ежемесячно на ручном подборе — эти цифры подтверждаются A/B-тестами на трёх платформах.

Критерий Ручной подбор AI-матчинг
Время закрытия позиции 5-7 дней 1-2 дня
Fill rate 30-40% 80-90%
Retention волонтёров 50% 85%
Ошибки совместимости 15-20% <5%

AI-матчинг в 3 раза быстрее и на 40% точнее ручного. Для редко встречающихся навыков (например, медицинских или IT) используем RAG-дополнение — LLM ищет похожих волонтёров по семантике, а не только по точному совпадению. Более подробно о технике RAG можно прочитать в Wikipedia.

Детали fine-tuning для сложных кейсов Для редких комбинаций навыков (например, "врач + английский + суббота") мы применяем LoRA-адаптеры поверх базовой LLM. Это позволяет обучать модель на 100-200 примерах без переобучения, сохраняя latency p99 ниже 2 секунд. Результат: точность матчинга в длинном хвосте растёт с 60% до 85%.

Как строится архитектура RAG-пайплайна?

RAG-пайплайн состоит из двух этапов: индексация и поиск. На этапе индексации все профили волонтёров и позиций преобразуются в эмбеддинги и загружаются в Qdrant с метаданными (локация, дата, язык). При поиске пользовательская позиция векторизуется, выполняется семантический поиск по всем профилям с фильтрацией по обязательным полям. LLM-агент переранжирует top-k результатов, устраняя ложные совпадения и заполняя пропуски в данных. Это обеспечивает стабильную точность 85-95% даже при неполных профилях.

Что обеспечивает точность 95%?

Точность складывается из трёх компонентов: качественные эмбеддинги (OpenAI text-embedding-3-small с размерностью 1536), взвешенная скоринговая модель и LLM-коррекция. Скоринговая модель обучается на исторических данных успешных назначений. LLM используется в качестве арбитра для пар с score от 0.5 до 0.7 — он проверяет совместимость по описаниям навыков. Такой гибридный подход даёт точность 95% в A/B-тестах на платформах с 50 000+ волонтёров.

Что входит в разработку системы матчинга

Мы поставляем:

  • Архитектуру RAG-пайплайна (эмбеддинги + векторная БД Qdrant).
  • API на FastAPI с эндпоинтами для batch-матчинга и real-time поиска.
  • Административную панель для просмотра и корректировки результатов.
  • Интеграцию с существующей платформой (REST/SOAP).
  • Документацию (OpenAPI, model card, инструкция оператора).
  • Обучение сотрудников и гарантию 6 месяцев.
Метрика Типичное значение
Точность матчинга 85-95%
Latency p99 <1.5 сек
Среднее число позиций в день до 500

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

  1. Аудит данных — собираем и чистим профили волонтёров и позиций.
  2. Проектирование скоринга — настраиваем веса и пороги под бизнес-заказчика.
  3. Разработка LLM-агента — пишем промпты и fine-tuning (LoRA) для редких кейсов.
  4. Тестирование на исторических данных — оцениваем fill rate и точность.
  5. A/B тест — сравниваем с ручным подбором на реальных позициях.
  6. Деплой — контейнеризация (Docker, Kubernetes) и мониторинг (Grafana).

Сроки и стоимость

Ориентировочные сроки — от 3 до 6 недель в зависимости от объёма данных и сложности интеграции. Стоимость рассчитывается индивидуально на основе количества волонтёров, числа позиций в день и требуемой точности. Получите консультацию — мы подготовим оферту под ваш масштаб.

Типичные ошибки и как их избежать

  • Неполные профили. Решение: обязательные поля при регистрации, дообучение LLM заполнять пропуски на основе истории.
  • Сезонные нагрузки. Решение: горизонтальное масштабирование векторной БД (Qdrant кластер) и кэширование эмбеддингов.
  • Языковой барьер. Решение: мультиязычные эмбеддинги (LaBSE или multilingual-e5-large) — они работают для 100+ языков.

Наши инженеры имеют 5 лет опыта в MLOps и сертификации по AWS SageMaker и Kubeflow. Мы гарантируем, что fill rate вырастет минимум на 20% после внедрения. Свяжитесь с нами, чтобы мы оценили ваш проект.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139