FAIRouter — библиотека для маршрутизации запросов к языковым моделям. Она выбирает модель под задачу, проверяет ответ и учится на отзывах. Версия 0.1.0 вышла на NuGet, поэтому теперь её можно подключить одной командой.
Что вышло
FAIRouter — это библиотека на C# для маршрутизации запросов к языковым моделям. Она выбирает модель под задачу, проверяет ответ и учится на отзывах. Основные возможности:
- Автоматический выбор модели из списка кандидатов.
- Проверка ответа судьей и обучение на отзывах.
- Поддержка диалогов и инструментов.
- Три профиля: Quality, Balance и Price.
Как подключить и что с этим делать
Для работы с FAIRouter понадобится .NET 10. Создадим консольный проект и подключим пакет:
dotnet new console -f net10.0 -n RouterDemo
cd RouterDemo
dotnet add package FAI.RouterТакже нужен ключ API для OpenRouter. В примерах будем использовать OpenRouter, ключ положим в переменную среды:
$env:OPENROUTER_API_KEY = "ваш ключ"Первый запрос. Заменим содержимое Program.cs следующим кодом:
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);Здесь modelIds задает список кандидатов, а в файле fai-router.db хранятся веса и журнал ходов. Если файла нет, он будет создан. В ответе нас интересуют четыре поля:
Winnerпоказывает, какая модель была выбрана.Textсодержит ответ модели.Scoreсодержит оценку судьи от 0 до 1.Criticпоказывает, чем ответ отличается от заказа, по пунктам.
Обучение на отзывах
Самое интересное начинается, когда маршрутизатор получает отзывы. Отзыв задается числом от 0 до 1, где 1 означает отличный ответ, а 0.2 слабый:
router.Feedback(answer.RoundId!.Value, score: 1.0);
router.Train(epochs: 10);
router.Save();После этого веса сохраняются в базе, и на похожих задачах маршрутизатор учитывает полученный опыт. Отзывы можно накапливать и обучать маршрутизатор реже, например один раз в день. Стоит учитывать, что в журнале хранятся тексты запросов.
Кому это нужно на практике
FAIRouter подойдет разработчикам, которые хотят:
- Автоматизировать выбор языковой модели под задачу.
- Снизить затраты на API языковых моделей.
- Улучшать качество ответов с помощью обучения на отзывах.
- Интегрировать языковые модели в свои приложения на C#.
Ограничения и чего в источнике нет
- В источнике нет информации о производительности и сравнении с другими инструментами.
- Нет данных о поддержке других языков программирования.
- Нет информации о стоимости использования FAIRouter.
- Нет данных о поддержке других поставщиков моделей, кроме OpenRouter.
- Нет информации о возможностях интеграции с другими сервисами и инструментами.
FAQ
Как выбрать модель под задачу?
FAIRouter автоматически выбирает модель из списка кандидатов. Вы можете задать список моделей в параметре modelIds или оставить его пустым, чтобы выбрать из 54 популярных моделей из комплекта пакета.
Как обучать маршрутизатор на отзывах?
Маршрутизатор обучается на отзывах, которые задаются числом от 0 до 1. После обучения веса сохраняются в базе, и на похожих задачах маршрутизатор учитывает полученный опыт.
Как подключить FAIRouter к своей модели?
Для подключения к своей модели используйте метод FromOpenAiCompatibleAsync. Укажите базовый URL, ключ API, список моделей и их цены. Судья работает через того же поставщика, по умолчанию на модели openai/gpt-4o-mini.
Как выбрать профиль для маршрутизации?
В библиотеке есть три готовых профиля: Quality, Balance и Price. По умолчанию используется Balance. Профиль можно менять на каждом запросе, передавая параметр weights.
Как работать с диалогами?
В AskAsync можно передать диалог целиком. Задание распознается по последней реплике пользователя, а модель видит всю историю.
