Поддерживает ли Llama 3.2 вызов функций? Практическое руководство

Поддерживает ли Llama 3.2 вызов функций? Практическое руководство

Ключевые моменты

Да или Нет: Модель Llama 3.2 3B — это легковесная, но мощная языковая модель, которая поддерживает вызов функций.

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

Как реализовать? Установите API через «LLM Playground» от Novita AI, затем реализуйте вызов с помощью фреймворка Langchain.

В современной области искусственного интеллекта многие активно обсуждают, может ли модель Llama 3.2 3B реализовать возможность вызова функций. Множество пользователей и разработчиков делятся своим опытом вызова функций Llama 3.2 3B на форумах и в социальных сетях. Некоторые пользователи сообщают о хороших результатах с уровнем успеха около 80% при использовании модели для вызова инструментов. Однако есть и сообщения о том, что в некоторых случаях модель может неправильно понять контекст, что приводит к неточным или неудачным вызовам функций. Сегодня мы подробнее рассмотрим функцию вызова функций Llama 3.2.

Поддерживает ли Llama 3.2 вызов функций?

Да!

Модели Llama 3.2, включая вариант 3B, поддерживают вызов функций. Эта возможность позволяет модели определять, когда нужно вызвать функцию, а затем выводить JSON с аргументами для вызова этой функции. Данная функциональность является ключевой особенностью серии Llama 3.2, и модели доработаны специально для неё. Модель Llama 3.2 3B особенно хорошо подходит для приложений на устройствах благодаря своему легковесному дизайну, сохраняя при этом мощные функции, такие как вызов функций.

llama3.2 functioncalling

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

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

Поддерживаемые модели для вызова функций

Многие LLM и платформы теперь поддерживают вызов функций. Вы можете установить API через страницу «LLM Playground» от Novita AI и реализовать вызов функций с помощью LangChain.

  • Llama 3.3: Версия с 70 миллиардами параметров показала высокую производительность в тестах вызова функций, успешно определяя, когда и какие функции вызывать на основе запросов пользователей.
  • Mistral: Модели, такие как Mistral-Large-2, демонстрируют успех в вызове функций внутри сред, таких как watsonx.ai.
  • Gemini: Модели Google Gemini также поддерживают вызов функций с различными примерами использования.

Если вы хотите узнать больше информации, загляните на этот сайт!

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

источник: Berkeley Function-Calling Leaderboard

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

Вызов функций обычно включает двухэтапный процесс:

  1. Сопоставление запроса пользователя с правильной функцией и входными параметрами. LLM оценивает, какие из доступных инструментов соответствуют запросу пользователя.
  2. Обработка вывода функции для формирования окончательного, связного ответа. Если применимо, LLM создаёт форматированный запрос для вызова инструмента.
  • Затем вывод инструмента анализируется и интегрируется в окончательный ответ.

Практические применения вызова функций

Вызов функций с моделью Llama 3.2 3B имеет множество реальных приложений:

  • Чат-боты поддержки клиентов: автоматизация ответов, требующих вычислений или поиска информации.
  • Обработка данных: взаимодействие с внутренними системами для получения или обновления данных.
  • Виртуальные помощники: улучшение взаимодействия с пользователем за счёт выполнения операций, таких как планирование или вычисления.
  • Взаимодействие с API: преобразование естественного языка в вызовы API.
  • Запросы к базам данных: создание приложений, которые переводят естественный язык в корректные запросы к базам данных.
  • Управление умным домом: управление устройствами умного дома, например, установка температуры или включение света с помощью команд на естественном языке.
  • Диалоговые движки поиска знаний: взаимодействие с базами знаний.
  • Платформы электронной коммерции: предоставление рекомендаций по товарам в реальном времени на основе баз данных инвентаря, отслеживание заказов или управление тикетами поддержки клиентов.
  • Здравоохранение: запись на приём или получение информации о пациентах.
  • Путешествия: получение информации о рейсах, бронирование или управление бронями.
  • Финансы: предоставление актуальных балансов счетов и обработка транзакций.

Как использовать вызов функций Llama 3.2 3B через Novita AI

Шаг 1: Получите API-ключ

Перейдите на страницу «Keys» и скопируйте API-ключ, как показано на изображении.

получить api ключ

При регистрации Novita AI предоставляет кредит в размере $0.5 для начала работы!

Если бесплатные кредиты закончатся, вы можете оплатить и продолжить использование.

Шаг 2: Используйте LangChain для реализации вызова функций

Мы создадим простое математическое приложение, которое может выполнять операции сложения и умножения.

💡 Хотя в этом руководстве для удобства используется LangChain, для реализации вызова функций не требуется какой-либо конкретный фреймворк. Ключевым моментом является разработка правильных подсказок, чтобы заставить модель понимать и правильно вызывать функции. LangChain используется здесь только для упрощения реализации.

Предварительные требования

Сначала установите необходимые пакеты:

pip install langchain-openai python-dotenv

Настройка окружения

Создайте файл .env в корне вашего проекта и добавьте ваш API-ключ Novita AI:

NOVITA_API_KEY=your_api_key_here

Шаги реализации

1. Определение инструментов

Сначала создадим два простых математических инструмента, используя декоратор @tool из LangChain:

from langchain_core.tools import tool

@tool
def multiply(x: float, y: float) -> float:
    """Multiply two numbers together."""
    return x * y

@tool
def add(x: int, y: int) -> int:
    """Add two numbers."""
    return x + y

tools = [multiply, add]

2. Создание функции выполнения инструмента

Далее реализуем функцию для выполнения инструментов:

from typing import Any, Dict, Optional, TypedDict
from langchain_core.runnables import RunnableConfig

class ToolCallRequest(TypedDict):
    name: str
    arguments: Dict[str, Any]

def invoke_tool(
    tool_call_request: ToolCallRequest, 
    config: Optional[RunnableConfig] = None
):
    """Execute the specified tool with given arguments."""
    tool_name_to_tool = {tool.name: tool for tool in tools}
    name = tool_call_request["name"]
    requested_tool = tool_name_to_tool[name]
    return requested_tool.invoke(tool_call_request["arguments"], config=config)

3. Настройка конвейера LangChain

Создайте цепочку, которая использует LLM Novita AI для выбора и подготовки вызовов инструментов:

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description

def create_chain():
    """Create a chain that uses the specified LLM model to select and prepare tool calls."""
    model = ChatOpenAI(
        model="meta-llama/llama-3.3-70b-instruct",
        api_key=os.getenv("NOVITA_API_KEY"),
        base_url="https://api.novita.ai/v3/openai",
    )
    
    rendered_tools = render_text_description(tools)
    system_prompt = f"""\
    You are an assistant that has access to the following set of tools. 
    Here are the names and descriptions for each tool:

    {rendered_tools}

    Given the user input, return the name and input of the tool to use. 
    Return your response as a JSON blob with 'name' and 'arguments' keys.

    The `arguments` should be a dictionary, with keys corresponding 
    to the argument names and the values corresponding to the requested values.
    """

    prompt = ChatPromptTemplate.from_messages(
        [("system", system_prompt), ("user", "{input}")]
    )

    return prompt | model | JsonOutputParser()

4. Создание основной функции обработки

Реализуйте основную функцию, которая обрабатывает математические запросы:

def process_math_query(query: str):
    """Process a mathematical query by using an LLM to select the appropriate tool and execute it."""
    chain = create_chain()
    message = chain.invoke({"input": query})
    result = invoke_tool(message, config=None)
    return message, result

5. Пример использования

Вот как использовать реализацию:

if __name__ == "__main__":
    message, result = process_math_query(
        "meta-llama/llama-3.2-3b-instruct", 
        "what's 3 plus 1132"
    )
    print(result)  # Output: 1135

Распространённые проблемы и их устранение

К распространённым проблемам, возникающим при вызове функций, относятся:

  • Неправильный вызов функции: модель может неправильно понять контекст, что приведёт к вызову не той функции.
  • Высокая задержка: медленные ответы могут повлиять на пользовательский опыт.
  • Нераспознанные функции: модель может не распознать допустимые имена функций или параметры, что приведёт к ошибкам времени выполнения.
  • Галлюцинации модели: модель может генерировать неверные выходные данные или параметры, что может привести к неожиданному поведению.
  • Непоследовательная передача параметров: параметры могут передаваться в неожиданных форматах, вызывая ошибки во время выполнения функции.
  • Проблемы с сетью: зависимости от внешних API могут вызывать задержки или сбои при нестабильном сетевом соединении.
  • Ошибки парсинга: вывод модели может не соответствовать ожидаемым форматам (например, неверный JSON), что приводит к ошибкам синтаксического анализа.

Лучшие практики оптимизации вызова функций

Для оптимизации вызова функций:

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

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

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

Почему вызов функций так важен для AI-агентов?

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

Как вызов функций улучшает производительность LLM?

Он повышает точность, позволяя получать данные в реальном времени, выполнять задачи и принимать обоснованные решения с помощью внешних инструментов.

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

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