Назад в блог

AI для новичковИнструкция

Фильтр на 40 000 комментариев через LLM: промпт keep/drop и цена

Промпт keep/drop, короткий цикл на Python и оценка токенов для фильтра на 40 000 комментариев через недорогую LLM — до запуска.

Автор: CheapTokens TeamОпубликовано 6 мин чтения

Обложка: чат, где модель отвечает keep или drop на вопрос о комментарии
Содержание
  1. Откуда идея
  2. Как работает фильтр «да/нет»
  3. Напишите промпт keep/drop
  4. Цикл: один запрос на комментарий
  5. Сколько стоят 40 000 комментариев
  6. Перед запуском

В вашем архиве 40 000 комментариев, и большинство из них — шум: спам, «+1», шутки, ответы не по теме. Недорогая LLM может прочитать каждый и ответить одним словом: keep или drop. Отправляйте каждый комментарий отдельным коротким запросом — и весь проход обойдётся примерно в 6 миллионов входных и 200 тысяч выходных токенов (считаем около 150 токенов на входе и 5 на выходе для одного комментария). На DeepSeek-V4-Flash это $0.11 по текущей цене.

Ниже — промпт, короткий цикл на Python и арифметика, которую легко повторить для вашего архива. Всё идёт через OpenAI-совместимый адрес из документации CheapTokens.

Откуда идея#

Эндрю Карпати (исследователь ИИ, сооснователь OpenAI, бывший директор по ИИ в Tesla) рассказал в посте от 31 октября 2026 года, как сделал HackerTube — сайт с видео, которые советуют в комментариях на Hacker News. В этой сборке Sonnet прошёл по комментариям в рабочем процессе Claude Code, убрал спам и оставил около 40 000 комментариев, где рекомендуют видео с YouTube. Итог — 6 454 видео по 150 темам, и, по его словам, вся сборка сейчас занимает около двух часов.

Цифры из сборки HackerTube
Цифры из поста Карпати, 31 октября 2026

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

Как работает фильтр «да/нет»#

Представьте швейцара с правилом в одну строку: «пускать тех, у кого есть билет». Он секунду смотрит на каждого, говорит «да» или «нет» и не помнит предыдущего гостя. LLM-фильтр устроен так же. В каждом запросе — ваша инструкция и один комментарий, а в ответ приходит одно слово. Комментарий № 17 000 ничего не знает о комментарии № 16 999.

Архив, промпт keep/drop, короткий список
Один запрос на комментарий: инструкция и текст на входе, одно слово на выходе

Именно поэтому счёт предсказуем. Запросы почти одного размера, значит, стоимость — это число запросов × токены в запросе. А раз ответ из одного слова, почти все деньги уходят на входную сторону: инструкцию и сам комментарий. Если деление на вход и выход вам пока непривычно, его разбирает статья входные и выходные токены.

Напишите промпт keep/drop#

В этой задаче промпт — и есть весь продукт. Сравните расплывчатую формулировку с точной:

Сравнение

Расплывчатое правило и точное

Расплывчатое

text
Is this comment good? Answer yes or no.

Хорош для кого? Длинный вежливый комментарий про базы данных может получить «да», а короткое «watch this: <link>» — «нет». Модели приходится угадывать, что вы имели в виду, и от комментария к комментарию догадка меняется.

Точное

text
Answer keep if the comment recommends a specific YouTube video or talk. Answer drop for spam, jokes, replies without a video, and everything else. Reply with one word.

Теперь у модели правило вместо настроения: что подходит, что нет и как выглядит ответ.

Допустим, пришли три комментария. Вот ответы, которых вы добиваетесь:

  • «This talk on the history of Unix changed how I see shells: youtube.com/watch?v=... Worth the hour.» → keep
  • «Cheap watches here!!! click my profile» → drop
  • «Agree, great point about caching.» → drop

Три привычки помогают промпту выдержать 40 000 комментариев. Скажите, что делать с остальными случаями («всё прочее — drop»), иначе модель придумает третий ответ. Просите одно слово, чтобы в коде ответ легко сравнивался с keep. И оберните комментарий в теги, как в цикле ниже: если в комментарии написано «игнорируй инструкции выше», это будет понятно как данные, а не приказ. Подробнее — в статье как подписывать каждый документ в промпте.

Цикл: один запрос на комментарий#

Вот всё целиком. Скрипт читает comments.jsonl (на каждой строке JSON-объект с полем text), просит вердикт по каждому комментарию и пишет оставленные строки в kept.jsonl. Id модели — полный gateway_id, ключ берётся из переменной окружения. Код и инструкция в примере английские, потому что комментарии Hacker News английские; для комментариев на русском напишите инструкцию на русском.

python
import json
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

INSTRUCTION = '''You filter Hacker News comments.
Answer keep if the comment recommends a specific YouTube video or talk.
Answer drop for spam, jokes, replies without a video, and everything else.
Reply with one word: keep or drop. The comment is between <comment> tags.'''

def verdict(text):
    r = client.chat.completions.create(
        model='deepseek-ai/DeepSeek-V4-Flash-0731',
        messages=[
            {'role': 'system', 'content': INSTRUCTION},
            {'role': 'user', 'content': f'<comment>{text}</comment>'},
        ],
        temperature=0,
        max_tokens=10,
    )
    return r.choices[0].message.content.strip().lower(), r.usage

kept = tokens_in = tokens_out = 0
with open('comments.jsonl') as src, open('kept.jsonl', 'w') as out:
    for line in src:
        answer, usage = verdict(json.loads(line)['text'])
        tokens_in += usage.prompt_tokens
        tokens_out += usage.completion_tokens
        if answer.startswith('keep'):
            out.write(line)
            kept += 1

print(kept, 'kept;', tokens_in, 'tokens in,', tokens_out, 'tokens out')

temperature=0 делает вердикты более повторяемыми от запуска к запуску, а max_tokens=10 оставляет место для одного слова и не больше. Самая полезная — последняя строка: она складывает числа usage, которые возвращает API, так что вы получаете реальные токены, а не догадку.

Запустите цикл на первых десяти комментариях и прочитайте каждый вердикт сами. Если ответ выглядит обрезанным или пришёл пустым, проверьте finish_reason, как описано в статье почему ответ ИИ обрывается на полуслове. Для проверки хватит запросов по одному, а для полных 40 000 AsyncOpenAI отправляет много запросов параллельно.

Сколько стоят 40 000 комментариев#

Вот допущения — подставьте свои. Комментарий вместе с инструкцией — около 150 токенов на входе. Ответ — около 5 токенов. Комментарии Hacker News часто длиннее, так что считайте 150 нижней границей и замените её числами из репетиции. Для 40 000 комментариев:

  • вход: 40 000 × 150 = 6 000 000 токенов
  • выход: 40 000 × 5 = 200 000 токенов

Инструкцию обычно забывают посчитать. Она едет с каждым комментарием. Попробуйте угадать:

Угадайте число

Допустим, инструкция занимает 60 токенов. Сколько входных токенов дадут 40 000 её копий?

Показать ответ

Ответ: 2 400 000

40 000 × 60 = 2 400 000. Это 40% от 6 000 000 входных токенов — на текст, который никогда не меняется. Поэтому первым делом стоит сократить инструкцию.

Теперь счёт за полный проход по живым ценам:

Модель За запрос 40 000 запросов OpenRouter, 40 000 запросов
GLM-5.3-Flash $0.0000032 $0.128 $0.218
DeepSeek-V4-Flash $0.0000028 $0.11 $0.448
MiniMax-M2.7 $0.0000083 $0.33 $3.96

150 входных и 5 выходных токенов на запрос. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.

На такой нагрузке DeepSeek-V4-Flash и GLM-5.3-Flash выходят дешевле OpenRouter в сумме, с учётом входа и выхода вместе; колонка OpenRouter показывает это рядом. Обе модели рассчитаны на такую массовую работу: у DeepSeek-V4-Flash одна цена в любое время суток и до 32 768 токенов в ответе, GLM-5.3-Flash — второй вариант на том же адресе. Прогоните свою репетицию на 50 комментариях через каждую и сравните вердикты сами. Чтобы переключиться, замените строку с моделью на zai-org/GLM-5.3-Flash. Актуальные цены всех моделей — на странице цен, а подробности о моделях DeepSeek в CheapTokens собраны в одном месте.

Попробуйте самиПопробуйте: в архиве 100 000 комментариев, а не 40 000. Что изменится?Показать ответ

Счёт растёт вместе с числом комментариев. 100 000 × 150 = 15 000 000 входных токенов и 100 000 × 5 = 500 000 выходных, это $0.275 на DeepSeek-V4-Flash. Тот же промпт, в 2,5 раза больше комментариев — в 2,5 раза больше стоимость.

Перед запуском#

Сначала репетиция. Возьмите 50 комментариев, запустите цикл и прочитайте все 50 вердиктов. Затем возьмите напечатанные суммы токенов: 50 × 800 = 40 000, значит, полный прогон — это токены репетиции, умноженные на 800. Так допущение «150 и 5» заменяется вашими числами.

Дальше правьте промпт на репетиции, а не на полном прогоне. Если три вердикта «drop» оказались неверными, добавьте одно предложение про такой случай и повторите те же 50. Придирчивость здесь стоит доли цента, а повтор 40 000 — заметно дороже.

И помните, что видит модель: один комментарий, без ветки. Если реплика «agree, great point» понятна только рядом с родительским комментарием, добавьте родителя в запрос. Запрос станет длиннее, так что пересчитайте токены уже с новым размером.

Когда репетиция выглядит правильно, создайте API-ключ в личном кабинете, положите его в CHEAPTOKENS_API_KEY и запускайте полный проход. Если ключ для вас в новинку, прочитайте что такое API-ключ и как его хранить — это пять минут.