Реализация AI-извлечения данных из договоров

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Реализация AI-извлечения данных из договоров
Средний
~5 дней
Часто задаваемые вопросы

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

Этапы разработки AI-решения

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    901
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1119
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    853

Реализация AI-извлечения данных из договоров

Договор — неструктурированный документ с критически важными данными: стороны, предмет, сроки, суммы, условия расторжения. Ручное внесение этих данных в CRM/ERP — источник ошибок и временных затрат. AI-извлечение автоматизирует этот процесс.

Ключевые поля для извлечения

class ContractData(BaseModel):
    # Стороны
    party_1_name: str
    party_1_inn: str | None
    party_2_name: str
    party_2_inn: str | None

    # Предмет и условия
    subject: str                    # краткое описание предмета договора
    contract_type: str              # поставка, услуги, аренда, подряд...
    contract_number: str | None
    contract_date: date

    # Финансовые условия
    total_amount: Decimal | None
    currency: str
    payment_terms: str              # «30 дней после подписания акта»

    # Сроки
    start_date: date | None
    end_date: date | None
    auto_renewal: bool

    # Расторжение
    termination_notice_days: int | None
    penalty_clause: str | None

Pipeline извлечения

def extract_contract_data(pdf_path: str) -> ContractData:
    # Шаг 1: Извлечение текста
    text = extract_text_from_pdf(pdf_path)  # pdfminer.six

    # Шаг 2: Разбивка на смысловые секции
    sections = split_into_sections(text)  # LLM или regex по заголовкам

    # Шаг 3: Structured extraction через LLM
    response = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"Извлеки данные из договора:\n\n{text[:15000]}"
        }],
        response_format=ContractData,
    )
    return response.choices[0].message.parsed

Работа с длинными договорами

Договоры на 30–50 страниц не помещаются в контекстное окно. Стратегия:

  • Детерминированное извлечение реквизитов из преамбулы (стороны, номер, дата) — regex
  • LLM для предмета договора и нестандартных условий — только релевантные секции
  • Отдельный промпт для финансовых условий (ищем в секции «Цена и порядок оплаты»)

Верификация извлечённых данных

  • ИНН: валидация через контрольную цифру
  • ОГРН: checksum validation
  • Суммы в цифрах vs словах — должны совпадать
  • Дата начала < дата окончания
  • Название сторон совпадает с реестром ФНС (по ИНН через API nalog.ru)

Поля с низкой уверенностью (или не прошедшие валидацию) → флаг для ручной проверки.