Пайплайны: обработка данных потоком
В конце у вас будет скрипт, который прогоняет 10 000 отзывов из CSV через нейросеть и пишет в новую таблицу тон, тему и суть каждого.
Нужно: отдельный ключ fetch_... (создать), баланс — на 10 000 отзывов на DeepSeek хватит $1 (пополнить), Python 3.10+, CSV с колонками id и text.
- 1Поставьте лимит на ключ
Кабинет → API-ключи: дневной лимит расхода (например, $3) и только нужные модели. Лимит остановит скрипт, если тот пойдёт по кругу.
- 2Установите библиотеку и задайте ключbash
pip install openai export ZUKKO_API_KEY="fetch_ваш_ключ"Windows (PowerShell):
$env:ZUKKO_API_KEY="fetch_ваш_ключ". - 3Сохраните скрипт
Файл
classify_reviews.pyрядом сreviews.csv:classify_reviews.py""" Классификация отзывов из CSV через Zukko API. Запуск: pip install openai export ZUKKO_API_KEY="fetch_..." python classify_reviews.py reviews.csv results.csv --limit 50 # сначала проба python classify_reviews.py reviews.csv results.csv # потом всё Во входном CSV нужны колонки id и text. Скрипт можно прервать и запустить снова: строки, которые уже есть в results.csv, он пропустит. """ import argparse import asyncio - 4Проверьте на 50 строкахbash
python classify_reviews.py reviews.csv results.csv --limit 50Посмотрите
results.csvглазами. Потраченную сумму умножьте на 200 — это цена всех 10 000 строк. - 5Запустите на всём файлеbash
python classify_reviews.py reviews.csv results.csvГотовые строки скрипт пропускает. Прервалось — запустите ту же команду снова.
1Какую модель взять
Модель меняется в MODEL. Выбирайте на пробе: одни и те же 50 строк через двух кандидатов.
| Модель | Цена за 1 млн токенов, вход / выход | Когда |
|---|---|---|
deepseek-v4.1-flash | $0.03 / $0.10 | по умолчанию |
claude-haiku-5-5 | $0.05 / $0.20 | DeepSeek не устроил на пробе |
claude-sonnet-5-standard | $0.2 за любой токен | нужна сила Sonnet; без скидки за кэш, но здесь дешевле claude-sonnet-5-5 |
claude-sonnet-5-5 | $0.4 / $2 | сложная разметка |
2Без кода: n8n и Make
- 1Настройте HTTP-запрос
n8n — узел HTTP Request, Make — HTTP → Make a request.
POSTнаhttps://api.zukko.pro/v1/chat/completions. Заголовки:Authorization: Bearer fetch_ваш_ключ,Content-Type: application/json,Idempotency-Key— например,reviews-v1-плюс id строки. - 2Задайте тело запросаjson
{ "model": "deepseek-v4.1-flash", "response_format": { "type": "json_object" }, "max_tokens": 200, "messages": [ { "role": "system", "content": "Ты классифицируешь отзывы покупателей. Ответь только JSON: {\"sentiment\": \"positive|neutral|negative\", \"topic\": \"delivery|quality|price|support|other\", \"summary\": \"суть до 15 слов\"}" }, { "role": "user", "content": "ТЕКСТ ОТЗЫВА" } ] }Вместо
ТЕКСТ ОТЗЫВАподставьте поле таблицы. В n8n — черезJSON.stringify(...), иначе кавычка в отзыве сломает JSON. - 3Разберите ответ
choices[0].message.content— строка с JSON. Make: JSON → Parse JSON, n8n: узел Code или Edit Fields. - 4Включите повторы
Повтор при ошибке в настройках узла, пачки по 5–10 строк, лимит расхода на ключе.
3Если не работает
| Что видите | Что сделать |
|---|---|
402 insufficient_balance | Пополните баланс и запустите снова — готовое пропустится |
429 key_daily_limit_reached | Сработал ваш лимит ключа. Поднимите его или дождитесь 00:00 UTC |
Много 429 без кода лимита | Уменьшите CONCURRENCY до 5 |
422 idempotency_conflict | Поменяли промпт — увеличьте PROMPT_VERSION |
| Часто «плохой JSON» | Возьмите claude-haiku-5-5 или строгую схему |
KeyError: 'id' или 'text' | Переименуйте колонки в первой строке CSV |
403 model_not_allowed_for_key | Добавьте модель в настройках ключа |