TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 306 subscribers
Post #380 558
🔬 Проверил .NET скиллы для Copilot CLI

Microsoft на прошлой неделе выкатила dotnet/skills — репу с agent skills для .NET разработчиков. Ставишь через
/plugin install dotnet-diag@dotnet-agent-skills

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

Я каждый день работаю с Copilot CLI на рабочем проекте, и первая мысль была "ну это просто промпты в markdown".

Если честно я так ко всем скиллам отношусь) Ну типа скептически. Но тут вроде умные дяди написали. Хуйни не посоветуют… Наверное.

В общем, решил зачекать, а не угадывать.

1️⃣ Взял задачу с кодом из своего репо — написать BenchmarkDotNet-проект для бенчмарка SimpleKeywordEmbeddingGenerator.

2️⃣ Прогнал три раза: Copilot с некорректным скиллом csharp-scripts, Copilot без скилла, Copilot с правильным скиллом.

Выбрал для теста скилл microbenchmarking. Он сам признаётся в своём файле: "у LLM известные паттерны ошибок с BenchmarkDotNet из-за устаревших данных в training data". То есть по умолчанию LLMки подсовывают старую версию и пишут некорректно бенчмарки. Вот и посмотрим как будет, подумал.

Эксперимент 1: Без скилла

Copilot написал вот такой бенчмарк:


[Benchmark(Baseline = true)]
public async Task SingleString()
{
await _generator.GenerateAsync(SingleInput); // результат выброшен
}


--job Dry прошёл без ошибок, аллокации вроде как измерялись. Но в колонке Allocated для SingleString — прочерк, 0 байт. Хотя метод явно что-то создаёт в памяти.

Причина: мы вызываем GenerateAsync, но не возвращаем результат — он просто выбрасывается. JIT видит что результат никуда не идёт, и может оптимизировать вычисление. [MemoryDiagnoser] тоже не видит аллокаций у выброшенного результата. Скилл прямо об этом предупреждает: "Return results from benchmark methods".

Эксперимент 2: Со скиллом

Тут уже агент написал правильно:


[Benchmark(Baseline = true)]
public Task<GeneratedEmbeddings<Embedding<float>>> GenerateSingle()
=> _generator.GenerateAsync(SingleInput); // результат возвращается


И сразу: GenerateSingle: 2.83 KB allocated. Данные корректные.

Ещё два момента. Во-первых, версии без скилла — написали BenchmarkDotNet Version="0.14.0", актуальная 0.15.8. Скилл говорит "используй dotnet add package без версии" — и только с правильным скиллом агент именно так и сделал.

Эксперимент 3: в котором неверный скилл все равно уменьшил потребление токенов.

Во-вторых, самая неожиданная находка: я поставил csharp-scripts скилл (который вообще для one-file скриптов, не для BDN-проектов) — и тоже получил улучшение кода с 3 из 7 до 6 из 7 критериев.

😱 И что приятно удивило — даже с неправильным скиллом message-токены упали с 14.6k до 6.8k!

То есть агент решил задачу в два раза меньшим числом итераций. Любой скилл добавляет режим "поработай аккуратнее". Но специфическую ошибку с аллокациями исправил только правильный.

🅰️ Короче, скиллы работают — НО! Но но но!

Есть момент, что нужно подбирать скиллы каждый раз!

🌭️️️️️️ Им бы написать роутер-скилл, кмк, который бы сам умел выбирать из сета. Думаю, это решило бы проблему. Но вы тоже это можете сделать и даже без коммита в основное репо. Но просто учитывайте это.

В общем, для диагностики, дебага, BDN-бенчмарков — реально помогают, там есть специфика которой нет в training data. Для остального — зависит от задачи и надо подбирать скилл.

Полный эксперимент с кодом, тремя ветками и инструкцией для воспроизведения туть. Можете все сами почекать
GitHub GitHub - dotnet/skills: Repository for skills to assist AI coding agents with .NET and C# Repository for skills to assist AI coding agents with .NET and C# - dotnet/skills
  • ❤ 2
  • ❤‍🔥 1
  • 👍 1
More from @dimasshortposts
  1. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  2. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  3. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  4. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  5. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
  6. Sep 9, 2026🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот канальчик, и пора бы описат…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →