betav10.5.3Лицензия: MITДокументацияРепозиторий

Delibera

Спор моделей вместо одного ответа: вердикт и полный транскрипт

Одна модель — одна точка отказа: красиво звучащий неверный ответ не отличить от обоснованного. Delibera разбирает вопрос между моделями, выносит вердикт и оставляет полный транскрипт дебата.

Что это

Delibera — фреймворк коллективного принятия решений. Несколько моделей обсуждают вопрос раундами, критикуют ответы друг друга, а председатель (Chairman) взвешивает аргументы и фиксирует вердикт. На выходе — вердикт и полный транскрипт обсуждения.

Работает и как библиотека для .NET, и как сервер с REST, SSE и MCP.

Граница продукта: Delibera не источник истины. Он не проверяет факты и не отвечает за правильность вердикта — он структурирует обсуждение и оставляет след. Замещать агентскую оркестрацию он тоже не берёт на себя: выбор моделей, инструментов и памяти остаётся на стороне интегратора.

Кому это нужно

Тем, кому нужно не «мнение модели», а решение, за которым можно посмотреть.

Одна модель на сложном вопросе — это одна точка отказа. Она склонна давать уверенный и правдоподобный ответ, и отличить хорошо обоснованный вывод от красиво звучащего неверного почти невозможно: обоснования просто нет. Если решение уходит в релиз, в договор, в риск-комплаенс или в чек-лист приёмки, нужен след: кто что сказал, почему именно так и кто за это отвечает.

Delibera даёт четыре вещи:

  • Несколько независимых трактовок. Модели видят задачу по-разному, и расхождение видно сразу — это и есть предмет обсуждения.
  • Проверяемый след. Транскрипт и вердикт — артефакт: их можно прочитать, оспорить и приложить к решению.
  • Повторяемый процесс. Дебат — не ручной спор, а шаблон с ролями, раундами и председателем. Один и тот же вопрос разбирается одинаково каждый раз.
  • Свой контур. Self-hosted, MIT, библиотека и сервер на .NET — решение остаётся внутри вашей сети.

Как это работает

graph TD
  Q[Вопрос] --> C[Председатель]
  C --> P[Участники]
  P --> X[Критика]
  X --> C
  C --> V[Вердикт]
  K[Knowledge] --> P
  O[Operator] -.-> P
  classDef accent fill:#eef7f0,stroke:#008A2A,stroke-width:1.5px,color:#141616
  classDef muted fill:#f7f8f8,stroke:#c8cdcd,stroke-width:1px,color:#505757
  class C,V accent
  class K,O muted
Схема 01Как проходит дебат

Путь вопроса: вопрос → председатель открывает обсуждение → раунд с параллельными ответами участников → критика ответов друг друга → следующий раунд → вердикт и транскрипт. Knowledge Keeper подключается, когда RAG включён и запрос называет корпус. Operator — роль уровня библиотеки, через серверный API он не подключается; на схеме его ветка пунктирная.

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

Knowledge Keeper вытягивает контекст из корпуса по ходу дебата и отвечает с цитатами. На уровне библиотеки Operator — микро-агент, который во время обсуждения дёргает MCP-инструменты.

Что входит

Значение
Вход Вопрос или один из пяти встроенных шаблонов дебата; корпус документов для RAG
Выход Раунды с ответами участников, вердикт, статистика токенов, Markdown-экспорт транскрипта
Транспорт REST и MCP в Delibera.Server, SSE-поток раундов, gRPC-сервисы DebateService / ScenarioService / CorpusService
Развёртывание .NET 10, Docker Compose, Qdrant или PostgreSQL/pgvector, Redis по желанию, Ollama или любой OpenAI-совместимый провайдер

Шаблоны дебата — это готовые сценарии решения, а не абстракция:

Шаблон Раундов Где применяется
code-review 4 Ревью кода: несколько моделей ищут дефекты в диффе
risk-committee 5 Риск-комплаенс: комитет оценивает риск и выносит решение
requirements-review 4 Требования: разбор противоречий и полноты постановки
legal-contract-review 4 Юридическая проверка договора
architecture-decision 4 Архитектурное решение с разбором вариантов

Шаблон — это набор ролей и стратегия раундов, а не текст промпта: свой сценарий добавляется реализацией IServerTemplate и регистрацией в DI.

Сценарии применения

  • Ревью изменений. Дифф уходит в дебат, на выходе — замечания нескольких независимых ревьюеров и сводный вердикт.
  • Риск-комплаенс. Решение о риске принимается по шаблону комитета, с протоколом в транскрипте.
  • Разбор требований. Противоречия в постановке находят не один человек, а несколько моделей с разными акцентами.
  • Архитектурные развилки. Варианты сравниваются в одном формате, и решение остаётся в вашем репозитории.

Что измерено

Замеры сделаны 6 октября 2026 года против Ollama Cloud с реальными ключами и опубликованы в документации проекта.

Сценарий Время Поверхность Что это
code-review, 3 участника и председатель, 4 раунда 69,8 с библиотека качественный прогон
architecture, тот же состав 119,0 с библиотека качественный прогон
contested, тот же состав 238,5 с библиотека качественный прогон
5 тем × {2, 4} раунда × {сжатие вкл, выкл} 32,6 с среднее библиотека 20 прогонов на $0,12
retry-policy, cancellation, latency-slo с RAG 208,7 / 172,9 / 154,3 с библиотека дебаты с Knowledge Keeper и Operator
Завершённые дебаты через HTTP, n=8 125 308 – 601 903 мс сервер записи сервера
Управляющий контур сервера 36–321 мс сервер health, шаблоны, корпус, MCP

Замеры делятся на две поверхности, и для ИТ Pro это важнее самих чисел. Библиотека — дебат внутри процесса: без HTTP, без аутентификации, без шлюза, те же числа, что интегратор увидит у себя в тестах. Сервер — Delibera.Server в контейнере: добавляются приём задания, SSE и работа по HTTP, поэтому верхняя граница уезжает за 600 с, тогда как библиотека укладывается в 238 с. Строка про Knowledge Keeper и Operator — библиотечная: через серверный API Operator не подключается, в харнесе его роль была подключена напрямую.

Из этих чисел следует главное: сам фреймворк не узкое место. Времени на объяснение не уходит ни секунды — 0,0 с во всех прогонах, — а пропускная способность держится на 840–1 144 знака в секунду. Время определяется тем, сколько текста пишут модели. Критика и доработка занимают 62–77% каждого дебата, потому что оба раунда несут в промпте накопленный транскрипт.

Два числа, которые нельзя смешивать с остальными.

Сжатие контекста измерено на 11,7–12,1%. До v10.5.0 документация обещала 30–70% экономии; замер HybridCompressor даёт около 40% от прежней нижней границы (30%) — примерно в шесть раз меньше верхних 70%. Сейчас в README и в документации стоят измеренные 11,7–12,1% и прямая оговорка, что прежняя цифра никогда не измерялась, а v10.5.0 её исправил. Здесь стоит то же измеренное число.

6 мс против 2699 мс — это задержка прерывания, а не бенчмарк. Прокси Web UI обрывает upstream SSE при отключении клиента за 6 мс вместо 2699 мс. Метрика отвечает на вопрос «как быстро обрывается поток», и к производительности дебата отношения не имеет.

Кейсы

Delibera — open source: код, документация и замеры открыты, продукт можно развернуть у себя и проверить на своих данных. Кейс в «Портфолио» — он же.

Подтверждённых боевых внедрений с измеренным эффектом у нас нет, и ссылаться на несуществующие мы не будем. Что можно проверить сегодня: 620 тестов .NET (493 Core, 117 Server, 10 gRPC) и 34 теста Web UI, опубликованные замеры, пять готовых шаблонов и API, который вызывается из вашего кода.

Честно о границах

  • Аутентификации и троттлинга на HTTP-сервере нет. Любой, кто знает адрес, запускает платные дебаты. Лимиты существуют на уровне библиотеки — WithRateLimit(n, window), WithCostLimit(decimal, CostLimitBehavior), WithTokenBudget(long) — и аутентификацию они не заменяют. При отказе лимита возвращается деградированный результат с потраченной суммой, а не исключение: потолок, который бросает, оставляет без следа, сколько уже потрачено.
  • Опубликованные порты слушают только 127.0.0.1. Это привязка, а не украшение: пока перед сервером не стоит аутентифицирующий обратный прокси, выставлять порт наружу нельзя. Раздел «Run with Docker Compose» в docs/Server.md отсылает к файлу docker-compose.server.yml, которого в репозитории нет, — команда не отработает. А сам пример в документе публикует ports: ["8080:8080"] и порт провайдера 11434: соберёшь compose по этому примеру, в сеть уйдут и сервер без аутентификации, и модель.
  • Распределённое исполнение ходов — заглушка. DebateWorkerService остаётся no-op, дебат исполняется в процессе, который его принял. Redis даёт общее состояние и события раундов, но не горизонтальное масштабирование.
  • Operator через серверный API недоступен — см. раздел «Как это работает».
  • Качество вердикта не измеряется ничем. Продукт не заявляет процентов «качество выше». В одном из замеров вердикт выдумал единогласие, которого в транскрипте не было, — такие случаи проверяются чтением транскрипта, а не счётчиком.
  • CORS выключен по умолчанию и включается точным списком origin’ов; wildcard-переключателя нет.
  • Записи завершённых дебатов вытесняются по времени. Медиана по выборке меняется с каждым новым дебатом, поэтому стабильны только диапазон и разбивка по шаблону.
  • Дебат тратит реальные кредиты LLM. Бюджет расхода задаёт интегратор.

Как начать

dotnet add package Delibera.Core      # библиотека — с неё начинают
dotnet add package Delibera.Server    # хост ASP.NET Core: Minimal API, SSE, MCP
dotnet add package Delibera.Redis     # оркестратор Redis и общий кэш результата

Или контейнеры с закреплённой версией:

curl -O https://raw.githubusercontent.com/techbuzzz/Delibera/main/deploy/docker-compose.hub.yml
export DELIBERA_VERSION=10.5.3
docker compose -f docker-compose.hub.yml up -d

Три вещи, на которых спотыкаются интеграторы.

Шаблоны выбирают участников по двум отдельным ключам — Delibera:Models:Fast и Delibera:Models:Strong, — а не по Delibera:Providers:DefaultModel. Задать только провайдера мало: сервер стартует здоровым, а на первом дебате отвечает HTTP 500.

maxRounds на верхнем уровне запроса молча игнорируется — переопределение живёт во вложенном options.maxRounds. Лишний ключ не ошибка, он просто не применяется, и шаблон откатывается к своему DefaultMaxRounds = 4.

SSE отдаёт два разных формата. Подписка до конца дебата даёт по кадру на каждый завершённый раунд плюс heartbeat’ы; подписка после — один кадр со всеми раундами сразу. Это не взаимозаменяемые формы: чтобы видеть прогресс, подписываться надо до финиша.

Статус и лицензия

Delibera выпускается релизно: версия 10.5.3 от 11 октября 2026 года опубликована в NuGet (Delibera.Core, Delibera.Server, Delibera.Redis) и в Docker для amd64 и arm64. Покрытие по замеру релиза 10.5.2 — 620 тестов .NET и 34 теста Web UI, все зелёные.

Статус beta, а не GA, по трём причинам: серверная поверхность выставляется без аутентификации, распределённое исполнение ходов остаётся заглушкой, а качество вердикта ничем не измерено. Всё это перечислено в ограничениях, а не спрятано.

Лицензия MIT: свободное использование, изменение и распространение, включая коммерческое.

Связанные материалы

CTA

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

FAQ

Частые вопросы

Нужна ли своя инфраструктура?+
Обязательной — нет. Это библиотека для .NET 10, сервер — опция. Для полного набора нужен Docker, векторное хранилище (Qdrant или PostgreSQL/pgvector) и любой OpenAI-совместимый провайдер. Redis добавляет общий кэш результата и события раундов, но не горизонтальное масштабирование.
Можно ли запустить у себя?+
Да, продукт self-hosted под MIT: код, документация и замеры открыты. Порт сервера слушает только 127.0.0.1, а на HTTP-сервере нет аутентификации — выставлять его наружу можно только за своим аутентифицирующим прокси.
Сколько стоит один дебат?+
Дебат тратит реальные кредиты LLM, и бюджет задаёт интегратор. На уровне библиотеки есть лимиты: WithRateLimit(n, window), WithCostLimit(decimal, CostLimitBehavior), WithTokenBudget(long). При отказе лимита возвращается деградированный результат с потраченной суммой, а не исключение.
Какие модели подойдут?+
Любой OpenAI-совместимый провайдер — Ollama, YandexGPT, OpenAI. Состав участников, стратегию раундов и их число задаёт шаблон; пять шаблонов встроены.
Что будет, если модель упадёт?+
Участник исключается из раунда, а не подставляется строкой [ERROR: ...], которую председатель прочитал бы как мнение. О деградации видно по FailedMembers и IsDegraded.
Кто отвечает за качество вердикта?+
Никто: продукт не измеряет качество вердикта и не заявляет процентов «качество выше». В одном из замеров вердикт выдумал единогласие, которого в транскрипте не было, — такие случаи проверяются чтением транскрипта, а не счётчиком.

Заявка

Обсудить задачу

Оставьте имя и email — отвечу в течение рабочего дня. Если задача срочная, проще написать напрямую наproject@anetlab.ru.