Разработка AI-системы автоматического заполнения карточки клиента после звонка

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

Разработка AI-системы автоматического заполнения карточки клиента после звонка

Извлечение структурированных данных из транскрипта звонка и автоматическое заполнение полей CRM — имён, адресов, дат, сумм, пожеланий. Оператор только проверяет и подтверждает, а не вводит вручную.

NER для извлечения сущностей из звонков

async def extract_entities_from_call(transcript: str) -> dict:
    """Извлекаем структурированные данные из диалога"""
    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "system",
            "content": """Извлеки из текста звонка следующие данные (если упоминались):
            - customer_name: полное имя клиента
            - address: адрес доставки/проживания
            - email: email адрес
            - phone_secondary: дополнительный телефон
            - order_details: детали заказа/запроса
            - complaint_description: описание проблемы
            - preferred_contact_time: удобное время для связи
            - product_interest: интересующие продукты/услуги
            - next_appointment: дата/время следующего контакта
            - notes: важные заметки

            Верни JSON. Поля не упоминавшиеся в разговоре — null."""
        }, {
            "role": "user",
            "content": transcript
        }],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

Confidence scoring для каждого поля

async def extract_with_confidence(transcript: str) -> dict:
    """Извлечение с оценкой уверенности"""
    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "system",
            "content": """Извлеки сущности из звонка.
            Для каждого поля верни: {"value": "...", "confidence": 0.0-1.0, "source": "цитата из текста"}
            Confidence: 1.0 — явно сказано, 0.7 — подразумевается, 0.3 — предположение."""
        }, {"role": "user", "content": transcript}],
        response_format={"type": "json_object"}
    )
    data = json.loads(response.choices[0].message.content)

    # Поля с confidence < 0.6 помечаем для ручной проверки
    for field, info in data.items():
        if isinstance(info, dict):
            info["needs_review"] = info.get("confidence", 1.0) < 0.6

    return data

Merge с существующей карточкой

async def smart_merge_contact_data(
    existing: dict,
    extracted: dict
) -> dict:
    """Умное слияние: не затираем старые данные новыми неуверенными"""
    merged = dict(existing)

    for field, new_data in extracted.items():
        if not isinstance(new_data, dict) or new_data.get("value") is None:
            continue

        if field not in existing or not existing[field]:
            # Поле пустое — заполняем
            merged[field] = new_data["value"]
        elif new_data.get("confidence", 0) >= 0.85:
            # Высокая уверенность — обновляем
            merged[field] = new_data["value"]
            merged[f"{field}_updated_from_call"] = True
        else:
            # Предлагаем оператору выбрать
            merged[f"{field}_suggestion"] = new_data["value"]
            merged[f"{field}_suggestion_confidence"] = new_data["confidence"]

    return merged

UI для проверки перед сохранением

После звонка на экране оператора — карточка с предзаполненными полями. Зелёный — высокая уверенность, жёлтый — требует подтверждения, серый — пустое поле.

Сроки: NER + заполнение одной CRM — 2–3 недели. Мультиплатформенная система с UI — 1.5 месяца.