← Практика · 30 августа 2026
Настраиваем доступ к Kimi, Qwen, DeepSeek, Gemini и Grok по одному ключу с оплатой за токены — и считаем, во сколько реально обходится совет.
7 минут чтенияинструменты

Подписка на ChatGPT — тысяча рублей в месяц. На Claude — столько же. А если захотелось спросить ещё и Kimi, Qwen, DeepSeek, Gemini и Grok, подписок нужно семь, и это уже не «сравнить модели», а статья расходов.
Есть третий путь: OpenRouter — один ключ, через который доступны десятки моделей, оплата по токенам, никаких ежемесячных списаний. Я через него провёл целый сезон сравнения семи нейросетей — девять заданий, шестьдесят три работы, пятьдесят семь голосований — и уложился в 22 доллара.
Ниже — как это подключить и сколько на самом деле стоит.
Подписка выгодна, если вы работаете с моделью каждый день по многу часов. Поштучная оплата выгодна, когда обращения редкие, но разнообразные: спросить второе мнение, сравнить ответы трёх моделей, разово перегнать текст, проверить, не появилось ли что-то лучше вашего основного инструмента.
Простая прикидка: типичная консультация — вопрос на пару тысяч знаков и ответ на четыре — это примерно тысяча входных и полторы тысячи выходных токенов. У DeepSeek такой обмен стоит примерно четверть цента. Тысяча таких вопросов — около трёх долларов. Подписка окупится, только если вы задаёте их сотнями в день.
Регистрируетесь на openrouter.ai, пополняете баланс (минимум небольшой — от пяти долларов), в разделе Keys создаёте ключ. Он выглядит как sk-or-v1-….
Ключ — это деньги. Никогда не кладите его в код и не публикуйте в статьях:
mkdir -p ~/.config/openrouter
printf 'sk-or-v1-ваш-ключ\n' > ~/.config/openrouter/key
chmod 600 ~/.config/openrouter/key
Кладём в ~/.local/bin/ask-or:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Вопрос любой модели через OpenRouter: ask-or <модель> "вопрос" (или текст в stdin)."""
import json, os, sys, urllib.request
КЛЮЧ = open(os.path.expanduser('~/.config/openrouter/key')).read().strip()
МОДЕЛИ = { # короткие имена, чтобы не помнить полные
'kimi': 'moonshotai/kimi-k3',
'qwen': 'qwen/qwen3.8-max',
'deepseek': 'deepseek/deepseek-v4-pro-0813',
'gemini': 'google/gemini-3.7-flash',
'grok': 'x-ai/grok-4.6',
}
имя = sys.argv[1] if len(sys.argv) > 1 else 'deepseek'
вопрос = ' '.join(sys.argv[2:]) or sys.stdin.read()
if not вопрос.strip():
sys.exit('пустой вопрос')
запрос = urllib.request.Request(
'https://openrouter.ai/api/v1/chat/completions',
data=json.dumps({
'model': МОДЕЛИ.get(имя, имя),
'messages': [{'role': 'user', 'content': вопрос}],
'max_tokens': 8000,
}).encode(),
headers={
'Authorization': f'Bearer {КЛЮЧ}',
'Content-Type': 'application/json',
'X-Title': 'personal cli', # только латиница: заголовок ломается на кириллице
})
ответ = json.load(urllib.request.urlopen(запрос, timeout=600))
выбор = ответ['choices'][0]
print(выбор['message']['content'])
п = ответ.get('usage', {})
print(f"\n[{ответ.get('model')}: вход {п.get('prompt_tokens')}, "
f"выход {п.get('completion_tokens')}, причина: {выбор.get('finish_reason')}]",
file=sys.stderr)
chmod +x ~/.local/bin/ask-or
ask-or deepseek "Ответь одним словом: работает?"
cat модуль.py | ask-or kimi "найди ошибки в этом коде"
Расход печатается в stderr — это удобно: ответ можно направить в файл, а цифры останутся на экране.
Тарифы OpenRouter на момент моего сезона, доллары за миллион токенов:
| Модель | Вход | Выход |
|---|---|---|
| DeepSeek V4 Pro | 0,66 | 1,98 |
| Gemini 3.7 Flash | 0,75 | 3,75 |
| Qwen 3.8 Max | 2,00 | 6,00 |
| Grok 4.6 | 2,00 | 6,00 |
| Kimi K3 | 3,00 | 15,00 |
Разница между крайними — больше чем в семь раз по выходу. И вот что важно: дороже не значит лучше для вашей задачи. В моём сравнении Kimi обошёлся почти в восемь раз дороже GPT и набрал всего на шестнадцать баллов больше из двухсот семидесяти возможных.
Ещё одна ловушка — «думающие» модели. Они тратят токены на рассуждения, которых вы не видите, но платите за них. У меня в сезоне DeepSeek на одной логической задаче сжёг 313 тысяч токенов и справился хуже, чем модель, потратившая тысячу. Поэтому смотрите не на цену за миллион, а на цену ответа.
Проверить остаток на балансе можно в любой момент:
curl -s -H "Authorization: Bearer $(cat ~/.config/openrouter/key)" \
https://openrouter.ai/api/v1/key | python3 -m json.tool
Кириллица в заголовках HTTP. Заголовок X-Title с русским текстом валит запрос: библиотека не может закодировать его в latin-1. Только латиница.
Обрыв по лимиту токенов выглядит как готовый ответ. Если finish_reason вернулся как length, ответ обрезан на полуслове — модель не закончила. У меня из-за этого один участник сравнения получил обрезанную работу и последнее место, пока я не поднял потолок. Проверяйте это поле всегда.
Пустой ответ при непустом расходе. Некоторые модели ухитряются потратить весь лимит на внутренние рассуждения и вернуть пустое поле с содержимым. Формально успех, фактически ничего. Обрабатывайте этот случай отдельно, иначе получите пустоту в выводе и полное непонимание, что произошло.
Не все модели видят картинки. Отправить изображение можно только тем, у кого есть зрение; остальным нужно текстовое описание. Проверять надо заранее, а не по факту странного ответа.
Модели меняются и исчезают. Идентификаторы вроде moonshotai/kimi-k3 живут не вечно: версии обновляются, старые уходят. Держите список моделей в одном месте — как в словаре выше, — чтобы правка была в одной строке.
Самое полезное применение — не «заменить основную модель», а получать разные мнения. Одну и ту же задачу можно отдать трём моделям сразу и посмотреть, где они расходятся: расхождение почти всегда указывает на настоящую неоднозначность, а не на ошибку одной из них.
for м in deepseek qwen gemini; do
echo "=== $м"; cat вопрос.txt | ask-or $м
done
Три ответа на такую пачку обойдутся в считанные центы — дешевле, чем полчаса собственных сомнений.