Проблема: почему GLM 4.5 Air зацикливается в тул-коллах?
Если вы работаете с GLM 4.5 Air через llama.cpp и сталкиваетесь с бесконечными циклами при вызовах инструментов, вы не одиноки. Это классическая проблема агентных моделей, которая возникает из-за неправильного взаимодействия между:
- Системным промптом и ожиданиями модели
- Параметрами генерации (temperature, top_p, penalty)
- Форматированием ответов в JSON для tool calling
- Ограничениями контекста и управлением историей диалога
Важно: Зацикливание — это не баг модели, а следствие её попыток "угадать", что вы от неё хотите, при неоптимальных настройках. GLM 4.5 Air, как и другие модели с поддержкой tool calling, требует точной калибровки.
Эта проблема особенно актуальна для разработчиков, создающих AI-агентов как сотрудников, где стабильность выполнения инструментов критически важна.
Решение: системный подход к настройке
Вместо случайного подбора параметров нужен структурированный подход. Мы разобьём решение на три этапа: подготовка модели, настройка llama.cpp и выбор правильного интерфейса (TUI).
1 Подготовка модели и конвертация
Первое, что нужно проверить — правильно ли конвертирована модель для llama.cpp. GLM 4.5 Air использует специфичный формат tool calling, который должен сохраниться при конвертации.
# Конвертация GGUF с поддержкой tool calling
python convert.py \
--model-path /path/to/glm-4.5-air \
--outfile glm-4.5-air-Q4_K_M.gguf \
--outtype q4_k_m \
--ctx 8192 # Минимум 8K для tool calling
2 Критические параметры llama.cpp для tool calling
Вот параметры командной строки, которые чаще всего вызывают зацикливание, и их оптимальные значения для GLM 4.5 Air:
| Параметр | Проблемное значение | Оптимальное значение | Объяснение |
|---|---|---|---|
| --temp | 0.8+ (высокая креативность) | 0.3-0.5 | Слишком высокая температура приводит к "фантазированию" с инструментами |
| --repeat-penalty | 1.0 (нет штрафа) | 1.1-1.2 | Предотвращает повторение одних и тех же вызовов инструментов |
| --top-p | 0.95+ (широкий выбор) | 0.7-0.85 | Ограничивает пространство возможных токенов для более предсказуемых JSON |
| --mirostat | 2 (агрессивный) | 0 (выключен) или 1 | Mirostat 2 может конфликтовать со structured output |
Пример рабочей команды запуска:
./llama-cli -m glm-4.5-air-Q4_K_M.gguf \
--temp 0.4 \
--top-p 0.8 \
--repeat-penalty 1.15 \
--repeat-last-n 64 \
--ctx 8192 \
--no-mmap \
--n-gpu-layers 99 # Все слои на GPU если возможно
3 Системный промпт и форматирование
GLM 4.5 Air требует чётких инструкций по формату ответа. Вот минимальный рабочий системный промпт:
system_prompt = """Ты — полезный ассистент с доступом к инструментам.
ПРИ ВЫЗОВЕ ИНСТРУМЕНТА:
1. Используй ТОЧНО этот JSON формат:
{
"name": "имя_инструмента",
"arguments": {"arg1": "value1"}
}
2. Вызывай только ОДИН инструмент за раз.
3. Жди результата перед следующим действием.
4. Не добавляй пояснений до или после JSON.
"""
Предупреждение: Не смешивайте инструкции по tool calling с другими системными требованиями в одном промпте. Сначала добейтесь стабильной работы инструментов, затем добавляйте другие правила, как правильный подсчёт времени.
Выбор TUI: какой интерфейс лучше для GLM 4.5 Air?
Не все текстовые интерфейсы одинаково хорошо работают с tool calling. Вот сравнение популярных вариантов:
- llama.cpp (стандартный CLI) — максимальный контроль, но требует ручного парсинга JSON
- Ollama — удобная обёртка, но может добавлять лишние форматирования
- LM Studio — хороший UI, но ограниченная кастомизация параметров
- text-generation-webui — мощный, но тяжёлый для простых задач
Для отладки зацикливания я рекомендую начать с чистого llama.cpp CLI, чтобы исключить влияние промежуточного ПО.
Пошаговый план устранения зацикливания
- Проверьте конвертацию — убедитесь, что использовали последнюю версию convert.py
- Сбросьте параметры к базовым --temp 0.3 --top-p 0.8 --repeat-penalty 1.1
- Упростите системный промпт — только инструкции по tool calling
- Тестируйте с одним инструментом — например, простой калькулятор
- Включите логирование --log-disable false для анализа токенов
- Постепенно добавляйте сложность — больше инструментов, сложные промпты
Распространённые ошибки и их решения
| Симптом | Причина | Решение |
|---|---|---|
| Модель вызывает один инструмент бесконечно | Слишком низкий repeat-penalty | Увеличьте --repeat-penalty до 1.2 |
| JSON ломается (синтаксические ошибки) | Высокая температура или top_k | Понизьте --temp до 0.3, установите --top-k 40 |
| Модель "забывает" вызывать инструменты | Переполнение контекста | Уменьшите историю или увеличьте --ctx |
| Инструменты вызываются в неправильном порядке | Отсутствие чёткой пошаговой инструкции | Добавьте "Действуй шаг за шагом" в промпт |
Продвинутые техники для сложных агентов
Когда базовые настройки работают, можно переходить к сложным сценариям. Например, создание агентов, которые могут взаимодействовать друг с другом — именно такая ситуация описана в статье про хаос второго порядка в AI-ботах. Для этого:
# Пример управления несколькими инструментами с приоритетами
tool_priority = {
"get_data": 1, # Сначала получить данные
"analyze": 2, # Затем проанализировать
"decide": 3, # Принять решение
"execute": 4 # Выполнить действие
}
# Добавьте в системный промпт:
"Выполняй инструменты в логическом порядке: сбор данных → анализ → решение → действие."
Аппаратные рекомендации
GLM 4.5 Air — достаточно лёгкая модель, но для стабильного tool calling нужны определённые ресурсы. Если вы выбираете железо для AI-разработки, сравните варианты в нашем обзоре GB10 vs RTX vs Mac Studio. Для GLM 4.5 Air с тул-коллингом я рекомендую:
- Минимум 16GB ОЗУ — для контекста 8K+ инструментов
- RTX 3060 12GB или лучше — для полной загрузки модели в VRAM
- SSD NVMe — быстрая загрузка весов уменьшает лаг между вызовами
FAQ: частые вопросы по GLM 4.5 Air и tool calling
В: GLM 4.5 Air постоянно добавляет текст после JSON. Как убрать?
О: Добавьте в конец системного промпта: "После JSON НИЧЕГО не пиши. Только чистый JSON." Также уменьшите --temp до 0.2.
В: Модель игнорирует некоторые инструменты. Почему?
О: Возможно, описание инструмента слишком сложное. Упростите schema, используйте короткие имена и минимальное количество параметров.
В: Какой квант лучше для tool calling: Q4_K_M или Q5_K_M?
О: Q5_K_M даёт немного лучшую точность в structured output, но Q4_K_M быстрее. Начните с Q4_K_M, если будут проблемы — попробуйте Q5_K_M.
Заключение
GLM 4.5 Air — мощная модель для локального tool calling, но требует точной настройки. Ключевые моменты: низкая температура (0.3-0.5), умеренный repeat penalty (1.1-1.2), чистый системный промпт и правильная конвертация. После настройки вы получите стабильного агента, который может работать с десятками инструментов без зацикливания.
Для более сложных задач рассмотрите другие модели из нашего обзора лучших локальных LLM с тул-коллингом, но помните: GLM 4.5 Air остаётся одним из лучших вариантов по соотношению скорость/качество для большинства практических задач.