Как написать ии программу

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

Содержание:

  1. Что такое ChatGPT и зачем он нужен
  2. Какие задачи можно делегировать ИИ
  3. Как сделать запрос к ChatGPT, чтобы получить внятный ответ
  4. Минусы использования ChatGPT
  5. Как поисковики относятся к контенту, написанному нейросетью
  6. Другие примеры использования нейросети

Что такое ChatGPT, о котором все говорят, и зачем он нужен

Чат-бот ChatGPT на основе искусственного интеллекта разработала компания OpenAI, он появился в публичном доступе в ноябре 2022 года.

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

ChatGPT ведет диалог с пользователем

Делаю нейросеть с нуля

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

Создатели стремились сделать нейросеть максимально простой и удобной, чтобы она была полезной людям.

Разработчикам сайтов, маркетологам и копирайтерам чат-бот может быть интересен для решения задач по созданию контента. Он пока не заменяет человека полностью, но с его помощью можно ускорить рабочий процесс и оптимизировать рутину.

Какие задачи можно делегировать ИИ

Для начала мы спросили ChatGPT о том, какой контент он может сделать:

«Какой контент ты умеешь создавать?»

«Я могу создавать различный контент в зависимости от задачи и запроса. Вот некоторые из видов контента, которые я могу создавать:

  1. Тексты: я могу создавать статьи, блоги, описания продуктов, новости, рекламные тексты и другие виды текстов.
  2. Генерация идей: я могу помочь сформулировать идеи для контента, такие как заголовки, темы для статей, концепции видео и т.д.
  3. Социальные медиа: я могу создавать посты для социальных медиа, такие как Facebook, Twitter, Instagram и другие популярные платформы.
  4. Видео: я могу помочь создать сценарии, рассказывать истории, создавать анимации и графику для видео контента.
  5. Аудио: я могу помочь создать сценарии, рассказывать истории, создавать аудиокниги и другие форматы аудио контента.
  6. SEO контент: я могу создавать контент, оптимизированный для поисковых систем, такой как ключевые слова и мета-описания.
  7. Контент-маркетинг: я могу создавать контент, который поможет продвинуть ваш бренд и привлечь новых клиентов, такие как статьи-гайды, инфографики, электронные книги и т.д.

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

Создаю ИИ феминистку на Python

Рассмотрим детальнее пункты, связанные с созданием и продвижением контента сайта.

Генерация текстов

Рерайт и редактирование

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

Автоматическое создание заголовков

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

«Несколько возможных заголовков для статьи на тему «Как использовать искусственный интеллект для создания контента»:

  1. Как ИИ меняет процесс создания контента: перспективы и возможности.
  2. Искусственный интеллект в создании контента: как это работает?
  3. Как использовать GPT-3 и другие ИИ-технологии для создания качественного контента.
  4. ИИ vs человек: кто лучше создает контент?
  5. Искусственный интеллект и будущее контент-маркетинга: как не отстать от конкурентов?
  6. Как использовать ИИ для автоматизации процесса создания контента и сокращения времени на его создание.
  7. Искусственный интеллект и SEO: как создавать контент, учитывая поисковые запросы.
  8. Искусственный интеллект и создание видео-контента: возможности и перспективы».

Генерация метатегов

ИИ может создать Title и Description для вашего текста. Мы попросили его сгенерировать заголовок и описание для этой статьи. Запрос: «Создай уникальные Title и Description для текста. Длина — до 60 символов, ключевые слова — искусственный интеллект, генерация контента.»

Что получилось:
«Title: Искусственный интеллект в генерации контента
Description: Как искусственный интеллект помогает создавать уникальный контент? Узнайте прямо сейчас!

Title: Как ИИ помогает в генерации контента
Description: Узнайте, как искусственный интеллект делает генерацию контента быстрее и проще. Откройте для себя новые возможности.»

Выглядит несколько шаблонно, но подойдет для проходной статьи, созданной исключительно для наполнения сайта.

Подбор идей для статей

Если у вас нет четкого ТЗ и нужны идеи для контента, например, для личного блога, можно обратиться к боту. Что он предложил нам:

«Вот несколько идей для статей об искусственном интеллекте:

  1. Что такое искусственный интеллект и как он работает?
  2. Как ИИ изменил мир в последние годы: важные достижения и прорывы.
  3. Какие проблемы существуют с использованием ИИ в нашей жизни и как их можно решить?
  4. Что такое машинное обучение и как оно связано с искусственным интеллектом?
  5. Искусственный интеллект и бизнес: как он помогает улучшить процессы и повысить эффективность.
  6. Как ИИ меняет производственные процессы и промышленность в целом.
  7. Этические и социальные проблемы, связанные с развитием и использованием искусственного интеллекта.
  8. Что такое нейронные сети и как они используются в искусственном интеллекте?
  9. Искусственный интеллект и образование: как он может помочь в обучении и улучшении учебного процесса.
  10. Как ИИ помогает сделать города более удобными для жизни: смарт-города и современные технологии».
Читайте также:
Программа для звука для игр

Можно сформулировать запрос более точно и попросить темы для статей об ИИ в бизнесе, производстве, обучении — зависит от вашей профессиональной области.

Поиск статей по заданным критериям

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

Сбор семантики

Можно попросить бота собрать ключевые слова из найденных статей. В результате он выдаст список и количество использований каждого ключа. Пример результата:

«Я посчитал частотность ключевых слов в статье «Что такое искусственный интеллект и зачем он нужен?» [1]. Вот результаты:

  • искусственный интеллект — 7 раз;
  • алгоритмы — 3 раза;
  • машинное обучение — 2 раза;
  • обработка естественного языка — 2 раза;
  • робототехника — 1 раз;
  • нейросети — 1 раз.

Обратите внимание, что я считал только полное вхождение ключевых слов, поэтому частотность может отличаться, если учитывать их частичное вхождение в текст.»

Анализ тенденций и мнений

Как создать игру, ничего не умея. Часть третья: искусственный интеллект

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

Предыдущие статьи вы можете найти по ссылкам

  1. Как создать игру, ничего не умея. Часть первая: модели и анимации
  2. Как создать игру, ничего не умея. Часть вторая: сцена (уровень), квесты, интерактивные объекты
  3. Unity: работа с Terrain

Сегодня мы с вами займёмся боевой системой и врагами.

Сцена

Для начала мы, уже зная как создаются сцены, создадим уровень, в котором будем воевать с нашими врагами. Создаём сцену — я назвал её Level_02, наполняем декорациями, и добавляем модели врагов.
В качестве модели врага я снова буду использовать рыцарей. Поставлю одного, дам ему имя Enemy_01, а после полной настройки добавлю его в папку Prefabs, и уже оттуда буду использовать полностью готовых рыцарей-врагов. Делаю это потому, что нет желания ставить несколько врагов, а после каждого по-отдельности настраивать. Лень — наш главный двигатель!

Искусственный интеллект

Приступим к настройке вражины! Создаю новый Animator Controller и даю ему название Enemy! Туда мы добавляем три состояния: покоя, ходьбы и удара. Так как анимации удара у нас не было, беру её с mixamo и добавляю в проект. Прописываем все транзисторы и даём названия Bool -> eWalk и eHit.

Приставку Е я использую для понимания, что они принадлежат Enemy (можно этого и не делать, но мне так удобнее). Получаем такую картину:

А сейчас нам нужно научить наш ИИ видеть всё что его окружает, и поможет нам в этом NavMeshAgent.
Переносим в сцену префаб Player и добавляем ему компонент NavMeshAgent. Выбрав нашего Player, переходим во вкладку Navigation -> Objects, с зажатой клавишей ctrl нажимаю на все объекты деревьев и гор, перехожу во вкладку Bake и нажимаю на кнопку Bake. Теперь у нас есть поверхность, по которой может передвигаться как наш персонаж, так и ИИ.

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

Создаём пустой объект GameObject — > Create Empty, выставляем ему значения Transform такие же, как и у нашего Enemy_01, после переименовываем пустой объект в Enemy и добавляем в него объект Enemy_01. Должно получиться вот так:

Больше Enemy_01 мы трогать не будем и займемся настройкой объекта Enemy. Добавляем ему компонент NavMeshAgent — это позволит нашему ИИ передвигаться по нашей сцене. После очередной кучи материала из интернета, я всё же запустил правильную работу ИИ, и заставил его смотреть на меня и атаковать, когда я нахожусь на достаточном расстоянии от него.

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;

// Update is called once per frame
void Update()
float distance = Vector3.Distance(Player.transform.position,transform.position);
curDistance = distance;
if (distance > DistanceToWalk)
return;
>

if (distance < DistanceToWalk distance >DistanceToHit)
//Преследовать
_agent.SetDestination(Player.transform.position);
anim.SetBool(«eWalk», true);
>

if (distance < DistanceToWalk distance < DistanceToHit)
//Преследовать и кусать
_agent.SetDestination(Player.transform.position);
transform.LookAt(Player.transform);
if (!eHit)
StartCoroutine(Mlee());
>
>
>

IEnumerator Mlee()
eHit = true;
anim.SetBool(«eHit», true);
yield return new WaitForSeconds(DelayeHit);
anim.SetBool(«eHit», false);
yield return new WaitForSeconds(DelayBetweenAnim);
eHit = false;
>

Сразу скажу, что в строке Player мы добавляем объект нашего игрока (у вас он может иметь другое имя), а в строке Anim — добавляем анимацию из объекта Enemy_01 (и снова у вас она может иметь иное название), в зависимости от имен ваших объектов. Пора проверить как оно работает!

За счет строки curDistance мы видим на каком расстоянии мы находимся от нашего Enemy, и пока мы находимся дальше 20, как и было прописано в настройках, ИИ не реагирует, но стоит приблизиться, как он сразу же начинает двигаться в нашу сторону, а когда подходит достаточно близко, начинает атаковать. Я считаю, что всё работает.

Значит пора и нашему персонажу научиться бить по врагам! Добавляем в Animator Controller анимацию удара, протягиваем транзисторы, Bool будет называться punch. Дописываем пару строк в скрипт Move и тестируем!

Строчки для скрипта Move

if (Input.GetButtonDown(«Jump»))
GetComponent().SetBool(«punch», true);
else if (Input.GetButtonUp(«Jump»))
GetComponent().SetBool(«punch», false);

Теперь когда я нажимаю на пробел, у меня проигрывается анимация удара, а как только отпускаю — прекращается. Немного криво, но мы и не пытаемся сделать реалистичную игру =) Что же, давайте поместим оружие в руку, а то биться воображением не всегда выходит удачно =)

Читайте также:
Как пользоваться программой автобернер
Интерактивные предметы

Покопавшись в папке с префабами, я обнаружил нужный мне меч, его мы уже использовали для квеста, а сейчас он нам послужит по своему прямому назначению. Добавляю его в сцену, переименовываю в Sword и создаю пустой объект GameObject -> Create Empty, назову его Weapon. За счет того, что у меня персонаж с пальцами, я могу сразу добавить к пальцам меч, но буду использовать пустой объект, прикрепляю его к пальцам, после переношу в него Sword, и обнуляю позицию. Меч точно встаёт в руку.

Проделываем ту же процедуру с Enemy. Я сразу вкладываю меч в руку, немного корректирую положение, и смотрю на результат.

Всё отлично работает, теперь мы машем мечами как в любом фильме про рыцарей =). На этом я закончу сегодняшнюю статью, а продолжение будет еще интересней: наконец перейдём к убийству мобов, получению уровней, и интерфейсу!

Заключение

Очередная статья и очередное движение по нашему плану, мы всё ближе к финалу, осталось совсем чуть-чуть. Если приложить немного усилий и много терпения, уже на этом этапе можно создать полноценную игру! А с вами мы встретимся уже в следующей статье, всем бобра!

П. С.

Сейчас много работы, поэтому не удаётся уделить достаточно времени написанию статей, а еще я начал стримить по вечерам =) но приложу все усилия, чтобы следующая статья вышла ранее чем через неделю.

Источник: www.ixbt.com

Пусть компьютер сам принимает решение или пишем ИИ для игры вместе

Пусть компьютер сам принимает решение или пишем ИИ для игры вместе

2013-12-27 в 9:14, admin , рубрики: game development, node.js, Tron, игры, искусственный интеллект, метки: node.js, Tron, игры

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

image

Под катом gif-файлов мегабайт на 10.

Об игре

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

Клон игры я сделал браузерным многопользовательским с использованием node.js и socket.io. Управление из двух кнопок – поворот влево и поворот вправо.

Интерфейс бота

Так как я использую socket.io, то обработка игроков на сервере у меня была в виде работы над массивом специальных объектов socket, которые создаёт socket.io. Из этих объектов я использовал только id, функции emit и broadcast. А значит безболезненно для самой игры можно реализовать интерфейс socket и использовать его в обработке, будто играет ещё один пользователь. Я назвал класс BotSocket.
Метод emit(event, data) у бота выполняет почти такие же действия что и у клиента при входящих данных от сервера, а именно:

  1. Сохраняет данные обо всех играющих мотоциклах при их добавлении
  2. Сохраняет ссылку на свой мотоцикл при его добавлении
  3. Обновляет данные обо всех играющих мотоциклах
  4. Сбрасывает состояния при перезапуске игры

Для передачи команд управления своим мотоциклом на сервер потребовалось сохранить ссылку на объект игры, который обрабатывает такие команды от обычных пользователей. Метод класса Game у меня назван onControl(socket, data), поэтому я добавил метод в BotSocket

BotSocket.prototype.control = function(data) < this.game.onControl(this, data); >;

При поступлении от сервера команды обновления данных мотоциклов (было совершено их передвижение) я проверяю, есть ли у меня вообще подконтрольный мотоцикл, не столкнулся ли он еще и был ли он перемещён, и, в случае успеха, я вызываю основной метод для работы ИИ — update().
Интерфейс готов, теперь можно добавить сам ИИ.

Искусственный интеллект

Как бы громко это не звучало, но в играх игроков, за которых играет компьютер, принято называть именно ИИ, либо ботами. Объект BotSocket обладает необходимыми данными об игре, чтобы принять решение. Вариантов решения может быть всего три:

  1. Ничего делать, ехать прямо
  2. Повернуть направо
  3. Повернуть налево

Когда я решил написать бота, я понятия не имел, как это можно сделать. Я попробовал очень простой код:

BotSocket.prototype.update = function() < var r = Math.random(); if (r >0.95) < this.control(); > else if (r > 0.90) < this.control(); > >

Поведение было примерно таким:

Я смотрел на него и испытывал большую радость, мне казалось, что он теперь самостоятельный. Казалось, что он сам ищет попытки выжить, бьётся там, как живой. Трогательное зрелище.

Но хотелось, чтобы он жил как можно больше. Я стал искать информацию о том, как пишут ИИ к играм. Нашел статьи, которые описывали разные подходы. Но я искал что-то чрезвычайно простое. Я нашел на хабре в одной из статей про бота для игры вроде Zuma упоминание волнового метода. Он же алгоритм Ли. Мне он показался очень простым и подходящим.

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

Так расширяемся на всё поле, пока не дойдем до точки назначения. А путь строим поиском из соседних по уменьшению числа, пока не дойдем до 1. Я смотрел алгоритмы поиска кратчайших путей в графах, но этот мне показался наиболее подходящим.

Читайте также:
Как научиться пользоваться программой 1с

Я перенёс алгоритм копипастой из страницы в вики, дал ему имя BotSocket.prototype.algorithmLee. Для поля я создал сначала объект battleground, в котором при каждом обновлении помечал занятые точки с их координатами. А в алгоритме Ли сводил это поле к такому же, но с шагом 1.

Нужно было как-то определять точку назначения. Я решил выбирать её случайно через определенные интервалы времени. Сделал метод для поиска случайной свободной точки на поле:

BotSocket.prototype.getDesiredPoint = function() < var point = []; var H = Object.keys(this.battleground[0]).length — 1; var W = Object.keys(this.battleground).length — 1; var x, y, i, j; var found = false; var iter = 0; do < i = this.getRandomInt(1, W); j = this.getRandomInt(1, H); x = i * this.moveStepSize; y = j * this.moveStepSize; if (this.battleground[x][y] === this.BG_EMPTY) < found = true; >iter++; > while (!found iter < 100); point = [x, y]; return point; >;

Теперь я мог переписать update:

BotSocket.prototype.update = function() < if (!this.desiredPoint || this.movements % this.updDestinationInterval === 0) < this.desiredPoint = this.getDesiredPoint(); >if (!this.desiredPoint) < return; >var currentPoint = [this.myBike.x, this.myBike.y]; var path = this.algorithmLee(currentPoint, this.desiredPoint); if (path typeof path[1] !== ‘undefined’) < this.moveToPoint(path[1]); >else < this.desiredPoint = this.getDesiredPoint(); >>;

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

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

Бот на стороне клиента

Я решил попробовать перенести бота на клиентскую часть. Так как проект на node.js, я могу использовать написанный код для бота и на стороне клиента. Для этого я расширил BotSocket отдельным клиентским файлом, который переопределял методы emit() и control(), чтобы правильно взаимодействовать с сервером без ссылки на объект game.
Локально всё работало отлично, а после деплоя на удалённый сервер была какая-то странная картина:

Долго думая, я понял, что дело в задержке. Бот отправлял команду поворота, но она доходила после обновления его позиции на сервере, отчего он часто не мог попасть на прямой путь к желаемой точке. Но я хотел нормального бота на клиентской стороне. Поэтому решил учитывать задержку. Для этого написал снова расширение BotSocket. Статья получается длинной, так что опишу основные решения.

Перед вызовом алгоритма Ли вместо текущей точки я подставлял прогнозируемое положение с учетом текущего положения и направления, а так же множителя задержки. Множитель задержки – это число, во сколько раз превосходит задержка частоту обновления положения на сервере. Предсказание будущей точки мне еще понадобилось в методе moveToPoint().

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

Мой красненький, остальные серверные.

Самое важное – попробуйте сделать бота сами

Основная цель этой статьи – пробудить интерес к написанию бота. Я сделал много, чтобы победить вашу лень. Для этого я добавил возможность подгружать свой собственный скрипт с ботом, который будет расширять мой базовый клиентский класс. Зайдите на проект и нажмите на текст «Show options for room with your own bot», а затем на кнопку «Create room for test your own bot».

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

  1. Выкладывайте js-файл на любой сервер, который будет доступен вашему браузеру. Url к вашему скрипту вставляйте в игре рядом с кнопкой “Load your AI script”. После нажатия на эту кнопку будет создан и заполнен новый объект botSocket, у которого будет вызван метод start().
  2. Используйте консоль браузера (Firebug – F12, Firefox — Ctrl+Shift+K, Chrome – Ctrl+Shift+J, другие – здесь).

Если вы определились с методом ввода вашего кода, попробуйте переопределить методы класса BotSocket. Для начала самое простое:

BotSocket.prototype.update = function() < var r = Math.random(); if (r >0.95) < this.control(); > else if (r > 0.90) < this.control(); > >

После этого пересоздайте объект botSocket, введя

botSocket = null;

При этом код на странице сам пересоздаст и заполнит объект. Этим вы измените стандартное поведение бота на случайное. А дальше уже дело для вашей фантазии или глубоких знаний.
Вы так же можете подключить скрипт моего улучшенного бота с учетом задержки, вставив в url для бота https://raw.github.com/rnixik/tronode-js/master/public/javascripts/MyBotSocketClient.js

Заключение

Я рассказал, как я создавал своего ИИ на сервере, затем как перенес его на клиент и как пытался научить его играть с учетом высокого пинга. Я очень надеюсь, что смог заинтересовать вас, и вы попробовали написать своего ИИ, если еще ни разу этого не делали раньше. Конечно, в играх высокого класса используются совсем другие подходы, но начинать стоит с малого.

Если у вас нет под рукой node.js, вы можете воспользоваться развернутыми мной приложениями:

1) tronode.livelevel.net/ — самая дешевая VPS на DigitalOcean,
2) tronode-js.herokuapp.com/ — бесплатная виртуальная единица на Heroku.

Первый, скорее всего, первым может не справиться с нагрузкой, а второй на некоторых компьютерах сбрасывает socket.io-транспорт в xhr-polling, из-за этого игра очень сильно лагает.
Если вы хотите узнать больше, о том, как я программировал игровую логику, то можете прочитать здесь. Там же о развертке node.js и немного о графической части.

Источник: www.pvsm.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru