Используйте инструмент функции

Завершено

Подсказка

Дополнительные сведения см. на вкладке "Текст и изображения ".

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

Что такое средство функции?

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

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

К ключевым функциям относятся:

  • Структурированные вызовы инструментов — модель выдает явные запросы на вызов функции
  • Выполнение, управляемое разработчиком , — приложение решает, как и где выполняются функции
  • Шаблон надежной интеграции — безопасные вызовы API, внутренние службы или вспомогательные служебные программы
  • Оркестрация с несколькими взаимодействиями — возвращение результатов инструмента и разрешение модели продолжить рассуждение
  • Ответы, подкрепленные данными могут включать данные в реальном времени, сгенерированные системой

Распространенные варианты использования

Вариант использования Пример
Интеграция системы Вызов внутреннего API для сведений об учетной записи или заказе
Автоматизация задач Активация рабочих процессов, таких как создание билетов или уведомления
Поиск данных Запрос бизнес-правил или ссылочных таблиц перед ответами

Простой пример

Ниже приведен пример, который предоставляет get_time функцию и позволяет модели вызывать ее при необходимости:

import time
from openai import OpenAI

# Function to get the current time
def get_time():
    return f"The time is {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}"


# Main function
def main():
    client = OpenAI(
        base_url={openai_endpoint},
        api_key={auth_key_or_token}
    )

    function_tools = [
        {
            "type": "function",
            "name": "get_time",
            "description": "Get the current time"
        }
    ]

    # Initialize messages with a system prompt
    messages = [
        {"role": "developer", "content": "You are an AI assistant that provides information."},
    ]

    # Loop until the user types 'quit'
    while True:
        prompt = input("\nEnter a prompt (or type 'quit' to exit)\n")
        if prompt.lower() == "quit":
            break

        # Append the user prompt to the messages
        messages.append({"role": "user", "content": prompt})

        # Get initial response
        response = client.responses.create(
            model=model_deployment,
            input=messages,
            tools=function_tools
        )

        # Append model output to the messages
        messages += response.output

        # Was there a function call?
        for item in response.output:
            if item.type == "function_call" and item.name == "get_time":
                current_time = get_time()
                messages.append({
                    "type": "function_call_output",
                    "call_id": item.call_id,
                    "output": current_time
                })

                # Get a follow up response using the tool output
                response = client.responses.create(
                    model=model_deployment,
                    instructions="Answer only with the tool output.",
                    input=messages,
                    tools=function_tools
                )

        print(response.output_text)


# Run the main function when the script starts
if __name__ == '__main__':
    main()

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

Выходные данные могут выглядеть примерно так:

Enter a prompt (or type 'quit' to exit)
Hello

Hello! How can I help you today?

Enter a prompt (or type 'quit' to exit)
What time is it?

The time is 2026-03-19 17:17:41.

Enter a prompt (or type 'quit' to exit)

Первый запрос пользователя ("Hello") не требовал использования средства функции, поэтому модель ответила обычно. Второй запрос ("Который час?") активировал модель для выбора функции get_time, которую она указала в своем ответе. Затем код приложения запустил функцию и вернул результаты модели, которая затем отправила второй ответ с результатами функции.

Подсказка

В этом примере используется одна функция без параметров. Вы можете настроить инструмент для использования нескольких функций с параметрами или без них. Дополнительные сведения об указании сведений о функции см. в руководстве разработчиков OpenAI.

Как работает инструмент для работы с функциями

Общий процесс использования средства функции:

  1. Вы определяете средства . Укажите одно или несколько определений функций в массиве инструментов.
  2. Модель оценивает запрос . Определяет, требуется ли вызов функции.
  3. Модель выдает вызов функции . Ответ включает имя функции и метаданные вызова.
  4. Приложение запускает логику . Запустите соответствующую функцию в коде.
  5. Вы возвращаете выходные данные функции — отправьте function_call_output элемент с результатом.
  6. Модель завершает ответ . Она включает результаты инструмента в окончательный ответ.

Лучшие практики

  • Сосредоточенность инструментов — Небольшими функциями с одним назначением проще управлять и тестировать их.
  • Проверяйте входные данные функций — никогда не доверяйтесь аргументам функций в эксплуатационных системах.
  • Безопасная обработка ошибок. Возвращение четких сообщений об ошибках, которые понимает модель
  • Использование средства журнала — отслеживание вызовов, задержки и частоты сбоев для отладки и управления
  • Ограничение конфиденциальных операций . Требуется явная авторизация для действий с высоким воздействием

Ограничения, о которые следует знать

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

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