Попробуйте вызов функций и структурированные выводы мгновенно

Попробуйте вызов функций и структурированные выводы мгновенно

Современные модели ИИ развиваются за рамки простой генерации текста. Благодаря таким функциям, как вызов функций и структурированные выводы, разработчики теперь могут создавать более умные и надёжные приложения. В Novita AI вы можете быстро проверить, поддерживает ли модель эти возможности прямо в Консоли, что делает интеграцию быстрее и эффективнее.

Что такое вызов функций?

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

https://www.youtube.com/watch?v=aqdWSYWC\_LI

Как работает вызов функций?

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

Каковы преимущества вызова функций?

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

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

Структурированные выводы — это способность больших языковых моделей (LLM) генерировать ответы, соответствующие предопределённому, конкретному формату, а не производить текст в свободной форме. Эти выводы обычно представлены в машиночитаемых форматах, таких как JSON, XML, заполненные шаблоны или табличные данные, что упрощает их анализ, проверку и интеграцию в программные системы или рабочие процессы.

https://youtu.be/NGEZsqEUpC0

Как генерируются структурированные выводы

  • Методы подсказок (Prompting): модель направляется с помощью тщательно составленных подсказок для создания вывода в нужном формате.
  • API вызова функций: более надёжно структурированные выводы можно получить, используя интерфейсы вызова функций, где модель возвращает аргументы, строго соответствующие схеме функции, часто с помощью параметра strict: true.
  • Управление через конечный автомат (FSM): внутренне генерация может быть ограничена так, чтобы каждый сгенерированный токен соответствовал правилам формата вывода, уменьшая количество структурных ошибок.

Сценарии использования и преимущества

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

Вызов функций и структурированные выводы

Аспект 🛠️ Вызов функций 🗂️ Структурированные выводы
Назначение Запуск внешней функции Возврат структурированной информации
Ориентация Действие Информация
Результат Имя функции + аргументы Предопределённые структурированные данные (например, JSON)
Пример Вызов API погоды для получения прогноза Возврат отчёта о погоде в формате JSON
Сценарий использования Когда нужно, чтобы модель выполнила действие Когда нужны чистые, парсируемые данные без действия

Как проверить вызов функций и структурированные выводы на Novita AI?

1: Войдите в Novita AI

Перейдя на главную страницу Novita AI, просто нажмите кнопку “Log In” или “Get Started” в правом верхнем углу. Вы можете легко войти через Google, GitHub, Hugging Face или просто по Email — выбор за вами!

Вход в систему

NOVITA AI ВХОД

Попробуйте Novita AI сейчас!

Нажмите “Model API” в Консоли

После входа вы будете перенаправлены на панель управления Novita Console. В верхней части нажмите “Model API”. Этот раздел предоставляет доступ к полному списку доступных моделей, а также подробную информацию об их возможностях, включая поддержку вызова функций и структурированных выводов.

Шаг 2: Нажмите "Model API" в Консоли

Выберите модель и проверьте её!

Просто найдите интересующую вас модель, нажмите на неё, и справа появится панель. В разделе “Supported Capabilities” вы сразу увидите, поддерживаются ли вызов функций и структурированные выводы.

Шаг 3: Выберите модель и проверьте её!

вызов функций на novita ai

Как использовать вызов функций на Novita AI?

1. Инициализация клиента

Сначала необходимо инициализировать клиент с вашим API-ключом Novita.

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # Получите API-ключ Novita AI здесь: https://novita.ai/settings/key-management.
    api_key="<YOUR Novita AI API Key>",
)

model = "meta-llama/llama-4-maverick-17b-128e-instruct-fp8"
  • Определение вызываемой функции

Далее определите функцию Python, которую модель может вызвать. В этом примере это функция для получения информации о погоде.

# Пример функции для имитации получения данных о погоде.
def get_weather(location):
    """Получает текущую погоду для указанного местоположения."""
    print("Вызов функции get_weather с местоположением: ", location)
    # В реальном приложении здесь вы бы вызывали внешний API погоды.
    # Это упрощённый пример, возвращающий жёстко заданные данные.
    return json.dumps({"location": location, "temperature": "60 градусов по Фаренгейту"})

2. Формирование API-запроса с инструментами и сообщением пользователя

Теперь создайте API-запрос к конечной точке Novita. Этот запрос включает параметр tools, определяющий функции, которые модель может использовать, и сообщение пользователя.

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Получить погоду в указанном месте; пользователь должен сначала указать местоположение",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Город и штат, например Сан-Франциско, Калифорния",
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "Какая погода в Сан-Франциско?"
    }
]

# Отправим запрос и выведем ответ.
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# Пожалуйста, проверьте, содержит ли ответ вызовы инструментов в production.
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())

3. Вывод

{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}

4. Ответ с результатом вызова функции и получение финального ответа

Следующий шаг — обработать вызов функции, выполнить функцию get_weather и отправить результат обратно модели для генерации финального ответа пользователю.

# Убедитесь, что tool_call определён из предыдущего шага
if tool_call:
    # Расширяем историю диалога сообщением ассистента о вызове инструмента
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # Выполняем функцию и получаем ответ
        function_response = get_weather(
            location=function_args.get("location"))
        # Добавляем ответ функции в сообщения
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # Получаем финальный ответ от модели, теперь с результатом функции
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # Примечание: не включайте параметр tools здесь.
    )
    print(answer_response.choices[0].message)

5. Вывод

{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}

Как использовать структурированные выводы на Novita AI?

1. Инициализация клиента

Сначала необходимо инициализировать клиент с вашим API-ключом Novita.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # Получите API-ключ Novita AI здесь: https://novita.ai/settings/key-management.
    api_key="<YOUR Novita AI API Key>",
)

# Перейдите на страницу [Models](https://novita.ai/models), чтобы увидеть модели, поддерживающие `Structured Outputs`.
model = "mistralai/mistral-7b-instruct"

2. Определение JSON-схемы

В этом примере создаётся схема для извлечения информации о расходах из ввода пользователя.

# Определяем системную подсказку для отслеживания расходов.
system_prompt = """Вы — ассистент по отслеживанию расходов. 
Извлеките информацию о расходах из ввода пользователя и отформатируйте её в соответствии с предоставленной схемой."""

# Определяем JSON-схему для структурированного ответа.
response_format = {
    "type": "json_schema",
    "json_schema": {
        "name": "expense_tracking_schema",
        "schema": {
            "type": "object",
            "properties": {
                "expenses": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "description": {
                                "type": "string",
                                "description": "Описание расхода"
                            },
                            "amount": {
                                "type": "number",
                                "description": "Потраченная сумма в долларах"
                            },
                            "date": {
                                "type": "string",
                                "description": "Когда произошёл расход"
                            },
                            "category": {
                                "type": "string",
                                "description": "Категория расхода (например, еда, офис, поездки)"
                            }
                        },
                        "required": [
                            "description",
                            "amount"
                        ]
                    }
                },
                "total": {
                    "type": "number",
                    "description": "Общая сумма всех расходов"
                }
            },
            "required": [
                "expenses",
                "total"
            ],
        },
    },
}

3. Отправка запроса к chat completion API

Теперь отправьте запрос на завершение чата к конечной точке Novita.

Этот запрос включает параметр response_format, определяющий JSON-схему, заданную на предыдущем шаге.

chat_completion = client.chat.completions.create(
    model=model,
    messages=[
        {
            "role": "system",
            "content": system_prompt,
        },
        {
            "role": "user",
            "content": """В прошлую пятницу я потратил $120 на ужин в итальянском ресторане с коллегами.
А в понедельник купил офисные принадлежности за $45.""",
        },
    ],
    max_tokens=1024,
    temperature=0.8,
    stream=False,
    response_format=response_format,
)

response_content = chat_completion.choices[0].message.content

# Парсим и форматируем JSON
try:
    json_response = json.loads(response_content)
    prettified_json = json.dumps(json_response, indent=2)
    print(prettified_json)
except json.JSONDecodeError:
    print("Не удалось распарсить ответ как JSON. Сырой ответ:")
    print(response_content)

4. Вывод:

{
  "expenses": [
    {
      "date": "2023-03-17",
      "description": "Ужин в итальянском ресторане",
      "amount": 120,
      "category": "Рестораны"
    },
    {
      "date": "2023-03-13",
      "description": "Офисные принадлежности",
      "amount": 45,
      "category": "Офисные товары"
    }
  ],
  "total": 165
}

Вызов функций и структурированные выводы значительно расширяют возможности моделей ИИ. Нужно ли вам автоматизировать рабочие процессы, получать данные в реальном времени или извлекать структурированную информацию — Novita AI упрощает поиск моделей, соответствующих вашим задачам. Начните создавать более умные приложения уже сегодня, изучая модели в Novita Console!

Часто задаваемые вопросы

Что такое вызов функций в моделях ИИ?

Это возможность модели инициировать внешние инструменты или API, генерируя структурированные вызовы функций на основе запросов пользователя.

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

Структурированные выводы — это ответы модели в строгих, машиночитаемых форматах, таких как JSON, что удобно для лёгкой интеграции.

Чем вызов функций отличается от структурированных выводов?

Вызов функций ориентирован на действие (например, получение погоды), тогда как структурированные выводы сосредоточены на возврате чистых, отформатированных данных.

Novita AI — это универсальная облачная платформа, которая поддерживает ваши амбиции в области ИИ. Интегрированные API, бессерверные решения, GPU-инстансы — экономичные инструменты, которые вам нужны. Устраните инфраструктурные сложности, начните бесплатно и воплотите своё видение ИИ в реальность.

Рекомендуемое чтение