Вызов функций GPT: 5 недооцененных примеров использования
«Вызов функций» от OpenAI может стать самой новаторской и в то же время недостаточно оцененной функцией, выпущенной любой компанией-разработчиком... когда-либо.
Что такое GPT-функции?
Функции позволяют превращать неструктурированные данные в структурированные. Возможно, это звучит не так уж революционно, но если учесть, что 90 % рабочих мест по обработке и вводу данных в мире существуют именно по этой причине, то это довольно революционная функция, которая осталась незамеченной.
Вы когда-нибудь просили GPT (3.5 или 4) выдать нужный вам ответ и больше ничего? Никаких «Конечно, вот ваш...» или других бесполезных слов, окружающих основной ответ. Функции GPT — это решение, которое вы так долго искали.
Как должны работать функции?
Документация OpenAI по вызову функций крайне ограничена. Вам придется покопаться на их форуме для разработчиков в поисках примеров их использования. Я покопался на форуме для вас, и у меня есть много примеров.
Вот один из немногих примеров, который вы сможете найти в их документации:
functions = [
{
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
}
]
Определение функции – это жесткий формат JSON, в котором задается имя функции, ее описание и параметры. В данном случае функция предназначена для получения текущей погоды. Очевидно, что GPT не может вызвать этот реальный API (поскольку его не существует), но, используя этот структурированный ответ, вы сможете гипотетически подключить реальный API.
На высоком уровне, однако, функции предоставляют два уровня умозаключений:
Выбор самой функции
Вы можете заметить, что функции передаются в вызов API OpenAI в виде массива. Причина, по которой вы указываете имя и описание каждой функции, заключается в том, что GPT может решить, какую из них использовать в зависимости от заданного запроса. Предоставить несколько функций в вызове API – это все равно что дать GPT швейцарский армейский нож и попросить его разрезать кусок дерева пополам. Он знает, что даже если у него есть плоскогубцы, ножницы и нож, он должен использовать пилу!
Определения функций вносят свой вклад в количество токенов. Передача сотен функций не только отнимет у вас большую часть лимита токенов, но и приведет к снижению качества ответа. Я часто даже не использую эту функцию и передаю только 1 функцию, которую заставляю использовать. Однако в некоторых случаях она очень полезна.
Выбор значений параметров на основе запроса
На мой взгляд, это настоящее волшебство. Возможность GPT выбирать инструмент из своего набора – это потрясающе и определенно является главной темой их анонса, но я думаю, что это применимо к большему количеству случаев использования.
Вы можете представить себе такую функцию, как передача GPT формы для заполнения. Она использует свои рассуждения, контекст ситуации и названия/описания полей, чтобы решить, как заполнить каждое поле. Разработка формы и дополнительной информации, которую вы передаете, – вот где можно проявить творческий подход.
5 полезных применений
Извлечение данных
Чаще всего я использую функции для извлечения определенных значений из большого куска текста. Адрес отправителя из электронного письма, имя учредителя из записи в блоге, номер телефона с целевой страницы.
Мне нравится представлять, что я ищу иголку в стоге сена, только LLM сжигает стог, оставляя лишь иголку.
Пример использования: Обработка тысяч заявок на участие в конкурсах
Я создал автоматизацию, которая итеративно обрабатывает тысячи заявок на участие в конкурсах. Прежде чем сохранять их в листе Google, я хотел извлечь электронную почту, связанную с заявкой. Вот вызов функции, который я использовал для извлечения их электронной почты.
{
"name":"update_email",
"description":"Updates email based on the content of their submission.",
"parameters":{
"type":"object",
"properties":{
"email":{
"type":"string",
"description":"The email provided in the submission"
}
},
"required":[
"email"
]
}
}
Оценка
Присвоение неструктурированным данным оценки на основе динамических критериев естественного языка – замечательный вариант использования функций. Вы можете оценивать комментарии в ходе анализа настроений, эссе на основе пользовательской рубрики оценки, кредитную заявку на риск на основе ключевых факторов. Недавно я применял скоринг для оценки лидов продаж по шкале от 0 до 100 в зависимости от их эффективности.
Пример использования: Оценка лидов по продажам
Несколько месяцев назад у нас были сотни потенциальных лидов в одном листе Google, которые мы хотели проанализировать от наиболее до наименее важных. Каждый запрос содержал такую информацию, как размер компании, имя контактного лица, должность, отрасль и т. д.
Используя следующую функцию, мы оценили каждое предложение от 0 до 100 баллов, исходя из наших потребностей, а затем отсортировали их от лучшего к худшему.
{
"name":"update_sales_lead_value_score",
"description":"Updates the score of a sales lead and provides a justification",
"parameters":{
"type":"object",
"properties":{
"sales_lead_value_score":{
"type":"number",
"description":"An integer value ranging from 0 to 100 that represents the quality of a sales lead based on these criteria. 100 is a perfect lead, 0 is terrible. Ideal Lead Criteria:\n- Medium sized companies (300-500 employees is the best range)\n- Companies in primary resource heavy industries are best, ex. manufacturing, agriculture, etc. (this is the most important criteria)\n- The higher up the contact position, the better. VP or Executive level is preferred."
},
"score_justification":{
"type":"string",
"description":"A clear and conscise justification for the score provided based on the custom criteria"
}
}
},
"required":[
"sales_lead_value_score",
"score_justification"
]
}
Распределение по категориям
Определите пользовательские корзины, и GPT сможет вдумчиво рассмотреть каждый фрагмент данных и поместить его в нужную корзину. Это можно использовать для задач маркировки, например для выбора категории видео на Youtube, или для задач дискретного подсчета баллов, например для присвоения буквенных оценок домашним заданиям.
Пример использования: Маркировка новостных статей
Очень распространенным первым шагом в рабочих процессах обработки данных является разделение входящих данных на различные потоки. Недавно я создал автоматизацию, которая именно так и поступила с новостными статьями, взятыми из Интернета. Я хотел отсортировать их по теме статьи и включить обоснование решения еще раз. Вот функция, которую я использовал:
{
"name":"categorize",
"description":"Categorize the input data into user defined buckets.",
"parameters":{
"type":"object",
"properties":{
"category":{
"type":"string",
"enum":[
"US Politics",
"Pandemic",
"Economy",
"Pop culture",
"Other"
],
"description":"US Politics: Related to US politics or US politicians, Pandemic: Related to the Coronavirus Pandemix, Economy: Related to the economy of a specific country or the world. , Pop culture: Related to pop culture, celebrity media or entertainment., Other: Doesn't fit in any of the defined categories. "
},
"justification":{
"type":"string",
"description":"A short justification explaining why the input data was categorized into the selected category."
}
},
"required":[
"category",
"justification"
]
}
}
Выбор вариантов
Часто при обработке данных я даю GPT множество возможных вариантов и хочу, чтобы он выбрал лучший из них, исходя из моих потребностей. Мне нужно только то значение, которое он выбрал, без лишних слов и дополнительных мыслей. Функции идеально подходят для этого.
Пример использования: Поиск «самой интересной новости об ИИ» из новостей хакеров
Если кратко описать функциональную часть сценария использования, то мы должны отсканировать первые n страниц новостей хакеров и попросить GPT выбрать пост, наиболее релевантный «новостям ИИ или технологическим новостям». GPT вернет только заголовок и ссылку, выбранную с помощью функций, чтобы я мог продолжить исследование этого сайта и сгенерировать из него твит.
Я передам пользовательский запрос как часть сообщения и использую следующее определение функции:
{
"name":"find_best_post",
"description":"Determine the best post that most closely reflects the query.",
"parameters":{
"type":"object",
"properties":{
"best_post_title":{
"type":"string",
"description":"The title of the post that most closely reflects the query, stated exactly as it appears in the list of titles."
}
},
"required":[
"best_post_title"
]
}
}
Фильтрация
Фильтрация – это подмножество категоризации, когда вы классифицируете элементы как истинные или ложные на основе условия естественного языка. Условие типа «является испанским» сможет отфильтровать все испанские комментарии, статьи и т. д. с помощью простой функции и условного оператора сразу после нее.
Пример использования: Фильтрация заявок на участие в конкурсах
Та же автоматизация, о которой я упоминал в разделе «Извлечение данных», использовала ai-фильтрацию для отсеивания конкурсных работ, которые не соответствовали критериям. Такие вещи, как «должен использовать typescript», были абсолютно обязательны для конкурса кодирования. Мы использовали функции, чтобы отфильтровать заявки и сократить общий набор обрабатываемых заявок на 90 %. Вот определение функции, которое мы использовали.
{
"name":"apply_condition",
"description":"Used to decide whether the input meets the user provided condition.",
"parameters":{
"type":"object",
"properties":{
"decision":{
"type":"string",
"enum":[
"True",
"False"
],
"description":"True if the input meets this condition 'Does submission meet the ALL these requirements (uses typescript, uses tailwindcss, functional demo)', False otherwise."
}
},
"required":[
"decision"
]
}
}
Благодарю за прочтение! Успешного кодинга!