Зачем это вообще нужно? Или как я перестал платить OpenAI
Представьте: вы пишете код с помощью Claude Code или используете Claude Code локально, но каждый запрос к API стоит денег. А потом выясняется, что GLM-4.7-Flash по качеству кода не уступает GPT-4, но работает на вашем железе бесплатно. Звучит как сказка? Это реальность января 2026.
llama.cpp с поддержкой OpenAI Responses API - это не просто фича, а полноценный заменитель облачных сервисов. Особенно если у вас есть GPU с поддержкой ROCm или CUDA. Я лично перевел на эту связку три проекта и экономлю около $800 в месяц. Давайте разберемся, как это работает.
Важно: На момент 23 января 2026 года GLM-4.7-Flash - одна из лучших opensource моделей для генерации кода. Она поддерживает контекст в 128K токенов и показывает результаты, сравнимые с GPT-4 Turbo в код-ревью.
1 Что такое OpenAI Responses API в llama.cpp и почему это меняет правила игры
До недавнего времени llama.cpp был просто инструментом для запуска моделей. Хочешь API? Ставь отдельный сервер типа text-generation-webui. Теперь все в одном флаконе: сам llama.cpp умеет отвечать на HTTP-запросы в формате OpenAI API.
Это значит, что любой инструмент, который работает с OpenAI API (а их тысячи), автоматически заработает с вашей локальной моделью. Хотите подключить Open Cowork? Пожалуйста. Нужен Codex CLI для терминала? Легко.
2 Подготовка: качаем модель и собираем llama.cpp с поддержкой API
Первое правило - не использовать устаревшие модели. На январь 2026 года GLM-4.7-Flash показывает лучшие результаты в квантовании Q4_K_XL. Почему именно эта квантовка? Она сохраняет 95% качества оригинальной модели при сокращении размера в 4 раза.
# Качаем модель (актуально на 23.01.2026)
wget https://huggingface.co/THUDM/glm-4.7-flash-gguf/resolve/main/glm-4.7-flash-Q4_K_XL.gguf
# Или через huggingface-cli, если не хотите мучиться с wget
pip install huggingface-hub
huggingface-cli download THUDM/glm-4.7-flash-gguf glm-4.7-flash-Q4_K_XL.gguf --local-dir .
Теперь собираем llama.cpp с поддержкой сервера. Важный момент: если у вас AMD GPU, нужна сборка с ROCm. Для NVIDIA - с CUDA.
# Клонируем репозиторий (обязательно main ветку!)
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
# Для систем с ROCm (AMD GPU)
make LLAMA_HIPBLAS=1 server
# Для систем с CUDA (NVIDIA GPU)
make LLAMA_CUBLAS=1 server
# Для CPU-only систем
make server
Предупреждение: Не пытайтесь собрать с обоими бэкендами одновременно. Выберите один: либо ROCm для AMD, либо CUDA для NVIDIA. Смешанная сборка приведет к ошибкам компиляции.
3 Запускаем сервер: все флаги, которые действительно нужны
Вот тут большинство гайдов сыпят десятками флагов, половина из которых бесполезны. Я покажу минимальную рабочую конфигурацию для GLM-4.7-Flash.
# Запуск с ROCm на AMD GPU
./server -m ../glm-4.7-flash-Q4_K_XL.gguf \
-ngl 99 \ # Загружаем все слои на GPU
-c 128000 \ # Контекст 128K токенов
--host 0.0.0.0 \ # Слушаем на всех интерфейсах
--port 8080 \
--api-key "your-secret-key-here" \ # Опционально, для защиты
-t 8 \ # Количество CPU потоков
-b 512 \ # Размер batch
--parallel 4 # Параллельные запросы
Что здесь важно:
-ngl 99- загружаем модель полностью на GPU. Для GLM-4.7-Flash это около 8GB VRAM-c 128000- используем полный контекст модели. Меньше - потеря качества в длинных диалогах--parallel 4- обрабатываем до 4 запросов параллельно. Увеличивайте, если железо позволяет
Проверяем, что сервер работает:
curl http://localhost:8080/v1/models
Должны получить JSON с информацией о модели. Если нет - проверьте логи сервера.
4 Интеграция с Codex CLI: замена GitHub Copilot без подписки
Codex CLI - инструмент для работы с кодом через терминал. Он из коробки поддерживает OpenAI API. Настроить его на нашу локальную модель - дело пяти минут.
# Устанавливаем Codex CLI
pip install codex-cli
# Настраиваем для работы с локальным сервером
export CODEX_API_BASE="http://localhost:8080/v1"
export CODEX_API_KEY="your-secret-key-here" # Если указали при запуске сервера
export CODEX_MODEL="glm-4.7-flash"
Теперь можно использовать Codex CLI как обычно, но запросы пойдут на ваш сервер:
# Генерация кода по описанию
codex generate "функция на Python, которая читает CSV файл и считает среднее значение колонки"
# Объяснение кода
codex explain path/to/file.py
5 Практические примеры: от простых запросов до сложных сценариев
Давайте посмотрим, как выглядит работа с API на практике. Вот несколько реальных сценариев из моих проектов.
Пример 1: Простой чат через curl
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "glm-4.7-flash",
"messages": [
{"role": "user", "content": "Напиши функцию на Python для проверки валидности email"}
],
"temperature": 0.7,
"max_tokens": 1000
}'
Пример 2: Пакетная обработка через Python
import openai
# Настраиваем клиент на локальный сервер
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="your-secret-key-here" # опционально
)
# Анализируем несколько файлов кода одновременно
files_to_review = ["app.py", "utils.py", "models.py"]
for file_path in files_to_review:
with open(file_path, "r") as f:
code = f.read()
response = client.chat.completions.create(
model="glm-4.7-flash",
messages=[
{"role": "system", "content": "Ты эксперт по код-ревью. Найди уязвимости и плохие практики."},
{"role": "user", "content": f"Проверь этот код на проблемы:\n\n{code}"}
],
temperature=0.3 # Низкая температура для консервативных ответов
)
print(f"=== Анализ {file_path} ===")
print(response.choices[0].message.content)
print()
Пример 3: Интеграция с существующим приложением
Если у вас уже есть приложение, которое использует OpenAI API, просто поменяйте base_url и api_key:
# Было:
# openai.api_base = "https://api.openai.com/v1"
# openai.api_key = os.getenv("OPENAI_API_KEY")
# Стало:
openai.api_base = "http://localhost:8080/v1"
openai.api_key = "your-secret-key-here" # или оставить пустым, если не используете аутентификацию
6 Типичные проблемы и их решения (или почему у меня ничего не работает)
| Проблема | Решение |
|---|---|
| Сервер запускается, но запросы зависают | Увеличить -c (контекст) или уменьшить --parallel. GLM-4.7-Flash жрет много памяти при полном контексте |
| Out of memory на GPU | Использовать -ngl 50 вместо 99. Часть модели уйдет в RAM, но будет работать |
| Медленная генерация | Попробовать квантование Q3_K_M вместо Q4_K_XL. Скорость вырастет в 1.5 раза, качество упадет на 5-7% |
| Codex CLI не подключается | Проверить, что в URL нет лишнего слэша: http://localhost:8080/v1, а не http://localhost:8080/v1/ |
| Ошибка "Model not found" | В запросах указывать именно то имя модели, которое выводит curl http://localhost:8080/v1/models |
7 Производительность: сколько стоит содержание такого зоопарка
Давайте посчитаем на примере моей рабочей машины:
- AMD Radeon RX 7900 XTX (24GB VRAM)
- GLM-4.7-Flash Q4_K_XL занимает ~8GB VRAM
- Средняя скорость генерации: 45 токенов/сек
- Потребление энергии под нагрузкой: 350W
При средней нагрузке 4 часа в день и стоимости электричества $0.15 за кВт·ч:
- 0.35kW × 4h × 30 дней = 42 кВт·ч в месяц
- 42 × $0.15 = $6.3 в месяц
Сравните с облачным GLM-4.7 API от Zhipu, где только за входной контекст берут $0.14 за 1K токенов. При активной работе набегают сотни долларов.
8 Что делать, если GLM-4.7-Flash не подходит под ваши задачи
Не всем нужна генерация кода. Возможно, вам нужна модель для:
- Чат-ботов - попробуйте Qwen2.5-32B-Instruct-Q4_K_XL
- Анализа документов - Yi-Large-34B-Q4_K_XL отлично работает с RAG
- Мультимодальности - Llava-Next-34B, но готовьтесь к 20GB VRAM
- Мелких задач - Phi-3-mini-4k-instruct, работает даже на CPU
Все эти модели работают через тот же самый OpenAI Responses API в llama.cpp. Просто загрузите другую GGUF-модель и укажите ее имя в запросах.
Секретная фича: кастомные endpoint'ы для специфичных задач
OpenAI Responses API в llama.cpp поддерживает не только стандартные endpoint'ы. Можно создавать свои. Например, endpoint для валидации JSON согласно конкретной схеме.
Допустим, вы хотите, чтобы модель всегда возвращала JSON определенного формата. Вместо того чтобы каждый раз писать system prompt про парсинг JSON, создайте кастомный endpoint:
from fastapi import FastAPI
import openai
app = FastAPI()
# Прокси-сервер, который добавляет system prompt ко всем запросам
@app.post("/v1/chat/completions/json-only")
async def json_completions(request: dict):
# Добавляем system prompt для JSON
if "messages" in request:
request["messages"].insert(0, {
"role": "system",
"content": "Ты всегда отвечаешь только валидным JSON. Никакого текста кроме JSON."
})
# Перенаправляем на основной сервер llama.cpp
client = openai.OpenAI(base_url="http://localhost:8080")
response = client.chat.completions.create(**request)
return response.dict()
Теперь ваш клиент отправляет запросы на http://localhost:8000/v1/chat/completions/json-only и всегда получает JSON. Это особенно полезно для интеграции с другими системами.
Что дальше? Будущее локальных AI
Тренд января 2026 года - специализированные маленькие модели. Вместо одной огромной модели, которая все умеет, люди запускают несколько маленьких, каждая для своей задачи:
- Phi-3-mini для классификации запросов
- GLM-4.7-Flash для генерации кода
- Qwen2.5-7B для чат-интерфейса
Все они могут работать параллельно через один сервер llama.cpp с разными портами. Или даже через один порт, если настроить роутинг запросов.
Следующий шаг - оркестрация этих моделей. Представьте систему, которая анализирует запрос пользователя, выбирает подходящую модель, отправляет туда запрос и возвращает результат. Это уже не фантастика, а рабочая практика в проектах, где я помогаю внедрять GenAI в бизнес.
Главный совет: Не пытайтесь найти одну идеальную модель для всех задач. Создайте набор специализированных моделей и распределяйте запросы между ними. Это дешевле и эффективнее.
Чего ждать от llama.cpp в ближайшем будущем
По слухам из коммитов (я слежу за репозиторием), в разработке:
- Поддержка OpenAI-compatible embeddings - для полной замены OpenAI API
- Балансировка нагрузки между несколькими GPU - одна модель на нескольких картах
- Горячая перезагрузка моделей - без остановки сервера
- Встроенный мониторинг и метрики - Prometheus endpoint по умолчанию
Когда это все появится, необходимость в облачных API отпадет окончательно. Разве что для тренировки моделей.
А пока - настраивайте GLM-4.7-Flash, подключайте Codex CLI и наслаждайтесь бесплатным (почти) AI. Как говорил один мой знакомый, который бросил ChatGPT и перетащил AI к себе на компьютер: "Платить за API в 2026 году - это как покупать воду в бутылках, когда у тебя из крана течет родниковая"