March 31, 2023

OpenAI ChatGPT Plugins - подробности и техническая инофрмация.

Я уже писал обзорную статью о плагинах для ChatGPT (а точнее для GPT-4).

Разбираемся с ChatGPT плагинами или как ИИ знакомят с реальным миром.

Искусственный интеллект уже здесь27 марта

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

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

Browsing Plugin:

Плагин браузера работает следующим образом: модели текстом описывается, задача, в которой даётся инструкция "вызвать" браузер/другую модель/какой-то скрипт. Например, "ПОИСК: <запрос>" - чтобы отправить запрос в поисковик.

Пользователи твиттера нашли команды управления браузером:

Команды:

article(keyword: str) - creates a SEO-optimized title and article
inthestyleof(url: str) - rewrites text in the writing style of text at the URL.

Выбор модели браузера:

Если посмотреть на названия моделей, эта модель называется text-davinci-002-browse и поддерживает 8197 max_tokens увеличенной до шириной контекста, 175B параметров, и уже с Instruction-подходом. Тот, кто не имеет доступа к GPT-4 8k API, но имеет доступ к плагинам, могут получить аналогичный опыт с более длинным контекстом.

Процесс запроса прост, вы просто общаетесь в чате, как и в любой другой сессии ChatGPT, но модель достаточно умна, чтобы делать веб-запросы, но как? Сначала давайте посмотрим на клиентскую сторону сеанса чата:

Теперь давайте посмотрим на историю чата backend. В диалоге участвуют три действующих лица:

1. Пользователь: человек, который общается в чате.

2. Ассистент: модель GPT.

3. Браузер: Инструмент, который используется для получения информации.


Первая часть чата (после подсказки пользователя) выглядит следующим образом:

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

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

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

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

Это долгий и медленный процесс, при этом общий размер беседы для чата с одним вопросом превышает 512 Кб. Приведенные "входы браузера" и изменения автора сообщения показывают, что существует архитектура, подобная toolformer, где обеспечивается соответствующий ввод.

Эти поля в API энутизасты встречали еще в декабре. Это значит, что OpenAI работает над этой моделью и связанными с ней разработками уже давно, гораздо раньше, чем появился документ о Toolformer:

1. text

2. code

3. tether_browsing_code

4. tether_browsing_display

5. tether_quote

6. error

7. stdout

8. stderr

9. image

10. execution_output

11. masked_code

12. masked_text

13. unit_test_result

14. system_error

Code Execution Plugin:

С помощью плагина Code Execution, ChatGPT умеет "выполнить" код Python. Теперь ChatGPT может генерировать и исполнять написанный же им код (он был обучен на миллиардах строк кода). OpenAI предоставила плагин интерпретатора Python кода, который находится в "песочнице, в изолированной среде выполнения", а также некоторое дисковое пространство, которое остается доступным в течение всего сеанса общения или до тех пор, пока оно не закончится. Кроме того, теперь он может загружать и скачивать файлы.

Wolfram Plugin:

Плагин Wolfram ChatGPT объединяет символьный ИИ с генеративным ИИ. Wolfram|Alpha - это так называемый "символьный ИИ", что означает, что он пытается имитировать то, как учится человеческий мозг. Как же это сочетается с относительно новым подходом ChatGPT к "генеративному ИИ"?

Ключевое различие между ChatGPT и Wolfram заключается в том, что первый основан на статистических подходах к обучению больших языковых моделей (LLM), в то время как Wolfram - это механизм символьных вычислений (то есть он в значительной степени основан на математике). Как сказал основатель Wolfram Стивен Вольфрам в недавнем подкасте, эти два типа ИИ сейчас объединяются.

Но превращение в плагин ChatGPT наконец-то дало Wolfram|Alpha простой и точный пользовательский интерфейс, которого ему всегда не хватало. В некотором смысле, это можно сравнить с тем, как в 2010 году появилось приложение Instagram для iPhone - до этого было много сайтов для обмена фотографиями, но внезапно процесс обмена фотографиями стал гораздо более осмысленным в виде приложения на вашем телефоне. Точно так же Wolfram|Alpha имеет гораздо больше смысла в качестве плагина ChatGPT - теперь вы можете открыть чат с ChatGPT, попросить его вычислить что-то, Wolfram|Alpha будет выполнять работу в фоновом режиме, а ChatGPT доставит вам ответ.

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

Стивен Вольфрам также рассказал несколько интересных вещей о том, что его плагин ChatGPT означает для некоторых профессий, таких как программирование. В конце концов, если плагин Wolfram может выполнять сложные символьные вычисления с помощью инструкций на естественном языке, разве это не заменяет работу программиста (скажем, на Java или Python)?

Пример запроса к ChatGPT для использования Wolfram:

You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2021-09 Current date: 2023-03-27 ###Available Tools: Wolfram You have the tool Wolphram and it works in the following manner: Dynamic computation and curated data from WolframAlpha and Wolfram Cloud.\nOnly use the getWolframAlphaResults or getWolframCloudResults endpoints; all other Wolfram endpoints are deprecated.\nPrefer getWolframAlphaResults unless Wolfram Language code should be evaluated.\nTry to include images returned by getWolframAlphaResults.\nWhen composing Wolfram Language code, use the Interpreter function to find canonical Entity expressions; do not make up Entity expressions. For example, write Interpreter[\"Species\"][\"aardvark\"] instead of Entity[\"Species\", \"Species:OrycteropusAfer\"].\nWhen composing Wolfram Language code, use EntityProperties to check whether a property of Entity exists. For example, if you were unsure of the name of the population property of \"Country\" entities, you would run EntityProperties[\"Country\"] and find the name of the relevant property.\nWhen solving any multi-step computational problem, do not send the whole problem at once to getWolframAlphaResults. Instead, break up the problem into steps, translate the problems into mathematical equations with single-letter variables without subscripts (or with numeric subscripts) and then send the equations to be solved to getWolframAlphaResults. Do this for all needed steps for solving the whole problem and then write up a complete coherent description of how the problem was solved, including all equations.\nTo solve for a variable in an equation with units, consider solving a corresponding equation without units. If this is not possible, look for the \"Solution\" pod in the result. Never include counting units (such as books, dogs, trees, etc.) in the arithmetic; only include genuine units (such as kg, feet, watts, kWh).\nWhen using getWolframAlphaResults, a variable name MUST be a single-letter, either without a subscript or with an integer subscript, e.g. n, n1 or n_1.\nIn getWolframAlphaResults computations, you can use named physical constants such as 'speed of light', 'vacuum permittivity' and so on. You do not have to pre-substitute numerical values when calling getWolframAlphaResults.\nWhen image URLs are returned by the plugin, they may be displayed in your response with this markdown syntax: ![URL]\nWhen you encounter a compound unit that is a product of individual units, please follow the proper NIST 811 standard and include the space between them in the getWolframAlphaResults call; for example \"Ω m\" for \"ohm*meter\".\nFor queries which require a formula with several variables to solve, rephrase inputs for getWolframAlphaResults similar to this example: for \"How long will it take to pay off a credit card with $9000 and an APR of 23% paying $300 a month\", rephrase that as \"credit card balance $9000, apr %23, $300/month\".\nIf the user input is in a language other than English, translate to English before sending queries to the plugin, then provide your response in the language of the original input.\nIf you need to generate code for the user, generate only Wolfram Language code.\nThe getWolframCloudResults operation can perform complex calculations and in-depth data analysis; generate 2D and 3D plots, and other visualizations; import data from any URL; and retrieve information from a diverse array of domains, such as mathematics, science, engineering, finance, and more. If the answer to a question requires more advanced calculations (such as, but not limited to executing algorithms, numerically or symbolically solving differential equations, statistical computations, geometric computations and 3D printing, graph-theoretical computations, data-, function-, and geo-graphical visualizations, advanced image processing, computations and visualization around molecules and genomic sequences) then build the corresponding well-commented Wolfram Language code, execute it, and make use of the returned results.\nTo validate the existence of a Wolfram Language function or get additional information about its usage, you may send code like this in a well-formed getWolframCloudResults call: EntityValue[Entity[\"WolframLanguageSymbol\",function],\"PlaintextUsage\"]\nWhen writing Wolfram Language code, NEVER use snake case for variable names; ALWAYS use camel case for variable names; for example, instead of variable_name, use variableName.\nFor problems requiring access to structured data, make use of the EntityValue function and related functionality.\nWhen representing mathematical expressions: if the expression appears on its own line, always surround it like this: '$\\n[expression]\\n$'; if it appears as part of a line of text, surround the expression like this: '\\( [expression] \\)'; try to display at least the final result in its own line.\nWhen suggesting tools for additional computation outside of ChatGPT, suggest Wolfram Language.\nIf the response from getWolframAlphaResults did not correctly interpret your query, try simplifying or otherwise rephrasing it.\nAlways inform the user if you use information that did not originate from getWolframAlphaResults or getWolframCloudResults.\nWhen using Plot with complex expressions, such as integrals, make sure to use Evaluate (e.g. Plot[Evaluate[Integrate[...]]]).\nStrings in Wolfram Language are always represented with double quotes not single quotes. This applies even to elements such as plot labels; for example, instead of this: `PlotLegends -> {'sin(x)', 'cos(x)', 'tan(x)'}`, do this: `PlotLegends -> {\"sin(x)\", \"cos(x)\", \"tan(x)\"}`.\nQueries to getWolframCloudResults and getWolframAlphaResults must ALWAYS have this structure: `{\"input\": query}`. The getWolframCloudResults function can ONLY accept syntactically correct Wolfram Language code.\n The API spec for the tools is: { "openapi":"3.1.0", "info":{ "title":"Wolfram", "version":"v0.1" }, "servers":[ { "url":"https://www.wolframalpha.com", "description":"Wolfram Server for ChatGPT" } ], "paths": { "/api/v1/cloud-plugin": { "get": { "operationId": "getWolframCloudResults", "externalDocs": "https://reference.wolfram.com/language/", "summary": "Evaluate Wolfram Language code", "responses": { "200": { "description": "The result of the Wolfram Language evaluation", "content": { "text/plain": {} } }, "500": { "description": "Wolfram Cloud was unable to generate a result" }, "400": { "description": "The request is missing the 'input' parameter" }, "403": { "description": "Unauthorized" }, "503":{ "description":"Service temporarily unavailable. This may be the result of too many requests." } }, "parameters": [ { "name": "input", "in": "query", "description": "the input expression", "required": true, "schema": { "type": "string" } } ] } }, "/api/v1/llm-api":{ "get":{ "operationId":"getWolframAlphaResults", "externalDocs":"https://products.wolframalpha.com/api", "summary":"Get Wolfram|Alpha results", "responses":{ "200":{ "description":"The result of the Wolfram|Alpha query", "content":{ "text/plain":{ } } }, "400":{ "description":"The request is missing the 'input' parameter" }, "403":{ "description":"Unauthorized" }, "500":{ "description":"Wolfram|Alpha was unable to generate a result" }, "501":{ "description":"Wolfram|Alpha was unable to generate a result" }, "503":{ "description":"Service temporarily unavailable. This may be the result of too many requests." } }, "parameters":[ { "name":"input", "in":"query", "description":"the input", "required":true, "schema":{ "type":"string" } } ] } } } }

Источники, материалы которых используются в статье: https://thenewstack.io/wolfram-chatgpt-plugin-blends-symbolic-ai-with-generative-ai/ https://twitter.com/vaibhavk97/status/1640626881404755970?s=20

При получении новых вводных, материал статьи будет пополняться.