Высвободите автономных агентов с лучшими открытыми моделями Qwen-Agent

Исследуйте силу открытых моделей Qwen-Agent и узнайте, как высвободить автономных агентов через вызов функций и создание пользовательских агентов. Откройте для себя влияние квантования на производительность модели для реальных приложений.

24 февраля 2025 г.

party-gif

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

Создание автономных агентов с помощью лучшей открытой весовой модели

Последние и самые передовые открытые языковые модели Alibaba Quen 2 предлагают впечатляющие возможности в широком спектре задач. Эти модели варьируются от 500 миллионов до 72 миллиардов параметров, при этом более крупные модели поддерживают до 128 000 токенов - значительное улучшение по сравнению с ограничением в 8 000 токенов у GPT-3.

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

Чтобы использовать мощь Quen 2, мы можем использовать фреймворк Quen Agent, который предоставляет доступ к встроенному браузерному помощнику, интерпретатору кода и возможность создавать пользовательские помощники. Это позволяет нам создавать автономных агентов, которые могут планировать, выполнять и адаптировать свои действия в зависимости от поставленной задачи.

В этом разделе мы рассмотрим, как использовать Quen Agent для создания пользовательского агента генерации изображений. Агент сможет генерировать изображения на основе ввода пользователя, загружать сгенерированные изображения и даже обновлять свой собственный код, если возникнут какие-либо проблемы. Объединяя мощное понимание языка Quen 2 с возможностями планирования и выполнения Quen Agent, мы можем создавать по-настоящему автономных и способных агентов, которые могут решать широкий спектр задач.

Вызов функций и агенты: понимание различий

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

Вызов функций (использование инструментов):

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

Агенты:

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

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

Начало работы с агентами Qwen: вызов функций и использование агентов

Чтобы начать работу с агентами Qwen, мы будем использовать версию Qwen 2 с 72 миллиардами параметров и запускать ее локально с помощью AMA. Вы также можете использовать их внешний API, но для использования Qwen Agent у нас есть два варианта:

  1. Установите пакет с помощью pip как независимый пакет Python.
  2. Клонируйте репозиторий и выполните локальную установку, если вы хотите использовать последнюю версию в разработке.

Я буду запускать его локально с помощью AMA. Сначала запустите сервер AMA и используйте команду olama Run Qwen 272 billion. Это загрузит AMA и модель, что может занять некоторое время в зависимости от скорости вашего интернета.

Затем создайте виртуальное окружение с помощью conda и активируйте его:

conda create -n qwen python=3.10
conda activate qwen

Теперь установите пакет Qwen Agent с помощью pip:

pip install qwen-agent

Мы начнем с вызова функций. Модель должна выбрать функцию для использования, определить входные данные и передать их в интерпретатор Python. Интерпретатор выполнит функцию, получит ответ и передаст его обратно в LLM.

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

# Создание экземпляра LLM
llm = QwenLLM(base_api="http://localhost:8000/v1", model_name="qwen-2-72b", version="v1")

# Сообщение пользователя
user_message = "Какая сейчас погода в Париже?"

# Определение функции
function_call = {
    "description": "Получить текущую погоду для заданного местоположения",
    "function": "get_weather",
    "arguments": {
        "location": "Paris",
        "unit": "celsius"
    }
}

# Вызов LLM и выполнение функции
response = llm.call_with_function(user_message, [function_call])
print(response)

Это сгенерирует информацию о текущей погоде в Париже и вернет ее в LLM.

Теперь рассмотрим пример использования Qwen Agent. Мы создадим пользовательского агента, который может генерировать изображения и загружать их в локальную папку. Агент будет использовать пользовательский инструмент для генерации изображений и интерпретатор кода для выполнения необходимого кода.

from qwen_agent import Assistant, CodeInterpreter, CustomTool

# Определение пользовательского инструмента для генерации изображений
class MyImageGeneration(CustomTool):
    def __init__(self):
        self.description = "Генерировать изображения на основе ввода пользователя с использованием API Pollinations.AI."

    def run(self, args):
        # Сгенерировать изображение с использованием API
        image_url = generate_image(args["prompt"])
        
        # Загрузить изображение в локальную папку
        download_image(image_url, "images")

        return "Изображение сгенерировано и сохранено в папку 'images'."

# Создание агента
agent = Assistant(
    llm=QwenLLM(base_api="http://localhost:8000/v1", model_name="qwen-2-72b", version="v1"),
    tools=[MyImageGeneration(), CodeInterpreter()]
)

# Попросить агента сгенерировать изображение
agent.run("Создайте изображение ламы в солнечных очках.")

Этот агент будет использовать пользовательский инструмент генерации изображений для создания изображения, загрузит его в папку "images" и вернет результат.

Наконец, рассмотрим влияние квантования на производительность моделей Qwen. Команда Qwen предоставила подробные оценки по метрикам MML, C-Evolve и I-Evolve для различных уровней квантования.

Результаты показывают, что для более крупных моделей (72 миллиарда) разница между 16-битным и 8-битным квантованием не значительна, но 4-битное квантование может оказывать более заметное влияние на производительность. Для более мелких моделей (0,5 миллиарда) различия более выражены, при этом 4-битное квантование показывает снижение средних баллов на 5 пунктов.

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

Влияние квантования на производительность больших языковых моделей

В этом разделе мы рассмотрим влияние квантования на производительность больших языковых моделей, уделяя особое внимание моделям Quin 2.

Команда Quin рассмотрела вопрос влияния квантования в своих обновленных моделях. Они оценили производительность моделей Quin 2 с различными уровнями квантования, включая 16-битное с плавающей запятой, 8-битное, 4-битное квантование и AWQ (Adaptive Weight Quantization).

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

  1. Более крупные модели: Для более крупной модели с 72 миллиардами параметров разница в производительности между 16-битным и 8-битным квантованием не значительна, при этом сохраняется около 81% от первоначальной производительности. Однако 4-битное квантование показывает более заметное снижение производительности.

  2. Более мелкие модели: Для более мелких моделей, таких как версия с 0,5 миллиардами параметров, влияние квантования более драматично. 4-битное квантование показывает 5-балльную разницу в среднем счете по сравнению с исходной 16-битной версией с плавающей запятой.

Основной вывод заключается в том, что влияние квантования более выражено на более мелких моделях, в то время как более крупные модели Quin 2 могут сохранять относительно высокую производительность даже при 8-битном квантовании.

При развертывании этих моделей в производстве, как правило, рекомендуется использовать как минимум 8-битное квантование, а при возможности - 16-битное, чтобы избежать значительного ухудшения производительности, особенно для более мелких вариантов моделей.

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

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