Лекция Тесты 39 мин.
ИИ-агент — это не просто чат, а младший разработчик с доступом к проекту.
Он может:
прочитать кодовую базу, найти нужные файлы, предложить план решения задачи, написать техническую спецификацию, изменить код, запустить тесты, найти ошибку, сделать рефакторинг, подготовить pull request или объяснить чужой код. Claude Code официально описывается как агентный coding assistant для фич, багов и автоматизации задач в кодовой базе; Codex — как coding agent для написания, ревью и отладки кода через CLI, IDE, web/mobile и CI/CD.
Но ответственность остается за программистом:
ИИ предлагает и меняет код → программист проверяет diff, архитектуру, безопасность и тесты.
ИИ-агент — это модель, которая не просто отвечает текстом, а может выполнять задачу пошагово: анализировать контекст, выбирать инструменты, редактировать файлы, запускать команды и проверять результат.
Coding agent — агент, специально заточенный под разработку.
Prompt — запрос к ИИ.
Context / контекст — информация, которую агент видит (получает) перед выполнением задачи.
Context window / окно контекста — максимальный объем информации, который модель может учитывать одновременно.
Instructions / инструкции — постоянные правила (не относящиеся к конкретной задаче, а вязанные со всем проэтом , например стилистика кода, ограничения и т.д.) для агента. (напрмиер в файле AGENTS.md или CLAUDE.md)
Tool — внешняя возможность, которой агент может пользоваться.
Tool use — процесс, когда агент сам решает вызвать инструмент.
MCP / Model Context Protocol — протокол подключения ИИ к внешним инструментам и данным.
MCP Server — сервер, который предоставляет агенту инструменты или данные.
Skill / навык — готовый пакет инструкций, ресурсов и иногда скриптов для определенной задачи.
Slash command — команда вида: /review и т.п.
Workflow — повторяемая последовательность действий.
Plan mode / режим планирования — режим, где агент сначала думает и составляет план, а не сразу меняет код. Для сложных задач это очень важно: сначала план → потом реализация
Task / задача — конкретная единица работы для агента.
Sub-agent / суб-агент — отдельный агент с узкой ролью.
Multi-agent — режим, где несколько агентов работают над разными частями задачи.
Agent Team / команда агентов — организованная группа агентов с ролями и общей задачей.
Memory / память — сохраненные сведения, которые агент может использовать между задачами или сессиями. например - стиль проекта, команды тестов, архитектурные правила, предпочтения команды, типичные ошибки
Repository context — контекст конкретного репозитория.
Sandbox / песочница — изолированная среда, где агент может выполнять код без риска сломать рабочую систему.
Diff — разница между старым и новым кодом.
Code review — проверка изменений.
Human-in-the-loop — принцип, что человек остается в процессе принятия решений.
Guardrails / ограничители — правила безопасности для агента.
Permissions / разрешения — что агенту можно делать.
Hooks — автоматические действия, которые срабатывают в определенный момент.
CI/CD agent — агент, встроенный в pipeline.
Headless mode — запуск агента без интерактивного чата. Такой режим удобен для автоматизации, CI/CD и скриптов.
RAG / Retrieval-Augmented Generation — подход, когда агент сначала ищет нужную информацию во внешних источниках, а потом отвечает.
Embeddings / эмбеддинги — числовое представление текста или кода, которое помогает искать похожие фрагменты.
Retrieval / извлечение информации — этап поиска нужных данных для агента.
Orchestrator / оркестратор — компонент, который управляет работой агентов и инструментов.
Уровень автономности — насколько самостоятельно агент может действовать.
Hallucination / галлюцинация — когда ИИ уверенно говорит неправду.
Grounding / заземление — привязка ответа агента к реальным данным.
Eval / оценка качества — проверка, насколько хорошо агент выполняет задачу.
Общий цикл такой:
Задача ↓ Контекст проекта ↓ План от ИИ ↓ Проверка плана человеком ↓ Изменения в коде ↓ Запуск тестов / линтера ↓ Review diff ↓ Исправления ↓ Коммит / Pull Request
То есть не надо писать агенту:
Сделай мне оплату.
Лучше писать:
Нужно добавить поддержку оплаты через Checkout.com Flow.
Сначала изучи текущую структуру проекта:
- где создается заказ
- где вызывается платежная форма
- где обрабатывается callback/webhook
Пока не изменяй файлы. Сначала дай план: какие файлы нужно менять и почему.
Перед тем как просить писать код, можно попросить его исследовать проект (но не обязательно это делать).
Пример промпта:
Изучи проект и кратко опиши:
1. какая архитектура используется
2. где находятся контроллеры, сервисы, модели и тесты
3. как запускать тесты
4. какие правила кодстайла видны по проекту
5. какие файлы, скорее всего, связаны с задачей
Пока ничего не изменяй.
Это важно, потому что агент не должен сразу «ломиться» в код. Сначала он должен понять контекст.
Claude Code в документации прямо позиционируется как инструмент для исследования кодовой базы, исправления багов, рефакторинга, тестирования и повседневных задач разработки.
Плохой вариант:
Исправь баг.
Хороший вариант:
Проблема:
при повторной инициализации модального окна компонент иногда не вызывает onReady.
Ожидаемое поведение:
компонент должен корректно размонтироваться и заново создаться без перезагрузки страницы.
Ограничения:
- не менять backend API
- не менять структуру формы
- сохранить совместимость с текущими обработчиками onSubmit и onCompleted
Сначала найди возможную причину и предложи 2-3 варианта решения.
Чем лучше формулировка, тем меньше агент будет фантазировать.
Лучший порядок:
Пример:
Нужно добавить фильтр по статусу заказа.
Сначала:
- найди контроллер, модель и Blade-шаблон списка заказов
- опиши текущий flow
- предложи план изменений
- не редактируй файлы без плана
После плана можно сказать:
Ок, реализуй вариант 2. После изменений запусти тесты и покажи diff.
Не надо давать агенту сразу:
Перепиши всю админку.
Лучше разбить:
ИИ-агенты лучше работают, когда задача имеет четкие границы.
Codex, например, официально описывается как агент, который помогает писать код, понимать незнакомые кодовые базы и ревьюить код на баги, логические ошибки и непокрытые edge cases.
В этих местах ИИ можно использовать как помощника, но не как финального исполнителя без проверки.
Если слжные задачи или большие описательные требованияи навыки для ИИ агентов то генерация кода может быть долгой - десятки минут и даже часы.
Тогда возникает желание запускать генерацию кода длянескольких задач в нескольких ветках на одном компьютере и в одном окружении (например докер контейнере).
Просто создавать разные чаты/треды ИИ Агентов в одной ветке гит - недостаточно: они могут работать с одними и теми же файлами и конфликтовать.
Усчатью,для этого есть в гите стандартный способ — запускать каждую задачу в отдельной ветке + отдельном git worktree и в разных алис-папках.
Интересно, что хотя фича worktree в Git существует уже больше 10 лет, массово ее начали использовать сравнительно недавно — особенно с появлением AI-агентов и параллельной разработки, когда удобно держать десятки веток одновременно открытыми в отдельных каталогах.
Проверить свою версию Git:
git --version
Если версия новее 2.17, то весь привычный набор worktree уже доступен
Для Codex AI Agent / Codex CLI, для этого есть следующий способ — запускать каждую задачу в отдельной ветке + отдельном git worktree.
Допустим, есть 3 независимые задачи:
Создаешь отдельные worktree:
git worktree add ../api-task feature/api
git worktree add ../frontend-task feature/frontend
git worktree add ../tests-task feature/tests
Получишь:
project-main/
api-task/
frontend-task/
tests-task/
Каждая папка привязана к своей ветке.
Далее открываешь 3 терминала:
cd ../api-task
codex
cd ../frontend-task
codex
cd ../tests-task
codex
И даешь каждому агенту свою задачу.
Плохо:
Будут конфликты.
Хорошо:
Минимум пересечений по файлам.
В каждой ветке:
git add .
git commit -m "done"
Потом:
git checkout main
git merge feature/api
git merge feature/frontend
git merge feature/tests
или через Pull Request'ы.
| Ветка | Задача |
|---|---|
| feature/backend | API и БД |
| feature/frontend | UI |
| feature/tests | тесты |
| feature/docs | документация |
| feature/refactor | технический долг |
Тогда можно держать 3–5 агентов одновременно без серьезных конфликтов. Именно worktree является изоляцией, а не агент-чат/тред внутри Codex
У Claude Code есть встроенная нативная поддержка worktree, ручные команды git worktree add больше не обязательны.
Нужно запустить сессию сразу в изолированном worktree:
Терминал 1 claude -w feature-payments
Терминал 2 claude -w bugfix-auth
Каждая сессия Claude Code работает в своем worktree — правки в одной сессии никогда не затрагивают файлы другой, поэтому можно одновременно строить фичу в одном терминале и чинить баг во втором.
При этом создается изолированная рабочая директория со своей веткой, исходная сессия остается нетронутой — без stash, без конфликтов.
Не обязательно даже флаг — внутри сессии можно просто сказать «работай в worktree», и модель сама вызовет создание worktree.
Если запускаешь несколько субагентов, которые пишут файлы, им тоже нужна изоляция, иначе конфликты:
isolation: worktreeЗапуск субагентов без worktree-изоляции на задачах, пишущих файлы — самый частый источник конфликтов. The-Prompt-Shelf
По умолчанию в новый worktree не попадают gitignored-файлы (например .env). Чтобы их прокидывать, создай .worktreeinclude — он использует синтаксис .gitignore; копируются только файлы, которые совпадают с паттерном и при этом gitignored, так что отслеживаемые файлы не дублируются.
Десктоп-приложение создает worktree автоматически для каждой новой сессии — там вообще ничего настраивать не надо.
git worktree list и git worktree remove. >Полная официальная страница: https://code.claude.com/docs/en/worktrees
аналогичные схемы работы над параллельными тасками существуют и для других ИИ агентов таких как Cursor, Gemeni Antigravitacy и т.д.
Заземление в запросах к ИИ-агентам — это привязка ответа модели к конкретным фактам, источникам, данным, контексту или ограничениям, чтобы агент не “фантазировал”, а работал в рамках проверенной информации.
По-английски это часто называется grounding.
Простыми словами:
Не просто: “Ответь как знаешь”,
а: “Ответь, используя вот эти данные, вот этот документ, вот эту базу, вот эти правила”.
Расскажи, какие тарифы есть у нашей компании.
ИИ может начать придумывать тарифы, если не знает реальные данные.
Используй только информацию из таблицы тарифов ниже. Не добавляй ничего от себя. Если данных нет — напиши: "В предоставленных данных этого нет". [таблица тарифов...]
Такой запрос “заземляет” ответ на конкретной таблице.
Оно помогает:
Заземлять ИИ-агента можно на:
Ты агент поддержки. Отвечай только на основе базы знаний ниже. Если ответа в базе знаний нет, не придумывай его, а предложи обратиться к оператору. База знаний: 1. Возврат возможен в течение 14 дней. 2. Деньги возвращаются на тот же способ оплаты. 3. Товары со следами использования не принимаются.
Проанализируй этот C#-код. Не предлагай переписывать проект на другой фреймворк. Учитывай, что используется C# v12. Ответ дай только в рамках совместимых решений.
Проанализируй этот /services/window.js. и исправь загрузку файлов на серви в попапе Загрузка
Задача: [что нужно сделать] Контекст: [данные, документы, код, правила] Ограничения: [что нельзя делать / что учитывать] Формат ответа: [как именно ответить] Если информации недостаточно: [что должен сделать агент]
Заземление — это способ сказать ИИ:
“Отвечай не вообще из головы, а строго на основе этого контекста и этих правил.”
Для Claude Code часто используют CLAUDE.md. Это файл с памятью проекта: команды, правила, архитектура, стиль, ограничения. Claude Code загружает такие инструкции в начале разговора как контекст.
Пример структуры:
# Project Rules ## Stack - Laravel 11 - PHP 8.2 - MySQL - Blade - jQuery ## Commands - Run tests: php artisan test - Run PHPStan: vendor/bin/phpstan analyse - Clear cache: php artisan optimize:clear ## Rules - Do not edit vendor/ - Do not change public API without asking - Use FormRequest for validation - Use policies for authorization - Do not put business logic in controllers ## Payment rules - Never expose secret API keys to frontend - Do not change webhook signature validation without review
Для Codex аналогично полезно иметь проектные инструкции: что можно менять, какие команды запускать, как проверять результат. OpenAI в документации по Codex также выделяет best practices: планирование, валидацию, MCP, skills и автоматизации.
Пример первого промпта:
Есть баг: после выбора ответа в Telegram inline keyboard пользователь может нажать старую кнопку повторно.
Найди код, который обрабатывает callback_query.
Сначала ничего не меняй.
Опиши:
Потом (пример второго промта):
Реализуй защиту от повторного ответа через проверку статуса в базе. Добавь тест, который проверяет, что второй callback не меняет результат.
Пример:
Нужно добавить экспорт invoice в PDF.
Ограничения:
Сначала найди похожие PDF-экспорты в проекте и предложи план.
Рефакторинг лучше делать осторожно:
Промпт:
Нужно упростить этот сервис.
Очень полезный сценарий: один агент пишет код, другой — проверяет.
Агент 1: реализует фичу Агент 2: делает review diff Человек: принимает финальное решение
Промпт для ревью:
Проверь этот diff как senior backend developer. Ищи: 1. баги 2. проблемы безопасности 3. race conditions 4. неправильную обработку ошибок 5. нарушение архитектуры 6. отсутствие тестов Не переписывай код сразу. Сначала дай список замечаний по приоритету.
Это особенно важно, потому что агент, который сам написал код, может быть менее критичен к собственному решению.
Под новым агентом имеется ввиду что можно использовать тогоже провайдера ИИ агентов и даже таже самая модель, но в новвой сесси, и сдругим промтом и контекстом.
Для такого стека можно дать агенту такие правила:
Правила:
Пример задачи:
Добавь Laravel Policy для редактирования статьи.
Сначала найди:
Затем предложи план.
Правила:
Пример:
Проверь этот JS-код на проблему повторной инициализации.
Особенно проверь:
После работы агента всегда проверять:
Особенно внимательно:
Задача: [что нужно сделать] Контекст: [что уже известно] Ограничения: [что нельзя ломать] Ожидаемый результат: [как должно работать] Порядок работы: 1. сначала изучи проект 2. найди связанные файлы 3. предложи план 4. после подтверждения измени код 5. запусти тесты 6. покажи diff и объясни изменения Важно: не меняй публичные API, миграции production и секретные настройки без отдельного согласования.
Программист:
ИИ-агент:
1. Explain Сначала попросить объяснить код. 2. Locate Найти нужные файлы. 3. Plan Составить план. 4. Implement Внести маленькое изменение. 5. Test Запустить тесты. 6. Review Проверить diff. 7. Iterate Исправить замечания. 8. Commit Коммитить только после проверки человеком.
Главная формула:
ИИ не заменяет программиста. ИИ ускоряет цикл: понять → написать → проверить → исправить.
Лучший результат получается не когда вы говорите «сделай все», а когда используете агента как исполнителя под контролем senior-разработчика.
1. Для чего в первую очередь предназначен Claude Code?
Подсказка: Claude Code работает в терминале и имеет доступ к файлам проекта, командам, тестам и Git.
2. Какой командой можно установить Claude Code через npm?
Подсказка: Claude Code устанавливается глобально через npm и затем запускается в директории проекта.
3. Какой файл Claude Code читает в начале сессии как инструкцию проекта?
Подсказка: CLAUDE.md задает правила работы Claude Code внутри конкретного проекта.
4. Что лучше всего записывать в CLAUDE.md?
Подсказка: хороший CLAUDE.md похож на рабочую записку для ИИ о том, как правильно действовать в проекте.
5. Что не рекомендуется писать в CLAUDE.md?
Подсказка: слишком большой CLAUDE.md может занимать много контекста и снижать качество работы модели.
6. Какой пример хорошо объясняет принцип «пишите не только что делать, но и почему»?
Подсказка: объяснение причины помогает Claude принимать решения в ситуациях, которые не описаны явно.
7. Что означает команда с символом # во время работы Claude Code?
Подсказка: если вы второй раз исправляете одну и ту же ошибку, правило стоит записать в CLAUDE.md.
8. Какой уровень CLAUDE.md является персональным и действует кросс-проектно?
Подсказка: глобальные персональные настройки Claude Code обычно не коммитятся в репозиторий.
9. Какой файл предназначен для локальных персональных переопределений в текущем проекте?
Подсказка: локальные переопределения нужны для личных настроек и обычно исключаются из коммитов.
10. Где рекомендуется хранить модульные правила, когда CLAUDE.md становится слишком большим?
Подсказка: директория .claude/rules/ позволяет разделить правила по темам: стиль кода, тесты, API, безопасность.
11. Для чего используются правила с YAML-заголовком paths?
Подсказка: path-based rules помогают применять инструкции только к нужным файлам и экономить контекст.
12. Что такое Commands в Claude Code?
Подсказка: команды из .claude/commands/ можно вызывать вручную как slash commands.
13. Какой файл команды может соответствовать вызову /project:review?
Подсказка: команда review.md в директории команд проекта может стать slash-командой для ревью.
14. Что позволяет делать синтаксис !`git diff ...` внутри command-файла?
Подсказка: command-файл может сначала выполнить shell-команду, а затем передать результат Claude.
15. Для чего используется переменная $ARGUMENTS в Commands?
Подсказка: например, команда может получить номер issue и загрузить нужный контекст.
16. Чем Skills отличаются от Commands?
Подсказка: Skills распознают задачу и включаются без ручного вызова слэш-команды.
17. Какой файл обычно описывает условия срабатывания skill'а?
Подсказка: SKILL.md содержит YAML-заголовок, описание и правила применения навыка.
18. Что может содержать папка skill'а?
Подсказка: Skill — это не просто текстовая команда, а полноценный набор материалов для выполнения сценария.
19. Какая часть skill'а часто является особенно ценной?
Подсказка: gotchas фиксируют личный опыт и помогают не повторять прежние ошибки.
20. Что такое Agents в Claude Code?
Подсказка: агент может иметь отдельную роль, например code-reviewer, и ограниченный набор инструментов.
21. Зачем агенту указывать поле tools?
Подсказка: для security-аудита агенту можно дать только Read, Grep и Glob без права записи.
22. В чем ключевая польза суб-агентов?
Подсказка: суб-агенты помогают сохранить чистоту основного диалога.
23. Что такое Tasks в Claude Code?
Подсказка: Tasks хранятся локально и могут использоваться несколькими сессиями или суб-агентами.
24. Где хранятся данные Tasks?
Подсказка: Tasks являются локальным компонентом управления проектной работой Claude Code.
25. Что такое Agent Teams?
Подсказка: Agent Teams подходят для параллельной работы над API, фронтендом и тестами.
26. Когда Agent Teams подходят лучше всего?
Подсказка: Agent Teams полезны, когда разные участники могут работать над разными частями проекта.
27. Когда Agent Teams лучше не использовать?
Подсказка: для сильно связанных задач иногда лучше одна сессия или обычные суб-агенты.
28. Что позволяет сделать Remote Control в Claude Code?
Подсказка: Remote Control запускается через claude rc и позволяет руководить задачей с мобильного устройства.
29. Что позволяют сделать Claude Code Channels?
Подсказка: Channels дают возможность отправлять команды ИИ через привычный мессенджер.
30. Что нужно поддерживать для работы Channels?
Подсказка: терминальную сессию можно держать через tmux, screen или фоновый процесс.
31. Что такое Hooks в Claude Code?
Подсказка: Hooks могут срабатывать перед коммитом, после вызова инструмента или перед редактированием файла.
32. Для чего лучше всего использовать Hooks?
Подсказка: если ошибка может привести к финансовым или юридическим рискам, лучше использовать Hooks.
33. Какой пример применения Hooks указан в статье?
Подсказка: Hooks помогают контролировать качество и безопасность без надежды только на промпт.
34. Что такое MCP?
Подсказка: MCP можно представить как универсальный разъем для подключения ИИ к данным и инструментам.
35. Какую роль выполняет MCP Server?
Подсказка: Claude выступает клиентом, а MCP Server предоставляет внешние возможности.
36. Где обычно располагается проектная конфигурация MCP?
Подсказка: проектная .mcp.json может коммититься и использоваться всей командой.
37. Зачем рекомендуется использовать переменные окружения в MCP-конфигурации?
Подсказка: секреты вроде GITHUB_TOKEN лучше передавать через переменные окружения.
38. Что такое плагины в экосистеме Claude Code?
Подсказка: плагины помогают стандартизировать процессы команды и распространять их как готовый инструмент.
39. Для чего используется Headless Mode в Claude Code?
Подсказка: параметр -p позволяет встроить Claude Code в автоматизированные процессы без ожидания ручного ввода.
40. Почему код-ревью лучше выполнять отдельным экземпляром Claude?
Подсказка: отдельный экземпляр Claude Code легче замечает ошибки и критичнее оценивает изменения.
41. Что такое токен в контексте LLM-моделей?
Подсказка: токен может быть словом, частью слова, числом, знаком препинания или элементом кода.
42. Почему JavaScript-код может занимать больше токенов, чем обычный текст?
Подсказка: в коде отдельными токенами часто становятся символы вроде точки, скобок, запятых и операторов.
43. Примерно сколько токенов может занять такой фрагмент JavaScript-кода? ctx.moveTo(x + w * 0.78, y + h * 0.5);
Подсказка: в коде отдельными токенами могут становиться имена переменных, числа, точки, скобки, запятые и операторы.
44. Почему строка ctx.moveTo(x + w * 0.78, y + h * 0.5); может занимать около 20 токенов, а не 5–6?
Подсказка: токены — это не обязательно слова; в коде они часто соответствуют маленьким фрагментам синтаксиса.
45. От чего в первую очередь зависит максимальная длина ответа LLM в одном запросе?
Подсказка: длина ответа ограничивается не словами напрямую, а токенами и техническими настройками модели.
46. На основе чего LLM выбирает токен конца ответа?
Подсказка: модель каждый раз оценивает возможные продолжения текста и выбирает наиболее подходящее с учетом запроса, уже написанного ответа и инструкций.
47. Что такое токен завершения (EOS token) в генерации LLM?
Подсказка: модель генерирует текст по токенам и может выбрать специальный токен окончания ответа.
48. Что произойдет, если задать очень маленький лимит ответа LLM модели, например 10 токенов?
Подсказка: если лимит ответа всего X токенов, модель постарается отвечать в этих пределах, но не гарантируется, что смысл будет полностью сохранен. Ответ может оборваться или получиться слишком кратким.
49. Что произойдет, если задать определенный лимит ответа LLM модели, токакая длина ответа будет?
Подсказка:лимит токенов задает верхнюю границу длины ответа, но не гарантирует, что модель использует все доступные токены. Ответ может закончиться раньше, если модель сгенерирует токен завершения, или быть обрезан, если лимит закончится до полного завершения мысли.
50. Почему длинный вопрос может уменьшить возможную длину ответа?
Подсказка: общий лимит обычно считается как сумма входа, истории диалога, документов и ответа.
51. Может ли LLM бесконечно писать ответ, если пользователь попросит роман или бескнечную рекурсивнуюгенерацию текста по ипу у попа жила собака...?
Подсказка: даже очень длинный текст обычно нужно генерировать частями.
52. Почему после завершенной фразы вероятность EOS token может увеличиться?
Подсказка: если ответ уже выглядит логически полным, например содержит законченное объяснение или выполненное количество пунктов, модель чаще считает продолжение менее нужным.
53. Чем отличается выбор EOS token от остановки по max_tokens?
Подсказка : в одном случае завершение является частью предсказания модели, а в другом генерация может остановиться из-за внешнего ограничения, даже если текст еще не был закончен.
54. Почему инструкция “ответь кратко” может повлиять на появление токена конца?
Подсказка: системные и пользовательские инструкции входят в общий контекст генерации, поэтому они могут делать короткое завершение более вероятным.
55. Почему LLM-модель всегда отвечает на сообщение пользователя (если нет цензуры)?
Подсказка LLM предсказывает следующий токен на основе контекста и обучающих данных.
56. Почему модель не всегда молчит, даже если вопрос неполный или странный?
Подсказка GPT-модели обучают реагировать на запрос пользователя и стараться дать полезный ответ.
57. Какой подход считается стандартным для параллельной работы нескольких Codex/Claude AI Agent над одним проектом?
Подсказка: такой подход позволяет изолировать изменения и уменьшить количество конфликтов.
58. Для чего используется команда git worktree при работе с несколькими Codex/Claude AI Agent?
Подсказка: каждая директория может содержать свою ветку и собственный экземпляр агента.
59. Какой вариант декомпозиции задач лучше всего подходит для одновременной работы нескольких Codex/Claude AI Agent?
Подсказка: чем меньше пересечений по файлам между задачами, тем меньше вероятность конфликтов.
Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии