Простая реализация плагина ChatGPT

OpenAI открыл разрешение плагина для пользователей ChatGPT Plus. Хотя в начальном опыте есть много ошибок, эффект очень хороший, и это относительно зрелая функция. Лично я считаю, что использование плагина ChatGPT намного лучше, чем у New Bing (bing продолжит усердно работать..)

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

Как работает плагин ChatGPT?

Плагин ChatGPT обращается к внешнему API для:

  • Получайте информацию в режиме реального времени: например, о погоде, ценах на акции, недавней информации о найме и т. д.

  • Выполняйте операции в режиме реального времени: например, бронируйте отели и рестораны, даже напрямую управляйте Gmail, документами Google и т. д.

В частности, для ChatGPT требуются следующие два файла:

  1. .well-known/ai-plugin.json: аналогично manifest.json в разработке расширений Chrome. Этот файл записывает некоторые метаданные плагина. Эта информация будет использоваться для отображения плагина в магазине плагинов и для сообщения ChatGPT о том, что делает плагин.

  2. openapi.yaml: это стандартизированный документ, объясняющий функции, предоставляемые API для ChatGPT. Также объясняется, как вызывать функцию и конкретный формат ответов функции.

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

.well-known/ai-plugin.json

Сначала мы объявляем основную информацию о плагине в этом файле, включая имя, номер версии, введение (есть введение для людей и описание для GPT), логотип, контактную информацию и так далее. Реализация какой-либо конкретной функции здесь не задействована.

 
 
{
   
       "schema_version": "v1",    "name_for_human": "AI Conferences",    "name_for_model": "AIConf",    "description_for_human": "Plugin to get information about upcoming AI conferences.",    "description_for_model": "Plugin to get information about upcoming AI conferences.",    "auth": {
   
         "type": "none"    },    "api": {
   
         "type": "openapi",      "url": "http://localhost:5023/openapi.yaml",      "is_user_authenticated": false    },    "logo_url": "http://localhost:5023/logo.png",    "contact_email": "[email protected]",    "legal_info_url": "http://example.com/AIConf"  }

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

Реализовать наш сервер локально

Здесь мы используем Flask для запуска локального сервера для реализации конкретных функций плагина.

 
 
from flask import Flask, send_from_directoryfrom flask_cors import CORS
app = Flask(__name__)CORS(app, origins='https://chat.openai.com/')
@app.get("/logo.png")def logo():    return send_from_directory(app.root_path, "logo.png")
@app.get("/.well-known/ai-plugin.json")def plugin_manifest():    with open(".well-known/ai-plugin.json") as f:        return f.read()
@app.get("/openapi.yaml")def openapi():    with open("openapi.yaml") as f:        return f.read()
# 从Github搞来最近的AI会议数据def update_db():    confs_yaml_file = requests.get('https://raw.githubusercontent.com/paperswithcode/ai-deadlines/gh-pages/_data/conferences.yml').text    confs = yaml_load(confs_yaml_file, Loader=Loader)
    global up_coming_conferences    up_coming_conferences = []    for conf in confs:        if 'abstract_deadline' in conf:            deadline = conf['abstract_deadline']        elif 'deadline' in conf:            deadline = conf['deadline']        try:            deadline = datetime.strptime(deadline, "%Y-%m-%d %H:%M:%S")        except:            deadline = datetime.strptime(deadline, "%Y-%m-%d %H:%M")        if deadline > datetime.now():            up_coming_conferences.append(conf)
# 当GPT访问http://localhost:5023/all时,返回list of conference。每个conference包含了title,year,link,place,sub,deadline等信息。@app.get("/all")def all():    update_db()    results = []    # we only need title, year, link, place, sub, and deadline    for conf in up_coming_conferences:        result = {}        result['title'] = conf['title']        result['year'] = conf['year']        result['link'] = conf['link']        result['place'] = conf['place']        result['sub'] = conf['sub']        result['deadline'] = conf['deadline']        results.append(result)    responses = json.dumps(results)    return responses
if __name__ == '__main__':    app.run(debug=True, host='0.0.0.0', port=5023)

Мы получаем последние данные встречи в def update_db().

Конечная точка API определяется в @app.get("/all"). При доступе к этой конечной точке, а именно http://localhost:5023/all, будет возвращен список информации о конференции.

Другие вещи, которые следует отметить:

  1. Нам нужен CORS, чтобы разрешить http://chat.openai.com доступ к нашему серверу.

  2. @app.get("/logo.png") : визуализировать файл логотипа.

  3. @app.get("/.well-known/ai-plugin.json"): манифест рендеринга文件。

  4. @app.get("/openapi.yaml"): отображать файл описания API.

Здесь мы тщательно подобрали аскетичный логотип для нашего плагина, прямо как я, когда писал дипломную работу:

openapi.yaml

Этот файл представляет собой документ в стандартном формате OpenAPI, цель которого — сообщить GPT, какие функции предоставляет наш плагин, как вызывать эти функции и какова форма вывода функции.

Отдельно говоря: первый — это url-адрес плагина, основная информация о плагине.

openapi: 3.0.1info:  title: AI Conferences  description: Plugin to get information about upcoming AI conferences.  version: 'v1'servers:  - url: http://localhost:5023

Конечная точка: /all, то есть метод и результат доступа к http://localhost:5023/all. Здесь мы говорим GPT использовать get для связи с сервером. сводка сообщает GPT, для чего предназначена эта функция.

paths:  /all:    get:      operationId: getAllUpcomingConf      summary: Get information about all the upcoming conferences      responses:        "200":          description: OK          content:            application/json:              schema:                $ref: '#/components/schemas/getAllUpcomingConfResponses'

Формат ответа: сообщает GPT, как интерпретировать возвращаемые результаты.

components:  schemas:    getAllUpcomingConfResponses:      type: array      items:        type: object        properties:          link:            type: string            description: The link to the conference website.          place:            type: string            description: The place where the conference will be held.          sub:            type: string            description: The subfield of AI that the conference is about.          deadline:            type: string            description: The deadline for submitting papers.

Собрав все это вместе, есть:

openapi: 3.0.1info:  title: AI Conferences  description: Plugin to get information about upcoming AI conferences.  version: 'v1'servers:  - url: http://localhost:5023paths:  /all:    get:      operationId: getAllUpcomingConf      summary: Get information about all the upcoming conferences      responses:        "200":          description: OK          content:            application/json:              schema:                $ref: '#/components/schemas/getAllUpcomingConfResponses'components:  schemas:    getAllUpcomingConfResponses:      type: array      items:        type: object        properties:          link:            type: string            description: The link to the conference website.          place:            type: string            description: The place where the conference will be held.          sub:            type: string            description: The subfield of AI that the conference is about.          deadline:            type: string            description: The deadline for submitting papers.

Зарегистрируйте плагин на странице ChatGPT

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

Откройте магазин плагинов.

«Разработайте свой собственный плагин.

Введите адрес нашего сервера

Нажмите «Установить» здесь, чтобы установить наш свежий и аскетичный плагин.

Установил, выбирай здесь и начинай общение!

Опыт

Во-первых, давайте спросим, ​​какие конференции недавно доступны для отправки:

Удивительный! Выглядит очень надежно, нажимаем кнопку развернуть вверху, мы видим реальный контент, возвращаемый нашим сервером в GPT:

Видно, что ChatGPT переводит полученный контент на естественный язык.

добавить новые функции

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

starred_conferences = []@app.get("/star/<conf_name>")def star(conf_name):    update_db()    for conf in up_coming_conferences:        if conf['title'] == conf_name:            starred_conferences.append(conf)            return "OK"    return "Not Found"

Как показано в коде, мы добавили новую функцию, которая позволяет GPT добавлять в закладки определенную встречу с помощью запроса GET.

Обновите openapi.yaml в соответствии с этой функцией (конкретные изменения см. в репозитории Github в конце статьи).

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

@app.get("/starred")def starred():    results = []    for conf in starred_conferences:        result = {}        result['title'] = conf['title']        result['year'] = conf['year']        result['link'] = conf['link']        result['place'] = conf['place']        result['sub'] = conf['sub']        result['deadline'] = conf['deadline']        results.append(result)    responses = json.dumps(results)    return responses

В то же время обновите openapi.yaml (конкретные изменения опущены, подробности см. в репозитории Github в конце статьи).

Протестируйте новые функции:

Здесь мы успешно собрали конференции EMNLP, а затем запросили некоторую информацию о собранных конференциях.

Как OpenAI учит GPT использовать плагин?

Мне любопытно, как OpenAI настраивает GPT для использования плагина. Согласно документации OpenAI по плагину, практически наверняка файл манифеста и openapi.yaml отображаются непосредственно в GPT. Но я не уверен, что здесь используется какая-то магическая подсказка.

Просто попросите GPT проверить, нет ли утечек.

Утечек нет, поэтому мы пока не можем знать, какие инструкции использует OpenAI для управления GPT.

ссылка

См. репозиторий github для полной реализации:

https://github.com/liyucheng09/aiconf_plugin

Описание плагина OpenAI:

https://platform.openai.com/docs/plugins/introduction?utm_medium=email&_hsmi=258126318&_hsenc=p2ANqtz-8Xi_Zr1TCX6GUPwJd40qklxEEiSsqvmzN6153ZkAjpO6POh0N_q3F0LBdWi7DEfPQddcbiIslA2W NndFySMM-1Gu3rcQ&utm_content=258126318&utm_source=hs_email

https://platform.openai.com/docs/plugins/review?utm_medium=email&_hsmi=25812631

рекомендация

отblog.csdn.net/qq_41771998/article/details/131215348
рекомендация