local-llm-tests
Описание
Репозиторий проекта для тестирования локальных LLM
Языки
- Python73,9%
- HTML26,1%
Local Large Language Models Benchmark - LLaMBa
Гибкая система для быстрого тестирования локальных LLM-моделей с возможностью экспериментирования с различными параметрами и оценки их влияния на качество ответов.
Ключевые возможности
-
Простое конфигурирование экспериментов — все параметры эксперимента (модель, промт, параметры генерации) задаются в YAML-файле.
-
Гибкая система пайплайнов — можно легко создавать различные способы формирования промтов (базовые запросы, RAG, структурированный вывод и т.д.) без изменения ядра системы.
-
Автоматическая оценка качества — система автоматически оценивает качество ответов модели, сравнивая их с эталонными ответами, что позволяет количественно измерять влияние изменений параметров.
-
Воспроизводимость — каждый эксперимент сохраняет свою конфигурацию и результаты, что позволяет легко сравнивать различные подходы и отслеживать прогресс.
-
Минимальные зависимости — проект использует только необходимые библиотеки и работает с локальными моделями через Ollama.
Требования
Установка
- Клонируйте репозиторий:
- Установите зависимости с помощью
:uv
- Убедитесь, что Ollama запущен:
Если Ollama не установлен, следуйте инструкциям на ollama.ai.
Важно: Программа автоматически проверяет доступность Ollama при запуске. Если Ollama не запущен, программа выведет сообщение об ошибке и завершит работу. В этом случае запустите Ollama командой и повторите запуск программы.
Быстрый старт
-
Создайте конфигурационный файл в директории
(см. пример ниже).configs/ -
Подготовьте файл с вопросами в формате Excel. Файл должен содержать следующие столбцы:
— номер вопроса (число)№— текст вопроса, который будет отправлен модели (обязательное поле)Вопрос для модели— контекст из исходного источника (опциональное поле, может быть пустым)Текст из источника— эталонный ответ для сравнения (опциональное поле, может быть пустым)Правильный ответ
-
Запустите эксперимент:
Примечание: Программа автоматически проверяет доступность Ollama на при запуске. Если Ollama не запущен, вы увидите сообщение:
❌ Ollama не запущен. Пожалуйста, запустите ollama перед запуском эксперимента.
Команда для запуска: ollama serve
В этом случае запустите Ollama в отдельном терминале и повторите запуск программы.
-
Результаты будут сохранены в директории, указанной в
конфигурации:output_dir— таблица с вопросами, контекстом (заполняется только если используется в pipeline), системным промтом (первые 100 символов), промтами, ответами модели, оценками качества и временем ответа. В конце таблицы добавляется строка с медианным баллом качества ответов (после пустой строки)answers.xlsx— копия конфигурации эксперимента для воспроизводимостиconfig.yaml
-
После каждого запуска автоматически обновляется файл сводной статистики:
— HTML файл с красивой таблицей со статистикой по всем экспериментам из папкиdata/experiments/statistics.html. Файл содержит две вкладки:data/experiments/- Детальная статистика — таблица со всеми экспериментами, содержащая основные параметры каждого эксперимента (модель, пайплайн, системный промпт, temperature, top_p, top_k), медианный балл качества, дату и время эксперимента, среднее время ответа. Таблица сортируется по медианному баллу (по убыванию).
- Сводная статистика — таблица, в которой эксперименты с одинаковыми параметрами конфигурации (модель, пайплайн, системный промпт, temperature, top_p, top_k) объединены в группы. Для каждой группы отображаются:
- Разброс значений медианного балла качества (от минимального до максимального)
- Медианное значение медианного балла качества по группе
- Среднее время ответов на один вопрос по группе
- Количество экспериментов в группе
Сводная статистика позволяет упростить аналитику экспериментов, в которых входные параметры одинаковые, а выходные варьируются в некотором диапазоне. Файл автоматически обновляется после каждого запуска
и имеет встроенные CSS стили для читаемости. После успешной генерации файл автоматически открывается в браузере по умолчаниюmain.py
Конфигурация
Система поддерживает два формата конфигурационных файлов:
Формат 1: Один эксперимент
Каждый эксперимент описывается YAML-файлом конфигурации. Пример:
Формат 2: Серия экспериментов
Позволяет описать несколько экспериментов с общими параметрами. Все эксперименты сохраняются в один Excel файл, но каждый эксперимент — на отдельном листе. Пример:
При использовании формата серии экспериментов:
- Поля из секции
применяются ко всем экспериментамcommon - Поля из секции
перезаписывают соответствующие поля изexperimentscommon - Каждый эксперимент запускается отдельно и выводится в консоль с разделителями
- Все результаты сохраняются в один файл
с несколькими листами (имя листа =answers.xlsxиз эксперимента, еслиname, или "<имя> - N" при повторениях)num_repetitions == 1
Параметр num_repetitions
Параметр позволяет запускать один и тот же эксперимент несколько раз подряд с сохранением результатов каждого запуска на отдельном листе Excel файла. Это полезно для оценки вариативности результатов модели при одинаковых параметрах.
Для формата одного эксперимента:
- Если
не указан или равен 1, эксперимент запускается один раз, как обычноnum_repetitions - Если
, эксперимент запускается указанное количество разnum_repetitions > 1 - Результаты каждого повторения сохраняются на отдельном листе с именами "Повтор 1", "Повтор 2", "Повтор 3" и т.д.
- Медианный балл вычисляется для каждого повторения отдельно
- В консоль выводится информация о каждом повторении
- После завершения всех повторений выводится агрегированная статистика: медианный балл по всем повторениям и разброс значений (от минимального до максимального)
Для формата серии экспериментов:
- Параметр
может быть указан в секцииnum_repetitions(применяется ко всем экспериментам) или в конкретном эксперименте (перезаписывает значение изcommon)common - Если
или не указан, эксперимент запускается один раз, как обычноnum_repetitions == 1 - Если
, эксперимент запускается указанное количество разnum_repetitions > 1 - Результаты каждого повторения сохраняются на отдельном листе с именами "<имя_эксперимента> - 1", "<имя_эксперимента> - 2" и т.д.
- Медианный балл вычисляется для каждого повторения отдельно
- В консоль выводится информация о каждом повторении
- После завершения всех повторений каждого эксперимента выводится агрегированная статистика: медианный балл по всем повторениям и разброс значений (от минимального до максимального)
Пример для формата одного эксперимента:
Пример для формата серии экспериментов:
Примечание: Каждое повторение отображается как отдельный эксперимент в статистике (файл ), что позволяет видеть вариативность результатов модели при одинаковых параметрах.
Поля конфигурации
Для формата одного эксперимента:
— имя экспериментаname— идентификатор модели Ollama (например,model,qwen3:0.6b)llama3.2:3b— название пайплайна (должен быть зарегистрирован вpipeline). Доступные пайплайны:src/pipelines/__init__.py— простой запрос к модели, использует только вопрос (контекст игнорируется)baseline— RAG-pipeline, передаёт модели контекст из источника вместе с вопросомrag— "читерский" pipeline для проверки способности модели выдать 100%-й результат. Передаёт модели правильный ответ и просит его повторить. Используется для верификации того, что модель способна при идеальных условиях выдать корректный ответ. В шаблоне промта доступен плейсхолдерcheatдля правильного ответа{ground_truth}
(опционально) — системный промпт, который передаётся в Ollama API как отдельный параметрsystem_prompt(не конкатенируется с пользовательским промтом). Позволяет задать роль модели (например, "Ты - опытный председатель ТСЖ, который очень хорошо знает законодательство Российской Федерации"). В Excel сохраняются первые 100 символов системного промта в колонке "Системный промт". По умолчанию пустая строкаsystem(опционально) — путь к файлу с системным промтом (относительно директории конфига). Позволяет выносить большие системные промты в отдельные файлы. Нельзя указывать одновременно сsystem_prompt_file(если оба параметра заданы непустыми, программа выдаст ошибку)system_prompt— шаблон промта с плейсхолдерамиprompt_templateи{question}{context}— дополнительные параметры модели:parameters(float, опционально) — температура сэмплирования. Чем выше значение, тем более разнообразные ответы генерирует модельtemperature(float, опционально) — nucleus sampling параметр. Ограничивает выборку токенов с кумулятивной вероятностьюtop_p(int, опционально) — top-k sampling параметр. Ограничивает количество токенов с наибольшей вероятностью, из которых модель выбирает следующий токенtop_k(bool, опционально) — управляет thinking-режимом для моделей типа Qwen3. Приenable_thinkingв промт добавляетсяfalse, что отключает генерацию блоков/no_think. По умолчанию<think>...</think>(thinking включен)true
— путь к Excel-файлу с вопросамиinput_path— директория для сохранения результатовoutput_dir(опционально) — количество повторений эксперимента. Если указано значение > 1, эксперимент запускается указанное количество раз, и результаты каждого повторения сохраняются на отдельном листе Excel файла с именами "Повтор 1", "Повтор 2" и т.д. По умолчанию 1 (один эксперимент, один лист)num_repetitions
Для формата серии экспериментов:
— общие параметры для всех экспериментов (те же поля, что и для одного эксперимента, кромеcommon). Параметрnameможет быть указан вnum_repetitionsи будет применяться ко всем экспериментам, если не переопределён в конкретном экспериментеcommon— список экспериментов, каждый из которых содержит:experiments— имя эксперимента (используется как имя листа в Excel, еслиname, или как префикс для имён листов при повторениях)num_repetitions == 1(опционально) — перезаписываетsystem_promptизsystem_promptcommon(опционально) — путь к файлу с системным промтом (относительно директории конфига). Нельзя указывать одновременно сsystem_prompt_filesystem_prompt(опционально) — перезаписываетparametersизparameterscommon(опционально) — перезаписываетnum_repetitionsизnum_repetitions. Если указано значение > 1, эксперимент запускается указанное количество раз, и результаты каждого повторения сохраняются на отдельном листе с именами "<имя> - 1", "<имя> - 2" и т.д.common- Любые другие поля из формата одного эксперимента (перезаписывают соответствующие поля из
)common
Архитектура
Система состоит из четырёх основных компонентов: конфигурация экспериментов, пайплайны формирования промтов, компонент запуска экспериментов и вспомогательные модули для работы с LLM, Excel и оценкой качества.
Сценарий работы
- Создайте или модифицируйте .yaml-файл конфигурации в
../configs/ - Запустите Ollama командой
(если ещё не запущено).ollama serve - Запустите эксперимент:
.uv run main.py --config configs/<experiment>.yaml - Изучите результаты в папке
:./data/experiments/<experiment>/— таблица с результатами экспериментаanswers.xlsx— копия конфигурации для воспроизводимостиconfig.yaml
- Просмотрите сводную статистику по всем экспериментам в файле
(автоматически открывается в браузере). На странице доступны две вкладки: "Детальная статистика" (все эксперименты) и "Сводная статистика" (группировка экспериментов с одинаковыми параметрами)../data/experiments/statistics.html
Целевая аудитория
- Исследователи, изучающие возможности локальных LLM
- Разработчики, которым нужно найти оптимальные настройки модели для конкретной задачи
- Энтузиасты, экспериментирующие с различными моделями и параметрами
Лицензия
MIT