Анализ договоров с помощью ИИ: с чего начать
Договор на 40 страниц можно прогнать через API за минуту, но перед этим стоит понять, сколько это будет стоить и какую модель брать для скана, а не для текста.
4 мин · · Обновлено · бизнес · договоры
Задача «найди рискованные пункты в договоре» звучит просто, пока не встречаешься с двумя вещами: договор часто приходит сканом, а не текстом, а его длина в паре с сотнями таких документов в месяц быстро превращается в заметную статью расходов. Ниже — как собрать это на API, не наступив на обе проблемы.
Текстовый договор — простой случай
Если договор уже в текстовом виде (DOCX/PDF с текстовым слоем, выгруженный в текст), задача сводится к одному вызову с длинным системным промптом:
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-шагом не обязательно, можно передать страницы напрямую:
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 в ответе:
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, построенный из хеша файла договора, гарантирует, что повторный запуск не спишет деньги второй раз за тот же документ:
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.
Похожие статьи
- Нейросеть для тестировщика: тест-кейсы, чек-листы и баг-репортыКак QA-инженеру использовать модель для тест-кейсов, чек-листов и баг-репортов, проверять полноту покрытия и не получить придуманные требования.
- Обезличивание данных перед отправкой в нейросеть: практический подходПерсональные данные не нужно отправлять модели, чтобы она обработала документ. Показываем, как заменять их метками, возвращать в ответ и проверять, что ничего не просочилось.
- Нейросеть для HR: вакансии, письма кандидатам и разбор резюмеМодель может готовить черновики вакансий и писем и делать первичный разбор резюме. Разбираем, что отдавать, как работать с персональными данными кандидатов и как не допустить предвзятых решений.
- AI-агент для 1С: какие задачи можно автоматизировать и какАгент вокруг 1С отвечает на вопросы по данным, готовит черновики документов и ищет аномалии. Разбираем сценарии, архитектуру через HTTP-сервисы и меры безопасности.