Извлечение данных из документов с помощью LLM: договоры, счета и резюме в JSON
Большие языковые модели отлично справляются не только с генерацией текста, но и с разбором неструктурированных документов. Достаточно отправить модели текст договора, счёта или резюме — и она вернёт структурированные данные: стороны, сумму, дату и другие реквизиты. В этой статье покажем, как сделать это через 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 без изменений. Подключение сводится к двум параметрам:
- Base URL:
https://tokenmaster.ru/v1 - 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