Tool-calling в text-generation-webui 4.1: создание функций за 5 минут | AiManual
AiManual Logo Ai / Manual.
16 Мар 2026 Инструмент

text-generation-webui 4.1: полный гайд по tool-calling и созданию своих функций в один .py файл

Научитесь создавать кастомные функции для локальных LLM в text-generation-webui 4.1. Гайд по tool-calling через простые Python-скрипты с примерами и сравнениями

Зачем этот tool-calling и почему все вдруг помешались

До марта 2026 года text-generation-webui был просто красивой оберткой для запуска моделей. Можно было болтать с локальной LLM, менять температуру и максимум токенов. Скучно. Релиз версии 4.1 всё перевернул — теперь вы можете заставить модель не просто генерировать текст, а реально что-то делать: искать файлы, отправлять запросы, парсить сайты. И всё это через интерфейс, который напоминает детский конструктор.

Tool-calling — это когда модель не отвечает "я не могу", а вместо этого говорит: "подожди, я сейчас вызову функцию поиска в Google". В теории звучит как магия. На практике в других средах это часто ломается. Но в text-generation-webui 4.1 реализовали так, что даже если вы никогда не слышали про API OpenAI, у вас получится.

Как это работает? Волшебство через чекбоксы

Весь механизм построен вокруг двух вещей: простых Python-файлов и галочек в интерфейсе. Вы создаете файл my_tools.py, пишете обычную функцию с описанием, кидаете его в папку extensions/tools — и через 30 секунд эта функция появляется в веб-интерфейсе как активный инструмент. Модель видит список доступных функций и их описания, а когда решает, что нужно что-то сделать — отправляет запрос на выполнение.

💡
Под капотом используется тот же формат описания функций, что и в OpenAI API. Но вам не нужно разбираться в JSON-схемах — достаточно написать docstring к функции на обычном английском. Система сама всё превратит в нужный формат.

Первая функция за 5 минут: заставляем модель искать файлы

Забудьте про сложные настройки. Вот как это делается на самом деле.

1 Создаем файл в правильном месте

Зайдите в папку с установленным text-generation-webui. Найдите директорию extensions/tools. Если её нет — создайте. Внутри создайте файл с любым именем, например file_tools.py. Именно так — один файл может содержать десятки функций, и все они появятся в интерфейсе.

2 Пишем функцию с умным описанием

Вот пример функции, которая ищет файлы по расширению. Обратите внимание на docstring — модель будет читать именно его, чтобы понять, когда вызывать эту функцию.

import os
def find_files_by_extension(directory: str, extension: str) -> str:
    """
    Search for files with specific extension in given directory.
    
    Args:
        directory: Path to directory to search in
        extension: File extension to look for (without dot, e.g., 'txt', 'py')
    
    Returns:
        String with list of found files or error message
    """
    try:
        if not os.path.exists(directory):
            return f"Directory {directory} does not exist"
        
        files = []
        for root, dirs, filenames in os.walk(directory):
            for filename in filenames:
                if filename.endswith(f'.{extension}'):
                    files.append(os.path.join(root, filename))
        
        if not files:
            return f"No .{extension} files found in {directory}"
        
        return "\n".join(files[:10])  # Limit output
    except Exception as e:
        return f"Error: {str(e)}"

Сохраните файл. Перезапускать веб-интерфейс не нужно — инструменты загружаются автоматически при каждом запросе.

3 Включаем инструмент в интерфейсе

Откройте вкладку "Tools" в text-generation-webui. Вы увидите список всех функций из всех .py файлов в папке extensions/tools. Просто поставьте галочку рядом с find_files_by_extension. Вот и всё — теперь модель может использовать эту функцию.

Важно: модель должна поддерживать tool-calling. На март 2026 года лучше всего работают Qwen3.5 32B, DeepSeek Coder 33B и свежие версии Llama 4. Мелкие модели в 7B параметров часто путаются. Если ваша модель игнорирует инструменты — попробуйте другую или посмотрите гайд по исправлению tool-calling.

Реальный пример: агент, который ищет логи и отправляет отчет

Давайте создадим что-то полезное. Добавим в тот же file_tools.py ещё две функции: для чтения файла и отправки email (условно).

def read_file_contents(filepath: str) -> str:
    """
    Read and return contents of a text file.
    
    Args:
        filepath: Full path to the file
    
    Returns:
        File contents as string or error message
    """
    try:
        with open(filepath, 'r', encoding='utf-8') as f:
            return f.read(5000)  # Limit to 5000 chars
    except Exception as e:
        return f"Error reading file: {str(e)}"

def send_email_report(subject: str, body: str, recipient: str = "admin@example.com") -> str:
    """
    Send an email with report. This is a simulation for demonstration.
    In real implementation, you would connect to SMTP server.
    
    Args:
        subject: Email subject
        body: Email body content
        recipient: Email address to send to
    
    Returns:
        Status message about email sending
    """
    # In real tool, you would implement actual email sending
    # For demo, just save to file
    import datetime
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"email_{timestamp}.txt"
    with open(filename, 'w') as f:
        f.write(f"To: {recipient}\nSubject: {subject}\n\n{body}")
    
    return f"Email saved to {filename} (simulation mode)"

Теперь в чате можно написать модели: "Найди все лог-файлы в папке /var/log, прочитай последний и пришли мне отчет". Если модель адекватная, она последовательно вызовет find_files_by_extension, потом read_file_contents, и наконец send_email_report. Вы будете наблюдать, как в интерфейсе появляются вызовы функций и их результаты.

text-generation-webui vs. Open WebUI и Ollama: где tool-calling не сломается?

У каждого подхода свои костыли. В Open WebUI tool-calling встроен более глубоко, но требует больше настроек. В Ollama иногда проще, но модели галлюцинируют вызовы.

Платформа Сложность настройки Гибкость Стабильность
text-generation-webui 4.1 Низкая (чекбоксы + .py файлы) Высокая (любой Python-код) Средняя (зависит от модели)
Open WebUI Средняя (нужно править конфиги) Очень высокая (Docker, плагины) Высокая
Ollama + LangChain Высокая (программирование) Максимальная Низкая (часто ломается)

Главное преимущество text-generation-webui — мгновенная обратная связь. Не понравилась функция? Открыли файл, поправили, сохранили — через 2 секунды изменения в интерфейсе. Не нужно перезагружать сервер, не нужно редактировать JSON. Это идеально для быстрого прототипирования.

Кому подойдет эта фича? (А кому лучше не лезть)

Если вы уже месяц ковыряете fine-tuning моделей под вызов функций — этот гайд покажется вам детским садом. Но именно в этом и сила.

  • Скриптовикам на Python: Вы уже пишете скрипты для автоматизации. Теперь можете дать их модели, чтобы она решала, когда запускать.
  • Сисопам: Мониторинг логов, проверка диска, перезапуск служб — всё через чат с локальной моделью.
  • Исследователям: Быстро тестируете, как разные модели справляются с вызовом инструментов.

Не подойдет тем, кто ждет production-решения из коробки. Это инструмент для экспериментов. Функции выполняются в том же окружении, что и сам text-generation-webui, без песочницы. Если модель вызовет os.system('rm -rf /') — будут проблемы. (Хотя вы можете сами добавить проверки в код функций).

Неочевидный совет: используйте эту систему для создания прототипов агентов, а затем переносите логику в отдельный фреймворк вроде LangChain или собственный код на Python. Text-generation-webui — идеальная песочница, но не готовый продукт.

К марту 2026 года многие уже забыли, что такое писать промпты вручную. Автоматизация через prompt-инженерию становится стандартом. Tool-calling в text-generation-webui 4.1 — это следующий шаг: когда модель сама решает, какие инструменты использовать, без ваших подсказок. Попробуйте. Худшее, что может случиться — вы найдете все свои старые лог-файлы.

Подписаться на канал