<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Денис Матаков</title>
	<atom:link href="https://matakov.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://matakov.com</link>
	<description>Блог технического руководителя</description>
	<lastBuildDate>Wed, 11 Feb 2026 20:27:42 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>

<image>
	<url>https://matakov.com/wp-content/uploads/2025/04/avatar-edited-150x150.png</url>
	<title>Денис Матаков</title>
	<link>https://matakov.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Claude Code и 1С.Предприятие</title>
		<link>https://matakov.com/claude-code-i-1s-predpriyatie/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Wed, 11 Feb 2026 20:27:12 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[CTO]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5844</guid>

					<description><![CDATA[1С-разработка с помощью Claude Code: честный опыт и выводы Введение Эта статья — результат практического эксперимента по использованию AI-агента&#160;Claude Code&#160;(модель Claude Opus 4.5) для разработки на платформе 1С:Предприятие. Мы выполнили две реальные задачи разной сложности и оценили результаты с помощью профессионального 1С-разработчика. Главный вывод:&#160;AI-ассистент — отличный аналитик и документатор для 1С, но ненадёжный кодер. Анализ, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">1С-разработка с помощью Claude Code: честный опыт и выводы</h1>



<h2 class="wp-block-heading">Введение</h2>



<p>Эта статья — результат практического эксперимента по использованию AI-агента&nbsp;<strong>Claude Code</strong>&nbsp;(модель Claude Opus 4.5) для разработки на платформе 1С:Предприятие. Мы выполнили две реальные задачи разной сложности и оценили результаты с помощью профессионального 1С-разработчика.</p>



<p><strong>Главный вывод:</strong>&nbsp;AI-ассистент — отличный аналитик и документатор для 1С, но ненадёжный кодер. Анализ, декомпозиция и документирование — во много раз быстрее человека. Принятие решений и код — оставить разработчику.</p>



<span id="more-5844"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Выполненные задачи</h2>



<h3 class="wp-block-heading">Задача 1: Обработка &#171;Поиск партии по товарам&#187;</h3>



<p><strong>Суть задачи:</strong>&nbsp;Создать обработку для УПП 1.2, которая помогает складским сотрудникам идентифицировать неопознанный груз по списку товаров.</p>



<p><strong>Требования:</strong></p>



<ul class="wp-block-list">
<li>Форма с выбором складов и таблицей товаров (номенклатура + характеристика + количество)</li>



<li>Поиск документов &#171;Поступление товаров и услуг&#187; где ВСЕ указанные товары есть на остатках в одной партии</li>



<li>Вывод результата через СКД с двумя уровнями группировки</li>



<li>Условное оформление (зелёный фон при совпадении, жирный шрифт для введённых позиций)</li>
</ul>



<p><strong>Результат:</strong>&nbsp;Готовый BSL-код на 814 строк + инструкция по созданию формы в конфигураторе.</p>



<h3 class="wp-block-heading">Задача 2: Анализ обработки интеграции с CyberLines</h3>



<p><strong>Суть задачи:</strong>&nbsp;Проанализировать существующую обработку загрузки заявок на перевозку (13,378 строк кода) и ответить на 5 вопросов.</p>



<p><strong>Требовалось:</strong></p>



<ol class="wp-block-list">
<li>Описать способы активации обработки</li>



<li>Спланировать внедрение многопоточности и отказоустойчивости</li>



<li>Предложить оптимизацию SQL-запросов</li>



<li>Составить список данных из внешней системы vs окружения 1С</li>



<li>Описать поэтапный процесс создания заявки</li>
</ol>



<p><strong>Результат:</strong>&nbsp;Детальный аналитический отчёт на 660 строк + отчёт линтера на 497 строк + исправленная версия обработки (0 синтаксических ошибок, но с логическими проблемами).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Хронология: с какой попытки успех?</h2>



<h3 class="wp-block-heading">Задача 1: &#171;Поиск партии по товарам&#187; — успех с 3-й итерации</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Итерация</th><th>Дата</th><th>Инструменты</th><th>Результат</th><th>Оценка эксперта</th></tr></thead><tbody><tr><td>1</td><td>22 января</td><td>Claude Code</td><td>14 критических замечаний</td><td>— &#171;Мне быстрее с нуля написать&#187;</td></tr><tr><td>2</td><td>24 января</td><td>Claude Code + замечания</td><td>XML не работает, часть ошибок</td><td>— &#171;Косяки не исправлены&#187;</td></tr><tr><td>3</td><td>28 января</td><td>Claude Code + MCP + линтер</td><td>Код осмысленный, логика верная</td><td>+ &#171;Можно решением считать&#187;</td></tr></tbody></table></figure>



<p><strong>Время от старта до рабочего решения:</strong>&nbsp;6 дней (с учётом пауз на ревью)</p>



<p><strong>Ключевой перелом:</strong>&nbsp;Подключение MCP-сервера для валидации API платформы.</p>



<h3 class="wp-block-heading">Задача 2: &#171;Анализ обработки CyberLines&#187; — успех с 1-й итерации</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Итерация</th><th>Дата</th><th>Результат</th><th>Оценка эксперта</th></tr></thead><tbody><tr><td>1</td><td>30-31 января</td><td>Полный анализ + отчёт линтера + исправленная версия</td><td>+ Анализ отлично / ~ Код с ошибками</td></tr></tbody></table></figure>



<p><strong>Время:</strong>&nbsp;~2 часа на анализ 13,378 строк + генерацию отчётов + автоисправление</p>



<p><strong>Почему анализ сразу успех:</strong>&nbsp;Аналитическая задача — AI читает код, а не пишет. Формат вывода (Markdown) стандартный.</p>



<p><strong>Почему код с ошибками:</strong>&nbsp;AI делает синтаксически корректные, но логически неверные изменения — ломает запросы и транзакции.</p>



<h3 class="wp-block-heading">Сводка по задачам</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Задача</th><th>Тип</th><th>Итераций до успеха</th><th>Время</th><th>Вердикт</th></tr></thead><tbody><tr><td>Поиск партии</td><td>Разработка</td><td>3</td><td>6 дней</td><td>~ Долго, но возможно</td></tr><tr><td>Анализ обработки</td><td>Аналитика</td><td>1</td><td>2 часа</td><td>+ Отлично</td></tr><tr><td>Правки кода обработки</td><td>Кодирование</td><td>1</td><td>—</td><td>~ Синтаксис ОК, логика сломана</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Процесс работы</h2>



<h3 class="wp-block-heading">Проблема 1: Проприетарный формат 1С</h3>



<p>Первый барьер — файл&nbsp;<code>.dt</code>&nbsp;(дамп базы данных 1С). Это закрытый бинарный формат, который ни один AI прочитать не может.</p>



<p><strong>Решение:</strong>&nbsp;1С-разработчик выгрузил конфигурацию в файлы (XML + BSL) через стандартную процедуру конфигуратора. Это критический шаг — без выгруженных исходников работа невозможна.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Это считай sql бекап с кашей из символов внутри&#187;</em> — Никита (1С-разработчик)</p>
</blockquote>



<h3 class="wp-block-heading">Итерации по задаче 1</h3>



<p><strong>Итерация 1:</strong>&nbsp;14 критических замечаний от эксперта:</p>



<ul class="wp-block-list">
<li>Неверный формат вывода (чистый код вместо XML-структуры форм)</li>



<li>Выбор товаров через табличную часть вместо списка значений</li>



<li>Изобретение велосипедов вместо использования встроенных методов</li>



<li>Использование несуществующих функций (<code>СТРОКАСОЕДИНИТЬ</code> — выдумка)</li>



<li>Несоответствие ТЗ по использованию СКД</li>
</ul>



<p><strong>Итерация 2:</strong>&nbsp;После загрузки замечаний — улучшения, но:</p>



<ul class="wp-block-list">
<li>XML-файлы для загрузки в 1С не работают (ошибки XDTO)</li>



<li>СКД используется частично</li>



<li>Часть ошибок не исправлена</li>
</ul>



<p><strong>Итерация 3 (с MCP):</strong>&nbsp;Подключили MCP-сервер для API платформы 1С:</p>



<ul class="wp-block-list">
<li>Код стал осмысленнее</li>



<li>Логических косяков не обнаружено</li>



<li>Штрихкоды формируются правильно</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Я бы даже сказал что это можно решением считать&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">Оценка от эксперта: код (задача 1)</h3>



<p>После финальной итерации:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Из хороших новостей он победил проблему с штрихкодами, теперь они верно формироваться будут. Код явно стал осмысленней. Каких-то жестких логических косяков не вижу.&#187;</em></p>
</blockquote>



<p>Замечания, которые остались:</p>



<ul class="wp-block-list">
<li>БСП (Библиотека стандартных подсистем) не используется</li>



<li>СКД используется минимально, хотя просили полностью на нём</li>
</ul>



<h3 class="wp-block-heading">Оценка от эксперта: анализ (задача 2, вопросы 1–5)</h3>



<p>Развёрнутая оценка ответов на 5 аналитических вопросов:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Вопрос</th><th>Оценка</th><th>Комментарий эксперта</th></tr></thead><tbody><tr><td>1. Способы активации</td><td>+ Хорошо</td><td>Ключевые способы найдены и верно описаны. Пропущены возможности запуска для отладки с формы</td></tr><tr><td>2. Многопоточность и отказоустойчивость</td><td>+ Отлично</td><td>Вопрос с подвохом — всё уже реализовано. AI это обнаружил, структурировал с номерами строк</td></tr><tr><td>3. Оптимизация SQL</td><td>+ Отлично</td><td>Все запросы найдены с расположением в коде. Рекомендации хорошие, не хватает оценки прироста</td></tr><tr><td>4. Данные из внешней системы</td><td>~ Средне</td><td>Правда, но поверхностно — описание вместо структуры таблиц. Плюс: нашёл забытые настройки ПВХ</td></tr><tr><td>5. Процесс создания заявки</td><td>~ Средне</td><td>Верно, с наглядными схемами, но верхнеуровнево. 3000+ строк в 1 этап, инициализация в 10 строк</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Оценка от эксперта: автоисправление кода (задача 2)</h3>



<p>AI получил обработку на 13,378 строк и самостоятельно внёс исправления. Результат проверки экспертом:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Что сделал AI</th><th>Оценка</th><th>Комментарий эксперта</th></tr></thead><tbody><tr><td>0 синтаксических ошибок</td><td>+</td><td>Весь код валидный — это само по себе впечатляет</td></tr><tr><td>Переписал код по стандартам 1С</td><td>+</td><td>Без замечаний</td></tr><tr><td>Нашёл и обновил версию</td><td>+</td><td>Самостоятельно определил где и как</td></tr><tr><td>Добавил логирование исключений</td><td>~</td><td>Хорошая идея, но непрактично для десятков миллионов документов</td></tr><tr><td>Оптимизировал запросы</td><td>—</td><td>Синтаксически верно, но логика нарушена — вернутся другие данные</td></tr><tr><td>Переписал логику транзакций</td><td>—</td><td>Нарушена логика записи документов</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Шок, но синтаксических ошибок 0&#8230; Но с запросами как всегда у нейронки тяжко. Написан синтаксически верно, но нарушил их логику&#187;</em>&nbsp;— Никита</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Инструменты</h2>



<h3 class="wp-block-heading">1. Claude Code</h3>



<p>AI-агент в командной строке с доступом к файловой системе.</p>



<p><strong>Ссылка:</strong>&nbsp;<a href="https://claude.ai/code">claude.ai/code</a></p>



<p><strong>Модель:</strong>&nbsp;Claude Opus 4.5 (claude-opus-4-5-20251101)</p>



<p><strong>Преимущества для 1С:</strong></p>



<ul class="wp-block-list">
<li>Может читать и анализировать большие BSL-файлы (13,000+ строк)</li>



<li>Понимает структуру конфигурации 1С (XML + BSL)</li>



<li>Хорошо справляется с аналитическими задачами</li>
</ul>



<h3 class="wp-block-heading">2. MCP 1C Platform</h3>



<p>MCP-сервер для поиска по API платформы 1С:Предприятие.</p>



<p><strong>Ссылка:</strong>&nbsp;<a href="https://github.com/alkoleft/mcp-bsl-platform-context">github.com/alkoleft/mcp-bsl-platform-context</a></p>



<p><strong>Возможности:</strong></p>



<ul class="wp-block-list">
<li>Поиск методов, свойств и типов платформы</li>



<li>Получение конструкторов типов</li>



<li>Информация о членах типов (методы, свойства)</li>
</ul>



<p><strong>Пример использования:</strong></p>



<pre class="wp-block-code"><code>● 1c-platform - search (MCP)(query: "Метаданные", type: "property")
  ⎿ "# Результаты поиска: 'Метаданные'
     **Тип:** `ОбъектМетаданныхКонфигурация`
     **Только для чтения:** Да"

● 1c-platform - search (MCP)(query: "РегистрНакопления", type: "type")
  ⎿ "## Найдено 6 элементов
     ### РегистрНакопленияВыборка.&lt;Имя регистра накопления&gt;
     **Тип элемента:** Type"
</code></pre>



<p><strong>Установка MCP-сервера в Claude Code:</strong></p>



<ol class="wp-block-list">
<li><strong>Убедитесь, что установлен Node.js 18+:</strong></li>
</ol>



<pre class="wp-block-code"><code>node --version  # v18.0.0 или выше
</code></pre>



<ol start="2" class="wp-block-list">
<li><strong>Откройте настройки Claude Code:</strong></li>
</ol>



<pre class="wp-block-code"><code># Windows
notepad %USERPROFILE%\.claude\settings.json

# macOS/Linux
nano ~/.claude/settings.json
</code></pre>



<ol start="3" class="wp-block-list">
<li><strong>Добавьте конфигурацию MCP-сервера:</strong></li>
</ol>



<pre class="wp-block-code"><code>{
  "mcpServers": {
    "1c-platform": {
      "command": "npx",
      "args": &#91;"mcp-bsl-platform-context"]
    }
  }
}
</code></pre>



<ol start="4" class="wp-block-list">
<li><strong>Перезапустите Claude Code</strong> для применения настроек.</li>



<li><strong>Проверьте работу</strong> — при запуске Claude Code должен показать:</li>
</ol>



<pre class="wp-block-code"><code>MCP Servers: 1c-platform
</code></pre>



<p><strong>Альтернативная установка (локально):</strong></p>



<pre class="wp-block-code"><code># Клонировать репозиторий
git clone https://github.com/alkoleft/mcp-bsl-platform-context.git
cd mcp-bsl-platform-context

# Установить зависимости
npm install

# Настроить в settings.json
{
  "mcpServers": {
    "1c-platform": {
      "command": "node",
      "args": &#91;"/полный/путь/к/mcp-bsl-platform-context/dist/index.js"]
    }
  }
}
</code></pre>



<p><strong>Доступные методы MCP:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Метод</th><th>Описание</th></tr></thead><tbody><tr><td><code>search</code></td><td>Поиск по API (методы, свойства, типы)</td></tr><tr><td><code>info</code></td><td>Детальная информация об элементе</td></tr><tr><td><code>getMembers</code></td><td>Список методов и свойств типа</td></tr><tr><td><code>getConstructors</code></td><td>Конструкторы типа</td></tr><tr><td><code>getMember</code></td><td>Информация о конкретном методе/свойстве</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">3. BSL Language Server (Линтер)</h3>



<p>Статический анализатор кода для языка 1С.</p>



<p><strong>Репозиторий:</strong>&nbsp;<a href="https://github.com/1c-syntax/bsl-language-server">github.com/1c-syntax/bsl-language-server</a></p>



<p><strong>Скачать:</strong>&nbsp;<a href="https://github.com/1c-syntax/bsl-language-server/releases">Releases</a>&nbsp;— файл&nbsp;<code>bsl-language-server-X.X.X-exec.jar</code></p>



<p><strong>Версия в эксперименте:</strong>&nbsp;0.28.3</p>



<p><strong>Требования:</strong>&nbsp;Java 17+ (скачать с&nbsp;<a href="https://adoptium.net/">adoptium.net</a>)</p>



<p><strong>Установка:</strong></p>



<pre class="wp-block-code"><code># 1. Скачать JAR-файл
curl -L -o bsl-language-server.jar \
  https:&#47;&#47;github.com/1c-syntax/bsl-language-server/releases/download/v0.28.3/bsl-language-server-0.28.3-exec.jar

# 2. Проверить версию Java
java -version  # Нужна 17+

# 3. Проверить работу
java -jar bsl-language-server.jar --version
</code></pre>



<p><strong>Команды для анализа:</strong></p>



<pre class="wp-block-code"><code># Анализ одного файла
java -jar bsl-language-server.jar --analyze --src ./path/to/file.bsl

# Анализ директории с выводом в JSON
java -jar bsl-language-server.jar --analyze --src ./path/to/folder \
  --reporter json --outputDir ./reports

# Анализ с конфигурацией (отключение определённых правил)
java -jar bsl-language-server.jar --analyze --src ./path/to/folder \
  --configuration ./.bslls.json
</code></pre>



<p><strong>Пример&nbsp;<code>.bslls.json</code>&nbsp;для отключения правил:</strong></p>



<pre class="wp-block-code"><code>{
  "diagnostics": {
    "parameters": {
      "Typo": false,
      "SpaceAtStartComment": false
    }
  }
}
</code></pre>



<p><strong>Возможности:</strong></p>



<ul class="wp-block-list">
<li>Проверка синтаксиса и стандартов 1С</li>



<li>Поиск ошибок транзакций (<code>PairingBrokenTransaction</code>, <code>CommitTransactionOutsideTryCatch</code>)</li>



<li>Выявление устаревших методов (<code>DeprecatedCurrentDate</code>)</li>



<li>Оценка когнитивной и цикломатической сложности</li>



<li>Поиск неиспользуемых переменных</li>
</ul>



<p><strong>Статистика по анализу обработки (13,378 строк):</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Уровень</th><th>Количество</th><th>Описание</th></tr></thead><tbody><tr><td>Error</td><td>52</td><td>Критические ошибки — исправлять немедленно</td></tr><tr><td>Warning</td><td>411</td><td>Предупреждения — исправить в ближайшее время</td></tr><tr><td>Information</td><td>1,477</td><td>Информация — улучшение качества</td></tr><tr><td>Hint</td><td>2,029</td><td>Подсказки — стилистические замечания</td></tr><tr><td><strong>Всего</strong></td><td><strong>3,969</strong></td><td></td></tr></tbody></table></figure>



<p><strong>Топ найденных ошибок:</strong></p>



<ul class="wp-block-list">
<li><code>VirtualTableCallWithoutParameters</code> (12 шт.) — вызов виртуальной таблицы без параметров</li>



<li><code>IncorrectUseOfStrTemplate</code> (10 шт.) — некорректное использование СтрШаблон()</li>



<li><code>PairingBrokenTransaction</code> (7 шт.) — нарушена парность транзакций</li>



<li><code>DeprecatedCurrentDate</code> (5 шт.) — использование устаревшей ТекущаяДата()</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что получилось хорошо</h2>



<h3 class="wp-block-heading">1. Анализ существующего кода</h3>



<p>Claude Code отлично справляется с анализом больших кодовых баз:</p>



<ul class="wp-block-list">
<li>Нашёл все ключевые способы активации обработки и правильно расписал их применение (хотя пропустил возможности запуска для отладки с формы)</li>



<li>Описал механизм многопоточности через <code>ДлительныеОперации.ВыполнитьВФоне()</code></li>



<li>Составил список из 12 хранимых процедур SQL с их назначением и расположением в коде</li>



<li>Построил диаграмму последовательности создания заявки</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Учитывая как он в файлах хорошо покапался и нашел нужные регистры и документы, думаю просто план реализации от нейронки был бы очень полезен&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">2. Понимание существующей функциональности</h3>



<p>Один из вопросов анализа был с подвохом: задачи на многопоточность и отказоустойчивость уже были реализованы в обработке. AI это распознал и вместо того, чтобы планировать внедрение с нуля, подробно описал что уже есть — структурировал информацию и указал номера строк.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Ответ подробно расписал что есть в обработке, структурировал информацию и даже номера строк прикрепил. Уверен если бы я был незнаком с обработкой, то мне такая информация очень помогла бы. Плюс для составления документации очень полезно&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">3. Структурирование SQL-запросов</h3>



<p>Особенно впечатлил разбор SQL-запросов. В реальных 1С-проектах поиск нужного запроса — это боль: огромная вложенность процедур, имена таблиц отличаются от стандартных 1С-объектов, новые разработчики тратят часы, чтобы разобраться.</p>



<p>AI сразу расписал где какой запрос находится. Рекомендации по оптимизации тоже оценены положительно.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Нереальный респект за структурирование и подробное описание. Помню боль при разработке, как приходилось искать нужный запрос и как новые люди в проекте могли часы тратить&#8230; а тут он сразу расписал где какой запрос&#187;</em>&nbsp;— Никита</p>
</blockquote>



<p>Единственное пожелание — не хватило ожидаемого прироста производительности по каждой рекомендации.</p>



<h3 class="wp-block-heading">4. Обнаружение забытых настроек</h3>



<p>При составлении списка данных из внешней системы AI нашёл «Критичные настройки из ПВХ» — план видов характеристик. Эта информация не запрашивалась напрямую, но AI самостоятельно извлёк настройки, включая пару, о которых разработчик уже забыл.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Из плюсов выдал «Критичные настройки из ПВХ». Изначально даже не задумывался над их получением с такой формулировкой задачи, но он их достал и нашел даже пару настроек о которых я уже успел забыть, но они действительно используются&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">5. Поиск регистров и документов</h3>



<p>По ТЗ AI самостоятельно определил:</p>



<ul class="wp-block-list">
<li>Документ поступления: <code>Документ.ПоступлениеТоваровУслуг</code></li>



<li>Регистр партий: <code>РегистрНакопления.ПартииТоваровНаСкладах</code></li>



<li>Регистр штрихкодов: <code>РегистрСведений.ШтрихкодыНоменклатуры</code></li>
</ul>



<h3 class="wp-block-heading">6. Структурирование отчётов</h3>



<p>Создание документации с:</p>



<ul class="wp-block-list">
<li>Таблицами сравнения</li>



<li>ASCII-диаграммами архитектуры</li>



<li>Группировкой ошибок по типам</li>



<li>Приоритизацией исправлений</li>



<li>Наглядными схемами процессов</li>
</ul>



<h3 class="wp-block-heading">7. Работа с линтером</h3>



<p>Интеграция BSL Language Server позволила:</p>



<ul class="wp-block-list">
<li>Автоматически находить ошибки транзакций</li>



<li>Выявлять устаревшие методы (<code>ТекущаяДата()</code> → <code>ТекущаяДатаСеанса()</code>)</li>



<li>Оценивать когнитивную сложность методов</li>
</ul>



<h3 class="wp-block-heading">8. Синтаксическая корректность исправлений</h3>



<p>При автоматическом исправлении обработки (13,378 строк) —&nbsp;<strong>ноль синтаксических ошибок</strong>. AI корректно:</p>



<ul class="wp-block-list">
<li>Переписал код согласно стандартам 1С</li>



<li>Самостоятельно нашёл и обновил версию обработки</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что получилось плохо</h2>



<h3 class="wp-block-heading">1. Создание форм</h3>



<p>AI не может генерировать валидный XML для управляемых форм 1С. Ошибки XDTO при попытке загрузить в конфигуратор.</p>



<p><strong>Решение:</strong>&nbsp;Генерировать только BSL-код + инструкцию для ручного создания формы.</p>



<h3 class="wp-block-heading">2. Использование БСП</h3>



<p>AI не знает методы Библиотеки стандартных подсистем:</p>



<ul class="wp-block-list">
<li>Использует <code>ПоказатьПредупреждение()</code> вместо <code>ОбщегоНазначенияКлиентСервер.СообщитьПользователю()</code></li>



<li>Не применяет типовые паттерны БСП</li>
</ul>



<h3 class="wp-block-heading">3. Выдуманные функции</h3>



<p>В первых итерациях AI изобретал несуществующие методы:</p>



<ul class="wp-block-list">
<li><code>СТРОКАСОЕДИНИТЬ</code> (в 1С такого нет)</li>



<li>Неверные сигнатуры методов СКД</li>
</ul>



<p><strong>Решение:</strong>&nbsp;MCP-сервер для валидации API.</p>



<h3 class="wp-block-heading">4. Множество итераций</h3>



<p>Для получения рабочего результата потребовалось 3+ итерации с участием эксперта.</p>



<h3 class="wp-block-heading">5. Нарушение логики запросов при автоисправлении</h3>



<p>При попытке оптимизировать SQL-запросы AI написал синтаксически корректный код, но нарушил логику выборки данных — результат запроса возвращал бы другие данные, что повлекло бы ошибки в бизнес-процессе.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Попытался оптимизировать запросы. Но с запросами как всегда у нейронки тяжко. Написан синтаксически верно, но нарушил их логику. Мы получим другие данные, а значит это повлечет ошибки&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">6. Нарушение логики транзакций</h3>



<p>AI переписал логику объявления и фиксации транзакций. Результат — документы, которые раньше записывались, теперь могут не записаться.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Зачем-то переписал логику объявления и фиксации транзакций. Выглядит так, как будто логика записи документов нарушена и мы теперь не запишем то что раньше бы записалось&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">7. Избыточное логирование</h3>



<p>AI добавил логирование всех исключений — хорошая идея в теории, но непрактичная для обработки с десятками миллионов документов. Хранить такой объём логов просто негде.</p>



<h3 class="wp-block-heading">8. Поверхностность глубокого анализа</h3>



<p>При описании данных из внешней системы AI дал правильную, но недостаточно глубокую информацию. Например, описал «Files» просто как «Файлы взвешивания» вместо того, чтобы раскрыть структуру получаемых таблиц с типизацией полей.</p>



<p>Процесс создания заявки описан верхнеуровнево: заполнение табличных частей (3000+ строк кода с нелинейной логикой, множеством условий и созданием новых объектов БД) объединено в один этап. Инициализация данных — основа обработки — описана в 10 строк, хотя данные получаются из нескольких мест внешней системы, соединяются с данными из 1С, создаются новые элементы.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Процесс описан правильно, даже наглядные схемы нарисованы. Но процесс описан верхнеуровнево. Заполнение табличных частей — это 3000 строк кода минимум и сам процесс не линейный&#187;</em>&nbsp;— Никита</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Сравнение с Cursor</h2>



<p>Для чистоты эксперимента эксперт попробовал ту же задачу через Cursor:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Ради интереса попробовал через курсор сделать эту задачу. Из плюсов он смог нормально сформировать файлы для загрузки в 1С, но из минусов там полный бред. Если в твоей версии хотя-бы чувствовалась логика и верный курс действий, то в моей всё намного хуже, вообще не по ТЗ, ошибки через строку&#187;</em></p>
</blockquote>



<p><strong>Вывод:</strong>&nbsp;Claude Code показал лучшее понимание задачи, хотя и с ошибками в реализации.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Рекомендации по настройке</h2>



<h3 class="wp-block-heading">CLAUDE.md для 1С-проектов</h3>



<pre class="wp-block-code"><code># Правила для 1С разработки

## Язык
- Используй русские названия переменных и методов
- Следуй стандартам 1С по именованию (ПаскальКейс)

## Форматы
- НЕ генерируй XML-файлы форм — они не будут работать
- Генерируй BSL-код + инструкцию для создания формы вручную

## API
- ВСЕГДА используй MCP 1c-platform для проверки существования методов
- НЕ выдумывай функции платформы

## БСП
- Приоритет методам из БСП когда они доступны
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю() вместо ПоказатьПредупреждение()

## Линтер
- Прогоняй код через BSL Language Server перед финализацией
- Обязательно исправляй ошибки уровня Error
</code></pre>



<h3 class="wp-block-heading">Настройка MCP</h3>



<pre class="wp-block-code"><code>{
  "mcpServers": {
    "1c-platform": {
      "command": "npx",
      "args": &#91;"mcp-bsl-platform-context"]
    }
  }
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Итоговые выводы</h2>



<h3 class="wp-block-heading">Вердикт эксперта</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;С анализом нейронка справилась отлично, даже такая документация могла бы сэкономить десятки часов при написании этой обработки, а если бы мы задали конкретную задачу на написание подробной документации, то вклад был бы незаменимый. Но вот с кодом у нее всё плохо — задумки хорошие, реализация нет.&#187;</em>&nbsp;— Никита</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>&#171;Использовать как помощник для анализа, декомпозиции, написания документации, советов по ревью и рефакторингу — можно спокойно, она может очень помочь и подобные задачи во много раз быстрее человека выполнить и может даже лучше. Но принятие решений и код лучше оставить разработчику — тут будет быстрее и надежнее, имея описание от нейронки, сделать всё руками&#187;</em>&nbsp;— Никита</p>
</blockquote>



<h3 class="wp-block-heading">Для чего Claude Code подходит в 1С:</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Задача</th><th>Оценка</th><th>Комментарий</th></tr></thead><tbody><tr><td>Анализ кодовой базы</td><td>+ Отлично</td><td>Находит нужные объекты, строит зависимости, указывает номера строк</td></tr><tr><td>Составление планов</td><td>+ Отлично</td><td>Структурирование задач, декомпозиция, оценка сложности</td></tr><tr><td>Документирование</td><td>+ Отлично</td><td>Может сэкономить десятки часов, незаменимый вклад</td></tr><tr><td>Код-ревью</td><td>+ Хорошо</td><td>С линтером находит много проблем, советы по рефакторингу</td></tr><tr><td>Обнаружение забытого</td><td>+ Хорошо</td><td>Находит настройки и зависимости, о которых разработчик забыл</td></tr><tr><td>Небольшие доработки</td><td>~ Средне</td><td>Синтаксис верный, но логика может быть нарушена</td></tr><tr><td>Новые обработки</td><td>~ Средне</td><td>Много итераций, формы вручную</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Для чего НЕ подходит:</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Задача</th><th>Оценка</th><th>Причина</th></tr></thead><tbody><tr><td>Новые проекты с нуля</td><td>—</td><td>Слишком много итераций</td></tr><tr><td>Создание форм</td><td>—</td><td>Не умеет генерировать валидный XML</td></tr><tr><td>Работа с БСП</td><td>—</td><td>Не знает методы библиотеки</td></tr><tr><td>Оптимизация запросов</td><td>—</td><td>Синтаксис верный, но ломает логику выборки</td></tr><tr><td>Рефакторинг транзакций</td><td>—</td><td>Нарушает логику записи документов</td></tr><tr><td>Сложная бизнес-логика</td><td>~</td><td>Описывает верхнеуровнево, упускает детали</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Главный вывод</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Сценарий</th><th>Рекомендация</th></tr></thead><tbody><tr><td>Новый проект на 1С</td><td>Не использовать AI как основу — слишком дорого по итерациям</td></tr><tr><td>Поддержка legacy</td><td>Анализ и документирование — отлично; код — только под контролем разработчика</td></tr><tr><td>Код-ревью</td><td>Хорошо работает с линтером, полезные советы</td></tr><tr><td>Планирование</td><td>Полезно для структурирования и декомпозиции больших задач</td></tr><tr><td>Документирование</td><td>Лучшее применение — экономит десятки часов</td></tr><tr><td>Написание кода</td><td>Задумки хорошие, реализация — нет. Решения и код оставить разработчику</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Ресурсы</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Инструмент</th><th>Ссылка</th></tr></thead><tbody><tr><td>Claude Code</td><td><a href="https://claude.ai/code">claude.ai/code</a></td></tr><tr><td>MCP 1C Platform</td><td><a href="https://github.com/alkoleft/mcp-bsl-platform-context">github.com/alkoleft/mcp-bsl-platform-context</a></td></tr><tr><td>BSL Language Server</td><td><a href="https://github.com/1c-syntax/bsl-language-server">github.com/1c-syntax/bsl-language-server</a></td></tr><tr><td>Стандарты разработки 1С</td><td><a href="https://its.1c.ru/db/v8std">its.1c.ru/db/v8std</a></td></tr><tr><td>MCP протокол</td><td><a href="https://modelcontextprotocol.io/">modelcontextprotocol.io</a></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Статья основана на реальном эксперименте, январь-февраль 2026</em></p>



<p><em>Участники: Денис Матаков , Клементьев Никита (Эксперт, 1С-разработчик )</em></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Секреты продуктивной работы с Claude Code</title>
		<link>https://matakov.com/sekrety-produktivnoj-raboty-s-claude-code/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Wed, 20 Aug 2025 07:48:42 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[CTO]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5838</guid>

					<description><![CDATA[Работа с Claude Code требует некоторой дисциплины. Если правильно выстроить процесс, можно получить качественный результат и при этом экономить лимиты. Ниже я описал основные шаги, которые использую сам. 1. Подготовка репозитория: README Первое, что необходимо сделать в новом проекте, — попросить Claude сгенерировать&#160;README.md. Но не в «человеческом» понимании, где много описаний, картинок и диаграмм, а [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Работа с Claude Code требует некоторой дисциплины. Если правильно выстроить процесс, можно получить качественный результат и при этом экономить лимиты. Ниже я описал основные шаги, которые использую сам.</p>



<h2 class="wp-block-heading">1. Подготовка репозитория: README</h2>



<p>Первое, что необходимо сделать в новом проекте, — попросить Claude сгенерировать&nbsp;<code>README.md</code>. Но не в «человеческом» понимании, где много описаний, картинок и диаграмм, а в утилитарном виде:</p>



<ul class="wp-block-list">
<li>структура папок,</li>



<li>расположение моделей, миграций, ключевых функций,</li>



<li>краткое назначение каждого блока.</li>
</ul>



<p>Формулировать запрос стоит максимально чётко:&nbsp;<em>«Напиши краткий README, который ты будешь использовать для дальнейшей работы над новыми фичами»</em>. Такой файл избавит от лишних затрат токенов при повторных обращениях.</p>



<span id="more-5838"></span>



<h2 class="wp-block-heading">2. Правила и лучшие практики: CLAUDE.md</h2>



<p>Следующий шаг — формирование файла&nbsp;<code>CLAUDE.md</code>. Это набор правил и ограничений, которые Claude будет учитывать при каждом промпте. Важно, чтобы файл был компактным: каждая строка попадает в контекст при запросах.</p>



<p>Создать его можно реверс-промптингом: попросить Claude сгенерировать правила, затем сократить их, сохранив суть.</p>



<p>Пример:</p>



<pre class="wp-block-code"><code># CLAUDE.md - Project Rules &amp; Guidelines

## CRITICAL RULES
- Read all .md files before starting work
- NO git push without explicit permission
- NO modifying/deleting tests without permission
- NO touching files not mentioned in requests

## KISS &amp; DRY Principles
- Keep it simple — aim for &lt;50 lines when possible
- Reuse existing code, don't reinvent
- No over-engineering or unnecessary abstractions

## DEVELOPMENT WORKFLOW
- Use English only
- Follow existing patterns and conventions
- Run tests before commits
- Keep files under 500 lines
</code></pre>



<p>Полная версия может быть длиннее, но её нужно оптимизировать до десятков строк, а не сотен.</p>



<h2 class="wp-block-heading">3. Управление контекстом: /clear</h2>



<p>При начале работы над новой фичей рекомендуется очищать контекст командой:</p>



<pre class="wp-block-code"><code>/clear</code></pre>



<p>Это позволяет избежать накопления мусора и ненужных токенов, а также выхода в «бесконечные циклы», когда Claude опирается на ошибочные предположения.</p>



<h2 class="wp-block-heading">4. Работа с небольшими доработками</h2>



<p>Для простых задач последовательность такова:</p>



<ol class="wp-block-list">
<li>Очистить контекст.</li>



<li>Сослаться на <code>README.md</code> и <code>CLAUDE.md</code>.</li>



<li>Сформулировать задачу: «Используя информацию из файлов, сделай доработку X».</li>



<li>Начать с небольшой фичи, проверить стиль мышления Claude.</li>
</ol>



<p>Важно проверять код: Claude иногда пытается обойти проблему и создаёт новые методы или файлы, которые не нужны. Если повторяется ошибка — добавить новое правило в&nbsp;<code>CLAUDE.md</code>.</p>



<h2 class="wp-block-heading">5. Работа с крупными задачами и продуктами</h2>



<p>Если доработка крупная или это создание нового продукта, то подход похожий, но в&nbsp;<code>README.md</code>&nbsp;вместо структуры проекта кладётся&nbsp;<strong>план разработки</strong>.</p>



<p>Или файл можно назвать, например, <code>feature.md</code>. Туда помещается детальный пошаговый план реализации: задачи, чек-листы, тесты, коммиты.</p>



<p>После согласования плана очищается контекст, загружается план, и работа ведётся строго по нему. Это увеличивает шансы, что лимита хватит на всю реализацию.</p>



<h2 class="wp-block-heading">6. Общие рекомендации</h2>



<ul class="wp-block-list">
<li><strong>Не расслабляться.</strong> Claude может сломать уже рабочий код.</li>



<li><strong>Тесты критичны.</strong> Каждая фича должна быть покрыта тестами.</li>



<li><strong>Фиксировать рабочие состояния.</strong> Делать коммиты после успешных шагов, чтобы всегда можно было откатиться.</li>



<li><strong>Не бояться перезапусков.</strong> Если зашли в тупик, лучше очистить контекст, переформулировать задачу, сделать реверт до рабочего состояния и начать заново.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Так выстраивается базовая методология работы с Claude Code: минимизация лишнего контекста, формализация правил и строгая дисциплина коммитов.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Как проводить демо: структура, слайды и акценты</title>
		<link>https://matakov.com/kak-provodit-demo-struktura-slajdy-i-akcenty/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Tue, 19 Aug 2025 07:09:19 +0000</pubDate>
				<category><![CDATA[CTO]]></category>
		<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разработка]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5834</guid>

					<description><![CDATA[Демо — это не отчёт для галочки, а инструмент, который показывает ценность сделанной работы для бизнеса и пользователей. Чтобы команда и стейкхолдеры одинаково понимали,&#160;зачем и что мы сделали, презентация должна быть выстроена по логике «от ценности — к решению». 1. Вступление: команда и цель спринта Слайды: Совет:&#160;цель должна быть связана с ценностью для бизнеса или [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Демо — это не отчёт для галочки, а инструмент, который показывает ценность сделанной работы для бизнеса и пользователей. Чтобы команда и стейкхолдеры одинаково понимали,&nbsp;<strong>зачем и что мы сделали</strong>, презентация должна быть выстроена по логике «от ценности — к решению».</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. Вступление: команда и цель спринта</h2>



<p><strong>Слайды:</strong></p>



<ul class="wp-block-list">
<li>Название команды и даты спринта.</li>



<li>Роли (PO, BA, BE, FE, QA, MOB, Design) и укомплектованность.</li>



<li>Цель спринта (1–2 предложения, не «сделать задачи», а «проверить гипотезу/закрыть потребность/улучшить метрику»).</li>
</ul>



<p><strong>Совет:</strong>&nbsp;цель должна быть связана с ценностью для бизнеса или пользователя.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. Контекст и метрики</h2>



<p><strong>Слайды:</strong></p>



<ul class="wp-block-list">
<li>Ключевые продуктовые метрики: DAU/MAU, CSI, рост/падение.</li>



<li>Изменения по сравнению с прошлым периодом (стрелки или график).</li>
</ul>



<p><strong>Совет:</strong>&nbsp;акцентируй внимание не на цифрах ради цифр, а на том, как текущая работа помогает улучшать метрики.</p>



<span id="more-5834"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. Задачи спринта</h2>



<p><strong>Слайды:</strong></p>



<ul class="wp-block-list">
<li>Список инициатив, которые брали в работу.</li>



<li>Подпись «Цель → Решение → Эффект».</li>
</ul>



<p><strong>Совет:</strong>&nbsp;выделяй не технические детали («сделали API»), а пользовательские сценарии («появилась возможность объединять документы по признаку»).</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. Проблема и решение</h2>



<p><strong>Слайды (для каждой инициативы):</strong></p>



<ul class="wp-block-list">
<li>Проблема, которую решали (коротко, в 1–2 предложениях).</li>



<li>Решение (что сделали).</li>



<li>Бизнес-эффект (зачем это ценно, что меняется для пользователя или компании).</li>



<li>Скриншоты/видео-демонстрация функционала.</li>
</ul>



<p><strong>Совет:</strong><br>Каждый кусок функционала показывай через призму&nbsp;<strong>«Было — Стало»</strong>. Это сразу даёт ощущение прогресса.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5. Демонстрация</h2>



<p><strong>Слайды:</strong></p>



<ul class="wp-block-list">
<li>Скринкаст или живой показ интерфейса.</li>



<li>Подписи «вот так пользователь взаимодействует», «вот что изменилось».</li>
</ul>



<p><strong>Совет:</strong>&nbsp;всегда рассказывай через&nbsp;<strong>user story</strong>: «Пользователь заходит → делает действие → получает результат».</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6. Обсуждение и вопросы</h2>



<p><strong>Слайды:</strong></p>



<ul class="wp-block-list">
<li>Заготовленный «Discussion» с контактами PO.</li>



<li>Место для обратной связи.</li>
</ul>



<p><strong>Совет:</strong></p>



<ul class="wp-block-list">
<li>Заверши вопросом: «Что для вас ценно в этом изменении?», а не «Есть вопросы?». Это стимулирует осмысленную обратную связь.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как оформить</h2>



<ul class="wp-block-list">
<li><strong>Минимум текста</strong> — тезисы, не абзацы. Всё объясняешь голосом.</li>



<li><strong>Скрины вместо слов</strong> — если есть интерфейс, обязательно показать.</li>



<li><strong>Цветовые акценты</strong> — выделяй «проблема/решение/эффект».</li>



<li><strong>Графики вместо цифр</strong> — тренд лучше воспринимается, чем таблица.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Основные акценты демо</h2>



<ol class="wp-block-list">
<li>Не рассказывай «что делали» → показывай «какую ценность создали».</li>



<li>Не уходи в детали реализации, если это не тех. демо.</li>



<li>Старайся, чтобы каждый участник понял: <strong>«Это реально улучшает продукт / процессы / жизнь пользователя»</strong>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Первый опыт с Claude Code: зачем мне консольный ИИ-ассистент разработчика</title>
		<link>https://matakov.com/pervyj-opyt-s-claude-code-zachem-mne-konsolnyj-ii-assistent-razrabotchika/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Tue, 12 Aug 2025 18:27:51 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[CTO]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5830</guid>

					<description><![CDATA[Недавно подключил Claude Code и провёл с ним несколько часов в реальном проекте. Ниже — мой практический разбор: чем он отличается от Copilot и Cursor, где оказался сильнее, какие есть ограничения по тарифам и как это можно внедрять в команду.&#160; Что это и чем отличается от привычных ассистентов в IDE Claude Code — не «ещё [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Недавно подключил Claude Code и провёл с ним несколько часов в реальном проекте. Ниже — мой практический разбор: чем он отличается от Copilot и Cursor, где оказался сильнее, какие есть ограничения по тарифам и как это можно внедрять в команду.&nbsp;</p>



<h2 class="wp-block-heading">Что это и чем отличается от привычных ассистентов в IDE</h2>



<p>Claude Code — не «ещё одна вкладка» в редакторе, а консольное приложение. Это одновременно минус и плюс. Минус — меньше «визуального» взаимодействия: не выделишь мышкой фрагмент, не перетащишь картинку. Плюс — независимость от конкретной IDE и даже от графической ОС: можно подключаться к любому серверу и работать через терминал с файлами, коммитами и проверками в реальном времени. Для конфигов на сервере это особенно удобно: формулируешь задачу по-человечески — получаешь результат, не ковыряясь в Vim или nano.&nbsp;</p>



<span id="more-5830"></span>



<h2 class="wp-block-heading">Полевая проверка: смешанный репозиторий (Flutter + Python)</h2>



<p>Для пробы взял проект, где в одном репозитории живут мобильное приложение на Flutter и бэкенд на Python. За 1–2 часа фокусной работы начал закрывать накопившиеся баги, причём результаты оказались стабильнее, чем в Cursor. В Cursor часто теряется контекст и появляются неконсистентные правки; здесь же запросы выполнялись предсказуемее, а изменения были компактными: по 10–20 строк на фичу — без «простыней» на тысячи строк.&nbsp;</p>



<h2 class="wp-block-heading">Управление качеством: гайдлайны и «claude.md»</h2>



<p>Ключевой вывод: ассистент хорошо следует заданным правилам. Я собрал существующие гайдлайны из проекта, добавил то, что посчитал важным, и положил в отдельный файл (условный <code>claude.md</code>). После этого фичи «приземлялись» в код корректно и короткими диффами. Однако архитектурные решения за вас он не примет: местами проскакивают «джуновские» огрехи на уровне архитектуры. Значит, схема работы такая: мы заранее фиксируем архитектуру и гайдлайны, а ассистент ускоряет рутину в рамках заданных рамок. </p>



<h2 class="wp-block-heading">Лимиты и экономика тарифа</h2>



<p>Неожиданный момент — скорость, с которой уходит лимит. На базовом тарифе за $20 я упёрся в ограничения примерно за пару часов, после чего нужно ждать окна обновления лимитов (до двух часов). При таком темпе реальнее смотреть на план за $100, а если нагрузка выше — и на $200. И всё же это оправдано, если сравнивать со стоимостью рабочего времени: при хорошем использовании Claude Code закрывает объём задач уровня strong junior / middle с высокой скоростью.&nbsp;</p>



<h2 class="wp-block-heading">Где прирост максимальный</h2>



<p>Самый приятный эффект — снижение стресса за счёт делегирования «мелочёвки»: подвинуть кнопку, подправить отступы, найти нужное место в коде и подсказать корректный фикс. Это те самые задачи, которые «съедают» время и внимание, но не требуют сложной архитектурной проработки. По ощущениям, прирост продуктивности — 20–40% в зависимости от типа задач и дисциплины в формулировке запросов.&nbsp;</p>



<h2 class="wp-block-heading">Интеграция с JetBrains и командное применение</h2>



<p>У нас часть команды сидит в JetBrains, где Cursor недоступен. Консольный формат Claude Code решает эту проблему: через плагин его можно использовать и в JetBrains-средах, и в терминале на серверах. Внедрение для команды вижу так: определить набор правил (архитектура, стили, соглашения), описать их в <code>claude.md</code>, выбрать подходящий тариф (вероятнее $100) и договориться о «ритуалах» использования — когда просим ассистента, как проверяем результат и кто несёт ответственность за итоги. </p>



<h2 class="wp-block-heading">Итоги</h2>



<p>Claude Code понравился предсказуемостью и уважением к гайдлайнам, а также универсальностью консольного формата. Сдерживает только лимит базового плана: для продуктивной ежедневной работы его маловато. Следующий шаг — ещё одна сессия, после которой окончательно зафиксирую тариф и запущу эксперимент в проде для команды JetBrains. Если результат сохранится, это станет стандартным инструментом для рутинных правок и точечных фич.&nbsp;</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>P.S. Если резюмировать одним предложением: Claude Code — это быстрый «мидл» в консоли, который не спорит с вашими гайдлайнами и закрывает рутину, пока вы занимаетесь архитектурой.&nbsp;</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CTO без хаоса: создаем адаптивный плейбук за 7 шагов</title>
		<link>https://matakov.com/cto-bez-xaosa-sozdaem-adaptivnyj-plejbuk-za-7-shagov/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Mon, 04 Aug 2025 10:55:17 +0000</pubDate>
				<category><![CDATA[CTO]]></category>
		<category><![CDATA[Разработка]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5824</guid>

					<description><![CDATA[Когда технический директор приходит в компанию без базовых процессов, продукт превращается в череду хаотичных «подвигов». Чтобы вернуть предсказуемость, сначала наденьте шляпу директора по трансформации и выстройте фундамент. Что важно включить в адаптивный плейбук? Итог:&#160;пока не настроены процессы, CTO остаётся лишь «тушить пожары». Плейбук превращает хаос в систему: ценность поставляется регулярно, а команда развивается предсказуемо. Готов [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Когда технический директор приходит в компанию без базовых процессов, продукт превращается в череду хаотичных «подвигов». Чтобы вернуть предсказуемость, сначала наденьте шляпу директора по трансформации и выстройте фундамент.</p>



<p><strong>Что важно включить в адаптивный плейбук?</strong></p>



<ul class="wp-block-list">
<li><strong>Спринты и ритуалы.</strong>&nbsp;Определяем продолжительность, частоту встреч и четкое расписание: планирование, ежедневные стендапы, ревью, ретро.</li>



<li><strong>Метрики ценности.</strong>&nbsp;Фокус не на закрытых задачах, а на том, сколько пользы получает клиент.</li>



<li><strong>Автономность команд.</strong>&nbsp;Полномочия + ответственность = скорость без микроменеджмента.</li>



<li><strong>Прозрачность.</strong>&nbsp;Общий календарь релизов, открытые доски задач, видимые цели.</li>



<li><strong>Устойчивая скорость.</strong>&nbsp;Откажитесь от «геройских» овертаймов — выигрыш в долгую даёт именно стабильный темп.</li>



<li><strong>Постоянное улучшение.</strong>&nbsp;Каждая ретроспектива — не отчёт о неудачах, а план апгрейда процессов.</li>



<li><strong>Живая документация.</strong> 24-страничный плейбук должен обновляться по эволюции команды, а не пылиться в Wiki.</li>
</ul>



<span id="more-5824"></span>



<p><strong>Итог:</strong>&nbsp;пока не настроены процессы, CTO остаётся лишь «тушить пожары». Плейбук превращает хаос в систему: ценность поставляется регулярно, а команда развивается предсказуемо.</p>



<p>Готов поделиться своим шаблоном адаптивного плейбука — бери, кастомизируй и внедряй!</p>



<div data-wp-interactive="core/file" class="wp-block-file"><object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://matakov.com/wp-content/uploads/2025/08/Адаптивный-плейбук.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Вставка Адаптивный плейбук"></object><a id="wp-block-file--media-f3234f86-b4b6-4091-8bbc-753ace358b60" href="https://matakov.com/wp-content/uploads/2025/08/Адаптивный-плейбук.pdf">Адаптивный плейбук</a><a href="https://matakov.com/wp-content/uploads/2025/08/Адаптивный-плейбук.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-f3234f86-b4b6-4091-8bbc-753ace358b60">Скачать</a></div>



<p>Заказать консультацию CTO &#8212;&nbsp;<a href="https://mtkv.ru/">https://mtkv.ru</a></p>



<p>#CTO #ITруководство #Процессы #Scrum #Плейбук</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Как работает MCP: внешний разум для вашей LLM</title>
		<link>https://matakov.com/kak-rabotaet-mcp-vneshnij-razum-dlya-vashej-llm/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Sun, 11 May 2025 08:35:16 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5820</guid>

					<description><![CDATA[Когда мы говорим о современных языковых моделях вроде GPT или Claude, легко забыть, что всё, что они знают — это текст, который они когда-то прочитали. А значит, всё, чего они не знают, остаётся за пределами их внимания. И вот тут появляется MCP — Model Context Protocol. Это способ «расширить сознание» модели, подключив её к живым [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Когда мы говорим о современных языковых моделях вроде GPT или Claude, легко забыть, что всё, что они знают — это текст, который они когда-то прочитали. А значит, всё, чего они не знают, остаётся за пределами их внимания. И вот тут появляется MCP — Model Context Protocol. Это способ «расширить сознание» модели, подключив её к живым данным, инструментам и действиям.</p>



<p>Эта статья отвечает на важные вопросы, которые возникают, когда ты впервые сталкиваешься с MCP:</p>



<ul class="wp-block-list">
<li>Что именно он делает?</li>



<li>Чем он отличается от API?</li>



<li>Как модель узнаёт, какие инструменты есть?</li>



<li>Где лежат адреса, авторизация и прочее?</li>



<li>Можно ли через MCP совершать не только запросы, но и действия?</li>
</ul>



<span id="more-5820"></span>



<p><strong>MCP на пальцах: таблица-пример</strong></p>



<p>Для начала — суть в одной таблице:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Пример запроса</strong></td><td><strong>Как и через что AI обращается</strong></td><td><strong>Источник ответа или действия</strong></td></tr><tr><td>“Что такое квантовая запутанность?”</td><td>Внутренние знания модели</td><td>Параметры самой LLM</td></tr><tr><td>“Что случилось в Иране сегодня?”</td><td>Вызов через веб-поиск, API или плагин</td><td>Интернет</td></tr><tr><td>“Сколько заказов мы сделали в марте?”</td><td>Вызов sql_query через MCP</td><td>Внутренняя база данных</td></tr><tr><td>“Найди договор, где срок подписания — июль 2023”</td><td>Векторный поиск через MCP-инструмент vector_search</td><td>Ваша база документов</td></tr><tr><td>“Построй график продаж за год”</td><td>Последовательность: sql_query → plot_data</td><td>Комбинация базы и визуализатора</td></tr><tr><td>“Выполни расчёт по Excel-файлу”</td><td>Сначала file_extract, затем code_execute через MCP</td><td>Excel-файл или его копия</td></tr><tr><td>“Отправь СМС клиенту”</td><td>Вызов инструмента send_sms с номером и текстом</td><td>Внешний сервис сообщений (например, Twilio)</td></tr></tbody></table></figure>



<p><strong>Что делает MCP на самом деле</strong></p>



<p>С технической точки зрения, MCP — это протокол общения между LLM и внешними источниками данных или действиями. Он описывает, как модель может:</p>



<ul class="wp-block-list">
<li>обратиться к SQL-базе;</li>



<li>извлечь файл;</li>



<li>вызвать API;</li>



<li>отправить сообщение;</li>



<li>выполнить код;</li>



<li>и даже скомбинировать несколько действий последовательно.</li>
</ul>



<p>Главная идея: модель не знает, как устроен внешний мир, но умеет формировать запросы в едином формате, а MCP-сервер знает, как их обработать и что вернуть обратно.</p>



<p><strong>MCP — это не просто API</strong></p>



<p>Сразу возникает логичный вопрос: а чем MCP отличается от обычного API?</p>



<p>Ответ: уровнем абстракции.</p>



<p>Обычный API — это конкретная реализация с конкретной документацией.</p>



<p>MCP — это унифицированный способ описания и исполнения любых API. Вся магия MCP в том, что:</p>



<ol class="wp-block-list">
<li>Модель видит инструмент как «псевдофункцию» с описанием.</li>



<li>MCP-сервер сам знает, как эту функцию реализовать.</li>



<li>Протокол позволяет строить последовательности действий (например, “спроси в базе — потом построй график”).</li>
</ol>



<p><strong>А как модель знает, какие есть инструменты?</strong></p>



<p>Модель не «знает» заранее. При старте сессии или при подключении плагина ей передаётся так называемый Tool Manifest — описание всех доступных инструментов. Обычно это JSON, в котором указано:</p>



<ul class="wp-block-list">
<li>название инструмента (send_sms, sql_query);</li>



<li>описание;</li>



<li>параметры и их типы.</li>
</ul>



<p>Пример:</p>



<p>{</p>



<p>&nbsp; &#171;name&#187;: &#171;send_sms&#187;,</p>



<p>&nbsp; &#171;description&#187;: &#171;Sends an SMS to the specified phone number&#187;,</p>



<p>&nbsp; &#171;parameters&#187;: {</p>



<p>&nbsp; &nbsp; &#171;number&#187;: &#171;string&#187;,</p>



<p>&nbsp; &nbsp; &#171;text&#187;: &#171;string&#187;</p>



<p>&nbsp; }</p>



<p>}</p>



<p>Модель читает этот список и потом сама решает, какой инструмент использовать и какие параметры подставить.</p>



<p><strong>А как она узнаёт, где находится MCP-сервер?</strong></p>



<p>Вот тут кроется то, чего пока не хватает в большинстве реализаций: механизма подключения MCP-серверов.</p>



<p>У OpenAI есть .well-known/ai-plugin.json. У Anthropic — tool-use manifest. У LangChain — ToolLoader.</p>



<p>У MCP должен быть публичный манифест MCP-сервера, в котором указано:</p>



<ul class="wp-block-list">
<li>mcp_url — куда слать запросы;</li>



<li>auth — какая авторизация нужна (Bearer, API Key, OAuth);</li>



<li>tools_manifest_url — где взять список инструментов.</li>
</ul>



<p>То есть подключение MCP-сервера должно выглядеть примерно так:</p>



<p>{</p>



<p>&nbsp; &#171;name&#187;: &#171;Internal Tools MCP&#187;,</p>



<p>&nbsp; &#171;mcp_url&#187;: &#171;https://mcp.mycompany.com/api&#187;,</p>



<p>&nbsp; &#171;auth&#187;: {</p>



<p>&nbsp; &nbsp; &#171;type&#187;: &#171;bearer&#187;,</p>



<p>&nbsp; &nbsp; &#171;token&#187;: &#171;sk-xyz&#187;</p>



<p>&nbsp; },</p>



<p>&nbsp; &#171;tools_manifest_url&#187;: &#171;https://mcp.mycompany.com/api/tools&#187;</p>



<p>}</p>



<p>Пока нет единого глобального репозитория MCP-серверов, но такая идея витает в воздухе — и обязательно появится.</p>



<p><strong>А можно ли через MCP не просто получать данные, а делать что-то?</strong></p>



<p>Да. И это один из самых важных и недооценённых аспектов.</p>



<p>Пример — отправка СМС. Модель не знает, что такое Twilio, какие там нужны ключи, заголовки и URL. Она просто вызывает send_sms с нужными параметрами. А дальше:</p>



<ol class="wp-block-list">
<li>MCP-сервер подставляет токен.</li>



<li>Отправляет POST-запрос на нужный адрес.</li>



<li>Возвращает модели { &#171;status&#187;: &#171;sent&#187; }.</li>
</ol>



<p>Модель как бы управляет миром — через интерфейс MCP.</p>



<p><strong>Вывод</strong></p>



<p>MCP — это мост между языковой моделью и реальным миром.</p>



<p>Он не заменяет API, он делает их доступными, понятными и управляемыми для моделей. MCP позволяет строить LLM-агентов, которые не просто болтают, а действуют, получают доступ к данным, комбинируют инструменты и работают в рамках заданной архитектуры.</p>



<p>Если раньше вы ограничивались ответами из головы модели — теперь можно подключить к ней всё, что у вас есть: от баз до внешних сервисов, от PDF до внутренних CRM. И всё это — в едином протоколе.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Как я писал MVP с AI-ассистентами: опыт, грабли и тактика</title>
		<link>https://matakov.com/kak-ya-pisal-mvp-s-ai-assistentami-opyt-grabli-i-taktika/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Sat, 10 May 2025 06:44:53 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Программирование]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5816</guid>

					<description><![CDATA[Недавно я делал мобильное приложение на Flutter, с FastAPI на бэкенде и Streamlit для административной панели. Всё это — в рамках подхода “AI-first”, когда почти весь код пишется с помощью копайлот-ассистентов: Gemini, ChatGPT, Claude. И вот что я понял из такого долгосрочного программирования&#8230; Умные, но забывчивые Современные копайлот-ассистенты — это не команда, а стажёры. Они пишут [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Недавно я делал мобильное приложение на <strong>Flutter</strong>, с <strong>FastAPI</strong> на бэкенде и Streamlit для административной панели. Всё это — в рамках подхода “AI-first”, когда почти весь код пишется с помощью копайлот-ассистентов: Gemini, ChatGPT, Claude.</p>



<p>И вот что я понял из такого долгосрочного программирования&#8230;</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Умные, но забывчивые</h2>



<p>Современные копайлот-ассистенты — это <em>не команда, а стажёры</em>. Они пишут быстро, но:</p>



<ul class="wp-block-list">
<li>забывают, что делали в предыдущем файле;</li>



<li>не держат в голове структуру проекта;</li>



<li>путаются, если вы перескакиваете между фронтом, мобилкой и бэком.</li>
</ul>



<p><strong>Мораль:</strong> не стоит надеяться, что AI вспомнит, как вы называли переменную три дня назад в другом микросервисе. Но выход есть.</p>



<span id="more-5816"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Всё начинается с чек-листа</h2>



<p>Первое, что нужно сделать, — <strong>попросить AI составить подробный пошаговый план</strong>, как будет строиться ваш проект. Это и есть дорожная карта.</p>



<ul class="wp-block-list">
<li>Я делал 5 больших этапов.</li>



<li>Внутри каждого — маленькие подпункты.</li>



<li>Но этого мало — детализация нужна больше, особенно в логических блоках: frontend, backend, auth, UI&#8230;</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">README + prompt.md — ваш инструмент памяти</h2>



<p>После каждого логического блока (например, вы закончили backend) — просите AI:</p>



<ol class="wp-block-list">
<li>Прочитать весь код.</li>



<li>Составить <strong>README</strong>: что, где, зачем.</li>



<li>Написать <strong><code>prompt.md</code></strong> — инструкцию самому себе. Как бы <em>&#171;если забудешь, чем ты тут занимался — прочитай это&#187;</em>.</li>
</ol>



<p>Это не шутка: <strong>именно такую стратегию используют в Cursor</strong>, но делают это автоматически и примитивно. А вы — осознанно.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Изоляция и Domain Driven Design</h2>



<p>Каждый логический модуль — как отдельная зона ответственности:</p>



<ul class="wp-block-list">
<li>Пишите отдельный README и prompt для каждого микросервиса.</li>



<li>Когда вы начинаете новый чат с AI — просто закиньте ему нужный README.</li>



<li>При необходимости — добавьте фразу <strong>&#171;think deep&#187;</strong>. Особенно хорошо работает с Gemini 2.5 Pro — он <em>включается</em>.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Android Studio и localhost — не лучшие друзья</h2>



<p>Когда я впервые запускал API с Android Studio, был неприятно удивлён:</p>



<ul class="wp-block-list">
<li><code>localhost</code> не работает.</li>



<li>Нужно использовать <code>10.0.2.2</code>, чтобы обращаться к хосту.</li>
</ul>



<p>Это поломало мой initial setup. Решение: <strong>не использовать локальные адреса вовсе</strong>, а поднять <strong>stage-сервер</strong> и слать запросы туда.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Кто круче всех из копайлот-ассистентов?</h2>



<p>Мой субъективный рейтинг:</p>



<h3 class="wp-block-heading">1. <strong>Gemini 2.5 Pro</strong></h3>



<ul class="wp-block-list">
<li>Хорошо работает с prompt.md</li>



<li>Умеет думать &#171;внутри файла&#187;</li>



<li>Послушный, не навязчивый</li>
</ul>



<h3 class="wp-block-heading">2. <strong>ChatGPT 4.1</strong></h3>



<ul class="wp-block-list">
<li>Очень осторожный</li>



<li>Часто спрашивает, но даёт хорошие архитектурные идеи</li>
</ul>



<h3 class="wp-block-heading">3. <strong>Claude 3.5 Sonnet</strong></h3>



<ul class="wp-block-list">
<li>Включает <strong>AutoRun</strong></li>



<li>Может начать писать новую кодовую базу, не спросив</li>



<li>Оставляет за собой кучу лишних файлов</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Дёшево — значит ограниченно</h2>



<ul class="wp-block-list">
<li>Cursor и GitHub Copilot — дешёвые ($20/мес).</li>



<li>Но у них <strong>очень маленький контекст</strong> — они быстро всё забывают.</li>



<li>Claude Code (Anthropic) — <strong>дорогой, сложный в получении, но реально помнит</strong>.</li>
</ul>



<p>Если вы делаете MVP — <strong>научитесь работать с дешевыми инструментами</strong> и <strong>пишите документацию</strong>. Это ваш единственный способ сохранить мышление AI в фокусе.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Резюме</h2>



<p>Если вы делаете приложение с AI:</p>



<ul class="wp-block-list">
<li><strong>Разбивайте на логические блоки</strong>.</li>



<li><strong>Пишите README и prompt.md</strong> после каждого.</li>



<li><strong>Обновляйте их</strong> после доработок.</li>



<li><strong>Не верьте в “память” копайлота</strong> — её просто нет.</li>



<li>Используйте <strong>“think deep”</strong> в нужный момент.</li>
</ul>



<p>И тогда даже с дешевыми инструментами можно собрать что-то большое, логичное и рабочее.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Как настроить мультиязычную встречу в Google Meet с автопереводом</title>
		<link>https://matakov.com/kak-nastroit-multiyazychnuyu-vstrechu-v-google-meet-s-avtoperevodom/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Thu, 17 Apr 2025 09:59:27 +0000</pubDate>
				<category><![CDATA[Технологии]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5809</guid>

					<description><![CDATA[Команды становятся всё более интернациональными — участники говорят на английском, русском, французском, испанском и даже китайском. Но как провести созвон, если не все владеют одним общим языком? Удивительно, но Google Meet уже умеет помогать в таких ситуациях: автоматически распознавать речь и&#160;переводить её в субтитры. Звучит как магия, и — спойлер — работает это действительно хорошо. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Команды становятся всё более интернациональными — участники говорят на английском, русском, французском, испанском и даже китайском. Но как провести созвон, если не все владеют одним общим языком? Удивительно, но Google Meet уже умеет помогать в таких ситуациях: автоматически распознавать речь и&nbsp;<strong>переводить её в субтитры</strong>.</p>



<p>Звучит как магия, и — спойлер — работает это действительно хорошо. Особенно если на встрече используется&nbsp;<strong>два языка</strong>. Когда больше — потребуется чуть больше внимания к настройке, но и это вполне реально.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Что нужно для работы</strong></h2>



<p>Google Meet умеет автоперевод только в платных версиях (Google Workspace Business/Enterprise). Также потребуется:</p>



<ul class="wp-block-list">
<li>компьютер (на мобильных устройствах есть ограничения),</li>



<li>браузер Google Chrome (он самый стабильный для этой функции),</li>



<li>и немного терпения на начальной настройке.</li>
</ul>



<span id="more-5809"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Как устроен перевод в Meet</strong></h2>



<p>Всё держится на двух настройках, которые каждый участник выставляет&nbsp;<strong>самостоятельно</strong>:</p>



<ol start="1" class="wp-block-list">
<li><strong>Spoken language</strong>&nbsp;— язык, на котором говорит спикер.</li>



<li><strong>Translation language</strong>&nbsp;— язык, на который переводятся субтитры для вас.</li>
</ol>



<p>Google Meet&nbsp;<strong>не понимает автоматически</strong>, кто говорит на каком языке. Поэтому, если на встрече, например, один говорит по-русски, а другой — по-английски, каждому нужно вручную указать: «я слушаю русскую речь, переводи мне её на английский» — и наоборот.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Как это работает на практике</strong></h2>



<p>Допустим, в митинге участвуют два человека: Анна говорит по-русски, Джон — по-английски.</p>



<ul class="wp-block-list">
<li>Анна ставит: Spoken language —&nbsp;<em>English</em>, Translation —&nbsp;<em>Russian</em></li>



<li>Джон ставит: Spoken language —&nbsp;<em>Russian</em>, Translation —&nbsp;<em>English</em></li>
</ul>



<p>Результат: каждый видит переведённые субтитры, когда другой говорит. Общение становится комфортным, и никаких переводчиков не нужно.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Где включить настройки</strong></h2>



<ol start="1" class="wp-block-list">
<li>Зайти в Google Meet.</li>



<li>Внизу нажать на «⋮» → Settings → вкладка&nbsp;<strong>Captions</strong>.</li>



<li>Включить&nbsp;<strong>Live Captions</strong>.</li>



<li>Установить:
<ul class="wp-block-list">
<li><strong>Spoken language</strong>&nbsp;— язык спикера.</li>



<li><strong>Translation language</strong>&nbsp;— язык, на который нужен перевод.</li>
</ul>
</li>
</ol>



<p>Субтитры появятся автоматически.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>В чём подвох?</strong></h2>



<p>Функция перевода работает&nbsp;<strong>лучше всего при двух языках</strong>. Как только добавляется третий — начинается путаница: ведь Meet не может определить, кто говорит на каком языке, и участникам придётся постоянно менять настройки вручную.</p>



<p>Поэтому, если у вас больше двух языков — стоит заранее договориться, кто на каком языке будет говорить, и распределить роли. Или даже собрать небольшую таблицу: «Кто говорит на каком языке — и что должен выбрать в настройках».</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Какие языки поддерживаются</strong></h2>



<p>На апрель 2025 года Google Meet поддерживает перевод речи в субтитрах для следующих языков:</p>



<ul class="wp-block-list">
<li>Английский</li>



<li>Русский</li>



<li>Испанский</li>



<li>Французский</li>



<li>Немецкий</li>



<li>Итальянский</li>



<li>Португальский</li>



<li>Японский</li>



<li>Корейский</li>



<li>Китайский (упрощённый и традиционный)</li>
</ul>



<p>Некоторые из этих языков работают только как «язык речи» или только как «язык перевода» — нужно проверять на тестовой встрече. Но также появилось много новый языков в статусе BETA, так что есть шанс, что и необходимый вам язык там тоже присутствует!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>Советы напоследок</strong></h2>



<ul class="wp-block-list">
<li>Проведите&nbsp;<strong>тестовый созвон</strong>&nbsp;хотя бы с двумя участниками — чтобы отладить настройку.</li>



<li>Добавьте короткую инструкцию в приглашение (особенно если в команде кто-то не очень техничный).</li>



<li>Закрепите правило: каждый сам отвечает за свои субтитры и язык перевода.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Если всё сделать правильно — Google Meet становится отличным инструментом для международных встреч. Работает стабильно, не требует стороннего ПО и, по сути, заменяет синхронного переводчика для простых рабочих задач.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Эпохи и переобучение: как понять, когда модель уже научилась</title>
		<link>https://matakov.com/epoxi-i-pereobuchenie-kak-ponyat-kogda-model-uzhe-nauchilas/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Tue, 15 Apr 2025 12:18:02 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5806</guid>

					<description><![CDATA[При обучении моделей машинного обучения часто возникает вопрос: сколько эпох нужно? Когда модель уже «поняла» данные, а когда она начинает запоминать их слишком точно (то есть переобучаться)? В этой статье: Что такое эпоха Эпоха — это один полный проход по всему обучающему набору данных. Допустим, у вас есть 10 000 примеров, и вы обучаете модель [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>При обучении моделей машинного обучения часто возникает вопрос: сколько эпох нужно? Когда модель уже «поняла» данные, а когда она начинает запоминать их слишком точно (то есть переобучаться)?</p>



<p>В этой статье:</p>



<ul class="wp-block-list">
<li>Что такое эпоха</li>



<li>Как понять, что модель переобучается</li>



<li>Сколько эпох нужно</li>



<li>Как выбрать и настроить обучение правильно</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое эпоха</h2>



<p><strong>Эпоха</strong> — это один полный проход по всему обучающему набору данных.</p>



<p>Допустим, у вас есть 10 000 примеров, и вы обучаете модель с <code>batch_size=100</code>. Это значит, за одну эпоху модель увидит все примеры по 100 штук за раз — всего 100 шагов.</p>



<p>Когда эпох несколько, модель повторно видит одни и те же данные, чтобы «отточить» предсказания.</p>



<span id="more-5806"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Почему не всегда больше — лучше</h2>



<p>Модель может начать <strong>запоминать</strong> примеры, а не учиться на них обобщать. Это называется <strong>переобучение</strong>.</p>



<p>Признаки:</p>



<ul class="wp-block-list">
<li>Ошибка на обучении (<code>train loss</code>) продолжает падать</li>



<li>Ошибка на валидации (<code>val loss</code>) начинает расти</li>



<li>Точность на тренировке высокая, на тесте — низкая</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Как отслеживать переобучение</h2>



<ol class="wp-block-list">
<li>Делите данные на <code>train</code> и <code>validation</code></li>



<li>После каждой эпохи измеряйте <code>val loss</code> и метрику (например, accuracy)</li>



<li>Стройте графики</li>
</ol>



<p>Если <code>val loss</code> начинает расти — модель начала переобучаться, даже если <code>train loss</code> ещё падает.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Сколько эпох выбрать</h2>



<p>Ответ: <strong>зависит от данных, модели и задачи</strong>. Но есть ориентиры:</p>



<ul class="wp-block-list">
<li>Маленькие датасеты → 5–20 эпох</li>



<li>Большие датасеты → 2–5 эпох (модель быстро учится)</li>
</ul>



<h3 class="wp-block-heading">Что помогает:</h3>



<ul class="wp-block-list">
<li><strong>Early stopping</strong> — остановка, когда <code>val loss</code> не улучшается 2–3 эпохи</li>



<li><strong>Checkpoints</strong> — сохранять лучшую модель по <code>val metric</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Пример с EarlyStopping</h2>



<pre class="wp-block-code"><code>from transformers import TrainerCallback

class EarlyStop(TrainerCallback):
    def __init__(self, patience=3):
        self.patience = patience
        self.counter = 0
        self.best_loss = float("inf")

    def on_evaluate(self, args, state, control, metrics, **kwargs):
        val_loss = metrics.get("eval_loss")
        if val_loss &lt; self.best_loss:
            self.best_loss = val_loss
            self.counter = 0
        else:
            self.counter += 1
        if self.counter &gt;= self.patience:
            control.should_training_stop = True</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вывод</h2>



<p>Обучение — это баланс. Слишком мало эпох — модель не научится. Слишком много — начнёт переобучаться.</p>



<p>Следите за метриками на валидации, сохраняйте лучшие версии и не бойтесь остановиться чуть раньше — это часто даёт лучший результат.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Обзор методов квантования языковых моделей: GPTQ, GGUF, QLoRA</title>
		<link>https://matakov.com/obzor-metodov-kvantovaniya-yazykovyx-modelej-gptq-gguf-qlora/</link>
		
		<dc:creator><![CDATA[Денис Матаков]]></dc:creator>
		<pubDate>Tue, 15 Apr 2025 12:09:02 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://matakov.com/?p=5803</guid>

					<description><![CDATA[Большие языковые модели (LLM) часто требуют десятки гигабайт видеопамяти и мощные серверы для запуска и обучения. Квантование — это способ уменьшить объём модели и ускорить её работу, с минимальной потерей качества. В этой статье: Что такое квантование Квантование — это перевод весов модели из 32-битного формата (float32) в более компактные форматы: float16, int8, int4 и [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Большие языковые модели (LLM) часто требуют десятки гигабайт видеопамяти и мощные серверы для запуска и обучения. Квантование — это способ уменьшить объём модели и ускорить её работу, с минимальной потерей качества.</p>



<p>В этой статье:</p>



<ul class="wp-block-list">
<li>Что такое квантование</li>



<li>Какие есть методы: GPTQ, GGUF, QLoRA</li>



<li>Чем они отличаются</li>



<li>Когда и как их применять</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Что такое квантование</h2>



<p>Квантование — это перевод весов модели из 32-битного формата (<code>float32</code>) в более компактные форматы: <code>float16</code>, <code>int8</code>, <code>int4</code> и т. д.</p>



<p>Цель:</p>



<ul class="wp-block-list">
<li>уменьшить размер модели (в 2–8 раз)</li>



<li>сократить использование VRAM</li>



<li>ускорить инференс</li>
</ul>



<p>Пример: модель в <code>fp32</code> весит 13 ГБ, а в <code>int4</code> — 3–4 ГБ.</p>



<span id="more-5803"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">GPTQ: для ускоренного инференса</h2>



<p><strong>GPTQ</strong> — это метод постобученного квантования, при котором веса модели переводятся в <code>int4</code> или <code>int8</code> после завершения обучения.</p>



<p>Плюсы:</p>



<ul class="wp-block-list">
<li>Уменьшает размер модели до 4–8 раз</li>



<li>Поддерживается в <code>text-generation-webui</code>, <code>AutoGPTQ</code>, <code>ExLlama</code></li>



<li>Работает на GPU без необходимости обучения</li>
</ul>



<p>Минусы:</p>



<ul class="wp-block-list">
<li>Квантованная модель не обучается повторно (read-only)</li>
</ul>



<p>Пример:</p>



<pre class="wp-block-code"><code>from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized("model-gptq", device_map="auto")</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">GGUF: для запуска на CPU и llama.cpp</h2>



<p><strong>GGUF</strong> — это специальный формат, разработанный для <code>llama.cpp</code> и совместимых проектов (KoboldCpp, LM Studio, Ollama).</p>



<p>Плюсы:</p>



<ul class="wp-block-list">
<li>Отлично работает на CPU (в том числе MacBook, ARM, Raspberry Pi)</li>



<li>Минимальные требования по памяти</li>



<li>Поддерживает quantized модели 2–8 бит</li>



<li>Быстрый старт без установки PyTorch</li>
</ul>



<p>Минусы:</p>



<ul class="wp-block-list">
<li>Не обучается</li>



<li>Нужен отдельный toolchain для подготовки моделей (конвертация из HF формата)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">QLoRA: обучение моделей в 4-битном формате</h2>



<p><strong>QLoRA (Quantized Low-Rank Adapter)</strong> — это способ дообучать большие модели, используя 4-битное квантование и адаптеры.</p>



<p>Плюсы:</p>



<ul class="wp-block-list">
<li>Можно дообучать 7B/13B модели даже на 24ГБ GPU</li>



<li>Поддерживает LoRA: сохраняются только адаптеры (100–200 МБ)</li>



<li>Обучается быстро и эффективно</li>
</ul>



<p>Минусы:</p>



<ul class="wp-block-list">
<li>Нужно сохранить и базовую модель, и адаптеры</li>



<li>Инференс требует загрузки 4bit модели + PEFT адаптера</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Сравнение методов</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Метод</th><th>Можно обучать</th><th>Размер</th><th>Подходит для</th><th>Аппаратные требования</th></tr></thead><tbody><tr><td>GPTQ</td><td>Нет</td><td>Малый</td><td>Быстрый инференс на GPU</td><td>GPU с 8–16 ГБ VRAM</td></tr><tr><td>GGUF</td><td>Нет</td><td>Малый</td><td>Запуск на CPU, offline</td><td>CPU (даже слабый)</td></tr><tr><td>QLoRA</td><td>Да</td><td>Малый</td><td>Дообучение на GPU</td><td>GPU от 24 ГБ VRAM</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Когда использовать что</h2>



<ul class="wp-block-list">
<li><strong>GPTQ</strong>: если нужно быстро запустить большую модель на GPU без обучения</li>



<li><strong>GGUF</strong>: если хотите использовать модель на ноутбуке или сервере без GPU</li>



<li><strong>QLoRA</strong>: если нужно дообучить LLM под свои данные без больших ресурсов</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Вывод</h2>



<p>Квантование делает использование LLM доступным даже для разработчиков с одним GPU или обычным ПК. Выбор метода зависит от цели: запуск, обучение или интеграция в прод. Все три метода — важные инструменты в арсенале инженера, работающего с языковыми моделями.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
