OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API

OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API

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

В интернете мало реальных кейсов использования ChatGPT для решения практических задач. Эта статья как раз об использовании на практике.

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

Далее будет мой перевод статьи Александра Сниффина, руководство по созданию своих gpt. Рассказывается про все 3 составляющие: prompt инструкции, дополнительная информация для нейросети (knowledge), Capabilities — встроенные возможности (Web browsing, DALL-E, Code Interpreter) и Actions — действия, такие как подключение внешних API — самый большой плюс кастомных чатов. После статьи напишу свой вывод по custom GPTs.

6 ноября на DevDay компанией OpenAI был анонсирован новый продукт под названием GPTs. Эти GPT предлагают быстрый и простой способ создания расширения ChatGPT с помощью no code платформы, которая значительно упрощает разработку сложных мультимодальных чат-ботов для разработчиков.

Мы выпускаем специальные версии ChatGPT, которые вы можете создавать для определенной цели — так называемые GPT. GPT — это новый способ для каждого создать индивидуальную версию ChatGPT, которая будет более полезна в повседневной жизни, при выполнении определенных задач, на работе или дома, а затем поделиться этим творением с другими. Например, GPT могут помочь вам выучить правила любой настольной игры, научить детей математике или разработать наклейки. Любой может легко создать свой собственный GPT — кодирование не требуется. Вы можете сделать их для себя, только для внутреннего использования вашей компании или для всех. Создать его так же просто, как начать разговор, дать ему инструкции и дополнительные знания, а также выбрать, что он может делать, например, искать в Интернете, создавать изображения или анализировать данные. Попробуйте на chat.openai.com/create.

Сэм Альтман, OpenAI

Давайте рассмотрим, что это значит, рассмотрев существующие функциональные возможности и концепции. Затем создадим наш собственный GPT и как добавить собственный интерфейс прикладного программирования (API) и данные!

Обзор GPTs

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

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

Пользовательский интерфейс

Пользовательский интерфейс GPTs прост. Кастомный GPT может быть полностью создан прямо в браузере. Нажимаем в верхнем левом углу на Explore => Create a GPT и попадаем на страницу создания:

Домашний экран GPT Builder
Домашний экран GPT Builder

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

Экран настройки GPT Builder
Экран настройки GPT Builder

GPT — это многомодельная копия ChatGPT. У них есть поддержка Vision, DALL-E и таких инструментов, как просмотр веб-страниц, интерпретатор кода с использованием Python и пользовательские действия, использующие внешние API.

Написание инструкции Prompt очень похоже на концепцию, возникшую в open source проектах, таких как Agents, которые LangChain, популярная среда для создания приложений LLM (Large language model), описывает следующим образом:

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

OpenAI сделал создание базового GPT без какого-либо программирования. Они также предоставляют API для разработчиков для взаимодействия с вашим GPT, известный как «Assistant API», который обеспечивает большую гибкость при создании сложных приложений.

Простой пример создания GPT без использования программирования

Давайте создадим простой GPT без дополнительный знаний для чата (knowledge) и действий (actions) .

Раньше создание чего-то похожего на GPTs требовало программирования разговорного чат-бота с множеством сложностей. Даже при использовании API OpenAI все равно требовалось глубокое понимание того, как использовать API завершения чата с такими инструментами, как LangChain, для создания ботов, которые могли бы использовать инструменты или несколько моделей. Это было упрощено и абстрагировано, что позволяет быстро разрабатывать продвинутых диалоговых ботов.

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

Практика. Создаем GPT

Давайте продемонстрируем, как создать базовый GPT без knowledge и actions

Мы назовем наш прототип GPT «Поиск одежды по картинке», который позволяет пользователям загружать изображения одежды, где встроенный инструмент ChatGPT Vision идентифицирует различные предметы одежды, а затем пытается найти те же самые предметы одежды в Интернете.

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

Нажимаем в верхнем левом углу на Explore => Create a GPT и попадаем на страницу создания.

Вы можете использовать левую вкладку «Create», в которой используется GPT Builder, он будет задавать вам вопросы и заполнит правую вкладку Configure автоматически, либо сразу перейти на вкладку Configure. Там нужно будет заполнить название, описание, аватарку.

Остановимся подробнее на поле Instructions.

Instructions (Инструкции) .

В это поле записывается prompt, который описывает поведение вашего GPT. Это и есть тот контекст, который будет в чате по- умолчанию.

Если вы не знакомы как составлять Prompt для языковых моделей, посетите сайт Promtingguide.ai

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

Prompt engineering — относительно новая дисциплина для разработки и оптимизации подсказок для эффективного использования языковых моделей (LM) для широкого спектра приложений и тем исследований. Инженерные навыки помогают лучше понять возможности и ограничения больших языковых моделей (LLM) .

Проще говоря, instructions — это просто текст, которому мы приказываем нашему LLM следовать.

Наш prompt должен быть хорошо структурирован, но также должен определять, как LLM должен реагировать на сообщения.

ChatGPT работает, предлагая LLM диалоговый формат. LLM генерирует текст на входе и определяет значение контекста на основе обучающих данных и подсказки. Очень простой пример приглашения к диалогу может выглядеть так:

ваш промпт: Вы полезный помощник ИИ. запрос пользователя: Привет! GPT: Здравствуйте, чем я могу вам помочь сегодня?

Каждое сообщение в диалоге будет расширять prompt до тех пор, пока не будет достигнуто какое-либо стоп-слово или не будет достигнут лимит токенов. К счастью для нас, нам не нужно об этом беспокоиться, потому что ChatGPT сделает это за нас при создании GPT.

Вот подробный пример того, что мы можем использовать с нашим GPT обратного поиска моды:

-----------------------------------------

Цель:

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

Процесс:

1. Получение изображения:

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

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

2. Определение объекта:

- Если на изображении изображено несколько человек, попросите пользователя указать, чья одежда его интересует.

- Продолжайте, как только пользователь определит интересующий его предмет.

3. Детальный анализ одежды:

- Тщательно опишите каждый предмет одежды, который носит выбранный объект на изображении.

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

4. Проверка:

- Предоставьте описание одежды пользователю для подтверждения.

- Если есть неточности или недостающие детали, попросите пользователя уточнить или предоставить дополнительную информацию.

5. Параметры поиска и отображения:

- После подтверждения описания начните поиск в Интернете похожих предметов одежды.

- Спросите пользователя, предпочитает ли он искать все элементы одновременно или по одному.

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

- Для каждого найденного товара предоставьте прямую ссылку на покупку для каждой позиции. Ссылка должна содержать полное описание товара. например, «[- Amazon: белая футболка] (ссылка)»

— постарайтесь указать цену, если это возможно, для каждого товара.

6. Подтверждение пользователя и итерация:

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

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

Ограничения:

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

- Отформатируйте свои ответы в формате HTML или MD, чтобы их было легче читать

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

- Говорите с помощью смайлов и будьте полезны, например, это может быть вступление:

🌟 Добро пожаловать в ваш помощник по поиску моды на базе ChatGPT! 🌟 Здравствуйте! 👋 Если вы хотите **найти предметы одежды, похожие на те, что на фотографии**, я здесь, чтобы помочь. 🛍👗👔

Начать легко:
1. **Загрузите изображение** 🖼 или
2. **Предоставьте снимок экрана** из социальной сети.📱💻 🔍
**Помните:** если сообщение отправлено из социальной сети, требующей входа в систему, потребуется **скриншот**. Давайте вместе отправимся в это путешествие в поисках моды! 🚀

------------------------

Это подробный промпт для инструкции LLM. В нем представлен обзор того, что следует делать, пошаговый процесс и ограничения. Он использует преимущества нескольких методов составление запроса, таких как few-shot prompt, предоставляя пример того, как говорить. В нем также представлены некоторые подробные этапы рассуждения, которым должна следовать модель.

Более длинные запросы могут вызвать проблемы, поскольку модель GPT-4 может обрабатывать только определенное количество токенов как из входных, так и из выходных токенов. Опять же, нам не о чем беспокоиться, потому что GPT понимает, как перефразировать, суммировать и продолжать длительные разговоры, но важно знать, поскольку качество разговора со временем будет ухудшаться по мере добавления новых токенов. В этом приглашении 522 слова, что составляет примерно 653 токена. OpenAI публиковала хороший пример по этому вопросу, где они описывают токен, состоящий примерно из 3/4 слов.

Knowledge и Capabilities

Для этого примера не требуется никаких дополнительных знаний (knowledge) , из возможностей (сapabilities) мы выбираем доступ к «Просмотру веб-страниц» (Web Browsing) .

Результат

Как только вы заполните блок инструкции, вы можете уже сохранить и опубликовать свой GPT! Конечный результат — простой GPT, для которого не требуется никакого программирования. У него есть встроенные возможности Vision, просмотр веб-страниц и GPT-4 для нашей задачи Поиск одежды по картинке. Круто!

Демо

Демо
Демо
Аватарка для нашего GPT Поиск одежды по картинке, которую сгенерировал DALL-E
Аватарка для нашего GPT Поиск одежды по картинке, которую сгенерировал DALL-E

Расширяем возможности. Создаем actions

Расширить возможности нашего GPT довольно просто. Мы можем предоставить доступ нашему GPT к сторонним API, не предоставляемым OpenAI. Мы делаем это с помощью действия (Action) . Действия используют веб-API, которые позволяют ChatGPT взаимодействовать с внешними API, отправляя запросы по сети. Этот интерфейс соответствует формату спецификаций OpenAPI.

Представьте, что мы хотим изменить наш GPT Поиск одежды по картинке, чтобы он осуществлял поиск только на одном определенном веб-сайте. Таким образом, мы можем отключить просмотр веб-страниц (Web Browsing with Bing) на вкладке Configure и ограничить трафик только нашим сайтом.

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

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

Спецификация API

Если у вас уже есть собственный веб-сервис, вам необходимо убедиться, что вы можете создать спецификацию OpenAPI (также известную как Swagger) . Если у вас еще нет созданной спецификации, вам следует следовать официальной документации Swagger по этому вопросу. Должна быть версия не ниже 3.0 на момент публикации.

Для этого примера я создал макет API для тестирования. Это API, который возвращает некоторые варианты одежды для гипотетической продуктовой компании.

Для работы действиям необходим действительный домен. Если это общедоступный API, просто добавьте его в поле servers. Если API требует аутентификации, вы можете указать либо ключ API, либо учетные данные OAuth в настройках конфигурации действий.

Если вы хотите протестировать локальные изменения, вы можете настроить службу сетевого туннелирования, например LocalTunnel. После установки их CLI это так же просто, как просто запустить:

Так вы перенаправите HTTP-трафик на порт 8080 на нашем локальном хосте и предоставите для GPT публичный адрес, который можно использовать для serversбыстрого локального тестирования.

После того, как вы настроили свою спецификацию и хотите создать новое действие, вот пример JSON-документа для макета API какого-нибудь сервиса:

--------------------------------

{
"openapi": "3.0",
"info": {
"description": "API для взаимодействия с каким-нибудь сервисом",
"title": "API какого-нибудь сервиса",
"contact": {
"name": "Admin",
"email": "admin@email.com"
},
"version": "1.0.0"
},
"servers": [
{
"url": "https://api.product-company.nice"
}
],
"paths": {
"/search": {
"get": {
"operationId": "searchProducts",
"description": "Позволяет пользователям искать одежду по различным критериям.",
"parameters": [
{
"name": "query",
"in": "query",
"description": "Строка поискового запроса",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "priceRange",
"in": "query",
"description": "Фильтровать по диапазону цен",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "brand",
"in": "query",
"description": "Фильтровать по бренду",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "sortBy",
"in": "query",
"description": "Сортировка результатов по полю",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "page",
"in": "query",
"description": "Номер страницы для пагинации",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "limit",
"in": "query",
"description": "Количество элементов на странице",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Product"
}
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Incorrect request"
}
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"error": {
"type": "string",
"description": "Server error"
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"Product": {
"type": "object",
"properties": {
"brand": {
"type": "string"
},
"category": {
"type": "string"
},
"color": {
"type": "string"
},
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"size": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
}
}
}

----------------------

*прошу прощения за форматирование, VC не дал вставить этот текст блок "код" из-за объема

Спецификация будет автоматически проверена, и GPT даст нам информацию о доступных действиях. Если у вас есть ссылка на конфиденциальность, вам необходимо добавить ее перед публикацией общедоступного GPT.

OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API

Knowledge

Также новой полезной особенностью GPT является возможность выполнять поисковую расширенную генерацию (RAG) для документов, которые, не были обучены в рамках базовой модели. GPT могут автоматически использовать контекст этого документа и полностью абстрагировать его использование от тех, кто разрабатывает GPT.

Согласно Assistants API, который может намекать на то, как работают GPT, мы можем получить представление о том, что происходит:

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

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

Тем не менее, для большинства случаев использования это можно обобщить. Если ваш GPT имеет сложный набор данных, вы можете рассмотреть возможность внедрения собственного RAG как части вашего action.

Демо

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

2023/11/12 14:29:16 Method: GET, URI: /search?query=high-waisted+white+skirt+button+detail&limit=5, Host: salty-bees-drum.loca.lt, RemoteAddr: [::1]:63445, UserAgent: Mozilla/5.0 AppleWebKit/537.36 (KHT ML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot 2023/11/12 14:29:16 Query Parameter: query, Value: high-waisted white skirt button detail 2023/11/12 14:29:16 Query Parameter: limit, Value: 5

Еще один интересный пример Message in the Bottle

Если вы хотите увидеть общедоступный GPT с используемыми Action, ознакомьтесь с моим GPT «Сообщение в бутылке».

Отправьте сообщение в бутылке другим GPT, включите текст или даже сгенерируйте изображение DALL-E, * да, вы действительно можете отправить ваше сообщение другим пользователям GPT! *

OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API
OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API

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

Проблемы

GPTs сталкиваются со многими теми же основными проблемами, с которыми сегодня сталкиваются базовый ChatGPT и другие помощники, поддерживаемые LLM, а именно:

Другие проблемы, характерные для GPT:

  • склонен к ошибкам
  • квоты токенов и регулирование происходят быстро с помощью больших системных подсказок
  • как они аргументируют свое использование инструментами и действиями
  • как они выполняют RAG с большими и сложными наборами данных

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

Спасибо за прочтение!

Выводы.

Это был вольный перевод статьи Александра Сниффина с моими авторскими комментариями и пояснениями. Теперь мои собственные рассуждения и выводы.

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

В статье приведены 2 примера собственных GPT. Оба я считаю демками малоприменимыми для реально полезного сервиса, который можно монетизировать. Первый распознает одежду уж очень общими фразами. Например, я загрузил черную футболку с принтом Гомера Симпсона, он мне нашел просто черные футболки. Когда я попросил внимательно посмотреть какой персонаж изображен на футболке, тогда уже чат исправился.

Есть определенные сложности создания gpts на данный момент, я думаю их решат в ближайшем будущем:

  • Квота. В данный момент, если отправить 50 запросов к GPT4, то исчерпывается какая-то квота, о которой нигде не написано и надо подождать несколько часов для возобновления. Эта квота, когда занимаешься созданием и тестированием своего GPT исчерпывается очень быстро. Текст ошибки: You’ve reached the current usage cap for GPT-4, please try again after 2:04 PM
  • Платная подписка (к этому уже пора привыкнуть)
  • Дорогие запросы к API. Если вы создаете платные сервисы, например, для бизнеса, то там это не проблема, но если хотите создать массовый сервис с интеграцией на свой сайт или телеграм бот, где большое количество пользователей может производить какие-то действия бесплатно, то это уже проблема.

Новые возможности:

  • Блок instructions дает исходный контекст вашему GPT и его не надо заново вводить при создании чатов. GPT становится узкоспециализированным и дает более точные результаты.
  • Блок knowledge позволяет обучить GPT по вашим данным, которые не часто меняются. Например, методичка по продажам в компании, или бренд бук у маркетингового отдела. Эти данные просто загружаются в форматах pdf, doc, xls и других и gpt об этом знает и использует.
  • Блок actions открывает gpt по новому. Теперь доступны задачи не только как чат бота, но и любые другие. С использованием стороннего API можно получать постоянно меняющуюся информацию извне, а также вносить изменения в сторонние базы данных из ChatGPT.

Мои идеи для создания или внедрения готовых GPTs.

Развлекательные и образовательные:

Например, есть уже готовый GPT от OpenAI Coloring Book Hero. Принцип работы простой — вводится промпт. "Колобок подтягивается на турнике" и DALL-E рисует детскую раскраску по этому запросу.

OpenAI GPTs: пошаговое руководство для создания с практическими примерами, ACTIONS и внешние API

Работает очень прикольно, за исключением того что плохо знает российских персонажей сказок и ругается на авторские права, если использовать персонажей Дисней, например. По общим запросам генерирует отлично.

Если решится проблема с дорогим API ChatGPT, то этот кастомный GPT можно интегрировать на свой сайт и привлекать большой дополнительный трафик, или монетизировать через систему подписки.

Бизнес и прочие

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

Пример, телеграм бот, куда занятой предприниматель или маркетолог отправляет голосовое сообщение: установи скидку 15% на все летние шины 20 радиуса. ChatGPT раскладывает запрос на составляющие и по API находит этот товар в БД и изменяет скидку. Здесь дорогое API не проблема.

Сейчас хочу зацепиться за какой-то кейс и попробовать его реализовать на практике. Если получится, напишу статью о практической реализации полезного сервиса.

А какие идеи практического применения GPTs и их монетизации возникают у вас? Видите ли вы перспективы в данной технологии?

77
1 комментарий

Дмитрий, здравствуйте!
Скажите делали свои GPTs агентов? Есть достойные результаты?

Ответить