Автор делится опытом отказа от CLI-интерфейсов в пользу прямого использования SDK агентами для большей гибкости и типизации при работе с Telegram.
CLI → SDK
Выше я писал про то, почему с MCP переходят на CLI (кроме
некоторых ситуаций). Сегодня – про еще один переход, которы у меня случился пару недель назад
Рассмотрим на примере коннектора к тг
У меня самописный CLI тул, куда я понемногу добавляю разные функции. Сначала я его использовал просто для того, чтобы агент отправлял текстовые нотификашки ботиком в чат. Потом добавил туда поддержку медиа. Потом отправку в другие чаты. Потом –
чтение предыдущих сообщений в любом чате и парсинг каналов (тут понадобилось перенести с урезанного Bot API на полноценный телеграмный MTProto)
И каждый раз когда я прошу сделать что-то, чего в моем CLI нет – агент идет его переписывать. Как результат – я по сути воссоздаю весь интерфейс библиотеки mtcute, но в виде CLI команды. Что уже как бы попахивает лишним слоем
Так еще и интерфейс
текстовой команды сильно беднее чем интерфейс SDK – нет честной типизации, объектов и т.д.
Если я хочу сделать какое-то действие в цикле, или хитро обработать вывод, то агент все равно пишет bash-скрипт поверх CLI
Так что пару недель назад, я полностью выпиливаю CLI и просто прописываю агенту, как ему использовать SDK напрямую. То есть он пишет код под задачу и сразу его запускает. А если у меня есть какие-то
повторяющиеся задачи – я оставляю их в виде импортируемых TS модулей.
Теперь агент может делать
что угодно, что можно делать ботом в тг. Мне не нужно заранее продумывать сценарии и постоянно обновлять код. Он сам соберет его точно под задачу из исходных модулей библиотеки, либо моих скриптов.
Тут правда я натыкаюсь на пару проблем. Основная – это то, что агент постоянно пишет временные скрипты, что убивает всю легкость, которая была у запуска CLI команды раньше. Да, он может писать код inline прям в команде, но внешние библиотеки так не установятся
Решается это достаточно просто – нужен раннер с поддержкой autoinstall
Для TS – это bun/deno, а для python – uv
Тогда команда агента выглядит примерно так:
bun --install=force run - <<'TS'
import { Api } from 'grammy'
// используем Bot API либу вместо MTProto для простоты
const { botToken } = await Bun.file(`${process.env.HOME}/.tg-agent-bot/config.json`).json()
const api = new Api(botToken)
console.log('sent:', (await api.sendMessage(373021550, 'Привет через grammY')).message_id)
TS
Проблема номер два – где хранить всякие полезные данные. Например, известные id-шники с описанием или helper-скрипты. Тут все по классике как с CLI – создаем
~/.tg-agent-bot и храним там config.json и папку со скриптами. Там же и токен бота (либо в keychain системы)
Получается, из конфигурации skill+cli мы убираем cli и просто описываем все тонким скиллом. Агент сам пишет скрипт прям в момент вызова
———
Осторожно: нет смысла использовать эту штуку, когда у вас узкая задача. Ее имеет смысл завозить, если много кейсов использования и нужна гибкость. И особенно, если нужно как-то хитро обрабатывать вызовы, собирать из них цепочки и т.д.
Тема экспериментальная, пользуюсь ей несколько недель, мб чего-то не замечаю – интересно, что думаете
Обсуждение
0Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖