Function Calling

Вызов функций с помощью LLM

Начало работы с вызовом функций

Вызов функций — это возможность надежно подключать LLM к внешним инструментам, чтобы обеспечить эффективное использование инструментов и взаимодействие с внешними API.

LLM, такие как GPT-4 и GPT-3.5, были точно настроены, чтобы определять, когда необходимо вызвать функцию, а затем выводить JSON, содержащий аргументы для вызова функции. Функции, вызываемые при вызове, будут действовать как инструменты в вашем ИИ приложении, и вы можете определить более одной функции в одном запросе.

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

Вызов функций позволяет разработчикам создавать:

  • диалоговые агенты, которые могут эффективно использовать внешние инструменты для ответов на вопросы. Например, запрос «Какая погода в Белизе?» будет преобразовано в вызов функции, такой как get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
  • Решения на базе LLM для извлечения и маркировки данных (например, извлечение имен людей из статьи в Википедии).)
  • приложения, которые могут помочь преобразовать естественный язык в вызовы API или запросы к базе данных.
  • диалоговые механизмы поиска знаний, которые взаимодействуют с базой знаний

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

Вызов функций с помощью GPT-4

В качестве простого примера предположим, что мы попросили модель проверить погоду в данном месте.

Один только LLM не сможет ответить на этот запрос, поскольку он был обучен на наборе данных. Способ решения этой проблемы — объединить LLM с внешним инструментом. Вы можете использовать возможности вызова функций модели, чтобы определить функцию для вызова вместе с ее аргументами, а затем вернуть ответ. Ниже приведен простой пример того, как этого можно добиться с помощью API OpenAI.

Допустим, пользователь задает модели следующий вопрос:

What is the weather like in London?

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

tools = [
    {
        "type": "function",
        "function": {
            "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"],
            },
        },   
    }
]

Функция get_current_weather возвращает текущую погоду в заданном месте. Когда вы передаете это определение функции как часть запроса, оно фактически не выполняет функцию, а просто возвращает JSON объект, содержащий аргументы, необходимые для вызова функции. Вот несколько фрагментов кода, как этого добиться.

Вы могли бы определить функцию завершения следующим образом:

def get_completion(messages, model="gpt-3.5-turbo-1106", temperature=0, max_tokens=300, tools=None):
    response = openai.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature,
        max_tokens=max_tokens,
        tools=tools
    )
    return response.choices[0].message

Вот как вы могли бы составить вопрос пользователя:

messages = [
    {
        "role": "user",
        "content": "What is the weather like in London?"
    }
]

Наконец, вы можете вызвать метод get_completion выше и передать как сообщения, так и инструменты:

response = get_completion(messages, tools=tools)

Объект response содержит следующее:

ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='...', function=Function(arguments='{"location":"London","unit":"celsius"}', name='get_current_weather'), type='function')])

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

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

Блокноты

Вот блокнот с простым примером, демонстрирующим, как использовать вызов функций с OpenAI API:

Вызов функций с помощью LLM с открытым исходным кодом

Дополнительные заметки о вызове функций с помощью LLM с открытым исходным кодом появятся скоро.

Варианты использования вызова функций

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

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

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

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

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

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

Использованная литература