Цифровые технологии и искусственный интеллект
Учебное пособие
Валентин Юльевич Арьков

Дизайнер обложки Нейросеть "Кандинский"

© Валентин Юльевич Арьков, 2024

© Нейросеть "Кандинский", дизайн обложки, 2024

ISBN 978-5-0064-8583-9

Создано в интеллектуальной издательской системе Ridero

Предисловие

Перед вами учебное пособие. Это не учебник. Эта книга не заменяет большие, толстые, серьёзные, дорогие издания в красивых обложках, а только дополняет их.

Учебное пособие помогает в освоении материала, помогает учиться. Поэтому его и называют «пособие». Это слово происходит от древнего слова «пособИть» или «пособлять» – то есть «помогать, содействовать, способствовать».

В пособии подробно разбирают какой-нибудь раздел, какое-нибудь часть предмета, дисциплины. Зато здесь даётся больше деталей, нюансов, много практических примеров, упражнений и заданий. Это помогает (то есть «пособляет») в учебе.

С другой стороны, есть книги под названием «учебники». Учебник должен давать полную представление о своём предмете. Здесь должны быть описаны все разделы предмета. В нем будет много теории. Он должен позволить нам изучить предмет полностью.

А ещё бывают книги, на которых написано «учебник» или «учебное пособие». Но это совсем не означает, что внутри обязательно будет что-то полезное. Как говорится в народной пословице: «доверяй, но проверяй». Или как в рекламе: «не все йогурты одинаково полезны…»

Приходится учиться различать, какие книжки хорошие, а какие не очень. Что поможет в учёте, а что помешает.

С компьютерными технологиями есть ещё одна неприятность. Слишком быстро развиваются технологии. Учебники не успевают выпустить, а они уже устарели. Пособие выходит быстрее. Можно за неделю выпустить его в жизнь. Чем мы и занимаемся.

Какую книгу выбрать – для того, чтобы изучить какой-нибудь предмет? Это зависит от человека. Можно открыть книгу в магазине или скачать файл в интернете – и просто пролистать несколько страниц. Почувствуйте на себе, насколько вам подходит этот текст. Сможете ли вы прочитать ещё несколько страниц? Желательно с пониманием и без отвращения.

Все люди разные. У каждого свой уровень подготовки. И разным людям помогут разные материалы для изучения. Кому-то нужно побольше картинок, а кому-то подробные объяснения. А кому-то наоборот – надо покороче и побыстрее.

Возможно, это пособие поможет именно вам сделать первые шаги в изучении информационных технологий.

Введение

В рамках лабораторных работ мы будем знакомиться с возможностями интеллектуальных систем и сразу же будем рассматривать практические примеры применения этих возможностей. Область искусственного интеллекта охватывает самые разные методы и инструменты. На сегодняшний день чаще всего говорят о нейросетях. Вот эту тему мы и будем обсуждать на протяжении нескольких занятий.

Каждое занятие – это ещё один полезный навык. За считанные часы вы научитесь и сможете

– грамотно составлять подробные запросы к нейросети

– создавать персонального интеллектуального бота в Телеграм

– работать с текстовыми файлами и диаграммами с помощью кода

– измерять и улучшать свойства алгоритмов

– работать с электронными таблицами и текстовыми редакторами, облачными сервисами и другими полезными инструментами

В рамках этого учебного пособия мы обсуждаем самые основы предмета, самые базовые понятия и технологии. Для этого материал даётся и объясняется очень простыми словами. Эти пояснения предназначены для тех, кто только начинает знакомиться в современными технологиями. Поэтому не удивляйтесь, что объяснения будут очень приблизительные и упрощённые. Сложные слова и запутанные материалы вы легко сможете найти в толстых учебниках, если будет такое желание.

1. Конструирование запросов

В этой работе мы рассматриваем основные правила построения запросов к нейронной сети. Контент, который будет сгенерирован в ответ на наш запрос, зависит от того, насколько подробно и тщательно мы сформулировали наше задание. Один из самых популярных интеллектуальных инструментов на сегодняшний день – это большие языковые модели – Large Language Models (LLM). Они действительно большие, в буквальном смысле слова, потому что внутри содержат миллиарды параметров (коэффициентов). При обучении таких моделей подбирают значение этих коэффициентов. а для этого используют огромное количество материалов, в основном, взятых из интернет.

Интеллектуальные системы, которые создают новые объекты (текст, изображение, звук, видео и так далее), в настоящее время обычно называют генеративным искусственным интеллектом (Generative Artificial Intelligence, Gen-AI). Технология составления заданий для таких систем называется конструирование запросов (Prompt Engineering).

Интеллектуальные системы – это не какая-то очередная заумная, абстрактная теория. Это практичные, работающие инструменты, причём иногда даже неплохо работающие инструменты. Так что в процессе знакомства с искусственным интеллектом мы будем не просто искать информацию в интернете, но и сразу же применять полученные знания.

Если где-то в интернете, на каком-то сайте что-то написано, наша задача будет проверить и убедиться в этом лично. Одно дело, когда нам советуют: «Запрос к нейросети надо писать вот так…» Мы посмотрим на эту инструкцию и сразу же проверим, насколько это правда. Насколько это полезно и удобно.

Всё, что пишут в интернете, пишут люди. А в последнее время даже и не люди, а нейросети или боты. И нет здесь никакой ответственности – за правильность и за результаты.

Специалисты по информационной безопасности предупреждают и объясняют… Проблема в том, что интернет – это не то же самое, что водопровод. Если открыть водопроводный кран, из него потечет вода. И во многих наших городах её даже можно пить – прямо из крана. Есть города, где сначала надо бы её прокипятить. Так вот, из интернет «потечёт» всё, что угодно. Может потечь питьевая вода, а может потечь какая-нибудь отрава. И когда мы выходим в интернет, мы сталкиваемся с тем, что не всем и не всему можно верить. Наша задача научиться отличать – где правда и где неправда. И сразу же проверять. Как говорится, доверяй, но проверяй.

Кстати говоря, поскольку большие языковые модели обучают на материалах из интернета, они осваивают всё – в том числе вредное, неправильное и нежелательное. Это примерно как учить ребёнка читать по надписям на заборе. После такого «обучения» он будет удивлять своих родителей и радовать сверстников. Поэтому при обучении нейросетей есть дополнительный этап, на котором сгенерированные ответы проверяют специально подготовленные люди. Это нужно, чтобы обучить нейросеть «хорошим манерам».

В рамках этого занятия нас будет интересовать такой вопрос: как писать запросы к нейросети? Запросы по-английски называются промты или промпты – prompt.

Поисковый запрос

Первое действие очень простое. Открываем какую-нибудь поисковую машину. И задаем ей такой вопрос: «Как писать запросы к нейросети?» Естественно, на экране появится множество ссылок. Мы просматриваем хотя бы первую страницу и пытаемся перейти по некоторым ссылкам, которые нам приглянулись. Наша цель – вначале понять основную идею, посмотреть на основные моменты – что нам советуют. Мы должны просмотреть результаты поиска и извлечь для себя основные, ключевые моменты. В интернете мы находим много всякого текста, но наша задача извлечь из этого что-то полезное.

Затем мы возвращаемся к началу. А зачем мы это спрашивали? Какая была конечная цель? И тогда можно будет наш запрос постепенно уточнять.

Задание. Используя поисковые машины, сформируйте список основных правил составления запросов к нейросети. Это будет начало нашего отчёта. Отчёт у нас будет в электронном виде.

Оформляем отчёт

По каждой работе мы составляем неформальный отчёт. В этом отчёте мы описываем то, что мы сделали и что нам удалось узнать. Попутно мы с вами проходим весь цикл работы. От начала до оформления результата. Чтобы прочувствовать общую схему работы, просмотрите раздел «Облачные отчеты» в конце пособия.

Результаты будем оформлять в облаке. Или хотя бы размещать в облаке. Как вы знаете, есть облачные офисные продукты. Есть продукты зарубежные, в том числе, и бесплатные. Есть аналогичные отечественные сервисы – в них и будем работать. Это не самый лучший и не самый худший вариант. По крайней мере, отечественный. И есть надежда, что он не заблокируется и не исчезнет в ближайшее время.

В отдельной вкладке открываем отечественный облачный офис. Для этого понадобится бесплатная учётная запись – такая же, как для электронной почты. Создаём новый документ. Интерфейс чем-то напоминает привычный настольный вариант. Вот в этом облачном документе нам и предстоит начать писать отчет по лабораторной работе. Затем мы можем просто передать ссылку на отчёт и не пересылать сам файл: Поделиться – Просмотр – Скопировать ссылку.

Вначале мы создаём новый документ. Как его назвать? Обычное решение: «лаба», или «отчет», или «мой отчет». Это хорошо, если такой документ у нас один-единственный. Теперь представим себе два-три таких файла с названием «Отчет» и «мой отчет»… Становится понятно, что в названии должен быть смысл. А ещё у нас могут быть разные дисциплины, а по ним могут быть разные виды занятий, так что «отчеты» могут быть разные.

Теперь подумайте, какие сведения в названии будут самые главные? То, что это отчет? Или то, что это «лаба»? И если вы этот отчет кому-то еще отправляете, как его отличить от остальных, от 20—30 таких же документов – тоже с названием «отчет»?

Напомним, что отчет – это такое произведение, у которого есть название и автор. Так что, на самом деле, разница будет в названии предмета и самого документа. Ещё у нас есть фамилия автора документа – конкретного студента. У нас редко бывает одинаковые фамилии в одной группе – тогда добавим инициалы. И, конечно, есть номер группы. Вот это ключевые моменты для названия документа. Теперь расположим их в порядке важности: фамилия, группа, название предмета. Название предмета можно сокращенно. Можно указать номер лабораторной работы. Получаем что-то вроде «Иванов-ЛР1-ЦТИИ-ИВТ123».

В нашем ВУЗе есть некоторые традиции – как оформляют отчеты, курсовые и прочие документы. Вначале идет особая, первая страничка. У книги бывает обложка, а у отчёта бывает титульный лист.

Итак, документ начинается с титульного листа. Есть такое понятие, титульный лист Это первый лист документа, на котором говорится, что это за произведение такое такое, на какую тему это произведение и кто его автор. Эту традицию вы обнаружите во многих учреждениях.

На самом верху титульного листа пишется название министерства, к которому мы относимся. По какому министерству или ведомству мы с вами проходим. Попробуйте выяснить в интернете: Министерство чего? Кому подчиняется наш университет? Можно даже на сайте вуза попытаться это обнаружить. Наверное что-то, связанное с образованием. Вот эта фраза должна быть первой строчкой титульного листа.

Теперь, когда мы начинаем печатать, нужно сразу выбрать размер шрифта. Какой высоты будут наши буквы, чтобы потом это другой человек ещё и смог прочитать… Например 14 или 16 пунктов – кому как нравится. Слишком мелко не надо, слишком крупно тоже не надо.

Периодически название министерства меняется. Ваша цель проверить, правда ли, что оно теперь называется Минобразование. Находим сайт и убеждаемся, что это действующий сайт и что это действующее министерство. Находим, проверяем. То, что мы с вами делаем, – это мы проверяем информацию. В области нейросетей это действие называется «факт-чекинг» – fact checking. Check – это проверка. Мы проверяем факты – facts.

Вторая строчка – это название нашего учебного заведения. Как оно правильно называется? Обычно на главной веб-страничке указывают полное название вуза – и мы пишем полное, а не сокращённое.

Дальше у нас должно быть указано название кафедры, которая проводит занятия. Например, если вы проходите занятия на кафедре иностранных языков, а учитесь на кафедре АСУ, мы пишем кафедра иностранных языков. Если занятие проводит кафедра АСУ, тогда мы пишем кафедра АСУ.

И только после этого мы уже начинаем объяснять, а что это за документ. И документ этот – отчет по лабораторной работе. Не лабораторная номер один, а отчет по лабораторной работе №1. Потому что кроме отчета бывают и другие документы.

Дальше – тема нашего занятия. Слово «тема» писать не обязательно. А вот название лабораторной работы хорошо бы указать. Для нашей текущей работы темой будет «Конструирование запросов».

По-английски это «промпт-инжиниринг» – prompt engineering.

Название предмета тоже надо куда-то вставить.

Видимо, после строчки «отчет по лабораторной работе» нужно будет сказать по какой дисциплине. Как у нас предмет называется? Длинное красивое название, мы указываем название нашего предмета. У кого-то лабораторные по физике, у кого-то по химии, а у нас по нашему предмету.

Затем мы указываем группу, фамилию и инициалы студента.

В самой нижней строчке – город и год.

Когда мы справились с оформлением титульного листа, можно переходить к работе по существу. Это внутреннее содержание отчета. Нас в этой работе что вы делали и что вам удалось выяснить. То есть какой запрос вы отправили и куда. Какие ключевые, полезные моменты вы для себя вынесли.

Действие первое было – поисковая машина. Как вы сформулировали запрос к поисковой машине? Какие полезные советы вы для себя определили? Здесь полностью переписывать не нужно. Здесь ценность в том, что вы через себя это пропускаете. Какие полезные правила составления запросов вы для себя обнаружили? Нам нужно свои мысли выразить в тексте.

На всякий случай поясним. Зачем мне нужно эти бумажки писать, эти документы и отчёты составлять? В любой работе вам придется составлять какие-нибудь документы, какие-нибудь тексты. Пусть даже заявление на отпуск или о приеме на работу. Или резюме. А в рамках нашей профессии – информатика и вычислительная техника – приходится разные документы составлять.

Здесь художественный талант не требуется. Здесь нужно очень коротко написать, что вы сделали и что вы получили. Кому отправили запрос, как звучал запрос и что вы для себя из этого вынесли.

Запрос к чат боту

Второе действие. Мы можем спросить и у самой нейросети то же самое, что мы пишем в поисковой машине.

Открываем на новой вкладке Яндекс GPT – просто в качестве примера. Мы не говорим, что этот сервис лучше всех или хуже всех. Это просто очередной инструмент. Причём отечественный. На главной странице сервиса читаем описание и смотрим просветительские ролики. Просвещаемся. И вот мы задаём ему вопрос – точно такую же фразу. Фиксируем в отчёте результаты.

Берём следующий инструмент: GigaChat от Сбера. Тоже просвещаемся по материалу главной страницы. Задаем ему тот же самый запрос: «Как писать запросы к нейросети?» Можно работать без регистрации. Можно войти с авторизацией для сохранения истории запросов. Чтобы войти в гигачат, потребуется учетная запись или SberID по номеру телефона. В отчете тоже нужно отразить, что нового узнали.

По каждому полезному совету подумайте и приведите примеры. Например, «контекст». В каком контексте нам нужен ответ? Придумайте пример, как объяснить это другому человеку. Это может быть описание проблемы, которую мы решаем: мы хотим научиться писать качественные запросы и для этого выясняем, какие есть советы и рекомендации, какие есть элементы/составные части в таких запросах и т. д.

По стилю и форме ответа тоже можно сформулировать требование: «Объясни простым языком, как для пятилетнего ребенка» – и она объяснит максимально простым языком. Одно дело – скопировать, скачать страничку текста и совсем другое дело – объяснить своими словами.

Можно встретить совет избегать отрицаний, отказаться от слов «не», «без», «кроме» и им подобных. Так что можно сказать: «Мужчина без волос». Или можно сказать: «Лысый». Как сказать другими словами, что у человека нет бороды? Каким-то позитивным утверждением выразить ту же самую идею.

Роль, поведение. Как звучит пример назначения роли? «Ты опытный программист» или «Действуй как редактор».

Итак, вот у нас уже есть контекст, у нас есть избегание отрицания, у нас есть роль. Мы на эти моменты посмотрели.

Теперь вернемся к нашему запросу: «Как писать запрос к нейросети». Уточним наш запрос. Он должен быть более конкретным. Сегодня мы в основном будем работать с вами с текстом, в ответах всплывают полезные советы про картинки. Поэтому в следующих запросах мы уже будем говорить по поводу работы с текстом, а не про запросы вообще. С учетом того, что мы узнали, попробуйте сформулировать более подробный, более детальный запрос.

Переходим к следующему инструменту, который мне очень даже нравится. Называется Perplexity. Вводим наш запрос и изучаем ответ. В процессе работы мы выясняем, что в технологии написания запросов есть расплывчатые полезные советы, а есть конкретный список элементов, из которых этот запрос будет состоять, если мы хотим генерировать текст. Какие элементы должны быть в запросе к нейросети? Сделайте более подробный запрос, чтобы получить более осмысленный список. Мы можем очень чётко сформулировать, что именно мы хотим. Из каких элементов должен состоять запрос? Или: какие полезные советы могут пригодиться при составлении запроса? Если мы говорим: «Составь список полезных советов», – мы получим именно список советов.

Мы должны объяснить нейросети, чего мы хотим. Для чего мы это хотим. Нас интересует генерация текста с помощью чат-ботов. В некоторых случаях мы получаем текст программы. А мы хотели не текст программы, мы хотели текст запроса. Как писать запрос к нейросети, если мы генерируем текст с помощью чат-бота.

Так что указываем, что именно мы хотим из чат-бота вытащить. Это слишком общие слова, слишком расплывчатая формулировка: «как писать запрос». Конкретное задание звучит так: «Составь список их двадцати полезных советов» или «топ 10 сайтов…»

Далее появляется ещё один элемент запроса: формат вывода, формат ответа. Мы можем отдельно попросить нейросеть объяснить этот конкретный пункт нашего списка, привести примеры того, как он звучит в запросах. И мы можем даже использовать пример формата вывода в тексте нашего запроса.

И вот мы подбираемся к ещё одной формулировке запроса. В промпте должны быть роль, контекст и формат. Теперь мы можем напечатать этот список и сказать: «Дополни этот список. Объясни, какие еще элементы должны быть в запросе к нейросети». Таким образом, мы постепенно выясняем для себя что-то и дополняем наш список и уточняем наш запрос.

Далее, доступ к Гигачату можно получить не только через браузер, но и через Телеграм. А этот мессенджер доступен и как мобильное приложение, и как десктопное приложение, и как сервис в браузере. Проверьте, поэкспериментируйте с этим сервисом. Каждый раз, после каждого эксперимента не забывайте отразить результаты в отчёте.

Итак, в конечном счете нас интересует список из 5, или 10, или 20 пунктов, которые действительно должны быть в нашем запросе к нейросети. И вот с этими вещами мы дальше будем экспериментировать.

Есть ещё один полезный совет, который удалось вытащить из нейросети. Задание должно звучать как задание, как команда. Мы говорим, даём команду, что надо сделать: предложи, напиши, сформулируй, обоснуй. Команда, задание – это действие. Мы не просто говорим «список», а мы говорим «составь список». Мы не говорим «программа», мы говорим «напиши программу». Бывают ситуации, когда мы говорим: «вот программа, исправь ошибку». Конкретная команда содержит в себе действие, и это глагол. Возможно, даже когда-то в далёком детстве, в школе что-то такое было. Теперь начинает пригождаться.

Следующий элемент запроса – ограничение. Мы должны указать, какой объем слов, или строк, или абзацев, или страниц хотим получить. Или: Напиши так, чтобы среднестатистический человек мог прочитать это за 5 минут. Можно даже потребовать нужное количество букв: Напиши ответ, в котором 20 букв.

Ещё один элемент запроса – это вариативность, или температура. Попробуйте уточнить у самой же нейросети: «Как нам задавать вариативность или температуру, когда мы пишем запрос к нейросети?» Как её указывать в запросе? Пускай сама нейросеть приведет пример. Мы так и говорим: Приведи 5 примеров того, как…

Что еще в запросе может быть? Оказывается, стиль. Разговорный стиль. Формальный, неформальный. Художественный. Как в такой-то книге – в качестве примера. Стиль какого-то знаменитого человека. Мы можем указать, каким языком, в каком стиле, на кого похоже.

Программируем без программирования

Переходим к инструменту под названием COZE, самому необычному на сегодняшний день. Здесь потребуется зарегистрироваться. Бесплатно. Например, с учетной записью Google. Нажимаем кнопку Get started справа сверху – то есть начать работу. Здесь мы сможем создать своего собственного бота, с которым будем дальше общаться.

Нажимаем кнопку Create bot слева сверху – создать бота.

Рис. Создаём бота

Далее в диалоговом окне Create bot – Workspace – Personal. Мы придумываем ему свое собственное название Bot name. Описываем его работу Bot function description. Генерируем ему иконку – картиночку. Нажимаем кнопку Confirm – подтвердить.

Рис. Открывающий диалог

Теперь сразу же выбираем языковую модель попроще, чтобы не потратить лимиты на запросы. На сегодняшний день этот сервис бесплатно обслуживает ограниченное число запросов. Например, для модели GPT-4o даётся только один запрос в день.

Рис. Выбор языковой модели

Далее, в разделе Skills – возможности – подключаем plugins – плагины – дополнения. Например, Google Web Search – поиск с помощью Google. Теперь у нашего бота есть выход в интернет для поиска свежей информации.

Рис. Возможности поиска

В разделе Persona & Prompt мы описываем общий запрос. И это будет System prompt. Есть запрос пользователя, а есть системный запрос. Уточните в любом чат-боте, что такое System prompt и как этим пользоваться. В двух словах, этот промпт будет всегда незаметно добавляться к запросу пользователя. И здесь мы можем описать все общие элементы наших запросов. Или можем задать любые ограничения, например: «в своих ответах говори намёками, чтобы пользователю пришлось подумать самому».

Рис. Системный промпт

В разделе Preview & Debug – предварительный просмотр и отладка – мы можем поработать с нашим ботом. Если нужно, сразу же исправляем его настройки.

Рис. Предпросмотр

Дальше на сервисе COZE мы можем сделать бота, с которым будем общаться через Телеграм. Для этого переходим к публикации. Справа сверху нажимаем кнопку Publish. В диалоговом окне настроим Conversation opener – начало диалога и рекомендуемые вопросы (их можно удалить). Нажимаем Confirm – подтвердить.

Рис. Настройка приветствия

В диалоге Publish to указываем платформу для публикации бота снимаем галочку Coze Bot Store – официальный магазин ботов. Видим, что в разделе Telegram у нас галочка не активна. Зато справа есть кнопочка Configure – настроить.

Рис. Публикуем в Телеграме

Здесь нужно ввести токен, который делается с помощью крёстного отца всех ботов – BotFather.

Рис. Запрос токена

В телеграмме мы находим бота под названием @BotFather. Будьте внимательны: есть много подделок с похожими названиями. Нажимаем Menu и выбираем команду /newbot. Создаём нового бота. Придумываем ему название и официальное имя для Телеграма.

Рис. Получение токена

После создания бота нам сообщают токен. Это длинная строка символов. Копируем эту строчку в буфер обмена и вставляем в COZE. Нажимаем кнопку Save – Сохранить.

Теперь ставим галочку напротив Telegram и нажимаем кнопку Publish – Опубликовать.

Рис. Публикация в Телеграме

Нам сообщают: Publication submitted! – Бот опубликован.

Можем перейти по ссылке Chat now – начать общаться с ботом. Либо можем просто скопировать ссылку на бота в буфер обмена.

Рис. Переход к беседе

Бот поможет нам написать программу, провести анализ её вычислительной сложности и оптимизировать код – если только его об этом попросить.

Рис. Запуск бота

Наш девиз – это классический афоризм: «Компьютер делает не то, что вы хотели, а то, что вы просили!»

Рис. Генерируем программу

Это был пример того, как можно создавать бота без программирования. Называется такой подход No-code или Zero-code.

Рис. Оценка вычислительной сложности

Теперь пришло время поделиться своим ботом с соседом. Для этого мы с вами используем сервис сокращения ссылок, например, Яндекс. Кликер. Здесь адрес любой длины можно сократить до 5—6 символов. Можно также получить QR-код, чтобы другие могли отсканировать его телефоном и сразу перейти по нужному адресу.

Рис. Сокращаем ссылку

Опыты с запросами

Следующий наш этап – посмотреть на собранные рецепты и полезные советы и потренироваться, исследовать их в работе. Действительно применить их и посмотреть, чем это кончится.

Мы испытываем назначение роли, контекста, формата, размера, тональности и так далее. Включая температуру. Сформулируйте очень подробный запрос про то, как писать запросы к нейросетям. Используйте те самые полезные советы, которые удалось собрать. При необходимости просите его о помощи.

Добейтесь, чтобы наш интеллектуальный помощник отвечал именно именно то, что мы хотим. При этом мы фиксируем в отчете всё, что происходит.

Берем самый длинный и подробный промпт и начинаем с ним работать. Вначале мы должны были назначить роль. Попробуйте назначить другую роль. Всё остальное точно так же. Меняем роль. Посмотрите, чем это кончится, как изменится ответ. Как влияет назначение роли на ответ нейросети? А запрос по-прежнему тот же: как писать запросы к нейросети. Основная часть та же самая, просто роли разные должны быть.

Естественно, для этого опыта мы основной текст запроса держим в файле отчета. Оттуда его копируем, чтобы не приходилось каждый работ его полностью печатать. Отмечаем результаты в отчете. Какая роль, какой ответ.

Посмотрите на температуру. Как влияет температура на результаты? Запускайте запрос несколько раз. Каждый раз обнуляем – удаляем беседу Thread и создаем новую.

Отчет по лабораторной работе отправляем в виде ссылки. Форма для загрузки расположена на странице нашего курса на гитхабе. Переходим по ссылке, вводим фамилию и ссылку на отчет. Нам достаточно использовать доступ на чтение.

Поскольку это облачный документ, мы можем открыть доступ на чтение и на запись. Нас интересует только чтение.

Ссылки

Учебные материалы на GitHub

https://github.com/Valentin-Arkov/Digital-Tech-AI

Учебные материалы на GitVerse

https://gitverse.ru/Valentin-Arkov/Digital-Tech-AI

YandexGPT

https://ya.ru/ai/gpt-3

YandexGPT API

https://yandex.cloud/ru/services/yandexgpt

Документы Google

https://docs.google.com

Яндекс. Документы – бесплатный онлайн-редактор

https://docs.yandex.ru

Чат c YandexGPT

https://console.yandex.cloud – foundation-models – chat

Квоты и лимиты в Yandex Foundation Models

https://yandex.cloud/ru/docs/foundation-models/concepts/limits

YandexGPT API overview

https://yandex.cloud/en-ru/docs/foundation-models/concepts/yandexgpt/

GigaChat – бесплатная нейросеть без vpn на русском языке, которая общается как человек

https://giga.chat/

Perplexity. Where knowledge begins

https://www.perplexity.ai/

GigaChat. Нейросетевая модель от Сбера

https://t.me/gigachat_bot

GigaChat. Главный канал про AI на русском языке – про настоящее и будущее

https://t.me/official_gigachat

Coze. Next-Gen AI Chatbot Developing Platform

https://www.coze.com/

BotFather. The one bot to rule them all.

https://telegram.me/BotFather

Яндекс Кликер. Помогите клиентам быстро найти вашу страницу в интернете.

https://clck.ru/

2. Markdown

Введение

В этой работе мы познакомимся с языком разметки Markdown. Это разновидность текстовых файлов. Внутри такого файла находятся только стандартные символы ASCII, то есть буквы, цифры, знаки препинания и другие символы, которые можно найти на обычной компьютерной клавиатуре. При просмотре Markdown мы получаем форматированный текст: заголовки, жирный и наклонный шрифт, таблицы и так далее.

Редактируют этот файл любым инструментом, например с помощью Блокнота – Notepad. Этот формат также понимают и более продвинутые средства редактирования, такие как Notepad++. Многие интегрированные среды программирования – Integrated Development Environment (IDE) – тоже могут работать с форматом Markdown.

Всего за один, или два, или три часа вы познакомитесь с новой технологией. К концу этого занятия вы сможете легко создавать и редактировать файлы формата Markdown и профессионально работать с ними в блокнотах Google Colab и на сервисах управления версиями типа GitHub.

Оформление отчёта

Отчёт по этой работе оформляется в облачной среде Google Colab. Если выразиться точнее, это интерактивный блокнот – тетрадка для программирования на Питоне. Если кто-то предпочитает английское название, то «на Python».

Здесь есть возможность не только составлять программу, но и работать с ячейками форматированного текста.

Открываем страничку сервиса [Colab], ссылку смотри в конце описания работы. Входим с учётной записью Google и создаём новый блокнот – New notebook.

Создаём текстовую ячейку – Text – Add text cell. Передвигаем её в начало блокнота – Move cell up.

для редактирования содержимого текстовой ячейки – двойной щелчок мышкой – Double-click to edit.

Вводим наш текст и время от времени сохраняем файл, нажимая комбинацию клавиш [Ctrl + S] – от слова Save – Сохранить.

Рис. Отчёт по работе

Отчёт по традиции начинаем с титульного листа. Здесь приводим те же ключевые данные по поводу нашего документа: Министерство, вуз, кафедра, название работы, … и даже фамилии авторов. Подробности мы уже обсуждали в предыдущей работе, повторяться не будем.

Абзацы разделяем пустой строкой.

По окончании работы нужно будет «расшарить» блокнот – Share notebook, то есть предоставить совместный доступ на чтение. Нажимаем кнопку Share в правом верхнем углу окна. Выбираем адресатов – любой пользователь, получивший ссылку – Anyone with the link. Устанавливаем права только на чтение – Viewer – Просмотр. Копируем ссылку в буфер обмена – Copy link. Вставляем ссылку в форму для отправки отчета на странице курса на GitHub.

Рис. Делимся ссылкой на отчёт

Установка редактора

Для первого знакомства с этой технологией мы установим очень простой и популярный текстовый редактор Notepad++. Само название уже на что-то намекает. Имеется в виду стандартный блокнот Windows Notepad. Два плюсика намекают на следующий шаг, следующий уровень, на улучшение и совершенствование, на дополнительные возможности.

Первоначально два плюсика использовались в языке программирования Си для операции инкремента, то есть для увеличения значения счётчика на единицу. Затем эта символика использовалась для обозначения языка программирования С++, чтобы подчеркнуть идею дальнейшего развития. Так вот, Notepad++ – это дальнейшее развитие программы Notepad.

Мы будем использовать такую версию этой программы, которая не требует установки. Мы просто скачиваем файл архива из интернета, распаковываем его в рабочем каталоге и запускаем на выполнение. Это можно произвести даже с правами пользователя, которому не разрешается вносить изменения в настройки операционной системы. После работы с нашей программой мы можем удалить всю папку, и на компьютере не останется никаких файлов, никаких следов, никаких записей в реестре операционной системы.

Такая программа называется «переносимый вариант», или «портируемая версия», или по-английски Portable Application. Буквально английское слово Portable означает «портативный», то есть небольшой, удобный для переноски вручную – с места на место.

Примером такого изделия служит печатная машинка. В течение многих лет люди использовали большие, стационарные печатные машинки. А для работы в поездках были придуманы небольшие, портативные машинки, которые можно было носить в небольшом чемоданчике.

Рис. Портативная печатная машинка

То же самое было сделано и с компьютерами. Первые компьютеры были очень большие и занимали отдельную комнату или даже целый дом. Затем были разработаны персональные компьютеры, которые стояли на столе или под столом – Desktop. Для использования в поездках их размеры уменьшили до ноутбуков, а затем появились и мобильные устройства – планшеты и смартфоны.

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

Открываем сайт [Notepad++]. Переходим по ссылке download. Выбираем вариант Portable Zip и скачиваем себе на компьютер. Создаём новый каталог и распаковываем туда содержимое архива – со всеми его подкаталогами и файлами. Запускаем исполняемый файл – он тут в корневом каталоге один такой.

Рис. Загружаем переносимую версию

Теперь нам нужно установить дополнение для просмотра файлов markdown. в верхнем меню выбираем пункт Plugins – Plugins Admin. Находим в списке Markdown Viewer и нажимаем кнопку Install. Соглашаемся на установку дополнения и перезапуск программы.

Рис. Установка дополнения для просмотра

Открываем редактор и создаём наш первый файл. Сохраняем файл с расширением *.md. Далее в Проводнике мы можем выбрать программу для редактирования таких файлов по умолчанию.

Рис. Редактирование и просмотр Markdown

На рисунке показан пример редактирования и просмотра. Можно видеть, что исходный текст легко читается. При этом он содержит дополнительные указания – разметку форматирования. Например, заголовок начинается с одного или нескольких символов решётки # и пробела. Курсив, то есть наклонный шрифт, выделяется символом звёздочки *. При редактировании такого файла мы вводим эти символы разметки вручную, с клавиатуры.

Markup и Markdown

Для просмотра отформатированного текста в нашем примере служит секретная кнопка в верхней линейке инструментов. Чтобы просмотреть результаты, мы нажимаем эту кнопку, чтобы закрыть и снова открыть окно просмотра. На этой кнопке изображено условное обозначение языка Markdown – заглавная буква M и стрелка вниз. Слово «вниз» по-английски звучит как «down». Кроме движения вниз, это слово передаёт идею упрощения. То есть это упрощённый язык разметки.

Но это ещё не всё. Этот язык, упрощённый по сравнению с полноценным форматом HTML. А расшифровывается это как HyperText Markup Language – язык гипертекстовой разметки. Получается, что Markdown – это как бы противоположность Markup.

Но и это ещё не всё. Первоначально слова mark up и mark down означали повышение и понижение цены на товар. Продавец вывешивает новый ценник, то есть как бы «обозначает», или «помечает», или «отмечает» цену на товаре, который лежит на витрине. А уже потом компьютерщики использовали эти термины для языков разметки текста. Подробнее можно изучить всю эту историю в словарях и с помощью интеллектуальных чап-ботов.

Вот такая игра слов. Программисты очень любят играть словами и символами. Особенно если приходится работать с обычным текстом и командным окном, консолью, терминалом. Здесь больше играть не с чем.

Создатели этого проекта поясняют, что такой формат легко воспринимается человеком. Его легко читать и несложно редактировать. С другой стороны, этот формат автоматически преобразуется в HTML, и его можно использовать на страничках веб-сайтов [Markdown Project]. Они даже определяют Markdown как инструмент для преобразования текста в HTML для авторов веб-страниц. Что нас особенно радует, Markdown – это свободно распространяемое программное обеспечение – free software.

Общее описание формата можно найти в народной энциклопедии [ВИКИ: Markdown].

Основные конструкции Markdown

Самые простые, базовые приёмы форматирования описаны на странице проекта [Markdown Basics]. Рассмотрим эти инструменты. Если у читателя есть трудности с пониманием английского текста, можно включить автоматический перевод. Он хорошо работает в браузере Яндекса и Google Chrome.

Абзацы разделяют пустыми строками – одной или несколькими. Это удобно при вводе текста. Мы вводим короткие строки в рамках одного небольшого окна. Даже одно предложение можно разбить на несколько строк. Пока не будет пустой строки, весь текст сливается в один длинный абзац. Затем, при просмотре, мы увидим один абзац вместо нескольких строк.

Заголовки начинаем с одного или нескольких символов решётки. После решётки ставим пробел, а затем сам текст заголовка. Так мы получаем несколько уровней заголовков. Можно сделать до 6 уровней – то есть до 6 символов решётки подряд. При просмотре они превращаются в теги от <h1> до <h6>.

Проверим, насколько это правда. Мы каждый раз должны «доверять, но проверять». Особенно при работе с компьютером. И особенно при чтении документации на программы. Мы к этой проблеме с документацией ещё вернёмся.

Итак, вводим вручную несложный текст с шестью уровнями заголовков. Затем на вкладке Markdown Viewer экспортируем его в HTML и PDF.

Рис. Экспорт гипертекста

Сохраняем файл в формате HTML и открываем его на просмотр любым браузером. Убеждаемся, что форматирование выполнено корректно.

Открываем тот же файл HTML на редактирование с помощью Блокнота. Изучаем теги HTML.

Как видим, появились теги заголовков h1-h6 от слова Header – заголовок.

Абзацы разделяются тегом p от слова Paragraph -параграф, абзац.

Курсив указан как em – от слова emphasis – ударение, подчёркивание, акцент – выделение текста для передачи важности.

Ещё о разметке

Заголовки можно также определять «подчёркиванием». На самом деле это строка из знаков «равно» и «минусов/чёрточек/дефисов» под самим текстом заголовка. Такое оформление читается ещё легче. Правда, третий уровень всё-таки придётся оформлять решётками.

Как мы уже говорили, курсив – это выделение одинарными звёздочками – до и после фрагмента текста. Жирный шрифт – выделение двойными звёздочками. Попробуем сообразить с одного раза, как выделить жирный курсив…

Двойная волнистая черта позволяет зачеркнуть текст. Такой приём добавляет выразительности.

На рисунке показана ещё одна особенность. Количество пустых строк между абзацами текста ни на что не влияет. И одна, и несколько пустых строк подряд – это просто разделитель двух соседних абзацев.

Рис. Жирный курсив и заголовки

Для использования текста программ есть свои хитрости. Во-первых, для этого удобнее использовать буквы одинаковой ширины. Так уже было в печатных машинках. И так удобнее работать с кодом. Называется это «моноширинный» шрифт – monospace. «Моно» означает «один», получается «шрифт одной ширины». Такие готовые шрифты есть в операционных системах. надо просто выбрать из списка.

Задание. Найдите моноширинные шрифты на своём компьютере. Посмотрите, как выглядит текст программы, напечатанный таким шрифтом.

Списки тоже делаются особым, хитрым способом.

Если список ненумерованный, то можно использовать звёздочки (*), плюсики (+) и минусы/чёрточки (-). В начале строки звёздока, потом пробел, потом пункт списка. Но на экране будет стандартное обозначение пунктов списка: bullets – «буллеты» – буквально «пули». Это простые популярные маркеры списков. Первоначально это слово означало «шарик, пузырёк». Теперь это кружочки, жирные точки.

Если список нумерованный, то строчка должна начинаться с цифры, точки и пробела. При этом цифры могут быть любые. Могут быть одинаковые, могут быть разные, могут идти в любом порядке. При выводе на экран список будет пронумерован по возрастанию.

Рис. Оформление списков

Фрагмент кода выделяется пустыми строками – как абзац. Каждая строка начинается с табуляции и четырёх пробелов. Затем при выводе на экран код немного «ужимают».

Рис. Блок кода

В тексте может быть гиперссылка с указанием адреса сайта. Сюда можно добавить текст для всплывающего заголовка. Для оформления ссылки нужны квадратные и круглые скобки. Между квадратной и круглой скобкой не должно быть пробела.

Рис. Ссылка на сайт

Markdown в веб-сервисах

Теперь посмотрим, как работает этот формат применительно к популярным интернет сервисам.

GitHub. Загружаем наш файл в репозиторий на github и gitverse. Открываем файл на просмотр и изучаем форматирование текста.

Рис. Файл в репозитории GitHub

После загрузке файла на страничке GitHub появляется возможность просматривать исходный текст и отформатированное представление – это кнопки Preview и Code.

GitVerse. Аналогичные кнопки на сервисе GitVerse называются Превью и Код. Кстати говоря, мы можем добавить наш файл в репозиторий разными способами.

Можно просто нажать кнопку Добавить файл над списком файлов и ввести имя файла и его содержимое. Таким образом мы добавляем исходный код, например, путём копирования и вставки через буфер обмена.

Рис. Файл в репозитории GitVerse

Конечно, есть возможность работать с репозиторием и через интерфейс командной строки CLI – Command Line Interface. Но этим мы займёмся в другой раз.

При просмотре готового текста вызываем исходный текст веб-страницы. В каждом браузере это делается по-своему. Например, в Firefox нажимаем клавишу [F12]. Убеждаемся, что HTML-код соответствует предыдущим примерам.

Dingus. Следующий веб-сервис – это [Dingus]. Он открывает возможности для онлайн-тестирования и демонстрации синтаксиса Markdown.

Рис. Работа с Markdown в сервисе Dingus

Мы вставляем наш код в окно Markdown Source и нажимаем кнопку Convert.

Теперь у нас появляется возможность просматривать HTML Source и HTML Preview.

Сравниваем результаты с нашими предыдущими опытами.

Здесь же в правой панели нам выводится шпаргалка по основному синтаксису языка разметки: Syntax Cheatsheet.

Colab. Ещё один инструмент для работы с Markdown – это Google Colab. Его основное предназначение – это интерактивная, диалоговая работа программой на Python.

С питоном можно работать двумя способами. Можно написать всю программу в рамках одного файла в Блокноте Windows или в интегрированной среде разработки, а затем вызвать транслятор/компилятор и запустить программу на выполнение – от начала до конца. Это традиционная работа с программированием.

Второй способ – это диалог. В этом случае наша программа будет состоять из отдельных фрагментов, которые оформляются как ячейки. Ячейки можно запускать на выполнение в любом порядке. При этом значение переменных сохраняются в оперативной памяти и доступны на время всего сеанса работы. Вся программа в целом оформлена в виде интерактивного блокнота, или «тетрадки» Jupyter Notebook. Можно установить соответствующий программный пакет типа Anaconda на локальный компьютер либо обратиться к облачному сервису вроде Google Colab. В обоих случаях с таким блокнотом мы работаем через браузер, через веб-интерфейс.

Название Colab – это сокращение от Colaboratory. Это облачная лаборатория для совместной работы с программным кодом. Для начала работы в бесплатном режиме достаточно использовать учётную запись Google.

Создаём новый блокнот и соединяемся с виртуальной машиной, нажав кнопку Connect.

Рис. Работа с Markdown в Google Colab

В этой среде мы можем создавать ячейки с кодом и ячейки с текстом. В кодовых ячейках будут фрагменты программы на Python. В текстовых ячейках можем расположить Markdown. Для запуска конкретной ячейки на выполнение можно нажать комбинацию клавиш [Shift + Enter]. Для редактирования текстовой ячейки мы просто дважды щёлкаем по её содержимому.

Создаём текстовую ячейку и вводим наш готовый материал. Запускаем. Проверяем.

Чтобы сохранить нашу работу в файле, вызываем через меню File – Save или комбинацию клавиш [Ctrl + S]. При этом файл сохраняется на облачном диске Google Drive.

Проверяем, где именно сохраняется наш блокнот. Для этого открываем в браузере или приложении облачный диск и находим каталог Colab Notebooks.

Есть возможность скачать наш файл на локальный компьютер в виде исходного текста программы на Python *.py либо в виде файла блокнота ipynb, в котором находятся текстовые и кодовые ячейки, а также результаты вывода на экран. для скачивания файла выбираем в меню раздел File – Download и указываем тип файла.

Рис. Файлы *.py и *.ipynb

Скачиваем оба варианта и изучаем их содержимое.

Файл типа *.py содержит текст программы Python. Текстовые ячейки здесь представлены в виде многострочных комментариев и выделены тройными кавычками.

Файл формата *.ipynb – это ipython (interactive python) notebook. Здесь сохраняется разбиение блокнота на ячейки. Содержимое оформлено фактически в формате json. В дополнение к нашему тексту в конце каждой строки добавлен символ перевода строки \n – от английского new line – новая строка.

Docker + Anaconda

Наконец попробуем запустить диалоговый, интерактивный блокнот на локальном компьютере. Чтобы не заниматься установкой дополнительных программ, мы будем использовать популярную технологию контейнеризации приложений Docker.

Нам понадобится приложение под названием Anaconda. Это тоже название змеи и это намёк на язык программирования Python.

Мы будем запускать этот программный продукт в виде контейнера. Для этого нам понадобится предварительно установить среду запуска контейнера docker. технические подробности зависят от конкретной операционной системы. в рамках наших лабораторных работ мы используем OS Microsoft Windows и Docker Desktop.

В дисплейных классах нашей кафедры уже установлено необходимое программное обеспечение. Если у читателя появится желание самостоятельно установить эти средства на своём домашнем компьютере или ноутбуке, можно ознакомиться с более подробным описанием технологии, которое приводится в нашем учебном пособии и видеороликах, см. [Operating-Systems Repo].

В начале мы запускаем программу Docker Desktop с правами администратора.

В нижней части окна программы запускаем командную строку. Затем в этом терминале вводим длинную, сложную команду, которую можно сформировать с помощью интеллектуального помощника. Запоминать эту команду пока не требуется.

Рис. Инструкция по запуску контейнера

При первом запуске контейнера происходит скачивание необходимых материалов с облачного сервиса Docker Hub. Это происходит автоматически, без нашего участия.

После успешного запуска контейнера в терминале выводится ссылка для подключения к блокноту.

Рис. Запуск контейнера Anaconda

Щёлкаем мышкой по этой ссылке, и в браузере открывается сервис Jupyter Lab.

На вкладке Launcher запускаем диалоговый блокнот Notebook Python 3.

Появляется окно нашего блокнота. Переименуем его: File – Rename Notebook.

Здесь мы вручную можем изменять тип содержимого ячейки – кодовая (Code) или текстовая (Markdown).

Рис. Jupyter Lab в браузере

Устанавливаем тип ячейки – текстовая. Вставляем в текстовую ячейку уже отработанное нами содержимое. Запускаем ячейку на выполнение.

Здесь тоже есть возможность скачать блокнот в формате *.ipynb.

Мы можем завершить работу с контейнером и остановить его выполнение. Когда мы запустим его в следующий раз, нам уже не понадобится терминал/консоль. Выбираем контейнер в списке и нажимаем кнопку Пуск.

Для управления выполнением контейнера имеются традиционные кнопки Пуск, Стоп и Пауза.

Для перехода в веб-интерфейс нужно будет щёлкнуть по ссылке в графе «Порты». Кстати, в этом случае «порт» означает целое число, которое нужно указать для доступа к программному сервису.

Рис. Повторный запуск контейнера

Для повторного запуска контейнера у нас всё уже готово и скачано из интернета. Выбираем вкладку Containers – Контейнеры. Затем в списке контейнеров находим тот, который нам нужен. Для этого смотрим в колонку Image – Название образа. Нас интересует образ Conda – то есть Anaconda. Нажимаем кнопку Пуск – Start.

Запуск происходит очень быстро. Практически мгновенно. Теперь в колонке Порты – Ports становится активной ссылка на номер порта. Наводим на неё курсор и видим всплывающую подсказку – адрес сервиса – localhost. Щёлкаем по ссылке и в браузере открывается Jupyter Lab.

Рис. Страница запуска Jupyter Lab

В левой части окна имеется панель со списком файлов и каталогов. Здесь можно найти наш сохранённый ранее блокнот. Список каталогов явно указывает на то, что здесь развёрнут Linux.