evals.

AI harness: кто управляет агентом и как проверить, что обвязка стала лучше

Представьте: агент подготовил ответ на обращение, вызвал сохранение черновика и получил тайм-аут. После перезапуска ему повторить запись, проверить результат или остановиться? От ответа зависят дубликаты, потерянная работа и то, чему можно верить в отчёте агента.Этим занимается agent harness, или обвязка агента: программный слой вокруг модели, который управляет контекстом, инструментами, состоянием и выполнением задачи.

продолжить чтение

Эвалы для LLM-фич. Часть 1: зачем они нужны

Всем привет!Меня зовут Тарас Малиновский, я бэкенд‑разработчик, работаю на Go. Последний год почти целиком ушёл на проекты в сфере искусственного интеллекта: делал ассистентов, агентов, разные инструменты и навыки.Недавно участвовал в хакатоне от Podlodka AI Club — мы собирали систему памяти для агентов. Саму память реализовали довольно быстро, а вот доказать, что она реально работает, оказалось куда сложнее. На это и ушло больше всего времени.

продолжить чтение

Почему JSON Schema не делает ответ LLM надёжным

После того как LLM начинает возвращать structured output, интеграция внезапно становится очень похожей на обычный backend.Больше не нужно вырезать JSON из Markdown, надеяться, что модель не добавит перед ним «Конечно, вот результат», чинить потерянные кавычки и повторять запрос из-за случайной запятой.Мы описываем схему, модель возвращает объект, десериализуем его в Go-структуру — и кажется, что самая неприятная часть интеграции закончилась.Например:type Invoice struct { Number string `json:"number"` Currency string `json:"currency"` Total int64 `json:"total"` }На выходе получаем:{ "number": "INV-2026-1842", "currency": "USD", "total": 148000 }JSON валиден.

продолжить чтение

Кредитный радар: LLM-воркфлоу, который каждое утро читает условия 12 банков и сам проверяет свои числа

TL;DR. Собрал воркфлоу на языковой модели, который раз в сутки обходит 34 страницы условий у 12 российских банков, сравнивает их со вчерашним снимком и публикует сводку изменений с ссылкой на источник в каждой строке, а при изменении цены пишет разбор с расчётом. Модель вызывается в четырёх точках и ни в одной не решает, что делать дальше. Цитаты, числа и статистика проверяются кодом. Каждый выпуск оценивается по 14 бинарным проверкам, метрики публичные. Стоит от 3 центов до 70 в день. Ниже устройство, проверки, evals и что он нашёл за первую неделю.

продолжить чтение

Работает, но не готово: definition of done для ИИ-систем

Три моих ИИ-проекта живут в проде от полугода до двух лет. Месяц назад я попробовал ответить, готов ли хоть один, и не смог.Не «работает ли». Работают все три. Агентом, который пишет SQL, аналитики пользуются каждый день, руками SQL почти не пишут. Ассистент поддержки выдаёт операторам черновики на боевом трафике. Вопрос был другой: могу ли я уйти в отпуск на месяц и про них не думать.Оказалось, что нет. Я не знал, сколько агент стоит в месяц. Точность ассистента последний раз мерили для версии, которой уже не существует. Каждый проект держится на том, что я помню, как он устроен.

продолжить чтение

Месяц тюнил поиск по памяти, а починила всё одна строка в промпте

Месяц тюнил поиск по памяти, а починила всё одна строка в промптеУ меня телеграм-бот, который ведёт память по чату: вытаскивает из переписки факты и потом отвечает с оглядкой на них. Работает в полутора тысячах чатов.В конце августа я закончил месяц работы над его поиском. Поднял Recall@5 на 17%, перебрал параметры BM25, нашёл оптимальный вес слияния. Потом померил, как это сказалось на самих ответах.Никак. Прирост оказался статистически не значимым, p = 0.79.А потом я посмотрел в промпт, поправил там одну формулировку и получил плюс 16 процентных пунктов качества за вечер.

продолжить чтение

Completion gate для локальных моделей: как отделить завершённый ответ от оценки качества

В одном из сравнений локальных моделей я получил результат, который приятно показывать в таблице: три маршрута выполнили по десять сценариев из десяти. Медиана быстрого маршрута составила 28,9 секунды. Более тяжёлому потребовалось 99,1 секунды, смешанному — 71,0.Если смотреть только на колонку «принято», маршруты равны. Если добавить время, победителем выглядит быстрый. Если учесть ремонты результата, картина снова меняется: маршрутам потребовалось соответственно три, два и одно исправление.

продолжить чтение

Сколько автономности должно быть у ИИ‑агента

ИИ‑агент не должен получать больше автономности только потому, что выглядит компетентным. Автономность должна расти тогда, когда система вокруг агента умеет надежно обнаруживать его ошибки. С какого *неправильного* вопроса все начинают

продолжить чтение

ОК или НеОК: как мы строили LLM‑судью и дважды меняли формулу вердикта

У нашего AI‑агента поддержки было десять метрик и ноль ответов на главный вопрос: какую долю обращений он решает?Судья, который читал только текст диалога, ставил 18/20, а проверка по реальным вызовам инструментов давала 8/20. Текстовые проверки считали правдоподобный ответ верным и не могли отличить его от подтвержденного. Самодельный «процент фантомных эскалаций» оказался измерением того, насколько слова бота согласованы с его же внутренними флагами. Каждая метрика что‑то измеряла, и ничего продуктового

продолжить чтение

Честный RAG eval set: как собрать первые 100-300 кейсов и не обмануть себя цифрой

В прошлой статье серии мы сжимали эмбеддинги и замеряли, насколько изменится выдача относительно полного fp32-поиска. Там это был правильный вопрос: ломает ли квантизация уже существующий retrieval.Но у такого замера есть неприятное слепое пятно. Можно аккуратно сохранить 99% выдачи исходного эмбеддера и все равно плохо находить нужные документы на своем домене. Внешний бенчмарк, даже сильный, этого не гарантирует. BEIR

продолжить чтение

123