Анализ договоров с помощью ИИ: с чего начать

Договор на 40 страниц можно прогнать через API за минуту, но перед этим стоит понять, сколько это будет стоить и какую модель брать для скана, а не для текста.

4 мин · · Обновлено · бизнес · договоры

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

Текстовый договор — простой случай

Если договор уже в текстовом виде (DOCX/PDF с текстовым слоем, выгруженный в текст), задача сводится к одному вызову с длинным системным промптом:

bash
curl https://api.zukko.pro/v1/messages \
  -H "Authorization: Bearer fetch_ваш_ключ" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-opus-5-5",
    "max_tokens": 4000,
    "system": "Ты юрист, специализация — договорное право. Найди пункты о неустойках, одностороннем расторжении, автопродлении, ограничении ответственности. Для каждого укажи цитату, риск для стороны-заказчика, рекомендацию.",
    "messages": [{"role": "user", "content": "'"$(cat contract.txt | jq -Rs .)"'"}]
  }'

Здесь в примере claude-opus-5-5: юридический анализ требует внимательного многошагового рассуждения по тексту (extended thinking), а не быстрого ответа. В Zukko он стоит столько же, сколько claude-sonnet-5 ($0.30/$0.30 за 1M токенов входа/выхода), так что выбирать между ними стоит по качеству на ваших договорах — проверьте обе модели на своих задачах. Контекст в 1,000,000 токенов покрывает даже объёмный рамочный договор с приложениями за один запрос.

Скан договора — работа через vision

Если договор пришёл фотографией или сканом без текстового слоя (частый случай со старыми бумажными архивами или подписанными от руки допсоглашениями), модели Claude и GPT принимают изображения (у GLM vision нет) — распознавать текст отдельным OCR-шагом не обязательно, можно передать страницы напрямую:

bash
import requests, base64

with open("contract_page_1.jpg", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

resp = requests.post(
    "https://api.zukko.pro/v1/messages",
    headers={
        "Authorization": "Bearer fetch_ваш_ключ",
        "anthropic-version": "2023-06-01",
    },
    json={
        "model": "claude-opus-5-5",
        "max_tokens": 4000,

Для многостраничного скана логичнее отправлять страницы пачкой в одном сообщении (несколько image-блоков подряд), чем гонять по одному запросу на страницу — это и дешевле по накладным расходам, и модель видит документ целиком, не теряя контекст между листами.

Оценка стоимости до массового прогона

Если планируется прогнать архив из сотен договоров разом, стоит сначала оценить стоимость на выборке. Бесплатный подсчёт токенов работает только для текстового ввода, а не для изображений, поэтому для оценки по сканам практичнее взять 5-10 репрезентативных документов, прогнать их и посмотреть заголовок X-Zukko-Cost-Micros в ответе:

bash
total_micros = 0
for path in sample_files:
    resp = send_contract(path)
    total_micros += int(resp.headers.get("X-Zukko-Cost-Micros", 0))

avg_cost_usd = (total_micros / len(sample_files)) / 1_000_000
print(f"Средняя цена анализа одного договора: ${avg_cost_usd:.4f}")

Умножив среднюю цену на весь архив, легко понять, во что обойдётся полный прогон, прежде чем запускать его на всех документах.

Двухступенчатая обработка для больших объёмов

Не каждый договор в архиве требует глубокого разбора. Практичная схема: сначала быстрый и дешёвый первый проход на gpt-5.6-luna ($0.10/$0.10 за 1M токенов; для текстовых договоров подойдёт и glm-5.3-flash за $0.04/$0.04) — классифицировать документ («типовой договор поставки», «нестандартные условия», «требует юриста»), и только документы из категории «нестандартные» отправлять на подробный анализ в claude-opus-5-5 ($0.30/$0.30). Это заметно снижает совокупную стоимость обработки архива — насколько именно, покажет прогон на вашей выборке; качество классификации на первом проходе тоже проверьте на своих документах.

Идемпотентность при повторной обработке

Анализ договора иногда запускают повторно — например, если результат первого прогона потерялся при сбое на стороне хранилища результатов. Idempotency-Key, построенный из хеша файла договора, гарантирует, что повторный запуск не спишет деньги второй раз за тот же документ:

bash
IDEMPOTENCY_KEY="contract-$(sha256sum contract.pdf | cut -d' ' -f1)"

curl https://api.zukko.pro/v1/messages \
  -H "Authorization: Bearer fetch_ваш_ключ" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d @payload.json

Лимиты на ключ для юридического отдела

Если доступ к анализу договоров даётся нескольким юристам через общий инструмент, стоит выдать отдельный ключ с месячным лимитом расхода — подробный юридический анализ длинных договоров съедает заметно больше токенов, чем рутинные чат-запросы, и без лимита один забытый скрипт в цикле может обработать один и тот же архив несколько раз за ночь. Лимит и список разрешённых моделей настраиваются в кабинете на странице ключа (https://zukko.pro/app/api-keys).

Ошибки, характерные для этой задачи

400 с кодом, отличным от model-related, часто означает, что изображение превышает лимит по размеру — стоит сжимать скан перед отправкой, а не отправлять оригинал в 20 мегапикселей. 402 — баланс пуст, и в юридическом контексте это особенно неприятно: если процесс запущен в пакетном режиме на ночь, лучше проверять баланс через GET /v1/balance перед стартом пакета, а не после того, как обработка встала на середине архива. Обрыв ответа на середине анализа почти всегда значит, что max_tokens выставлен слишком низко для подробного разбора — для развёрнутого юридического заключения стоит закладывать 4000-6000 токенов на выходе, а не оставлять значение по умолчанию.

Итог: claude-opus-5-5 (или проверенная на ваших задачах claude-sonnet-5) для сложного анализа, vision напрямую для сканов без промежуточного OCR, двухступенчатая фильтрация для больших архивов и оценка стоимости на выборке до полного прогона — с этим набором можно поставить анализ договоров на поток, не превратив пилот в неожиданный счёт.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.