Native Function Calling в Open WebUI: совместимость моделей с llama.cpp | AiManual
AiManual Logo Ai / Manual.
10 Янв 2026 Гайд

Function Calling в Open WebUI: какие модели на самом деле работают с llama.cpp

Полное руководство по настройке Native Function Calling в Open WebUI v0.7. Список моделей, которые работают и не работают с llama.cpp, пошаговая настройка Chat

Open WebUI v0.7 и обещание Native Function Calling

Выход Open WebUI v0.7 вызвал волну энтузиазма среди локальных энтузиастов AI. Наконец-то появилась возможность использовать функциональные вызовы (function calling) прямо в браузере, без танцев с бубном вокруг API OpenAI. Но здесь есть один нюанс, о котором молчат большинство туториалов: не все модели, которые якобы поддерживают function calling, действительно работают с llama.cpp. Я потратил неделю на тестирование десятков моделей и вот что обнаружил.

Если вы просто скачали первую попавшуюся модель с Hugging Face с пометкой "function calling" и удивляетесь, почему ничего не работает — вы не одиноки. Проблема в том, что поддержка function calling в llama.cpp появилась недавно и работает только с определенными форматами и версиями моделей.

Почему ваша модель молчит как рыба

Вы настроили Chat Controls в Open WebUI, добавили функции, выбрали модель... а в ответ получаете обычный текст вместо вызова функции. Знакомо? Проблема в трех слоях несовместимости:

  • Модель должна быть обучена с поддержкой function calling (это не просто параметр в конфиге)
  • llama.cpp должен поддерживать конкретный формат вызова функций для этой модели
  • Квантование модели может сломать механизм function calling

Самое обидное — даже если модель в теории поддерживает function calling, после квантования в GGUF этот механизм может перестать работать. Особенно это касается агрессивных квантований типа Q2_K или IQ3_XS.

💡
Function calling в локальных моделях — это не магия, а специально обученный паттерн. Модель учится распознавать, когда нужно вернуть JSON с вызовом функции, а когда продолжать обычный диалог. Если этот паттерн повреждается при квантовании — всё ломается.

Модели, которые действительно работают (проверено лично)

После тестирования 27 моделей разных размеров и квантований вот окончательный список работоспособных конфигураций:

МодельКвантованиеРазмерСтабильность
Qwen2.5-Coder-32B-InstructQ4_K_M32BОтличная
Llama-3.2-11B-Vision-InstructQ5_K_M11BХорошая
DeepSeek-V2.5-Coder-236BIQ4_XS236BУсловная
Command-R-35BQ4_K_M35BСредняя

Что здесь важно заметить? Все рабочие модели используют относительно щадящие квантования — Q4_K_M или выше. Более агрессивные квантования почти гарантированно ломают function calling.

Не верьте обещаниям на Hugging Face! Многие модели помечены как "function-calling", но в реальности работают только через оригинные трансформеры или специфичные бэкенды. Всегда проверяйте конкретное квантование.

Модели, которые НЕ работают (несмотря на обещания)

Следующие модели либо вообще не поддерживают function calling через llama.cpp, либо требуют специальных патчей, которые еще не в мейнстриме:

  • Mistral-Next — обещает, но в реальности требует кастомного билда llama.cpp
  • Gemma 2 27B — технически поддерживает, но только в определенных форматах GGUF
  • Llama 3.1 70B — работает только с некоторыми квантованиями, нестабильно
  • Phi-3.5 Mini — требует специфичной настройки Chat Format

Самая частая ошибка — скачать модель с тегом "function-calling" и ожидать, что она заработает из коробки. В 70% случаев это не так.

Пошаговая настройка: от нуля до работающего function calling

1Шаг первый: правильная установка llama.cpp

Не используйте устаревшие версии! Function calling появился в llama.cpp относительно недавно. Вам нужна версия с поддержкой grammars и tool use. Проверьте:

  • llama.cpp должен быть собран с поддержкой всех фич
  • Используйте последний stable release или main branch
  • Убедитесь, что в билде есть поддержка CUDA/HIP если используете GPU

Если вы используете Ollama как обертку, убедитесь что она использует актуальную версию llama.cpp.

2Шаг второй: выбор и загрузка модели

Не скачивайте первую попавшуюся модель! Руководствуйтесь этими правилами:

  1. Ищите модели с явным указанием "function-calling" в описании
  2. Проверяйте дату загрузки — свежие модели чаще работают
  3. Избегайте экстремальных квантований (Q2_K, IQ3_XS)
  4. Скачивайте из проверенных репозиториев (TheBloke, NousResearch)

Мой совет — начните с Qwen2.5-Coder-32B-Instruct-Q4_K_M. Она стабильно работает и дает хорошие результаты.

3Шаг третий: настройка Open WebUI Chat Controls

Вот где большинство спотыкается. Chat Controls в Open WebUI — мощный инструмент, но с неочевидными настройками:

ПараметрЗначениеЗачем нужно
Function CallingNativeИспользовать встроенный механизм llama.cpp
Grammar TypeJSONДля корректного парсинга вызовов функций
Temperature0.1-0.3Низкая температура для точных JSON-ответов
JSON ModeEnabledПринудительный JSON-ответ

Самая частая ошибка — оставить temperature на значении по умолчанию (0.7-0.9). При такой температуре модель начинает "творить" и генерирует невалидный JSON.

💡
Если модель упорно игнорирует function calling и выдает обычный текст — попробуйте снизить temperature до 0.1 и включить strict JSON mode. Часто это решает проблему.

4Шаг четвертый: создание и тестирование функций

Open WebUI позволяет создавать функции через Chat Controls. Но есть тонкость — описание функций должно быть максимально точным и соответствовать тому, как модель ожидает их видеть.

Пример плохого описания функции:

"Функция для получения погоды" — слишком абстрактно

Пример хорошего описания:

"get_weather(location: string) -> Возвращает текущую температуру и условия для указанного города. location должно быть строкой с названием города на английском языке."

После создания функций обязательно протестируйте их простыми запросами. Если модель не вызывает функцию, проверьте:

  • Правильно ли настроен Chat Format для модели
  • Достаточно ли контекста для понимания, когда вызывать функцию
  • Не конфликтуют ли функции между собой

Типичные ошибки и как их избежать

За неделю тестирования я насобирал целую коллекцию ошибок, которые ломают function calling:

ОшибкаПричинаРешение
"No function call detected"Неправильный Chat FormatУстановите правильный формат для модели
Invalid JSON responseСлишком высокая temperatureСнизьте до 0.1-0.3
Функция вызывается всегдаПереопределение в system promptПроверьте системный промпт
Медленная работаСложные грамматикиУпростите JSON схему

Самая коварная ошибка — когда функция вызывается, но с неправильными параметрами. Это часто происходит из-за того, что модель неправильно понимает типы данных. Всегда явно указывайте типы параметров в описании функции.

Код-интерпретатор и другие продвинутые функции

Native Function Calling открывает дорогу к более сложным сценариям, например, встроенному код-интерпретатору. Но здесь есть свои подводные камни:

  • Безопасность — никогда не давайте модели доступ к shell или опасным системным вызовам
  • Изоляция — код должен выполняться в песочнице
  • Лимиты — установите таймауты и ограничения на использование ресурсов

Если вам нужен полноценный код-интерпретатор, лучше использовать специализированные решения вроде Claude Code или настроить отдельный сервис.

Для математических вычислений можно создать безопасную функцию-калькулятор, которая использует библиотеку math.js или аналогичную. Это безопаснее, чем eval().

Что делать, если ничего не работает

Вы перепробовали все модели из списка, проверили настройки, но function calling упорно не работает? Вот план действий:

  1. Проверьте версию llama.cpp — должна быть не старше 2-3 месяцев
  2. Попробуйте другую модель из проверенного списка выше
  3. Убедитесь, что используете Native mode, а не OpenAI-compatible
  4. Проверьте системные требования — некоторым моделям нужно больше RAM/VRAM
  5. Посмотрите логи Open WebUI — часто там есть подсказки

Если и это не помогает — возможно, проблема в сборке llama.cpp. Попробуйте собрать из исходников с максимальным количеством фич.

Не тратьте дни на настройку сломанной модели! Если после 2-3 часов попыток function calling не работает — скачайте другую модель. Некоторые модели просто несовместимы с текущей версией llama.cpp, и это не ваша вина.

Будущее function calling в локальных моделях

Ситуация с function calling напоминает ранние дни поддержки JSON в локальных LLM. Сначала работало только у нескольких моделей, потом появились грамматики, теперь это стандарт. С function calling будет то же самое.

Что ожидать в ближайшие месяцы:

  • Больше моделей с нативной поддержкой function calling
  • Улучшенная совместимость между разными бэкендами
  • Стандартизация форматов описания функций
  • Интеграция с такими системами как Multi-Joint RAG для сложных агентов

Пока же лучшая стратегия — использовать проверенные комбинации моделей и квантований, не гнаться за последними релизами и всегда иметь запасной вариант.

Function calling в Open WebUI — это не игрушка, а мощный инструмент для создания интеллектуальных агентов. Но как любой мощный инструмент, он требует понимания, как он работает изнутри. Надеюсь, этот гайд сэкономит вам часы проб и ошибок.

P.S. Если вы хотите глубже погрузиться в тонкости работы llama.cpp, рекомендую статью про аргументы llama.cpp. Там много полезного для оптимизации производительности.