Transcription
Добро пожаловать на эту сессию о новинках в Visual Studio Code для GitHub Copilot. На этот раз я сосредоточусь на версиях 1.109.3 и 1.110. Я продемонстрирую функции, чтобы объяснить, как они работают. Получайте удовольствие.
Одной из интересных новинок являются хуки. И с хуками у вас есть определенный контроль над сопилотом в некотором смысле. Итак, чтобы начать, вы вводите в чате `/hooks` и появляется меню, которое показывает все доступные хуки. Одним из них, например, будет начало сессии, когда начинается новая сессия агента и кто-то вводит новый запрос. А тот, который мы собираемся использовать, это `pre-tool use`. Это хук, который срабатывает непосредственно перед тем, как сопилот использует свой первый инструмент, и вы можете представить, что, например, инструмент терминала может быть одним из релевантных.
Мне нужно ввести имя файла хука. Я назову его `set proxy`, потому что у меня есть прокси, который я хочу установить перед использованием инструмента. Возможно, `pre-tool use` — не лучшее место. Возможно, это должно быть `presession`, но мне удалось заставить это работать. Так что это хорошо для демонстрации. Я введу это, и это настроит файл в папке GitHub в папке `hooks`. Имейте в виду, что эта функция может быть отключена в корпоративных политиках. Так что, возможно, она вам недоступна, но если она доступна, то действительно полезна.
Я уже создал здесь скрипт, скрипт PowerShell под названием `set proxy`, который установит прокси, и если он не удастся, он вернет сообщение. Так что команда будет вызывать командную строку PowerShell, а затем `scripts set proxy`. Это выполнит его. С этим можно сделать очень многое. В данном случае у нас тип — команда. Есть и другие типы. Вы можете даже настроить его таким образом, чтобы ваши команды отличались в зависимости от платформы, на которой вы находитесь. Так что у вас может быть команда для Linux, для Windows, для Mac OS. Так что действительно есть много того, что вы можете сделать.
Ознакомьтесь с заметками о выпуске. Есть ссылка на документацию, которая гораздо глубже, чем то, что я могу показать здесь. Но да, давайте посмотрим, как это работает. Я покажу вам скрипт, потому что это тоже интересно. Итак, это скрипт PowerShell, который будет вызван непосредственно перед инструментом. И у меня есть некоторый фиктивный код, который установит прокси. Он не установит прокси. Он просто установит переменную, которая приведет к сбою этого действия. Так что прокси не удалось установить. А затем у меня есть оператор `if`. И вы можете вернуть определенный формат для сопилота, и сопилот это поймет. Это должен быть JSON. Он должен иметь `continue`, `stop_reason` и `system_message`. Я не нашел, где появляется `system_message`, но `proxy not set` здесь — это причина остановки, которая будет показана в чате. А `continue` указывает, должен ли сопилот продолжать или нет. В данном случае мы установили его в `false`. Тогда сопилот остановит выполнение.
Итак, это файл. Я закрою их, и вы увидите, что произойдет. Итак, например, перечислите содержимое каталога, используя содержимое каталога PowerShell текущего каталога. Хорошо. Давайте посмотрим, что произойдет. Он вызовет инструмент. Конечно, ему нужно будет что-то запустить в терминале. И, как вы видите, он заблокирован хуком `pre-tool use`, и мне нужно его развернуть. И тогда вы увидите сообщение об ошибке, что прокси не установлен. А затем сопилот остановит выполнение.
Конечно, это очень простой сценарий. Есть много сценариев, о которых вы можете подумать. Подумайте о запуске линтеров после предложений или когда есть вызовы очень специфических инструментов, потому что вы можете отфильтровать это в вашем JSON, что это предотвратит, или, ну, действительно есть много того, что вы можете сделать. У вас могут быть хуки внутри вашего проекта или в ваших пользовательских настройках, и те, что находятся в папке `github` вашего проекта, имеют приоритет над теми, что находятся в вашем пользовательском профиле.
Имейте в виду, что хуки включаются и отключаются через настройку. Итак, давайте быстро покажем вам настройку. Настройка называется `chat.hooks.enabled`. В моем случае она включена здесь. Если она отключена, хуки, очевидно, не будут распознаваться.
Управление в середине сессии — это то, что было доступно в кодирующем агенте на github.com, но оно еще не было доступно в Visual Studio Code. Но теперь это изменится. Итак, я попрошу сопилота сделать что-то, что займет некоторое время. Итак, я прошу его добавить максимальное количество пассажиров в модель самолета. И я хочу метод в контроллере, который возвращает максимальную стоимость пассажира на основе этого. Итак, пока Сопилот занят этим, я думаю, мне также нужны модульные тесты для этого. И мне, вероятно, нужно будет дать ему указание сделать это. Итак, я наберу «не забудьте добавить модульные тесты». И теперь я получаю значок здесь, «управлять с сообщением». И у меня есть больше опций. Я могу выбрать «добавить в очередь» и «остановить и отправить».
«Управлять с сообщением» означает, что это сообщение будет отправлено и обработано после текущего вызова инструмента. «Добавить в очередь» означает, что оно будет выполнено, как только сопилот завершит работу, а «остановить и отправить» означает, что он остановит выполнение, но я только что сделал это. Возможно, я был немного опоздал, но, думаю, вы поняли. Итак, я попросил его добавить модульные тесты, а затем он просто продолжает, и, возможно, здесь также добавить модульный тест для сценариев ошибок. Он просит меня разрешить запуск тестов во время их выполнения.
Теперь давайте быстро перейдем к управлению, и, как вы видите, написано «управление». Итак, он в настоящее время выполняет запуск тестов. Как только выполнение тестов завершится, он начнет выполнять мой следующий запрос. Итак, вот как работает управление. Я думаю, это очень мощно, потому что, конечно, это произойдет, когда сопилот будет занят, и вы увидите что-то, что он делает, и вы захотите пойти в другом направлении. Так что это инструмент, который вы будете использовать, и пока сопилот обрабатывает наш запрос, есть настройка, которая здесь актуальна.
Итак, давайте посмотрим на настройку. Я имею в виду, что есть значение по умолчанию для очереди запросов чата, и, как вы видите, по умолчанию оно установлено в «управлять», что означает, что если вы введете текст и нажмете Enter, он выберет «управлять». Вы можете выбрать «очередь». «Очередь» означает, что она будет выполнена, как только сопилот полностью завершит работу. А действие «остановить» недоступно в качестве действия по умолчанию. Вы можете выбрать его только при вводе здесь. И, конечно, сейчас ничего не работает, поэтому я не могу показать это. Но я думаю, вы видели это в моей предыдущей демонстрации.
Возможно, вы слышали о навыках. Навыки — это отличный способ хранения определенного поведения в файле markdown, а также предоставления дополнительных инструментов, таких как скрипты и инструменты, для использования сопилотом для введения детерминированного поведения. И большая коллекция этих навыков доступна в репозитории awesome copilot. Если вы найдете awesome copilot в Google, вы обязательно найдете репозиторий GitHub, который содержит это. Я добавил навык в свой репозиторий, и это обзор паттернов проектирования .NET.
Навыки расположены в каталоге `skills`, затем в названии навыка, и тогда у него должен быть как минимум `skill.md`. Если мы посмотрим на `skill.md`, у него есть заголовок метаданных с названием и описанием, а также описание поведения. И мы можем сделать так, чтобы сопилот, очевидно, распознал навык. Вы всегда можете спросить: «Позвольте мне выбрать другую модель для этого». Какие навыки у вас доступны? И я закрою этот файл. Я позабочусь о том, чтобы он не был частью контекста, и сопилот должен его распознать. И вот он, навык обзора паттернов проектирования .NET. У меня есть другие навыки, потому что у меня установлено расширение Azure, которое имеет некоторые навыки в моем профиле. Но, да, он обнаруживает это таким образом.
И что вы можете сделать, чтобы активировать навык, если хотите, это набрать `/` и затем `dotnet`. Так называется навык, и я могу активировать его вот так. И тогда я открою файл, например, наш контроллер. Обзор контроллера рейса. Тогда он сделает обзор. Так что это навык, который он применяет здесь. Делает обзор. Так что здорово иметь возможность активировать это, если вы этого не хотите. Вы можете открыть не этот файл, а `skill.md`, который мы только что видели, и добавить некоторые настройки в заголовок метаданных. И один из них — `user_invocable`, и по умолчанию он установлен в `true`. Так что давайте установим его в `false`. И сохраним. И теперь, если я наберу `/dotnet`, вы увидите, что он больше не появляется. Так что теперь мы не можем его вызвать. Он может быть использован только сопилотом в автоматическом режиме.
И что вы также можете сделать, это отключить вызов модели. И как только вы установите это в `true`, тогда у меня есть команда `/`, но теперь сопилот не распознает этот навык. Так что, если я теперь спрошу, какие навыки у вас доступны, то он больше не должен распознавать .NET. И, как вы видите, он сразу же начинается со всех расширений Azure. Я не вижу .NET, появляющегося больше. Возможно, внизу, но вот он. Нет, даже не внизу. Так что это предотвращает его распознавание сопилотом.
Отладка агента и просмотр того, что он делает в фоновом режиме, уже некоторое время является частью чата Copilot. Так что вы могли бы показать представление отладки чата, и тогда оно раскрыло бы всевозможные элементы, которые происходили в фоновом режиме. Итак, во время предыдущих демонстраций я общался с сопилотом, немного управлял здесь, так что мы могли бы пройти через эту сессию и найти всю информацию о ней, такую как метаданные и отправленный мной запрос, и системный запрос, который использует сопилот, и так далее, и так далее. Но, как вы видите, этот обзор довольно плохой, чтобы обнаружить какие-либо проблемы, вам нужно будет просмотреть весь этот markdown, чтобы найти вашу проблему. Так что, да, они встроили новый инструмент, и вам нужно получить к нему доступ с помощью панели команд, используя F1 или Ctrl+Shift+P, и тогда он уже там. Если я поищу «панель отладки агента», вы увидите, что она появляется, и здесь открывается новое представление.
Итак, давайте закроем чат здесь, чтобы было немного больше места. Это мои последние сессии. Давайте посмотрим, есть ли что-то интересное. Да, это было доступно обновление модели навыков для расчета веса пассажиров. Давайте посмотрим на это. Итак, он дает нам своего рода панель управления, указывающую количество поворотов модели, вызовов инструментов, общее количество использованных токенов, количество ошибок и общее количество событий. И у нас есть две важные кнопки здесь, и та, которая мне больше всего нравится, — это блок-схема агента. Здесь мы можем точно увидеть, что произошло во время этой сессии. Вы можете прокручивать, чтобы увеличить масштаб, и вы можете перетаскивать, чтобы перемещать это. И, как вы видите, в начале сессии есть загрузка инструкций, и вы можете развернуть ее, чтобы увидеть, какие именно инструкции он загрузил, какие навыки. Давайте откроем навыки. Вы видите все мои навыки Azure, которые являются частью расширения Azure, расширения Azure Copilot. Есть доступные агенты. Но в моем случае это только агенты по умолчанию. У меня нет пользовательских агентов. Если у вас есть хуки, вы увидите их здесь. У меня сейчас нет хуков. И обычные инструкции. Так что это первый шаг. А затем вы можете нажать на любой из этих шагов. Это мое сообщение пользователя, добавьте максимальное количество пассажиров в модель самолета и так далее, и так далее. Посмотрите разделы запросов, какие вложения были там. Вы можете сворачивать и разворачивать их. Так что это действительно очень помогает получить лучший обзор, и я не знаю, есть ли у нас здесь использование инструментов. Ах, вот оно. Так что это использование инструмента «чтение файла». Мы можем развернуть его. Было два вызова, и мы можем нажать на вызовы и затем углубиться в них.
Так что, да, я думаю, это отличное дополнение, безусловно, поверх того, что уже было, потому что, конечно, в фоновом режиме он использует те же данные, но представление данных намного лучше. Мы также можем перейти к просмотру журналов, и там мы увидим это в более структурированном виде, немного похоже на то, что мы видели в представлении отладки. И здесь мы можем, например, перейти к чтению файла, вызовам инструмента «чтение файла» и снова увидеть детали. Так что это другое представление. Это то, что вы предпочитаете. Мне очень нравится блок-схема. Она действительно помогает мне получить представление о том, что произошло. Даже здесь у нас есть вызовы модели, количество токенов. Да, все здесь. Так что попробуйте. Если у вас возникнут какие-либо проблемы с GitHub Copilot, чтобы выяснить, что произошло в фоновом режиме, используйте эту панель отладки агента.
Зоркие зрители могли заметить, что режим редактирования исчез из меню. Так что в настоящее время у нас есть только «спросить агента» и «режим плана». И режим редактирования был действительно отличным способом ограничить сопилота только редактированием файлов, которые вы открыли или добавили в контекст. Недостатком было то, что он не итерировал, как это делал режим агента. Он применял изменения, а затем завершал работу. Он не запускал модульные тесты, например, или компиляцию и не смотрел, что получится. Так что это не было исправлением. Так что, хотя мне очень нравится режим агента, я думаю, что в режиме редактирования есть некоторая ценность. Так что, если вы хотите снова включить его, вы можете перейти в настройки, а затем отфильтровать `chat.edit_mode.hidden`, и вы можете включить его. Так что, когда я снимаю эту галочку, он становится видимым. И вы увидите, что он появляется здесь в меню. И они внесли небольшое изменение. Если вы внимательно посмотрите, вы увидите, что у нас здесь есть «настроить инструменты». Этого раньше не было. Режим редактирования был очень специфическим проприетарным режимом, для которого не было доступно никаких инструментов. Теперь он есть, и если вы откроете их, вы увидите, что некоторые отключены, или на самом деле многие встроенные инструменты отключены, такие как браузерный агент, выполнение. И чтобы проверить, что теперь стоит за режимом редактирования, это совершенно другое. Я перехожу к настройке пользовательских агентов, а затем проверяю здесь режим редактирования. Как вы видите, за режимом редактирования стоит определение пользовательского агента, и это помогает вам создать свой собственный пользовательский агент, если вы хотите, на основе режима редактирования. Но вы можете видеть, что это другое воплощение.
Тем не менее, все еще говорится, что режим только редактирования ограничен текущим активным файлом и любыми файлами, явно прикрепленными в контексте запроса. Так что они пытаются имитировать поведение оригинального режима редактирования, но реализация отличается. Кроме того, у нас, конечно, все еще есть режим плана, и, простите, я имею в виду режим запроса. И если вы внимательно посмотрите сюда, вы увидите, что у нас также есть «настроить инструменты», что означает, что режим запроса перешел к истинному агентному опыту, то есть нет необходимости явно добавлять контекст, он может использовать инструменты для обнаружения контекста, который ему нужен для ответа на ваш вопрос. Так что, да, это довольно большое изменение, и даже для режима запроса, если мы перейдем к настройке пользовательского агента, мы теперь можем выбрать «запрос», и вы увидите, что есть определение пользовательского агента для запроса, что означает, что вы можете создать свой собственный агент на основе того, что находится в агенте запроса. Так что, возможно, это не кажется большим изменением, но я думаю, что это действительно большое изменение, и я надеюсь, что эти режимы сохранят свои мощные функции, одновременно позволяя вводить новые функции, потому что теперь они основаны на пользовательском агенте.
Итак, появилась новая функция плагинов чата, и плагин чата — это, по сути, контейнер, который содержит всевозможные настройки в одном пакете. Так что он может содержать пользовательские инструкции, может содержать навыки, пользовательские агенты — все, что вы можете настроить в сопилоте, он может содержать. Отлично то, что у нас уже есть довольно много таких в репозитории awesome copilot. Так что, если вы зайдете в каталог плагинов, там есть множество плагинов, и я хотел бы сначала показать вам немного, как они выглядят. Так что есть один, который мы будем демонстрировать позже, это режим nuke. Режим nuke — это настройка, где Copilot очень облегчит людям реагирование на вопросы, которые он задает. Он делает все очень простым для определения того, делает ли Copilot что-то действительно чувствительное к вашему коду или нет. И если я открою эту папку, она содержит несколько файлов и папок. Так что она содержит readme. Readme, очевидно, объясняет, как его использовать, и что это такое, и для кого он предназначен. Но, как вы видите, у нее есть папка `skills`. Так что внутри этого навыка у нас есть новая папка `mode`, которая содержит `skill.md`, как мы привыкли с обычными навыками, которые являются частью вашего проекта. И есть папка `github/plugin`. Она содержит манифест. Так что здесь есть файл манифеста, файл JSON, который содержит информацию о том, как этот конкретный плагин отображается на рынке, потому что есть функция магазина в Visual Studio Code для визуализации этих плагинов, и вы можете установить его оттуда.
Итак, давайте перейдем в Visual Studio Code и посмотрим, как мы можем их найти. Итак, я перейду на рынок расширений и поищу «agent plugins». Вот он. И он находит всевозможные плагины агентов. В настоящее время он ищет в двух репозиториях. Как вы видите, здесь вы видите `github/copilot_plugins`, который является одним из них, а другой — `github/awesome_copilot`. Конечно, вы можете настроить это, но это первые, которые идут по умолчанию. Итак, давайте найдем `nuke`. Вот он, режим Nuke. И в первый раз, когда вы нажмете «установить», он клонирует репозиторий awesome copilot на вашу локальную машину в фоновом режиме. Так что, просто чтобы вы знали, и если вы установите, это все. Я имею в виду, я могу нажать на него, конечно, и нажать «установить» там. Но теперь вы видите, что кнопка «удалить» доступна, что означает, что этот плагин установлен. И это также работает для Copilot CLI для тех, кто любит CLI. В CLI вам нужно устанавливать их отдельно. Так что нажатие «установить» здесь не устанавливает его в CLI. И все эти плагины будут иметь инструкции о том, как установить их в CLI. Так что не беспокойтесь, если вы не знаете команду.
Хорошо. Итак, режим Nuke теперь доступен. Я возвращаюсь сюда, и да, чтобы включить режим Nuke, вам нужно его включить. Итак, `/noop mode`. Вот он. Enter. Это все. В данном случае, так что, конечно, способ использования этих плагинов варьируется от плагина к плагину, но в данном случае он говорит: «Хорошо, я активен». Так что теперь я задам ему вопрос, чтобы добавить свойство `engine_sound`. Вы, возможно, видели эту демонстрацию раньше в одной из моих сессий. Так что это сделает довольно много шагов, некоторые изменения в коде, и, как вы видите, ответ очень отличается от его обычного ответа. Он очень легко объяснит, что он сделает, план. Он прочитает существующий код, добавит свойство `engine_sound` в модель самолета, и даже объяснит, что такое модель. Затем новый способ поиска `engine_sound` по названию самолета в контроллере, части, которая обрабатывает веб-запросы. И, наконец, он добавляет тесты, чтобы убедиться, что все работает правильно. Так что, да, он сделает несколько вещей. Я хочу открыть и прочитать несколько существующих файлов кода, чтобы понять, как структурирован проект, чтобы быть в состоянии понять. И, как вы видите, он выдает риск. Шаг первый выполнен. А затем он продолжает с другими шагами. Так что, как вы видите, это способ очень легкого предоставления вам определенных настроек. И, конечно, вы можете настроить эти плагины самостоятельно. Так что, чтобы иметь возможность сделать это, вам нужно будет предоставить дополнительный магазин, конечно.
Итак, давайте зайдем в настройки, пока сопилот занят реализацией этого. И если я поищу `chat.plugins`, вы увидите, что у нас есть две настройки. Одна — это если она включена. Так что, если она не работает для вас, конечно, вы можете включить ее здесь. А другая — это магазины. Как вы видите, это репозитории GitHub. Так что, если у вас есть свои собственные репозитории GitHub с вашими собственными плагинами чата, вы можете настроить это здесь. И это будет доступно. И, конечно, чтобы иметь возможность нажать на это, вы можете перейти в папку VSScode, создать `settings.json` и настроить эту конкретную настройку прямо здесь в `settings.json`, и тогда она будет передана всем разработчикам в вашей команде или разработчикам, которые фактически работают над репозиторием.
Как вы видите, он реализовал несколько изменений в коде. Он объясняет, как отменить. Есть сводка. Так что, да, это довольно забавная функция. Да, проверьте ее на awesome copilot. Там много таких функций, таких плагинов, я имею в виду. И если вы хотите создать свой собственный, пожалуйста, сделайте это.
При рефакторинге одним из элементов, которые вы, вероятно, делаете довольно часто, является переименование вещей и поиск использований. Так что для этих новых инструментов были разработаны, и они называются `find_usages` и `rename`. И то, что я видел, это то, что эти инструменты не всегда очень хорошо распознаются различными моделями. Так что это немного зависит от того, какую модель вы используете. Некоторые модели распознают их лучше, а некоторые нет. Чтобы быть уверенным, что они будут распознаны, у меня есть запрос, который явно будет использовать эти инструменты. Так что у меня есть логгер здесь, и я хочу переименовать этот логгер в `class_logger`. Так что я вызываю `find_usages` логгера и переименовываю их в `class_logger`. И если я выполню этот запрос, и у меня были некоторые хорошие результаты с Gemini 3 flash. Он довольно быстрый и очень хорошо распознает инструмент. Вы увидите, что он создает задачи. Однако это занимает немного больше времени, но да, он проанализировал использования логгера, нашел несколько результатов, а затем обновил их. Так что результаты соответствуют ожиданиям.
И теперь я ранее показывал вам новое представление отладки. Давайте перейдем туда, панель отладки. И, как вы видите, это наша активная сессия. И это отличный способ определить, распознаются ли эти инструменты. И, как вы видите, сначала он использовал инструмент `manage_todo_list` для создания списка задач. Затем он выполнил `list_code_usages`, который является инструментом `find_usages`. Так что он запустил его и нашел четыре использования, а затем снова выполнил задачу «список задач», но затем использовал инструмент `rename` для переименования использований этого логгера. Так что при рефакторинге это может быть очень полезно, я думаю, мне это очень нравится. Да, начните экспериментировать с этим, возможно, с некоторыми моделями, если вы не называете инструменты явно, они будут распознаны, но да, просто помните, что они не всегда хорошо распознаются во всех случаях.
При использовании кодирующего агента на github.com вы увидите, что изменения, которые вы вносите, коммиты, которые вы вносите, являются совместными авторами сопилота, но когда вы вносите изменения с помощью сопилота в Visual Studio Code, вы увидите, что вы единственный автор. Если вы хотите изменить это и хотите сообщить людям о том, что вы используете сопилот для генерации ваших коммитов, вы можете сделать это. Теперь есть настройка, которую вы можете найти, набрав `git.ai`, и тогда это будет первая настройка, которая появится, `add_coauthor`. По умолчанию она отключена, так что она просто добавит вас как автора. Вы можете установить ее в `chat` и `agent`, и, сделав это, она добавит сопилота как соавтора к вашим коммитам только тогда, когда вы использовали режим агента или режим запроса для генерации кода. Но если вы установите ее в `all`, то также и автодополнения от сопилота, и когда вы используете встроенный чат, тогда сопилот также будет добавлен как соавтор. На данный момент я установлю его в `chat` и `agent`. И я закрою настройки.
И я внесу очень простое изменение в нашу модель самолета. Я добавлю свойство `country`. Итак, вот оно. Добавьте свойство `country` в эту модель. Enter. А затем он должен добавить его довольно быстро. Вот оно. Давайте сохраним эти изменения. И теперь перейдем к моим изменениям в моей истории git и добавим это. Итак, я добавил свойство `country`. Хорошо. Имейте в виду, что есть небольшой баг: если вы генерируете сообщение коммита с помощью сопилота, эта функция не работает. Пока, я надеюсь, что в будущем это будет исправлено, конечно, но пока это не работает. И тогда я закоммичу и отправлю. Вот он. И тогда давайте посмотрим, изменилось ли это теперь. Итак, давайте перейдем к моим коммитам, и, как вы видите, добавлено свойство `country`, и, как вы видите, я и сопилот теперь закоммитили. Так что, если я перейду к деталям моего коммита, вы увидите «соавтор: Copilot, copilot.github.com». Так что это может быть полезно. Но, как вы видите, это настройка, которую вы можете включить и выключить самостоятельно. Так что полностью зависит от вас, используете вы ее или нет.
Это было все для Visual Studio Code 1.10. Вы можете представить, что есть гораздо больше функций, чем я смог продемонстрировать в этом видео, и я, безусловно, могу порекомендовать вам ознакомиться с заметками о выпуске. Вы можете найти их в описании видео. Так что есть ссылка на заметки о выпуске. И одной из действительно интересных функций является функция форка для чат-разговоров. Вы можете форкнуть из определенной точки в вашем чат-разговоре в новый разговор, взяв с собой весь ваш контекст. И еще одна — память. У сопилота теперь есть память, и, безусловно, в режиме плана это очень полезно. Он сохраняет план, сгенерированный в его памяти. Так что это здорово, и в фоновом режиме, если у вас длинный разговор, сопилот будет сжимать или суммировать ваш разговор, и теперь вы также можете делать это сами. Так что, пожалуйста, ознакомьтесь с ним, и я надеюсь увидеть вас в следующий раз. Спасибо за просмотр.