ДокументацияПайплайны: обработка данных потоком

Пайплайны: обработка данных потоком

СценарииПродвинутый25 мин

В конце у вас будет скрипт, который прогоняет 10 000 отзывов из CSV через нейросеть и пишет в новую таблицу тон, тему и суть каждого.

Нужно: отдельный ключ fetch_... (создать), баланс — на 10 000 отзывов на DeepSeek хватит $1 (пополнить), Python 3.10+, CSV с колонками id и text.

  1. 1
    Поставьте лимит на ключ

    Кабинет → API-ключи: дневной лимит расхода (например, $3) и только нужные модели. Лимит остановит скрипт, если тот пойдёт по кругу.

  2. 2
    Установите библиотеку и задайте ключ
    bash
    pip install openai
    export ZUKKO_API_KEY="fetch_ваш_ключ"

    Windows (PowerShell): $env:ZUKKO_API_KEY="fetch_ваш_ключ".

  3. 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. 4
    Проверьте на 50 строках
    bash
    python classify_reviews.py reviews.csv results.csv --limit 50

    Посмотрите results.csv глазами. Потраченную сумму умножьте на 200 — это цена всех 10 000 строк.

  5. 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.20DeepSeek не устроил на пробе
claude-sonnet-5-standard$0.2 за любой токеннужна сила Sonnet; без скидки за кэш, но здесь дешевле claude-sonnet-5-5
claude-sonnet-5-5$0.4 / $2сложная разметка

2Без кода: n8n и Make

  1. 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. 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. 3
    Разберите ответ

    choices[0].message.content — строка с JSON. Make: JSON → Parse JSON, n8n: узел Code или Edit Fields.

  4. 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Добавьте модель в настройках ключа
Пайплайны: обработка данных потоком · Документация Zukko