Мой третий хакатон (отчёт по хакатону ogon.ai - MCP)
Сначала будет отчёт по хакатону, с описанием “как это было и чувствовалось”. Во второй части — про инструменты которые я впервые потыкал.
Отчёт⌗
Изначально прочитал об идее этого онлайн-хакатон, и сразу подумал “круто, как раз про mcp, можно будет потыкать!”. И когда понял, что собирается команда, решил присоединиться.
Хакатон - это стартап в миниатюре.
Мы начали “хакатонить” в четверг, хотя можно было раньше, а закончили в понедельник, вечером, в 22:59.
У нас был продакт, 3 бэкендера (включая меня) и 1 фронтэндер. Мне очень понравилось, что на этом хакатоне у нас был продакт, с опытом хакатона в роли продакта, и что идея была вполне годная. Мне понравилось взаимодействие в команде.
Организация работ выглядела как 2 созвона-“синка” в день, утром и вечером, со списком задач на “до следующего созвона”. По некоторым штукам нужно было контактировать с другими программистами. Учёт фич и багов, а также взаимодействия с организатором хакатона — взял на себя продакт.
Вообще с самого начала думал, что идея будет хорошей, и реализация достаточно простой. Оказалось что так и есть, и приложение стало нам всерьёз нравиться. Да, есть что допиливать (во всех местах, наверное). Но…
Добавление кардинально новой функциональности — это маленький pivot
У нас было два таких момента:
- Когда мы решили делать бекенд на
n8n
(это было довольно хорошее решение; архитектура выглядит довольно симпатичной — мне кажется, поломки были бы неприятнее, если бы бек был на питоне). - Когда мы решили добавить на фронт и бек ещё одну функциональность, которая является, возможно, ключевой фичей.
По дням⌗
День первый — собрались, долго обсудили, я разработал MCP-сервер. День второй, третий, четвёртый — у меня преимущественно n8n, также тестирование. В 3-4 день много сделал. Забавно, что засев за n8n пайплайн, довольно много переработал. День пятый — доделали и подготовили к презентации.
Что хорошо:⌗
- я использовал в принципе многие свои навыки (в тч и те, которые слабые). Кажется, только фронтендом непосредственно не занимался
- я тестировал продукт, он получился прикольный (да, есть что доделать)
- я предлагал и обсуждал фичи
- я работал с бекендом на n8n (1 из 2 воркфлоу)
- я работал с бекендом на Python (MCP-сервер)
- я формулировал требования, если были нечёткие
- я собрал простенький пайплайн для сборки фронтенда, и
docker-compose.yml
для запуска моего MCP-сервера.
Что можно было бы улучшить с моей стороны:⌗
- не пропускать тестирование ключевых фич. Канбан доска с приоритетами, по идее, решает это, но в таких штуках есть обычно много зависимостей которые апдейтятся постоянно.
- иногда впадал в “клинч объяснения” в устной и “письменно-устной” (быстрый текст в чате). У меня часто бывают нечёткие формулировки, оговорки в терминологии, это мешает формулировать и мешает другим быстро меня понять. Стоит позаниматься своей речью, когда будут на это ресурсы.
- не затупливать над стереотипными проблемами. Кажется, это вообще что-то очень человеческое — когда одна и та же проблема, с вариациями, повторяется, но время на её исправление тратится почти столько же.
Команда:⌗
- всё офигенно!
- (мне оч понравилось, правда! спасибо отдельное продакту за организацию, это даже не выглядело хаосом (ну почти))
- возможно, была бы полезна какая-то доска/страница/сообщение с задачами и закреп с важными ссылками в тг-чате (в самом начале мы посидели над миро-доской, но вроде это было разово).
Орги:⌗
- понятные тексты/правила/требования. Впрочем, ещё не дождался объявления победителей)
- на вопросы по ходу дела отвечали
- консультацию с техническим специалистом дали, было содержательно
- был момент, когда возникла как бы сама собой (но было подведено предыдущим диалогом) довольно очевидная, но хорошая идея
- каких-то ресурсов дополнительно выделено не было
Новые (для меня) инструменты⌗
n8n.io⌗
n8n
- low-code инструмент.
- Плюсы: довольно простой, есть много разных нод, включая ИИ-шные.
- Эстетичный, логичный интерфейс.
- Опенсорс (важный плюс), хотя есть и премиум версии.
- Есть сообщество, да и документация
- Минусы:
- селф-хостед версия
- не содержит общих воркфлоу, в отличие от облачной. Можно редактировать что угодно из-под админского аккаунта, можно всем вместе сидеть из-под одного аккаунта.
- не содержит (кажется) отладки по ходу дела, в отличие от облачной.
- местами очень неприятные баги (ладно, не самые неприятные, но неприятные):
- один раз я хотел обновить выходной формат ноды. Это была иишная нода, у неё была доп. нода Structured Output, чтобы она проверяла формат. Я изменил JSON-схему в ноде, но почему-то вывод выводился то в старом формате, то в новом. По просмотру промта стало понятно, что схема подтягивается старая. Понадобилось, кажется, заново создать Structured Output ноду.
- не удавалось завершить по ошибке запущенный, очень долгий воркфлоу. Нода LLM-ки работала при всех возможных попытках её остановить, выдавала ошибки из-за превышений rate limit. При отключении от основной ноды (агента), она переставала, но при обратном подключении начинала снова. Лечилось аналогично — созданием новой ноды xD
- мелочь, но: есть нода LLM summary, у неё есть режим пересказа по чанкам (старая идея: т.к. текст может быть очень большим, то мы сначала перескажем чанки с пересечением, а потом перескажем все эти пересказы). Если текст полностью влезает в 1 чанк — запроса будет всё равно 2, и это вроде не исправить… Пришлось избавиться от этой ноды.
- в облачной версии мало ресурсов (сообщают что 300 МБ) и нет поддержки axios/asyncio по умолчанию. На 1ГБ сервере селф-хостед версия грузила почти на 100% RAM и процессор.
- селф-хостед версия
Cursor⌗
Cursor
- AI-powered редактор кода.
- Плюсы: ИИ, опенсорс (кроме ИИ-моделей)
- Минусы для меня: VS Code (что непривычно), модели не локальные. Стоит денег))
MCP-протокол⌗
MCP — протокол, позволяющий LLM-модели взаимодействовать с внешними инструментами, когда это нужно.
- Плюсы:
- минимальный MCP пишется очень быстро. Я тыкал курсор и MCP некоторое время, а потом стал натыкаться на видео типа “Я написал MCP-сервер за 20 минут”. so-so
- выполняет мечту “дать LLM все инструменты а она уже сама”.
- Особенности:
- учитывается как промт LLM-агента, так и промт MCP-сервера (описание предоставляемого им API, по сути). В той библиотеке которую использовал я - докстринг функции-MCP-tool являлся её описанием для бека.
- при некоторых проблемах
- есть 3 способа коммуникации, только 2 из них сетевые.
- немного сбивающая терминология — в целом, речь обычно идёт об MCP-клиентах и MCP-серверах, при этом MCP-клиентом могут называть как и программу, использующую сервера (Cursor, Copilot, кастомный LLM-агент…), так и непосредственно подключение к MCP-серверу.
- ГОВОРЯТ, есть особенности с безопасностью (классической).
- очевидно, есть особенности с безопасностью (которая AI Safety, промт-инъекции): если не контролировать доступ к MCP-server никак, то могут возникнуть проблемы. Есть MCP-сервера для баз данных, например, которые делают к ним запросы.
- учитывается как промт LLM-агента, так и промт MCP-сервера (описание предоставляемого им API, по сути). В той библиотеке которую использовал я - докстринг функции-MCP-tool являлся её описанием для бека.
System Prompt Generator (чатбот у ChatGPT)⌗
Полезная утилита, позволяющая написать хороший промт (по сути ТЗ) для языковой модели. Выглядит как странный текст, переполненный псевдоMarkdown форматированием и капсом, но работает же. Под конец сам уловил паттерн написания такого и теперь могу писать в таком же стиле.
Особенность
: Несколько раз замечал, что чатботы работают лучше, когда в самом начале посылается полное ТЗ на желаемый код, а не происходят попытки дополнить во многих сообщениях. С этим чатботом тоже так.