Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
110 - Telegram Web
Telegram Web
Как работает Cursor ?

В блоге Programmatic Engineer вышел классный технический разбор про начинку Курсора. Автора блога, вроде как, пообщался лично с техническим кофаундером стартапа Anysphere (оценка $10B) и расписал по частям интересные детали: от стека до скейла. Почитать тут.

В бесплатной версии доступна только половина статьи (а за фулл платить 10$ в месяц на подписку 🥲), но и в таком варианте полно интересных моментов. Читается легко, как будто старая добрая книга Alex Xu по System Design. Самое то, если у вас вдруг собес в подобную компанию AI кодогенерации.

Работает примерно так.

1️⃣Проект пользователя сначала индексируется. Это значит следующее.

🔘Во-первых, каждый файл разбивается на кусочки (чанки) кода небольшого размера. Чанки улетают на сервер, где запускается эмбеддер модель компании. Модель эмбеддит чанки в вектора для последующего векторного поиска. Курсор говорит, что не хранит код на своих серверах, только эмбеддинги (но кто знает, что там происходит, код то вы свой все равно уже отправили им свой код 🙂). Извлечение эмбеддингов - довольно ресурснозатратный процесс, поэтому компания держит кластер GPU для инференса (думаю, что это капля в море по сравнению с стоимостью инференса LLM-ов).

Чтобы не просрать слить свои ключи и другую чувстивтельную инфу, обязательно заполняйте .gitignore и .cursorignore, чтобы исключить какие-то ресурсы из индексации


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


2️⃣Теперь, когда индекс построен, можно пользоваться всеми фичами. Например, становится доступным чат с Курсором, где вы можете попросить курсор объяснить, как работает какая-то функция в вашем коде или попросить Курсор что-нибудь реализовать. В этом случае Курсор просканирует индекс, найдет релевантные ID чанков кода с помощью векторного поиска, заберет исходнй код чанков с вашего проекта, и пойдет в LLM просить рассуждать и генерировать план действий. Ну а дальше все это интерактивно будет отображаться в IDE. Курсор может ваш код и не хранит, а вот LLM-провайдеры – может быть.

3️⃣ Автокомплит, или tab-подсказки (это когда вы пишите комментарий или сигнатуру функции, а Курсор предлагает ее реализацию), работает чуть проще из-за чувствительности к latency. Здесь просто локальный контекст уходит в LLM и та генерирует автокомплит.

4️⃣ По стеку используется Turbopuffer для векторного хранилища эмбеддингов чанков и дерева файловой системы. Rust для высоконагруженной части на сервере, TypeScript для клиента IDE.

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

Happy Learning!

@max_dot_sh
Please open Telegram to view this post
VIEW IN TELEGRAM
Senior ML Engineer в Waymo, Perception Team, California

Сегодня в отзывах на собесы опыт ML инженера в стартап Waymo – команда делает self-driving cars. Главное не спутать их с дургим стартапом про беспилотные автомобили Wayve.

Авторская орфография сохранена

➡️Ник автора в тг - Анонимно
➡️ Название компании - Waymo, команда Perception

➡️Расскажите про свой бэкграунд - МЛ инженер в стартапе, занимаюсь анализом и разметкой видео
➡️Как подались на вакансию - рекрутер через LinkedIn

🔥 Субъективно Сложность процесса по 10 бальной шкале - 8

➡️Когда начали процесс - 01/25
➡️Когда закончили процесс - 03/25

➡️ Позиция, на которую собеседовались - Senior Machine Learning Engineer
➡️Грейд на который собеседовались (если известно) -Senior
➡️Локация вакансии - Mountain View, California (гибридный формат, я уже в штатах, можно работать в целом удаленно по Америке)

🔥 Расскажите про этапы собеседований

Процесс довольно стандартный, но с рядом своих фишек.

1) Recruiter screen (30 мин): типичный созвон с рекрутером. Обсудили мой бэкграунд, что делаю, какие направления интересны. Немного рассказали про Perception команду и чем она занимается (обработка данных с сенсоров, 3D object detection, motion forecasting). Также сразу обозначили, что важно уметь работать с продовыми пайплайнами, не только с ресерчем. Сразу обговорили зарплатные вилки (отписал ниже)

2) Technical Phone Screen (45 мин): дали довольно нетривиальную задачу на динамическое программирование. Нужно было шейрить экран и писать в своем блокноте / IDE. Я писал в колабе. Интервьюер никак не помогал, сложилось ощущение, что сам не знает как решить задачу.

3) Домашнее задание: дали задачу по object tracking видео и статью для реализаии. Нужно было:
- придумать baseline трекер (например, с использованием IoU)
- оценить качество (precision, recall, ID switches и т.д.)
- реализовать пейпер
- все это задокументировать и прислать jupyter ноутбук

Onsite (4 секции по 45 мин):

4) System Design: дизайн пайплайна для inference perception модели на автономной машине в реал-тайме. Вопросы про latency, batching, fault tolerance, A/B тестирование моделей. Местами уводили в детали вплоть до GRPC, protobufs и интеграции с hardware.

5) ML-focused coding: нужно было реализовать модуль для обработки lidar-точек и агрегации по временным фреймам. Часть кода была дана, часть — нужно писать с нуля. Плюс надо было оптимизировать память, потому что lidar-данные могут быть большими. Явный уклон в прототипирование, и это понравилось.

6) ML knowledge & debugging: дали лог модели, обученной на object detection. Нужно было по логам и распределениям метрик понять, что “пошло не так”. Также обсуждали выбор лосса, augmentations, data imbalance.

7) Behavioural: классическое интервью по фреймворку STAR. Много спрашивали про конфликты, работу с DS и PM, принятие решений в условиях неопределенности. Спрашивали кейсы, когда я был не согласен с командой.

Через пару дней после онсайта пришел отказ с объяснением, что команда ищет инженера с другим профилем. Что за профиль никто не объяснил. HR-ы после отказа слились с переписки.

Что понравилось:
- Команда, судя по вопросам, делает интересные вещи в области 3D perception.

Что не понравилось:
- Домашка слишком объемная
- В некоторых секциях было ощущение, что интервьюерам все равно


➡️Итоги собеседования: отказ после онсайта

➡️Информация про Total Compensation: base $200-220k + target bonus ~15% + $250k в RSU (vesting 4 года, по 25% в год).

#интервью

@max_dot_sh
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/06/16 00:41:54
Back to Top
HTML Embed Code: