Этихлид – Telegram
Этихлид
4.77K subscribers
152 photos
23 videos
129 links
Канал техлида с мыслями об AI, IT и спорте.

https://news.1rj.ru/str/etechlead/6 - содержание

https://news.1rj.ru/str/etechlead/8 - о канале

https://news.1rj.ru/str/+NgQZbosvypEyYWQ6 - чат канала, там отвечаю(т) быстрее :)

(без рекламы)
Download Telegram
Cursor - Open search results in Composer

Бывает, что нужно какое-то изменение глобально в проекте сделать или просто в контекст закинуть все те места, где какая-то строка встречается, а по собственному RAG-индексу Cursor ищет не то, что надо.

Тогда есть вот такая штука:
1. пользуемся обычным, родным для VS Code, файловым поиском;
2. жмём на "Open search results in Composer";
3. результаты поиска в виде найденных строк и файлов, в которых они нашлись, попадают в Cursor Composer, и, соответственно, в контекст.

На скриншоте показан пример: я заранее сделал компонент для отображения статуса выполнения долгой операции, а похожий (и не всегда в точности такой же) код уже встречался в нескольких местах в проекте (результат эволюции, ну вы понимаете).

Я сделал поиск по CSS-классу, который во всех этих местах используется, передал результаты поиска в Composer и попросил заменить повторяющийся код на использование компонента.

Причем вообще не заморачивался насчет того, чтобы отфильтровать файлы по типу, убрать из результатов поиска сам компонент и т.п. - LLM достаточно умна, чтобы не творить дичь в таком простом случае.
А я ленивый :)

P.S. да, всё получилось, результат в комменте :)

#development #cursortips
👍8🔥6
Уровни внедрения ИИ в разработку

Сейчас очень интересно наблюдать за тем, как разработка при помощи ИИ проникает в индустрию.

При этом на рынке умудряются одновременно существовать как инструменты, на добрый порядок различающиеся по своему качеству и степени автоматизации, так и разработчики, использующие эти инструменты так же на порядок (не)эффективнее.

Выделил такие уровни и практики внедрения:

0. Изоляция
Оказывается, всё ещё есть программисты, которые ничего не слышали про использование ИИ в разработке.

По этому поводу в наше время я испытываю невыразимое сочетание эмоций - это какой-то азарт антрополога, встретившего йети: хочется изучать это явление, пытаться понять, какими путями шла эволюция, как у них получается не контактировать с остальным миром... :)

1. Набегами
Использование веб-интерфейсов LLM-ок для написания небольших скриптов/функций - ну т.е. прям на сайте ChatGPT/Claude что-то конкретное просим сделать, получаем ответ, на этом общение заканчивается.

Сюда же можно отнести использование Claude Artifacts / ChatGPT Canvas для небольших прототипов.

2. Копипастинг
Разработка при помощи ИИ через копипастинг кода между каким-то UI к LLM и своей IDE.

Как по мне, это страшно неудобно, времязатратно, чревато ошибками и ускоренным износом клавиш Ctrl/C/V (ну или Ctrl/Shift/Insert, у членов древнего секретного ордена).

Однако примечательно, что тут прям целая культурно-техническая тусовка есть, которая даже придумывает штуки навроде RepoPrompt - склеивает файлы проекта в один мегафайл, чтобы было проще его копипастить туда-сюда 🤯

3. Автодополнение
Использование ИИ-автодополнения в процессе написания кода руками в своей IDE - собственно с этого всё и началось, когда вышел GitHub Copilot аж 300 лет тому назад (ну, ~3 года, если быть точнее, я был там, Гендальф).

Пользуясь случаем, ещё раз скажу, что в Cursor лучшее автодополнение кода среди всех ИИ-инструментов.

4. IDE с LLM-чатом
LLM-чат непосредственно в самой IDE - можно легко передать файлы в LLM, получить тут же ответ и применить diff к своему коду - это сейчас практически любой ИИ-плагин к IDE умеет, что делает копипастинг особенно необычной практикой.

5. IDE с LLM-агентом
Использование IDE с поддержкой агентского режима работы: Cursor / Windsurf / GitHub Copilot / (Roo)Cline.

В них можно ставить полноценные задачи, и они уже сами найдут нужный код в проекте, сами его поправят, сами выловят ошибки. Тут много нюансов и своих практик, часть которых описана мною ранее в гайде, а часть я как-нить соберусь и опишу :)

6. Агенты полного цикла
Тут у нас Devin / OpenHands - это штуки, которые способны в общем чатике типа Slack принять от вас задачу, а дальше сами зададут вопросы, сходят в Git, залезут в базу знаний проекта, напишут код, потестят его, запушат и передадут на ревью, получат зарплату.

Пока что они не готовы к реальному использованию, но это в основном проблема существующих LLM, нежели обвязки вокруг них (чем, собственно, все ИИ-инструменты для разработки и являются).

С выходом следующего поколения моделей, которое должно состояться в ближайшие несколько месяцев, тут могут быть существенные изменения.
Да и в целом, я думаю, за подобными системами будущее разработки.

7. (Secret Level)
Встречаются специальные маньяки, которые пишут свои агентские системы под задачи массовой генерации / анализа / модификации кода.
Задачи у них тоже довольно специальные, но, как правило, интересные и весьма нетривиальные.

Скорее всего позже отсюда появится свой набор инструментария для высокоуровневой работы с большими кодовыми базами.


У меня сейчас примерно такое распределение получается в задачах разработки:
* 80% - №5, Cursor Composer Agent
* 10% - №4, Cursor Chat + Cursor Composer
* 5% - №3, ручной код с автодополнением, так же в Cursor
* 5% - №1, генерация каких-то мелких скриптов через ChatGPT/DeepSeek


А как у вас обстоят дела?
Или, может, есть что-то необычное, чем можете поделиться? :)


#ai #development
🔥126👍4👏3
Claude 3.7 Sonnet

Дождались! :)

❗️Новый релиз от Anthropic - Claude 3.7 Sonnet.

🟢 модель стала гибридной - теперь это универсальная модель с чертами ризонера, и можно будет контролировать, сколько ей можно думать над ответом (выражается это в бюджете токенов, которые можно потратить на размышления)

🟢 стала еще лучше в кодинге в целом и фронтенд-разработке в частности

🟢 улучшенные агентские возможности, с большим упором на решение реальных бизнес-задач, чем на оптимизации под математику и соревновательное программирование

🟢 цепочку рассуждений сделали открытой

🔵 цена осталась такой же, как и у Claude 3.6 Sonnet ($3/M input, 15$/M output)

🔵 длина контекста осталась такой же, как и у Claude 3.6 Sonnet (200k)

📈 Изменения на интересных бенчмарках по сравнению с Sonnet 3.6:
* (кодинг) SWE-bench verified: 49% -> 62.3% (70.3%, с минимальным набором инструментов)
* (агенты) TAU-bench: 71.5% -> 81.2%, 48.8% -> 58.4%

P.S.
Забавно, что версией 3.6 сообщество в свое время окрестило официальную версию 3.5 (New), так что официально следующей версией стала 3.7 :)

#ai #news
🔥8👏3
This media is not supported in your browser
VIEW IN TELEGRAM
Модель уже доступна в Cursor в 2 вариантах: обычном и thinking.

Thinking работает в highest режиме, т.е. модель думает максимально возможное для нее время.

Команда Cursor говорит, что впечатлена возможностями модели по кодингу, особенно на реальных задачах в агентском режиме - судя по всему, это новая SOTA!

Раскатывают по пользователям постепенно, так что, возможно, придется немного подождать.
У меня появилась, буду тестить :)

Также стала доступной в OpenRouter - это помимо официального сайта и API, само собой.

P.S. на видео, кстати, preview следующей версии Cursor, которую тоже скоро выпустят.

#ai #news
7🔥4
Media is too big
VIEW IN TELEGRAM
Claude Code

Помимо обновления Sonnet, Anthropic еще выпустили превью-версию Claude Code - инструмента для агентской разработки.

Принцип работы довольно неплохо показан на видео.

💳 Для того, чтобы ей воспользоваться, нужен доступ к Anthropic Console с привязанной картой.
💰В отличие от Cursor, тут идет прямая работа с API Anthropic и надо быть аккуратным в плане траты токенов, особенно в больших проектах!

Ставится эта штука как npm-пакет и у нее чисто консольный интерфейс.
Предполагается, что её нужно запускать в папке вашего проекта и просить сделать вот такие вещи, к примеру:

🟢 объяснить незнакомый код
> что делает система обработки платежей?
> найди, где проверяются пользовательские разрешения
> объясни, как работает слой кэширования

🟢 выполнить операции с Git
> закоммить мои изменения
> создай pull request
> какой коммит добавил тесты для markdown в декабре?
> сделай rebase на main и пофикси merge-конфликты

🟢 отредактировать код при помощи ИИ
> добавь валидацию ввода в форму регистрации
> отрефакторь логгер, чтобы использовать новый API
> исправь race condition в очереди рабочих потоков

🟢 протестировать и отладить код
> запусти тесты для модуля аутентификации и исправь ошибки
> найди и исправь уязвимости в безопасности
> объясни, почему этот тест не проходит

🟢 можно попросить глубже подумать над сложными проблемами
> подумай, как нам спроектировать новую платежную систему
> тщательно продумай граничные случаи в процессе аутентификации



По сути, это очень похоже на то, как работает Aider, и Claude Code становится его прямым конкурентом.

А в целом такие возможности уже есть в существующих инструментах, и отличие тут может быть только в том, как Claude Code общается с моделью - какой там промптинг и работа с инструментами, так что надо тестить.

В любом случае, Anthropic представляют сегодняшние релизы как часть движения к своему образу будущего, которое они видят как постепенное улучшение ИИ в плане того, чтобы брать на себя все большие по сложности и объемам задачи:

* (2024г) от того, чтобы ИИ был асистентом, помогая человеку стать лучшей версией себя

* (2025г) к тому, что ИИ станет вашим коллегой, беря на себя задачи, на которые раньше приходилось тратить часы работы

* (2027г) до того, что ИИ будет уметь находить прорывные решения для сложных проблем, которые могли бы занять годы

#ai #news
🔥7👍3👏3
Инициативность Sonnet 3.7

В системном промпте Sonnet 3.7 есть такие указания:

Claude получает удовольствие от помощи людям и видит свою роль как умного и доброжелательного помощника, обладающего глубиной и мудростью, что делает его чем-то большим, чем просто инструментом.

Claude может проявлять искренний интерес к теме разговора, а не только к тому, что думает человек или что его интересует.


Это отличается от промптов предыдущих версий, где модель рассматривалась именно как инструмент.

И то ли из-за промпта, то ли из-за того, что её специально тренили под агентские задачи, Sonnet 3.7 стала весьма инициативной, когда нужно справиться с нетривиальной проблемой.

В чем это выражается с точки зрения разработки?
Если в целом - модель в агентском режиме в Cursor активно пытается взаимодействовать с внешним миром и иногда выходит за рамки поставленной задачи.

А если в частности:

● мимоходом пишет и запускает тесты в проекте, чтобы проверить какую-то идею;

● запросто может написать какую-то мелкую утилиту и начать ею пользоваться - к примеру, заметив, что curl в Powershell работает криво, она написала себе скрипт на JS + requests, при помощи которого стала делать запросы на тот API, который ей нужно было подебажить;

● пишет упрощённые версии какого-то модуля в проекте, чтобы на простом коде протестировать нужную механику;

● не стесняется написать временный непрошеный костыль и передать управление пользователю - мол, проверь, а как щас? А пользователь себя MCP-сервером ощущает в этот момент :)

Sonnet 3.5 такие вещи делать нужно было явно просить, сама она редко такое делала, и про самый такой яркий случай я как-то писал.
Так вот для Sonnet 3.7 такое поведение - обыденность.

Это всё неплохие подходы - так и приходится действовать в нестандартных случаях, - но за тем, что делает модель, решившая проявить инициативу, лучше все-таки внимательно наблюдать.
Да, она стала меньше разрушительных действий совершать, но запросто может уйти в неверном направлении, там упороться и зациклиться (ну прям как некоторые разработчики :))

В таких случаях можно вернуться на прошлый чекпойнт в Cursor и переформулировать описание проблемы, добавив туда те подходы, которые уже не сработали (именно вернуться, а не продолжать чат, чтобы не забивать контекст неверными попытками).

Плюс, модель может создавать много временного кода, который в итоге не нужен для проекта.
И бывает так, что в процессе работы память об этом временном коде уже стерлась из контекста и просто попросить модель его удалить не сработает, нужно чистить руками.
Ну, впрочем, это всё видно в git diff, но стоит про такое помнить.

#ai #development
👍104🔥3🙏1🤡1
Инициативность Sonnet 3.7 и MCP

В продолжение предыдущего поста.

Но самое интересное происходит с подключенными MCP и вообще с работой с внешними инструментами.

Вот такие 3 случая были за последние дни:

Случай с Redis MCP
Модель при помощи него ловила багу в работе с системой очередей (BullMQ), которую я использую в одном из проектов.

Написала отдельный скрипт, где создала временную очередь, воркер и слала джобы в эту очередь, а через Redis MCP смотрела, все ли правильно попадает в Redis, сравнивая с логами скрипта, который запускала.

А в какой-то момент столкнулась с тем, что в этом Redis MCP ей не хватило возможностей, и такая - о, у тебя ж redis-cli на машине есть, и переключилась на него :)

Случай с PostgreSQL MCP
Модель дебажила API-запрос, в котором возвращалось не то, что надо.

Для начала она сама получила ответ от API по тому URL, который я ей выдал, а потом полезла в БД и начала данные оттуда сравнивать с тем, что возвращает API.

И дальше было несколько итерацией переписывания SQL-запросов в приложении, снова обращения к API-endpoint и дальнейшие раскопки в базе.

Случай с Kubernetes Helm Charts
Проблема была в зависающих исходящих http(s)-запросах от моего приложения через прокси, которая была в том же поде.

Модель правила код Helm Charts, запускала деплои, ждала, пока они закончатся - прям вот буквально делала Sleep в Powershell.
Потом читала логи контейнеров, думала, запускала в контейнерах консольные команды, чтобы проверить сетевые соединения, ставила там пакеты для сетевой диагностики, правила правила iptables и т.п.

То есть модель теперь и девопсам может норм помогать, в отличие от Sonnet 3.5, который в целом чурался прямой работы с OS, да и IaaC-код писал куда хуже.



Увы, ни в одном из этих случаев модель не смогла найти окончательное решение, хотя очень старалась :)

Но:
● это по итогу были не джуновские проблемы, скорее уже middle+, на границах между разными системами, да и пару мыслей модель мне все-таки подкинула;
● она сняла с меня рутину по проверке простых, но неработающих подходов;
● размер контекста является большой проблемой - видно, как модель постепенно забывает те неверные решения, которые уже пробовала, и начинает пытаться их снова использовать.

А вообще за этими сессиями дебага реально интересно наблюдать :)
Иногда приходится прерывать модель, чтобы подкинуть ей новую информацию или указать другое направление, в котором нужно копать.
Лимит в 25 запусков тулов на запрос тоже нередко теперь достигается.

И порой это начинает напоминать полноценную работу в паре с неглупым ассистентом, так и до спунинга парного программирования недалеко :)

#ai #development
👍10🔥31🤡1
MCP (1/4), общая инфа

Второй месяц собираюсь написать про MCP, так что больше не могу молчать, да к тому же его завезли уже почти во все вайб-IDE, включая Cursor (но с нюансами, об этом в третьей части).

Можно для начала рассмотреть диаграмму, а дальше будет кратко про MCP в целом (этот пост), про MCP-сервер - в частности (второй пост), список текущих проблем + решений части из них (третий пост) и немного о практике внедрения (четвертый пост).

Итак, что такое MCP (Model Context Protocol)?
Это открытый протокол от Anthropic, стандартизирующий процесс общения между LLM и внешними системами и упрощающий построение агентских систем.

Какие это внешние системы могут быть?
Да любые, с которыми можно либо обмениваться данными, либо вызывать у них какие-то функции:
● базы данных, вики, Интернет
● таск-трекеры, мессенджеры, репозитории, почта
● файловая система, сервера, контейнеры
● reddit, youtube, прочие соцсети
● умные лампочки дома, кофеварка, кондиционер, кот

Словом, что угодно, что выставляет наружу хоть какой-то интерфейс, с которым можно программно взаимодействовать.

Какие проблемы решает MCP?
● делает универсальной интеграцию внешних систем с LLM - и это, пожалуй, самое важное, что позволило распространиться этому протоколу с такой скоростью
● обеспечивает доступ LLM к тем системам, которые могут быть чисто внутренними, даже не имеющим доступ в Интернет
● позволяет модели оставаться в пределах единого контекста при решении многоэтапной задачи

Какие компоненты нужны для работы с MCP?

Помимо внешней системы и LLM:

MCP-хост - программа, которой нужно связать между собой LLM и внешнюю систему - Cursor/Cline/Claude Desktop/etc.
Как правило, это та программа, с которой непосредственно общается пользователь в режиме чата

MCP-клиент - программный клиент протокола MCP для связи хоста и сервера, является частью хоста.
Вот тут есть список примеров хостов-клиентов и тех фич, которые они поддерживают: https://modelcontextprotocol.io/clients

MCP-сервер - легковесная программа, выступающая в роли прокси/гейтвея, которая общается с внешней системой, используя её API. Сам же сервер наружу выставляет MCP-специфичный интерфейс, с которым взаимодействует хост.
Тут можно посмотреть на примеры серверов: https://modelcontextprotocol.io/examples

Что входит в интерфейс MCP-сервера?

Из существенного:

Tools, инструменты - по сути, описания функций, которые могут быть вызваны клиентами.
Когда список инструментов передается LLM, она сама решает, какой из них вызвать для решения своей задачи

Resources, ресурсы - описания и сами наборы данных, которые сервер может предоставить клиентам для чтения и включения в контекст для LLM.
К примеру, в случае БД это могут быть схемы таблиц, для файлового хранилища - списки файлов и содержимое самих файлов.
Предполагается, что ресурсы должны быть явно выбраны пользователем или клиентом для передачи модели, но не запрещается переложить выбор и на саму модель

Prompts, промпты - заготовки промптов, которые пользователь может выбрать в хост-программе. Промпты могут быть параметризованными и принимать какие-то динамические значения от пользователя

Какие LLM можно использовать?
Заявляется, что протокол открытый и его можно использовать с любыми LLM, где есть Structured Outputs / Function Calling.

Тут Anthropic, конечно, слегка лукавит, т.к. у них есть преимущество в том плане, что они выпускают лучшие в настоящее время агентские модели, и они вполне могли тюнить тот же Sonnet на работу именно с чем-то MCP-подобным.

Так что пока что для лучших результатов стоит выбирать именно модели Anthropic.

#ai #mcp
🔥9👍73
MCP (2/4), про MCP-сервер

Что из себя представляет MCP-сервер?
Как правило - это небольшая программа на любом языке программирования (чаще всего - Python/TypeScript), которая никакой логики в себе не содержит, и просто связывает внешнюю систему и MCP-клиент между собой.

Аутентификация
Довольно часто для доступа к внешней системе MCP-сервер содержит в себе процедуры аутентификации - т.е. именно ему нужно передавать все логины/пароли/токены, и он решает проблему с доступом LLM к каким-то вашим внутренним ресурсам.

Как можно общаться с MCP-сервером?

Есть 2 транспорта из коробки:

stdio - т.е. через стандартный input/output: в этом случае MCP-сервер запускается MCP-хостом как консольное приложение.
В этом случае предполагается, что вы скачиваете MCP-сервер в виде кода или готовой к запуску программы на машину, где у вас находится сам хост, и они работают в тесной связке, запускаясь вместе

sse - это по имени Server-Sent Events, одного из стандартных (и древних) способов передачи сообщений поверх HTTP, использующего долгоживущее соединение для передачи данных в одном направлении (server -> client).

В случае с MCP нам всё-таки нужен полноценный двусторонний обмен с сервером, и, соответственно, 2 endpoint'а:
* GET с собственно SSE - по нему будут передаваться сообщения от сервера клиенту в режиме бесконечного стрима
* обычный POST для передачи сообщений от клиента серверу

Сервер с таким транспортом может быть запущен где угодно и может обслуживать много клиентов одновременно, в отличие от stdio.

В подавляющем большинстве случаев, однако, сервера сделаны именно в варианте stdio, но есть способ конвертить stdio <-> sse, см. ниже, в разделе с инструментами.

Где брать MCP-сервера?
К примеру, тут: https://github.com/modelcontextprotocol/servers или тут: https://github.com/punkpeye/awesome-mcp-servers/

Вообще серверов буквально тысячи уже (https://glama.ai/mcp/servers, https://mcp.so/), но я бы советовал прям глазами проверять код тех, которые вы собираетесь использовать, т.к. порог входа низкий, модерации нет, многие вообще не работают - словом, это дикое поле :)

Сколько серверов можно подключать к хосту?
Явного ограничения нет, но список всех сущностей, которые предоставляет MCP-сервер (tools, resources, prompts, etc) с их описаниями передается LLM в контексте, чтобы она про них знала и могла попросить вызвать что-то, что нужно для решения задачи пользователя.

Соответственно, надо быть аккуратным с подключением большого количества серверов - помимо отъедания ими контекста, можно ещё и запутать модель, и она будет вызывать не те функции, которые вы ожидаете.

А если вы делаете свой сервер - лучше быть кратким и точным в своих описаниях и названиях экспортируемых сущностей.

Пример сервера
Вот пример простого MCP-сервера:
https://github.com/modelcontextprotocol/servers/blob/main/src/postgres/index.ts - это всего лишь ~140 строк TypeScript кода, которые дают модели возможность просматривать схемы таблиц в вашем PostgreSQL и выполнять запросы к выбранной базе.

Это stdio-сервер, и запускается он как консольное приложение, которому передаются данные для доступа к БД, к примеру, так:
node <file-path-to>/index.js postgresql://myuser:mypassword@localhost:5432/mydb


Оцените, насколько просто можно сделать сервер под свои задачи.

Полезные инструменты

MCP-inspector: https://github.com/modelcontextprotocol/inspector
С его помощью можно проверять, работает ли MCP-сервер, узнать, какие сущности он экспортирует и посылать ему тестовые запросы.

Supergateway: https://github.com/supercorp-ai/supergateway
Имбовая штука для конверсии MCP-сервера sse <-> stdio.

Я предпочитаю sse в силу большого количества багов вокруг stdio, так что все сервера перевел на sse с помощью Supergateway, собрав их в docker-compose и развесив контейнеры на разные порты на своей машине.

Как вариант, для тех же целей можно использовать mcp-proxy: https://github.com/sparfenyuk/mcp-proxy

#ai #mcp
🔥15👍73
MCP (3/4), проблемы и решения

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

🔴 Начнем с Cursor

1️⃣ Вообще я хотел эту серию постов начать с того, что, "ура, в Cursor 0.46 завезли поддержку Resources!" :)

Однако, зайдя в настройки Cursor перед тем, как начать писать, я обнаружил, что все ресурсы пропали из подключенных MCP, и вернуть их не получилось.

"Что за газлайтинг", подумал я, и полез на форум - и да, они их выпилили в 0.46.9 под каким-то странным предлогом (мол, ресурсы создавали больше проблем, чем пользы): https://forum.cursor.com/t/mcp-resources-not-working-in-0-46-9/59960/5.

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

А пока что, как вариант, можно откатиться от текущей 0.46.11 на 0.46.8, есть вот такой неофициальный репозиторий со ссылками на старые билды Cursor:
https://github.com/oslook/cursor-ai-downloads

2️⃣ Назойливая бага в том же Cursor - он запускает stdio-сервера в Windows как консольные приложения, не скрывая их консольные окна.

Так что вместе со стартом своего нового окна Cursor открывает еще несколько консольных окон по количеству подключенных MCP-серверов.

Открыли 3 окна Cursor и у вас 5 подключенных MCP-серверов? - получите в нагрузку ещё 15 окон :)

Для решения этой проблемы, да и в целом для сбора всех локальных MCP-серверов в одном месте, оказалось удобным использовать Supergateway + stdio->sse + docker, как описано в конце предыдущего поста.

3️⃣ И ещё - в Cursor есть поддержка проект-специфичных настроек MCP-серверов (.cursor/mcp.json), как аналог claude_desktop_config.json, но она игнорит секцию переменных окружения, и может терять переданные в stdio параметры, причём как-то избирательно, я так и не нашел четкой зависимости :)
Использовать с осторожностью, короче.


🔴 Нет официального каталога серверов, и каких-то проверок новых серверов тоже никто не делает. Есть надежда на то, что коммьюнити само постепенно отфильтрует мусор, но пока что надо быть аккуратным.

Реально, во многих случаях может оказаться самому быстрее написать сервер, чем брать чей-то сомнительного качества - благо, сделать свой несложно.

Но сами Anthropic в кулуарах обещаются сделать официальный MCP-registry, так что ждём: https://x.com/opentools_/status/1893696402477453819


🔴 Локально устанавливать сервера - боль, нет какого-то общего формата описания того, откуда сервер должен скачиваться, как ставиться и как запускаться, поэтому кто во что горазд:
docker / npx / node / uv / uvx / python / pipx / бинарники.

Да, есть формат списка подключенных MCP-серверов, который используется в Claude Desktop: claude_desktop_config.json (https://modelcontextprotocol.io/quickstart/user#2-add-the-filesystem-mcp-server), и его пытаются копировать другие клиенты, но тоже кто в лес, кто по дрова, т.к. формат не стандартизирован.

Это ж до смешного доходит - Cline ставит MCP-сервера, скармливая LLM-ке README из репозитория устанавливаемого MCP-сервера, чтобы модель сама разобралась, как его поставить и сконфигурировать в проекте :)

Есть проект https://smithery.ai/, к которому можно присмотреться - по крайней мере, они работают над унификацией конфигурации серверов.
Но мне не нравится их подход в том, что они стараются сервера хостить у себя - возникают вопросы с безопасностью.


🔴 Из мелких частностей - npx на Windows подменяет stdio запускаемого пакета, а нет родного stdio - нет и передачи команд между сервером и клиентом.
Если все-таки хочется использовать npx, то, чтобы работало, можно так запускать:
cmd /c npx -y @modelcontextprotocol/server-postgres ...



Несмотря на мелкие и не очень баги, MCP всё равно весьма полезен как стандарт, и, надеюсь, другие LLM-вендоры тоже начнут его поддерживать, в т.ч. тюня свои модели на работу с ним.


#ai #mcp
🔥16👍75
MCP (4/4), практики внедрения

В процессе оформления предыдущих постов про MCP в статью на Хабре неожиданно написал еще один раздел :)
Продублирую его и сюда.


В целом, практики построения систем на основе MCP не сильно отличаются от практик работы с любой другой агентской системой, но есть некоторые нюансы.

Управление контекстом
Одна из целей обращения к внешним системам - обогащение контекста LLM для решения поставленной задачи.

Однако тут важно понимать, что контекст (т.е. токены) стоит денег, он лимитирован по длине, с его ростом LLM начинает медленнее отвечать, и, даже если все ваши данные влезают в контекст, далеко не все LLM одинаково "умны" с коротким и длинным контекстом.

Соответственно, MCP-сервер должен быть точен и лаконичен в возвращаемых данных, а MCP-хост может применять разного рода техники по управлению контекстом, чтобы снизить стоимость работы с ним: суммаризация, кеширование, использование скользящего окна и т.д.

Также стоит подумать о кешировании контекста в тех LLM, которые это поддерживают - это сильно влияет как на время до первого output-токена, так и на цену input-токенов.

Скорость работы
MCP создавался для работы в агентских системах навроде Claude Desktop или Cursor, где не ожидается моментальных результатов, а скорее дается задача агенту, а дальше он сам собирает нужный контекст из разных мест и/или запускает какие-то тулзы по ходу дела.

И это довольно небыстрый процесс временами - тот же Cursor минутами может возиться, разбираясь в проекте и меняя код, однако он всё равно решает поставленные задачи в 10+ раз быстрее меня.

В том случае, если нужна скорость или система предполагает высокую нагрузку - стоит подумать о другой, более оптимальной для вашего случая архитектуре.
См. комменты к первому посту в серии на эту тему, там от подписчиков были интересные вопросы и идеи :)

Качество данных
LLM принимает решения на основе тех данных, которые оказались в контексте, и если в него попадает неполная, противоречивая, нерелевантная задаче информация, то ждите проблем: будет путаться, делать не то, что надо, обращать внимание на несущественные детали и т.п.

Соответственно, по возможности нужно следить за качеством данных, которые попадают в контекст из внешних систем через MCP-сервера.
Правило garbage in - garbage out тут всё ещё работает :)

Это касается и того, насколько хорошо и уникально названы и описаны сущности, которые экспортирует MCP-сервер, чтобы модель вызывала те функции, которые вы от неё ожидаете.

Безопасность
Подключением MCP вы даёте LLM доступ к приватным данным и возможность совершать потенциально деструктивные операции в том окружении, где запущен MCP-сервер.

Встроенного механизма авторизации в протоколе на текущий момент нет, он существует только в виде драфта для следующей версии.

Так что нужно учесть следующие моменты, особенно при работе со сторонними MCP-серверами:

● проверяйте их код на предмет наличия там небезопасных операций

● запускайте сам MCP-сервер под пользователем с минимально необходимым набором прав и, по возможности, в изолированной среде (в контейнерах, к примеру, что особенно делает интересным вариант запуска через supergateway + sse + docker, описанный ранее)

● если MCP-сервер требует авторизации во внешней системе - у пользователя, которого он для этого будет использовать, тоже должны быть только самые необходимые права

● настраивайте MCP-хост на то, чтобы он спрашивал разрешение у пользователя на получение доступа к ресурсам или на вызов инструментов. Да, это довольно быстро станет обузой в работе, но при работе с непроверенным MCP-сервером стоит об этом подумать

Ну и, конечно, нужно помнить о том, в случае коммерческих LLM данные передаются куда-то в облако, и этот вопрос требует отдельной проработки с учётом ваших политик безопасности.

#ai #mcp
🔥156👍6
Claude 3.7 Sonnet MAX

Тут пару дней назад обновился Cursor и в него добавили поддержку таинственного Claude 3.7 Sonnet MAX.

MAX режим
Как оказалось, это не какая-то новая модель, а другой режим работы существующей 3.7 с расширенными возможностями.

🔴 Цена
Давайте сначала про самое важное: один вызов модели в этом режиме стоит 5 центов и каждый запуск инструмента в рамках этого вызова стоит ещё 5 центов.
Для работы с ним нужно включить usage-based оплату в настройках Cursor, как на скрине №2, и, желательно, поставить какой-то разумный лимит расходов.
Потратить $10+ в час в таком режиме несложно - видео №1 довольно точно передает особенности работы с Sonnet 3.7 MAX.

🟢 Доступ к полному контексту в 200к токенов
Если что - в Cursor агент работает с контекстным окном в 60к токенов, но для Sonnet 3.7 ему дают 120к, а в MAX режиме - все 200к.
Предыдущие модели хуже работали с такими длинными контекстами, как говорит команда Cursor, и 3.7 стала первой достойной передачи ей такого количества токенов :)
Это прекрасно, потому что длина честного контекста - чуть ли не самое важное ограничение текущих моделей.

🟢 Увеличен лимит вызовов инструментов до 200 на один запрос
В не-MAX режиме это 25 инструментов на запрос.
Это неплохо, но скорее из серии nice to have.

🟢 Модель читает гораздо более крупные фрагменты файлов за раз
... что означает, что ей требуется меньше вызовов инструментов, чтобы собрать контекст.
А вот это хорошо, т.к. ускоряет время работы, особенно когда модель натыкается на большой файл - в не-MAX режиме она его читает строк по 100, а в MAX я видел и 750, так что в большинстве случаев файлы читаются сразу целиком.

🟢 Премиальный цвет модели в окне Cursor
Видите такой градиент в названии модели у кого-то, как на скрине №3 - знайте, перед вами MAX-боярин :)


Общие впечатления после 15 баксов, проведённых с моделью

Работает шустрее
Нет, не в том смысле, что ей какой-то приоритет отдаётся - скорее, из-за того, что она вычитывает файлы целиком и дольше хранит их в контексте.
Скорость генерации на глаз не изменилась.

Действует осторожнее
В MAX-режиме модель с меньшей ретивостью, чем обычный Sonnet 3.7, бросается изучать и что-то делать в проекте.
Тут есть и плюсы, и минусы: с одной стороны, она не тратит контекст и экономит запуски инструментов, а с другой - ограничивается локальными изменениями, не пытаясь понять общую картину.
Не исключено, что её запромптили на это намеренно, чтобы она за один запрос все 200 инструментов не запустила ($10 одним махом всё-таки).

А в целом
... это всё тот же Sonnet 3.7, с тем же интеллектом, с тем же качеством кода, просто с более длинным контекстом, чутка шустрее и НАМНОГО дороже.
По идее этот режим приближает Cursor по расходам к Claude Code или инструментам, которые напрямую работают с Anthropic API (но всё ещё обходится дешевле).


Где использовать?
● там, где нужен длинный контекст (однако не намного длиннее, чем он уже есть);
● там, где нужно много тулзов запускать - дебаггинг (как в ранее описанных в канале случаях), сквозной рефакторинг;
● (из комментов) в ask режиме генерировать план решения задачи, дав весь контекст. Дальше свитчить на агента и "обычный" thinking claude 3.7, который будет пилить код;
● когда не хочется думать об ограничениях :)

Ну, словом, режим не для всех, как признаёт и сама команда Cursor.

Думаю, тут у них было 2 цели:
● дать полные возможности тем, кто просил команду Cursor снять ограничения контекста, невзирая на цены (довольно часто, кстати, были такие просьбы у них на форуме);
● какие-то будущие мощные модели выпускать с таким же ценообразованием.

#ai #cursor #sarcastaball #model
🔥10👍6😁21
Gemini 2.5 Pro Experimental (1/2), общая инфа

Ух, прям горячие деньки выдались в плане новостей.

На мой взгляд, 2 релиза стали лучшими продуктами в своих нишах - OpenAI 4o Image Generation и Google Gemini 2.5 Pro Experimental.
(кажется, гиблизация станет словом года, ну или, по крайней мере, месяца :))

Ну, где я, а где картинки, так что поговорим про Gemini :)

tl;dr: очень хороший ризонер, лучший в работе с длинным контекстом (1м токенов), пока что бесплатный (с лимитами), но при этом не очень в работе с AI-тулингом.

Важные бенчмарки для разработки

Aider Polyglot - аж на 8% лучше Sonnet 3.7 Thinking в корректности кода, но, правда, при этом на те же 8% хуже в соблюдении формата для редактирования (что может сделать сложной ее интеграцию с AI-тулингом).

SWE-bench Verified - задействует способности модели работать в режиме агента, и да, тут модель хуже Sonnet 3.7

MRCR - тестирование длинного контекста с одной, но слегка нестандартной, иголкой.
Отличные результаты, но модели Gemini традиционно хороши в таких тестах. Хочется спросить, однако: Google, где Sonnet?

Fiction.liveBench - свежий бенчмарк на тестирование понимания моделью длинного контекста через скармливание ей рассказа и последующих вопросов на развитие сюжета, отношений персонажей, предсказаний на основе подсказок и т.п.
Этот тест куда правильнее тестирует "честный" контекст модели, и результаты Gemini тут просто уходят в отрыв.
Жаль, что не тестировали на более длинных текстах.

LIveCodeBench v5 - олимпиадные задачки по программированию, тут модель чутка хуже сильно натасканной на это o3-mini (и опять, в результатах нет Sonnet 3.7) - т.е. она способна решать довольно сложные алгоритмические задачи, что говорит об очень хорошем ризонинге.

AIME 2025 - олимпиады по математике, примерно те же результаты, что и у o3-mini, что тоже показывает отличный ризонинг у модели.

Knowledge Cutoff
Модель обладает знаниями от января 2025, и это отличная новость - она должна быть в курсе актуальных версий языков/библиотек (да, OpenAI, у нас давно не 2023й).

Длина контекста - 1м токенов
... при этом обещают увеличить до 2м.
Не устаю повторять, что длина "честного" контекста - одно из самых существенных ограничений текущих моделей.
С 1м эффективного контекста и таким ризонингом Gemini 2.5 способна работать с кодовыми базами в 5+ раз больше, чем Sonnet 3.7, с тем же или выше качеством.

Тулинг и прочие фичи
У модели заявлены:
● Structured Outputs & Function Calling
● граундинг через поиск в интернете
● выполнение кода

Ну т.е. очень фичастая модель, есть практически всё необходимое, однако при этом она не так хороша в тулинге, как тот же Sonnet 3.7.
Было бы здорово, если бы с этим что-то сделали к релизу.

Нет кеширования
Это потому, что модель экспериментальная, к релизной версии кеширование будет, а иначе в агентском режиме можно будет разориться.

Цена
Пока что модель бесплатная в силу экспериментальности, но что-то страшно себе представить, сколько она будет стоить, с таким-то контекстом и возможностями :)

Лимиты
Пока модель бесплатная, на неё установлены такие лимиты:
● 2 запроса в минуту
● 2м токенов в минуту
● 50 запросов в день (стоит иметь в виду, если захочется её как агента использовать - довольно быстро можно упереться в дневной лимит)

Как попробовать?
● модель доступна в Google AI Studio в режиме обычного онлайн-чата
● есть в OpenRouter - можно подключать в Cline, к примеру (каждый вызванный тул - один использованный запрос из 50 доступных в день)
● её добавили в Cursor, но работает так себе (контекст, кажется, режется самим Cursor, модель не работает в режиме агента и ломается форматирование при выводе)

#ai #development #model
👍74🔥3❤‍🔥1
Gemini 2.5 Pro Experimental (2/2), личные впечатления

Что тут сказать - Google наконец-то смог, эта модель вполне на уровне текущих флагманов для разработки.

Что меняет появление этой модели?
● Открывается возможность работы с намного большими по объему проектами.
● Стало можно делать cross-cutting изменения во многих местах проекта, глобальные рефакторинги.
● Не так важно становится держать документацию для проектов, которые целиком лезут в контекст (собственно, практика хранения документации рядом с кодом для нейронок - это, по сути, сжатие контекста).
● Качественный ризонинг по такому длинному контексту - вообще уникальное явление.

Для чего я сам успел её попробовать
Я задался целью проверить длинный контекст и ризонинг - главные преимущества модели, исходя из этого и выбрал задачи.

В одном из проектов недавно прошли архитектурные изменения и сопутствующий рефакторинг: нужно было распилить Next.js приложение на Next.js + NestJS + background workers и сделать монорепу.
Эти изменения в основном делались руками, т.к. нейронки с таким не очень справляются.
Но из-за этого документация отстала от актуального состояния проекта и нужно было ее обновить - не самое интересное занятие, в отличие от того же рефакторинга, где бывают креативные моменты.

Проект небольшой, примерно на 350к токенов, но это уже за пределами возможностей Sonnet 3.7.

Так как единственным местом, где модель нормально работала, была AI Studio, решил тряхнуть стариной и взял для этого Repomix - эта штука собирает указанные файлы в проекте в один мега-файл, который можно скинуть в чат модели (спустился до 2-го уровня согласно этой классификации :)).

1. Документация
В рамках чата в AI Studio попросил сделать markdown для обновления файлов документации (порядка 10 штук по разным частям и слоям системы), и потом руками их перенес в проект.
А так как у модели лимит на output 65k токенов, то генерил по нескольку документов за раз.

Результат на 4.5 - актуальное состояние проекта передано очень точно, но были некоторые стилистические правки.

2. Рефакторинг
Ещё одна задача, хорошо подходящая для такой модели - планирование "широких" рефакторингов.

Тут я решил выделить React-компоненты, инкапсулирующие в себе повторяющиеся элементы, которые встречались много где в коде фронтенда и при этом таскали за собой портянку tailwind-классов (нагенерились в процессе вайб-кодинга ;))

● задача была поставлена в виде "проанализируй весь код фронтенда и предложи, какие элементы можно выделить в компоненты";

● получил список компонентов, штук 10, которые можно выделить, с обоснованием того, почему их стоит выделять и примеры, откуда;

● попросил сгенерить код для каждого из них, перенес в проект;

● по каждому из компонентов попросил предоставить список мест в проекте, где его можно использовать - скажем, для Button вышел список из примерно 30 файлов и 50 кнопок, которые можно заменить базовым компонентом;

● ну а с готовым списком уже пошел в Cursor Agent + Sonnet 3.7 для изменения существующего кода на использование компонентов (показательно, что у него иногда контекст кончался в процессе работы и приходилось переключаться на MAX).

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


Как видите, обе задачи довольно широкие и заставляют модель смотреть в много разных мест проекта и уметь их между собой связывать.
Всё это было в рамках одного чата, контекст в котором в процессе общения распух до 400к, и модель всё ещё хорошо с ним справлялась.
И, кстати, при этом довольно шустро как думала, так и генерила ответы.

Если оно до 1м и потом до 2м токенов так же будет работать - для многих проектов я бы предпочел Gemini 2.5 всем остальным существующим моделям.

Остаются лишь вопросы тулинга и цены :)



Прошлые посты по связанным темам:
Уровни внедрения ИИ в разработку
Инициативность Sonnet 3.7
Инициативность Sonnet 3.7 и MCP
Claude 3.7 Sonnet MAX
OpenAI o3-mini

#ai #development #model
👍195🔥5💯2❤‍🔥1