Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Библиотека FAIRouter для маршрутизации запросов к языковым моделям вышла на NuGet

Библиотека FAIRouter для маршрутизации запросов к языковым моделям вышла на NuGet

Разработчики опубликовали версию библиотеки FAIRouter для маршрутизации запросов в репозитории NuGet, что избавляет от необходимости самостоятельной сборки из исходного кода. Инструмент предназначен для автоматического выбора оптимальных языковых моделей под конкретные задачи, проверки полученных ответов и обучения на основе пользовательских оценок.

В материале рассмотрены установка пакета, выполнение первых запросов на C#, настройка профилей качества и цены, а также подключение сторонних поставщиков и пользовательских инструментов.

Библиотека FAIRouter для маршрутизации запросов к языковым моделям вышла на NuGet — изображение 3
Библиотека FAIRouter для маршрутизации запросов к языковым моделям вышла на NuGet — изображение 4

Установка и подготовка проекта

Для работы с библиотекой потребуется среда разработки .NET 10. Первым шагом создается новый консольный проект с последующей установкой пакета через командную строку.

Реклама

В терминале выполняются следующие команды:

dotnet new console -f net10.0 -n RouterDemo
cd RouterDemo
dotnet add package FAI.Router

Дополнительно для взаимодействия с моделями через OpenRouter потребуется настроить соответствующую переменную среды с секретным ключом доступа.

Выполнение первого запроса

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

Пример инициализации маршрутизатора и отправки текстового запроса:

using FAI.Router;

FaiRouter router = await FaiRouter.FromOpenRouterAsync(
    apiKey: Environment.GetEnvironmentVariable("OPENROUTER_API_KEY")!,
    modelIds: [
        "google/gemini-2.5-flash",
        "openai/gpt-4.1-mini",
        "anthropic/claude-haiku-4.5"
    ],
    databasePath: "fai-router.db");

RouterAnswer answer = await router.AskAsync(
    "Напиши обзор методов кластеризации на 1500 знаков");

Console.WriteLine($"{answer.Winner.Name}: {answer.Score}");
Console.WriteLine(answer.Text);
Console.WriteLine(answer.Critic);

В возвращаемом объекте содержатся ключевые параметры: выбранная модель (Winner), сгенерированный текст (Text), оценка автоматического судьи в диапазоне от 0 до 1 (Score), а также детализированный разбор несоответствий исходному заданию (Critic). Если явный список моделей не передавать, система задействует пул из 54 популярных вариантов, доступных в комплекте поставки.

Обучение на основе отзывов

Механизм адаптации маршрутизатора задействует пользовательские оценки. Оценки задаются в виде числовых значений от 0 до 1, где единицей отмечаются наиболее качественные ответы, а более низкими баллами — слабые результаты.

Передача отзыва и запуск процесса обучения реализуются вызовом соответствующих методов:

router.Feedback(answer.RoundId!.Value, score: 1.0);
router.Train(epochs: 10);
router.Save();

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

Реклама

Баланс между ценой и качеством

Библиотека включает три предустановленных профиля маршрутизации: Quality, Balance и Price. По умолчанию применяется сбалансированный вариант, однако профиль можно переопределять для каждого отдельного вызова.

Кроме того, доступна установка минимального порога достаточности, при котором система отбирает исполнителей, способных справиться с задачей с заданной вероятностью успешного выполнения:

RouterAnswer enough = await router.AskAsync(prompt, bar: 0.7);
Console.WriteLine(enough.Reached);

Специальное поле Reached информирует о том, смог ли какой-либо из кандидатов преодолеть установленную планку. Данный механизм активируется после накопления как минимум трех пользовательских оценок.

Обработка диалогов

Для сценариев, требующих сохранения контекста беседы, метод AskAsync принимает массив сообщений целиком. Текущая задача определяется по последней реплике пользователя, тогда как языковая модель анализирует всю предысторию диалога.

Интеграция других поставщиков

Пакет поддерживает подключение через различные интерфейсы. Помимо OpenRouter, предусмотрена интеграция с FractalRouter, а также любыми серверами, поддерживающими стандартный протокол OpenAI chat completions.

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

FaiRouter local = await FaiRouter.FromOpenAiCompatibleAsync(
    baseUrl: "http://localhost:8000/v1",
    apiKey: "local",
    modelIds: ["my-model"],
    prices: new Dictionary<string, Price> {
        ["my-model"] = new Price(0, 0)
    },
    judgeModel: "my-model");

Роль судьи по умолчанию исполняет модель openai/gpt-4o-mini, однако ее можно заменить на любую другую, доступную на используемом сервере.

Маршрутизация инструментов и агентов

Архитектура библиотеки позволяет распределять запросы не только между текстовыми моделями, но также между произвольными инструментами и агентами. Для этого в конструктор передаются пользовательские кандидаты и функция выполнения.

Библиотека FAIRouter для маршрутизации запросов к языковым моделям вышла на NuGet
Рисунок 1. Как устроен FAIRouter: маршрутизатор выбирает исполнителя, судья принимает ответ, и оба учатся

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

01.