Извлечение данных из документов с помощью LLM: договоры, счета и резюме в JSON

· документы извлечение-данных автоматизация ai

Большие языковые модели отлично справляются не только с генерацией текста, но и с разбором неструктурированных документов. Достаточно отправить модели текст договора, счёта или резюме — и она вернёт структурированные данные: стороны, сумму, дату и другие реквизиты. В этой статье покажем, как сделать это через OpenAI-совместимый API TokenMaster на Python.

Что понадобится

  • API-ключ TokenMaster — создаётся в разделе «Ключи» после регистрации на tokenmaster.ru.
  • Python 3.8+ и установленная библиотека openai.
  • Текст документа, из которого нужно извлечь данные.

Библиотека устанавливается одной командой:

pip install openai

Пошаговая настройка

Идея простая: вы читаете текст документа, передаёте его в LLM вместе с системным промптом, который описывает, какие поля нужно извлечь, и получаете ответ в формате JSON. Такой JSON удобно сразу сохранять в базу или передавать в другую систему — CRM, 1С или таблицу.

Вот готовый скрипт:

import json
from openai import OpenAI

# 1. Читаем текст документа
with open("dogovor.txt", "r", encoding="utf-8") as f:
    document_text = f.read()

client = OpenAI(
    base_url="https://tokenmaster.ru/v1",
    api_key="sk-...",  # ваш ключ TokenMaster
)

response = client.chat.completions.create(
    model="deepseek-flash",  # или glm-4.5, qwen и другие
    messages=[
        {
            "role": "system",
            "content": "Извлеки из текста: стороны, сумма, дата. "
                       "Верни строго JSON без лишнего текста.",
        },
        {"role": "user", "content": document_text},
    ],
    response_format={"type": "json_object"},
)

data = json.loads(response.choices[0].message.content)
print(json.dumps(data, ensure_ascii=False, indent=2))

Параметр response_format={"type": "json_object"} просит модель вернуть валидный JSON, а не свободный текст. Это упрощает дальнейшую обработку: ответ сразу разбирается через json.loads.

Системный промпт — это схема извлечения: перечислите в нём нужные поля, и модель заполнит их. Для счёта это могут быть «номер, поставщик, покупатель, сумма, НДС, дата», для резюме — «имя, навыки, опыт, контакты». Меняя только промпт, вы настраиваете скрипт под новый тип документов без переписывания кода. Для длинных договоров текст стоит разбивать на части и обрабатывать по отдельности: у моделей есть лимит на размер контекста, и слишком большой документ может не поместиться в один запрос.

Если документ в PDF, модель напрямую его не читает — текст нужно выгрузить заранее. Для этого подойдут библиотеки pypdf или pdfplumber, либо утилита pdftotext. Сканы без текстового слоя придётся дополнительно прогнать через OCR — например, через tesseract или облачные сервисы распознавания.

Подключение TokenMaster

TokenMaster — это AI-шлюз с OpenAI-совместимым API, поэтому скрипт использует стандартную библиотеку openai без изменений. Подключение сводится к двум параметрам:

  1. Base URL: https://tokenmaster.ru/v1
  2. API Key: ваш ключ вида sk-…

Почему TokenMaster? Один ключ и один баланс для моделей DeepSeek, GLM (Zhipu) и Qwen, оплата из России. Base URL единый — https://tokenmaster.ru/v1.

Модель можно выбирать под задачу: deepseek-flash подойдёт для быстрого и недорогого разбора типовых документов, а более мощные модели — для сложных таблиц и длинных текстов. Актуальный каталог и цены смотрите на tokenmaster.ru/pricing, документацию по API — на tokenmaster.ru/docs.

Проверка работы

Запустите скрипт — если в терминале появился JSON с извлечёнными полями, всё настроено верно. Если возникла ошибка:

  • 401 / invalid api key — ключ неверный или скопирован не целиком; он должен начинаться с sk-.
  • connection error — проверьте Base URL: ровно https://tokenmaster.ru/v1, без лишнего /chat/completions в конце.
  • insufficient quota — на балансе недостаточно средств; пополните его в личном кабинете.

Частые вопросы

Какие документы можно разбирать? Любые текстовые: договоры, счета, акты, резюме, накладные, переписку. Модель извлекает те поля, которые вы перечислите в системном промпте, поэтому схему легко менять под задачу.

Какой формат ответа выбрать? JSON — самый удобный для автоматизации. Параметр response_format={"type": "json_object"} гарантирует, что модель вернёт валидный JSON.

Что делать с PDF и сканами? PDF нужно сначала перевести в текст (pypdf, pdftotext), а сканы без текстового слоя — распознать через OCR. После этого текст подаётся в LLM обычным образом.

Итог

Извлечение данных из документов через LLM — это короткий Python-скрипт: читаете текст, отправляете его в модель с системным промптом и получаете JSON. Подключите OpenAI-совместимый API TokenMaster по Base URL https://tokenmaster.ru/v1, укажите ключ sk-… — и автоматизируйте разбор договоров, счетов и резюме без ручного ввода.

Подключите модели через TokenMaster

Один ключ sk-… и base URL https://tokenmaster.ru/v1 — доступ к DeepSeek, GLM, Qwen и другим моделям. Зарегистрироваться →