Алексей | AI PROKA4
رفتن به کانال در Telegram
AI Transformation Lead Из 8 лет QA-автоматизации - в интеграцию AI решений в процессы разработки и бизнеса на уровне всей компании.
نمایش بیشترکشور مشخص نشده استدسته بندی مشخص نشده است
676
مشترکین
-224 ساعت
+17 روز
+1530 روز
آرشیو پست ها
🔥 Модель забывает середину! Почему?
Странный факт: если спрятать нужный факт в начале или в конце длинного контекста - модель его найдёт. Спрячьте ровно тот же факт в середине - и она его теряет.
Это называют lost in the middle.
Точность по позиции идёт U-образной кривой (на картинке попробовал изобразить): высокая по краям, проседает в середине на 20-30 пунктов.
Почему так? Внимание модели не размазано ровно по контексту. Механизм внимания системно недовешивает то, что далеко от краёв - начало и конец получают больше веса, середина проваливается.
Дальше самое интересное. Окна выросли до миллиона токенов, и все ждали, что проблема исчезнет.
Она не исчезла - просто переехала:
🟢модели проходят тест «найди иголку в стоге» почти на 100%, но это тест на «процитируй одно предложение». Реальная задача - рассуждать по нескольким разбросанным кускам, и вот там всё сыпется
🟢у большинства фронтир-моделей эффективный контекст - 200-400 тысяч токенов, дальше качество заметно падает. Заявленный миллион и рабочий миллион - разные вещи
🟢деградация есть даже когда факт лежит удобно, просто от длины входа. Это отдельно назвали context rot - «гниение контекста»
Отсюда практический вывод, который меняет привычки:
🟢контекст - не архив, а рабочий стол. Чем меньше на нём лишнего, тем точнее ответ
🟢важное держите ближе к краям - в начале запроса или в конце. Не в середине простыни
🟢набитое окно - это не «ещё есть место», это уже просевшее качество
Так что /clear и /compact - это не про экономию токенов. Это про то, чтобы модель вообще видела то, что вы ей дали.
⚡️ Это первый ролик на канале. И первый урок курса по Claude Code.
Никаких «подпишись, потом что-нибудь выложу» — контент уже здесь: 9 минут, после которых у вас стоит Claude Code и вы понимаете сессию и контекст - то, без чего агентом пользуются наугад, а потом жалуются, что «ИИ тупит».
Внутри: установка с нуля, первый запрос, /clear и /compact без сжигания токенов впустую.
📎 Методичка в PDF прилагается: конспект + домашка. Такая будет к каждому уроку.
▶️ https://youtu.be/5lNjosbbWdM?is=84lrezUQxXfuy24A
Подписка и лайк и следующий урок про CLAUDE.md выйдет быстрее.
🔥 Plan mode: сначала план, потом правки
По умолчанию Claude часто начинает менять файлы сразу - и «быстрый фикс» иногда расползается на 12 файлов не туда. Plan mode это лечит.
В режиме плана Claude только читает и анализирует, ничего не трогает. Показывает пошаговый план - что и в каких файлах собирается сделать - и ждёт вашего «ок». Запрет на правки жёсткий, на уровне инструмента, а не на честном слове.
Как включить:
🟢
Shift+Tab дважды (Default → Auto-accept → Plan). Внизу загорится ⏸ plan mode on
🟢 или команда /plan в начале запроса
Дальше вы читаете план и правите или апрувите, ну или отклоняете)
Когда включать:
🟢 да - рефакторинг, правки в 3+ файлах, миграции, незнакомый код, размытая задача
🟢 нет - один файл, мелочь, легко откатить: план только мешает
Смысл в двух вещах: план ловит «а почему он лезет в этот файл?» до того, как файл тронут, и вскрывает масштаб - вы просили «добавь рейт-лимит на эндпоинты», а Claude собрался переписать весь пайплайн.
30 секунд на чтение плана экономят полчаса на разгребание. Я в свое время настрадался)
#claude_code🔥 Закончили задачу - почистите контекст
Контекст - рабочая память Claude на сессию. Она не резиновая, и качество падает ещё до того, как окно переполнится: чем больше лишнего, тем хуже Claude держит важное.
Поэтому чистить нужно по ходу, а не «когда упёрлись».
Две команды под две ситуации:
🟢
/clear - стирает историю полностью, старт с чистого листа (CLAUDE.md и правки в файлах остаются). Используйте, когда уходите на другую, не связанную задачу.
🟢 /compact - сворачивает историю в резюме: нить цела, место освобождается. Используйте, когда продолжаете по той же тебе, но окно уже забивается.
Правило: не связано с предыдущим - /clear, связано но тяжело - /compact. Проверить загрузку - /context (перевалило за 80% - пора).Чистый контекст - это прямее ответы и меньше токенов на ветер. #claude_code
🤟🏻А вот и вышел Sonnet 5
Пытаются, хотя бы что-то выпустить после запрета Fable 5🙂
По кодингу не плохо, почти как Opus, на практике тоже в целом хорошо, могу подтвердить близость к опусу!
Это уже диагноз?)
«Клодуууу заплатите чеканной монетой, чеканной монетой, о-о-оу»
🔥 Раскидайте раздутый CLAUDE.md по rules
Как писать rule мы уже разобрали. Теперь применим это к жизни!
У вас наверняка есть
CLAUDE.md, который уже оброс - стиль кода, правила API, требования к тестам, заметки про БД, инструкции по деплою. И всё это грузится каждую сессию, даже когда вы правите одну кнопку на фронте.
Разносим за три шага.
Шаг 1. Решите, что остаётся в CLAUDE.md. Сюда - только то, что нужно всегда и везде:
🟢 архитектура и структура проекта
🟢 команды: сборка, тесты, линт
🟢 общие договорённости - язык, формат коммитов, стиль
Шаг 2. Всё, что про конкретную область кода - выносите в rules с привязкой к путям:
.claude/
CLAUDE.md # only project-wide essentials
rules/
api.md # paths: src/api/**/*.ts
testing.md # paths: "**/*.test.ts"
db.md # paths: src/db/**/*.ts
Теперь правила API подтянутся, только когда Claude работает в src/api/. Если работаете над фронтом - то в контексте их нет. (Как именно писать paths: и маски - мы разбирали в прошлом посте.)
Шаг 3. Выпилите перенесённое из CLAUDE.md.
Это важно: если правило уехало в rule, не оставляйте его копию в CLAUDE.md. Иначе при конфликте двух версий поведение становится непредсказуемым.
Как понять, что куда - простой критерий:
🟢 нужно всегда → CLAUDE.md (или rule без paths:)
🟢 нужно только в части кода → rule с paths:
🟢 одна тема - один файл, не сваливайте API и тесты в кучу
Один момент при разносе. Правило, которое должно срабатывать при СОЗДАНИИ файла («у каждого нового модуля - такой-то заголовок»), через paths: не выстрелит - триггер срабатывает на чтении, а не на создании. Такое оставляйте в CLAUDE.md.
Проверьте результат. Команда /memory покажет, что реально подгрузилось.
И живой тест: откройте файл из src/api/ - правило про API должно появиться в контексте. Откройте фронт - не должно.
Выхлоп простой: CLAUDE.md худеет, контекст не забит тем, что сейчас не нужно, а Claude видит ровно то, что относится к текущей задаче, - и меньше путается.
#rules🔥 Как написать свой rule (на примере)
В прошлый раз разобрали, зачем нужна папка
.claude/rules/.
Теперь - как реально написать правило, чтобы оно срабатывало именно там, где надо.
Допустим, ты каждый раз напоминаешь Claude одно и то же про свой API-слой: валидируй вход, держи единый формат ошибки.
Выноси это в правило.
Шаг 1. Создай файл .claude/rules/api.md и опиши правила:
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Validate every request body with Zod
- Return errors as { error: string, code: number }
- Log each request with a correlation id
Шаг 2. Разберись, как оно грузится. Всё решает frontmatter:
🟢 без paths: - правило грузится всегда, каждую сессию, как кусок CLAUDE.md
🟢 с paths: - подтянется только когда Claude откроет файл, попадающий под маску
То есть правило про API не висит в контексте, пока ты пилишь фронт. Тронул файл из src/api/ - правило включилось.
Про маски - тут чаще всего и спотыкаются:
🟢 ** - любая вложенность, * - один уровень. src/*.ts не достанет src/api/users.ts, а src/**/*.ts достанет
🟢 кавычки обязательны: пиши "**/*.ts", а не **/*.ts - YAML ругается на * и { без кавычек
🟢 несколько типов разом - через фигурные скобки: "src/**/*.{ts,tsx}"
Одна важная засада. Path-правило срабатывает, когда Claude ЧИТАЕТ подходящий файл, а не когда создаёт новый. Поэтому правило «у каждого нового файла должен быть такой-то заголовок» при создании не выстрелит. Такие вещи держи в CLAUDE.md или в правиле без paths:.
Пара принципов:
• один файл - одна тема: api.md, testing.md, security.md. Не вали всё в кучу
• пиши только сами правила, коротко, как в CLAUDE.md - без длинных «почему»
• не дублируй между CLAUDE.md и rules: при конфликте поведение непредсказуемо
Проверка: команда /memory показывает, какие правила реально подгрузились. Нет твоего файла в списке - значит маска не совпала.
И главное правило - это не закон, а сильная подсказка. Если что-то должно выполняться железно всегда - это уже про хуки, а не про rules.
#rules🔥 rules - когда CLAUDE.md раздулся
Как вы помните
CLAUDE.md - это память проекта и ограничения. Claude читает её в начале каждой сессии. Удобно, пока файл небольшой (~200 строк).
Но он пухнет: стиль кода, правила API, требования к тестам, заметки про БД - и всё это грузится каждую сессию, даже когда ты правишь одну кнопку на фронте.
Решение - папка .claude/rules/
Вместо одного раздутого файла - несколько маленьких, по темам:
.claude/
CLAUDE.md
rules/
api.md
testing.md
security.md
db.md
Каждый файл - обычный markdown с инструкциями, как кусок CLAUDE.md, только вынесенный отдельно.
➡️Главное - понять, как они грузятся:
• правило без привязки к путям грузится всегда, каждую сессию - то же, что писать в CLAUDE.md, просто аккуратнее разложено
• правило можно привязать к части кода - тогда оно подтянется, только когда Claude работает с этими файлами. Не трогаешь БД - правила про БД не висят в контексте
Вот второе и даёт главный выигрыш: контекст не забивается тем, что сейчас не нужно, а нужное включается ровно в тему.
Как это укладывается в общую картину:
• CLAUDE.md - что нужно всегда (архитектура, команды сборки, общие договорённости)
• rules - что нужно в конкретной части кода (для API - правила API, для тестов - про тесты)
• skills - что нужно под конкретную задачу (грузится, когда позвал)
Запомните практическое правило: если кусок CLAUDE.md длиннее ~15-20 строк и касается одной области - пора выносить его в отдельный rule.
🙌А как именно написать правило и привязать к нужным файлам - в следующем посте.
#rulesКак и обещал, по итогу постов про Skills дропаю вам методичку, чтобы было все в одном месте🤟🏻
🔥 Фишка: скилл, который сам тебя спрашивает (полный разбор)
Скилл можно сделать интерактивным - чтобы он остановился, спросил, что тебе нужно, и пошёл по выбранной ветке. Отвечает за это встроенный инструмент AskUserQuestion (нужен Claude Code от 2.0.21). Он рисует в терминале структурированный вопрос с вариантами, ты выбираешь стрелками.
Разберём, как им пользоваться в работе.
КАК УСТРОЕН ОДИН ВЫЗОВ
За один вызов можно задать до 4 вопросов сразу. У каждого вопроса:
🟢
question - сам вопрос
🟢header - короткая подпись-чип, до 12 символов
🟢options - от 2 до 4 вариантов, у каждого label (1-5 слов) и description (что это значит)
🟢multiSelect - разрешить выбрать несколько вариантов или нет
Вариант «Other» инструмент добавляет сам - всегда можно вписать свой ответ текстом, ты его не прописываешь.
Например, спросить язык и базу одним вызовом:
questions:
- header: "Language"
question: "Which language for the new service?"
multiSelect: false
options:
- label: "TypeScript"
description: "Node + TS, strict mode."
- label: "Python"
description: "FastAPI, type hints."
- header: "DB"
question: "Which database?"
multiSelect: false
options:
- label: "Postgres"
description: "Relational, default choice."
- label: "SQLite"
description: "Zero-config, local and dev."
МОЖНО ОТМЕТИТЬ НЕСКОЛЬКО ВАРИАНТОВ РАЗОМ
Если у вопроса стоит multiSelect:true, он превращается из «выбери одно» в «отметь сколько нужно» - чекбоксы вместо радиокнопок. Отмечаешь нужные, подтверждаешь - и скилл получает список ответов, а не один.
Когда это в тему - когда ответ по природе «несколько сразу»:
🟢какие тесты поднять: unit + e2e
🟢какие части системы аудитить: API + воркеры + БД
🟢какие проверки прогнать перед релизом
А для взаимоисключающего выбора (язык, уровень объёма) оставляй multiSelect: false - одно и только одно.
- header: "Surfaces"
question: "Which surfaces should the audit cover?"
multiSelect: true
options:
- label: "API"
description: "HTTP routes and handlers."
- label: "Workers"
description: "Background jobs and queues."
- label: "DB"
description: "Schema and migrations."
Тут пользователь отметит, скажем, API и DB - и скилл пройдётся ровно по ним, не трогая остального.
МОЖНО НЕСКОЛЬКО ВЫЗОВОВ ПОДРЯД
Один вызов - не предел. Скилл умеет спрашивать пошагово и ветвиться: сначала узнать объём, а если выбрал «Full» - задать второй вопрос, по каким частям системы идти. Диалог получается адаптивный, а не один экран на всё.
В скилле это просто несколько шагов с вопросами:
# Execution flow
0. Ask the audit scope (AskUserQuestion).
1. If scope == "Full":
Ask which surfaces to cover (AskUserQuestion, multiSelect).
2. Apply ONLY the chosen scope and surfaces.
3. Write docs/architecture.md and print a short summary.
КАК ЗВАТЬ ЕГО В СКИЛЛЕ
Два способа:
🟢Человеческим языком: «спроси у пользователя объём аудита, предложи Overview / Overview+risks / Full». Claude сам соберёт вызов и придумает варианты.
🟢Структурой, как выше: пишешь question / header / options руками. Дольше, зато предсказуемо и одинаково каждый раз.
Пара советов:
🟢header - до 12 символов, иначе обрежется
🟢держи 2-4 варианта, не вываливай десять
🟢хочешь подсказать выбор - поставь рекомендуемый вариант первым и допиши «(Recommended)» в label
🟢«Other» уже есть из коробки, руками не добавляй
И ограничение, чтоб не словить сюрприз: в фоновых сабагентах и headless-режиме (без терминала) AskUserQuestion не сработает - ему нужен живой ввод. Плюс на ответ есть таймаут порядка минуты.
Перебери свои скиллы, которые делают «всё и сразу», и поставь в начало вопрос. Где надо - дай выбрать несколько галочками. А где ветвится - второй вопрос по итогам первого.
#skillsБыстренько прошелся, в целом мини-ачивка)
Как говорится "Why not?"
Практически все я уже знал до курса🤟
🔥 Скилл-дроп: разбор ошибки по стектрейсу
Первый готовый скилл. Кидаешь агенту простыню стектрейса - получаешь причину и минимальный фикс, без «давайте посмотрим, возможно, наверное»
Вот он целиком, клади в
~/.claude/skills/explain-error/SKILL.md:
--- name: explain-error description: Explains an error or stack trace: finds the cause and suggests a minimal fix. Trigger when the user pastes a trace, a failure log, or an error message. --- # What to do: 1. Find the lowest line of your own code in the trace (not libraries) 2. State the cause in one sentence, no fluff 3. Give a minimal fix - only what fixes the error 4. If info is missing (versions, code snippet) - ask, don't guess 5. No "you could also try" and no ten-item listsПункт 4 даёт больше всего - вместо уверенной чуши агент задаёт один уточняющий вопрос. Адаптируй под себя: впиши в шаги свой стек (куда смотреть в твоём фреймворке) - и точность вырастет. #skills
