Среди прочего, я хочу понимать какие MCP были запущены и сколько они работали.
Как это реализовала модель: добавила методы подсчета и отправки счетчиков сессии прямо в класс, который реализует ACPSession, а метрики ask tool шли вообще без привязки к сессии
Я задал совершенно справедливые вопросы, мол,
"что за фигня и как это планируется масштабировать?"Дальше я получил примерно такой ответ (упрощаю):
Ну, смотри - у нас метрики привязаны к сессии, поэтому вот тебе метод broadcastCounters у сессии, а ask tools... ну так мы же запускаем ask MCP вне сессии, а значит не знаем о том, внутри какой сессии задаем вопросы пользователю. А то, что ты просил делать масштабируемый код... ну, код в основном вроде расширяемый, просто есть некоторые ограничения, которые мы не можем обойти, либо их обход обойдется слишком дорого
Смотрите, что произошло: код по сути рабочий, но были нарушены базовые требования + развивая такой код мы получили бы неподдерживаемую и слаборасширяемую архитектуру, то есть качество кода подверглось бы деградации
Я попросил модель унести все что касается счетчиков в отдельную сущность
SessionStats и создавать объект при создание ACP сессии:
const stats = new ACPSessionStats();
const session new ACPSession();
registerSession(session, stats);
Статы подписываются на события сессии, но так же их можно модифицировать и извне, если это потребуется.
А за счет подписки на события конкретной сессии мы получаем привязку к сессии для любых вызовов любых инструментов и код отправки метрик из ask tools можно убрать.
Метрики при этом можно собрать так:
const metrics = renderMetrics(stats);
Мораль: вне зависимости от того, какую модель вы используете и какие требования описывали, всегда проверяйте на адекватность то, что выдала модель, иначе попадете в ситуацию, когда код вроде рабочий, но не на долго
Был ли у вас опыт реализации ACP-клиентов и для каких целей?