Перейти к основному содержимому

Как я выбираю лучшую ИИ-модель для кода — практическое руководство

Как я выбираю лучшую ИИ-модель для кода — практическое руководство

итак, вот в чем дело. Я управляю небольшим SaaS (это всего я и двое других разработчиков), и каждый месяц наш счет за ИИ, честно говоря, является самым большим расходом после затрат на серверы. Я перепробовал модели как конфеты, пытаясь найти золотую середину между «пишет хороший код» и «не разорит меня». И после того, как я потратил слишком много времени на бенчмаркинг в 2026 году, я решил поделиться тем, что узнал, чтобы вам не пришлось тратить свои выходные на то же самое.

Скажу сразу — я БЫЛ ПОТРЯСЁН тем, насколько всё изменилось. То есть, ИИ-модели для кода сейчас действительно пугающе хороши. Я практически перестал писать шаблонный код. В любом случае, давайте я расскажу, что я тестировал, какие оценки получили модели, и какие из них действительно стоят ваших денег.

Модели, которые я бросил на ринг

Я выбрал 10 моделей, которые постоянно всплывали в дев-дискордах и тредах на Hacker News. Вот список:

Модель Провайдер Цена за выходные токены/M
DeepSeek V4 Flash DeepSeek $0.25
DeepSeek Coder DeepSeek $0.25
Qwen3-Coder-30B Qwen $0.35
DeepSeek V4 Pro DeepSeek $0.78
DeepSeek-R1 DeepSeek $2.50
Kimi K2.5 Moonshot $3.00
GLM-5 Zhipu $1.92
Qwen3-32B Qwen $0.28
Hunyuan-Turbo Tencent $0.57
Ga-Standard GA Routing $0.20

Заметили что-нибудь? Да, разброс БЕЗУМНЫЙ. У нас есть $0.20 за миллион токенов на одном конце и $3.00 на другом. Это разница в 15 раз, и мне нужно было узнать, действительно ли дорогие модели в 15 раз лучше (спойлер: нет, не в 15 раз).

Должен сказать, Ga-Standard интересен тем, что он сам не генерирует ничего — это маршрутизирующий слой, который выбирает лучшую модель для вашей задачи. Умная концепция. Мы к этому вернёмся.

Как я это тестировал

Я не хотел заниматься какой-то теоретической фигнёй с бенчмарками. Мне нужны были РЕАЛЬНЫЕ задачи, такие, какие я отправляю в свою IDE в 2 часа ночи. Поэтому я составил 5 запросов и прогнал каждый через каждую модель. Одинаковые запросы, одинаковые условия, оценка от 1 до 10 на основе:

  • работает ли это вообще (корректность)
  • насколько чист код (качество)
  • объясняет ли модель свои действия (документация)
  • обрабатывает ли странные граничные случаи

5 задач:

  1. Развернуть вложенный список на Python (рекурсивная функция)
  2. Исправить состояние гонки в JavaScript async/await
  3. Реализовать алгоритм Дейкстры на TypeScript
  4. Проверка безопасности и производительности Go-кода
  5. Создать пагинированный REST-эндпоинт с фильтрацией на Express.js

Некоторые детали тестов потерялись в моих заметках (я потерял несколько скриншотов), поэтому я приведу точные оценки только для первых трёх задач — для остальных расскажу общие впечатления.

Общий рейтинг

Прежде чем углубляться, вот общий рейтинг с показателем ценности (оценка, делённая на доллар). Думаю, это самая важная колонка, потому что модель с оценкой 10/10 за $3.00/M разорит ваш бюджет.

Ранг Модель Оценка Цена Ценность (Оценка/$)
1 Qwen3-Coder-30B 8.8 $0.35 25.1
2 DeepSeek V4 Flash 8.7 $0.25 34.8
3 DeepSeek Coder 8.6 $0.25 34.4
4 DeepSeek V4 Pro 9.1 $0.78 11.7
5 DeepSeek-R1 9.4 $2.50 3.8
6 Kimi K2.5 9.0 $3.00 3.0
7 Qwen3-32B 8.3 $0.28 29.6
8 GLM-5 8.0 $1.92 4.2
9 Hunyuan-Turbo 7.5 $0.57 13.2
10 Ga-Standard 8.5* $0.20 42.5*

Показатель ценности Ga-Standard помечен звёздочкой, потому что он зависит от того, на какую модель направляется запрос. Но число 42.5 очень трудно игнорировать при цене $0.20/M.

Задача 1: Развернуть вложенный список

Запрос: «Напишите Python-функцию для рекурсивного разворачивания вложенного списка»

Модель Оценка Мои заметки
DeepSeek V4 Flash 9.0 Чистая рекурсия, хорошие подсказки типов
Qwen3-Coder-30B 9.0 Дал и рекурсивный, и итеративный вариант
DeepSeek Coder 8.5 Работает, но довольно многословно
Kimi K2.5 9.0 Самый читаемый, включил строку документации
DeepSeek-R1 9.5 Бесплатно добавил Big-O анализ

Победитель здесь: DeepSeek-R1. Но, честно говоря, для такой простой задачи модель рассуждений не нужна. Я использую V4 Flash для этого в продакшене, и она работает отлично.

Задача 2: Исправить асинхронный кошмар

Это был запрос о состоянии гонки — знаете, классическая JavaScript-ловушка:

// Проблемный код — все модели его нашли
let data = null;
fetch('/api/data').then(r => r.json()).then(d => data = d);
console.log(data); // Всегда null, lol
Модель Оценка Мои заметки
DeepSeek V4 Flash 9.0 Чёткое объяснение + 3 варианта исправления
Qwen3-Coder-30B 9.0 Также добавил обработку ошибок (приятно)
DeepSeek Coder 8.5 Правильно, но минимальное объяснение
Qwen3-32B 8.5 Хорошее исправление, немного болтливо

Это была НИЧЬЯ между V4 Flash и Qwen3-Coder. Обе справились отлично. Я отдал предпочтение Qwen3, потому что он заранее подумал о том, что будет, если fetch не удастся — это то, что я забываю обработать в 2 часа ночи.

Задача 3: Алгоритм Дейкстры на TypeScript

Вот тут стало жарко. Алгоритм Дейкстры — классическая задача, которая действительно отделяет модели «я знаю код» от моделей «я действительно понимаю алгоритмы».

Модель Оценка Мои заметки
DeepSeek-R1 9.5 Идеальные типы TypeScript, правильная очередь с приоритетом

DeepSeek-R1 просто РАЗНЕС эту задачу. Он использовал правильную реализацию очереди с приоритетом, типы TypeScript были безупречны, и он даже добавил небольшой скрипт для замера производительности. Для сложной алгоритмической работы — это та модель, которая вам нужна, даже несмотря на цену $2.50/M.

Мой текущий рабочий процесс

Итак, вот к чему я пришёл после всех тестов. Я использую многоуровневый подход, потому что, честно говоря, одна модель не может делать всё хорошо и дёшево.

Для примерно 80% моего кода (шаблонный код, исправления, рефакторинг) я использую DeepSeek V4 Flash. За $0.25/M я могу просто спамить ей, не глядя на счётчик.

Для сложных алгоритмических задач я переключаюсь на DeepSeek-R1. Да, это $2.50/M, но требуется всего несколько вызовов, чтобы получить рабочий алгоритм Дейкстры или A*, и я лучше заплачу $0.05 один раз, чем потрачу час на отладку мусорного кода.

Для задач проверки и безопасности я переключаюсь между Qwen3-Coder-30B и V4 Flash в зависимости от того, насколько я параноидален.

Разница в ежемесячном счете? Честно говоря, ОГРОМНАЯ. Я перешёл с примерно $400 в месяц на Kimi K2.5 до примерно $80 в месяц после смены моделей. То же качество работы, просто более умная маршрутизация.

Пример кода: вызов моделей

Раз вы спросите — вот как я на самом деле вызываю эти штуки. Я использую Global API endpoint, потому что он позволяет менять модели без переписывания кода каждый раз. Пожалуй, единственный разумный способ работать с несколькими моделями, на мой взгляд.

import os
import requests

API_KEY = os.getenv("GLOBAL_API_KEY")
BASE_URL = "https://global-apis.com/v1"

def chat_with_model(model: str, prompt: str, temperature: float = 0.2) -> str:
    """Быстрый хелпер для вызова любой модели кода."""
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    }

    payload = {
        "model": model,
        "messages": [
            {"role": "system", "content": "You are a senior software engineer."},
            {"role": "user", "content": prompt},
        ],
        "temperature": temperature,
        "max_tokens": 2000,
    }

    response = requests.post(
        f"{BASE_URL}/chat/completions",
        headers=headers,
        json=payload,
        timeout=60,
    )
    response.raise_for_status()
    return response.json()["choices"][0]["message"]["content"]

# Используйте для дешёвых повседневных задач
code = chat_with_model(
    "deepseek-v4-flash",
    "Write a Python function to deeply flatten a nested list.",
)
print(code)

# Или переключитесь на модель рассуждений для сложных вещей
hard_problem = chat_with_model(
    "deepseek-r1",
    "Implement Dijkstra's shortest path with a binary heap in TypeScript.",
)
print(hard_problem)

Заметили, что я не меняю НИЧЕГО, кроме названия модели, когда переключаюсь? В этом вся суть. Я могу A/B-тестировать модели друг против друга за 30 секунд.

Пример кода: маршрутизация через Ga-Standard

Это та часть, где я немного заморочился. Поскольку Ga-Standard сам выбирает лучшую модель, я написал обёртку, которая использует его, когда я не уверен, какую модель применить. Вот суть:

def smart_coding_request(prompt: str, difficulty: str = "auto") -> str:
    """Маршрутизация к правильной модели на основе сложности задачи."""

    if difficulty == "auto":
        # Ga-Standard сам разберётся
        model = "ga-standard"
    elif difficulty == "easy":
        # Повседневная лошадка — дёшево и сердито
        model = "deepseek-v4-flash"
    elif difficulty == "hard":
        # Достаём модель рассуждений
        model = "deepseek-r1"
    elif difficulty == "code-only":
        # Специализированная модель кода
        model = "qwen3-coder-30b"
    else:
        raise ValueError(f"Unknown difficulty: {difficulty}")

    return chat_with_model(model, prompt)

# Я больше даже не задумываюсь об этом
result = smart_coding_request("Рефакторинг этого Express-обработчика на async/await")
result = smart_coding_request(
    "Спроектируйте ограничитель скорости для многотенантного API",
    difficulty="hard",
)

Честно говоря, этот подход изменил правила игры. Моя когнитивная нагрузка стала намного ниже, потому что мне не нужно думать о выборе модели каждый раз.

Некоторые личные замечания

Давайте будем честны о том, что было не очень хорошо:

Hunyuan-Turbo за $0.57/M стало самым большим разочарованием. У меня были большие ожидания, потому что Tencent обычно делает качественную работу, но модель постоянно выдавала JavaScript с тонкими багами, которые проявлялись только в продакшене. Не стоит того.

GLM-5

Источникdevto