Как использовать AutoGen, не полагаясь на OpenAI или LM Studio?

Как максимально эффективно использовать AutoGen без зависимости от OpenAI или LM Studio?

Введение

Готовы создать свою команду искусственного интеллекта без использования OpenAI и LM Studio? Больше не нужно разоряться или скачивать приложения. От настройки llama-cpp-python до изучения возможностей локальных LLM с помощью фреймворка autogen. Готовьтесь разблокировать полный потенциал Autogen, не завися от OpenAI API.

Цели обучения

Прежде чем мы углубимся в детали, давайте определим основные цели обучения этой статьи:

  • Узнать, как оценивать и сравнивать разные библиотеки и инструменты искусственного интеллекта.
  • Исследуйте, как llama-cpp-python служит заменой для OpenAI API.
  • Примените полученные знания в двух реальных сценариях использования: создание команды менторов по алгоритмам и автоматизация генерации финансовых диаграмм.
  • Исследуйте улучшенный пользовательский опыт AutoGen с мгновенными результатами выполнения кода через интегрированный IPython.

Эта статья была опубликована в рамках Data Science Blogathon.

Познакомьтесь с вашими инструментами: Llama-cpp-python, AutoGen и Local LLMs

Но что такого особенного в этом техническом наборе, вы спросите? Llama-cpp-python – это ваш шлюз к локальному запуску LLM, включая такие известные имена, как LLaMA. Это похоже на то, что у вас на компьютере есть звезды искусственного интеллекта, и благодаря поддержке разных бэкэндов BLAS скорость работы просто поражает!

AutoGen

AutoGen – это единая многоагентная система разговоров, которая является высокоуровневым абстракционным уровнем для использования базовых моделей. Он объединяет способных, настраиваемых и разговорчивых агентов, интегрирующих LLMs, инструменты и участников человека через автоматический чат. Он позволяет агентам общаться и работать вместе автономно, эффективно оптимизируя сложные задачи и автоматизируя рабочие процессы.

Если вы хотите более глубоко изучить возможности AutoGen и исследовать, как он облегчает стратегическое создание команды искусственного интеллекта, обратитесь к нашему специальному блогу: «Стратегическое создание команды искусственного интеллекта с AutoGen.» Этот исчерпывающий ресурс предоставляет практические советы, примеры использования и более подробное рассмотрение того, как AutoGen может изменить ваш подход к разработке искусственного интеллекта.

Библиотеки/Инструменты

Некоторые библиотеки/инструменты предлагают веб-сервер, который заменяет OpenAI API.

Помимо вышеперечисленного, доступны и другие варианты, но лучший выбор зависит от ваших предпочтений и потребностей.

Llama-cpp-python

Llama-cpp-python – это привязка Python к библиотеке llama.cpp. Он предоставляет низкоуровневый доступ к C API через интерфейс ctypes, высокоуровневый API Python для завершения текста, API, подобный OpenAI, и совместимость с LangChain. Он поддерживает несколько бэкэндов BLAS для ускоренной обработки, а также аппаратное ускорение.

llama-cpp-python предлагает веб-сервер, который заменяет OpenAI API. Это позволяет вам использовать совместимые с llama.cpp модели с любым совместимым с OpenAI клиентом (языковыми библиотеками, сервисами и т. д.)

Разработка

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

  • Google Colab
  • Autogen
  • llama-cpp-python
  • Local LLMs
    • codellama-7b-instruct.Q5_K_M.gguf

Настройка среды разработки

Создание виртуальной среды

Виртуальные среды – это хорошая практика для изоляции зависимостей, специфичных для проекта, и предотвращения конфликтов с системными пакетами. Вот как настроить среду Python:

Venv

  python -m venv env_name  
  • Активируйте виртуальную среду:
  \ env_name \ Scripts \ activate  
  • В macOS и Linux:
  source env_name / bin / activate  

Следующая команда деактивирует текущую виртуальную среду venv:

  деактивировать  

Обязательные зависимости

1. Клонирование репозитория

 ! Git clone--recurse-submodules https://github.com/abetlen/llama-cpp-python.git  
  • –recurse-submodules: флаг, указывающий, что должны быть клонированы также субмодули, связанные с репозиторием. Субмодули – это отдельные репозитории Git, встроенные в основной репозиторий.
  • https://github.com/abetlen/llama-cpp-python.git: URL Git-репозитория, который должен быть клонирован.

2. Обновление pip

  pip install--upgrade pip  

3. Изменение каталога на ‘llama-cpp-python’

  % cd llama-cpp-python  

4. Изменение значения генерации токена по умолчанию в репозитории llama-cpp-python

  1. Склонируйте репозиторий “llama-cpp-python” на свой локальный компьютер.
  2. Перейдите в папку “llama-cpp” в склонированном репозитории.
  3. Внутри папки “server” найдите файл с именем “app.py”.
  4. Откройте “app.py” и прокрутите вниз до строки 490 или найдите “max_tokens_field”.
  5. В разделе “max_tokens_field” найдите строку, выглядящую так:
  max_tokens_field = Field (default = 16, ge = 1, description = "Максимальное количество генерируемых токенов.")  

6. Измените значение по умолчанию с 16 на желаемое значение (например, 4096). Например:

  max_tokens_field = Field (default = 4096, ge = 1, description = "Максимальное количество генерируемых токенов.")  

7. Сохраните изменения в файле “app.py”.

После выполнения этих шагов вы измените значение по умолчанию для “max_tokens_field” в файле “app.py” на 4096 или заданное вами значение.

5. Установка зависимостей

В Google Colab вы обычно работаете в облачной среде с доступом к графическим процессорам NVIDIA. Поэтому для оптимальной производительности рассмотрите возможность использования библиотеки BLAS, совместимой с GPU-ускорением. В случае Google Colab подходящим выбором является cuBLAS, поскольку он оптимизирован для графических процессоров NVIDIA, а инстанции Colab часто поддерживают NVIDIA GPU.

 ! CMAKE_ARGS = "- DLLAMA_CUBLAS = on" FORCE_CMAKE = 1 pip install llama-cpp-python [server]  
  • CMAKE_ARGS = “- DLLAMA_CUBLAS = on”: устанавливает аргумент конфигурации CMake (кросс-платформенного создания) для включения CUBLAS, библиотеки для операций линейной алгебры с поддержкой GPU.
  • FORCE_CMAKE = 1: принудительная конфигурация CMake для обеспечения правильной настройки.
  • pip install llama-cpp-python [server]: устанавливает пакет llama-cpp-python вместе с дополнительными зависимостями, указанными для функциональности сервера.

6. Установка редактируемого пакета

  cd llama-cpp-python! Pip install -e. ! Pip install -e. [server]  
  • cd llama-cpp-python: изменяет текущий рабочий каталог на llama-cpp-python.
  • pip install -e .: устанавливает текущий каталог в качестве редактируемого пакета, позволяя динамически изменять код без переустановки.
  • pip install -e .[server]: аналогично предыдущей команде, но включает дополнительные зависимости, указанные в дополнительных дополнениях [сервер].

7. Измените директорию на ‘llama_cpp/’

cd llama_cpp/Introduction
  •   cd llama_cpp/: Изменяет текущую рабочую директорию на поддиректорию ‘llama_cpp’ внутри проекта

8. Загрузите модель LLM

!wget https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF/resolve/main/codellama-7b-instruct.Q5_K_M.gguf
  • wget: Утилита командной строки для загрузки файлов из Интернета.

9. Запустите сервер в фоновом режиме

  • Batch Size (n_batch): Размер пакета является гиперпараметром, который определяет количество обучающих образцов, обрабатываемых перед обновлением внутренних параметров модели.
  • GPU Layers (n_gpu_layers): Количество слоев, используемых для вычислений на графическом процессоре (GPU), обычно устанавливается на основе объема видеопамяти (VRAM). Можно постепенно увеличивать количество слоев, пока не будет найдена оптимальная настройка. Это может помочь оптимизировать производительность вашей модели, используя вычислительную мощность GPU.
  • Context Size (n_ctx): Размер контекста представляет собой максимальное количество токенов во входной последовательности. Большинство моделей обучаются с размером контекста 2048. Если вам нужно обработать более длинный промпт, вы можете изменить его. Однако рекомендуется не использовать контекст, превышающий предельное значение модели, так как она не была обучена для работы с наборами данных большего размера.
!python -m server --model codellama-7b-instruct.Q5_K_M.gguf --host 127.0.0.1 --n_ctx 2048 --n_batch 128 --n_gpu_layers 35 > server.log 2>&1 &
  • python -m server: Запускает модуль Python с именем server.
  • –model codellama-7b-instruct.Q5_K_M.gguf: Указывает путь до загруженного файла модели.
  • –host 127.0.0.1: Устанавливает IP-адрес хоста на 127.0.0.1 (localhost).
  • –n_ctx 2048: Конфигурирует размер контекста на 2048.
  • –n_batch 128: Устанавливает размер пакета на 128.
  • –n_gpu_layers 35: Указывает количество слоев GPU, равное 35.
  • > server.log 2>&1 &: Перенаправляет стандартный вывод и ошибки в файл с именем server.log и запускает процесс в фоновом режиме.

Эти команды в совокупности настраивают пакет ‘llama-cpp-python’, конфигурируют его с определенными параметрами, устанавливают дополнительные зависимости для функциональности сервера и запускают сервер с предварительно обученной моделью. По дополнительной информации обращайтесь к официальной документации.

Кодирование

Сценарий использования 1: Создайте команду «Algorithm Mentor»

Этот фрагмент кода демонстрирует создание агентов с использованием библиотеки “autogen” в сценарии, где студент ищет руководство от ментора по кодированию и эксперта по алгоритмам для реализации алгоритмов сортировки на Python.

Вот разбор кода:

1. Импортирование модуля autogen:

import autogen

Это импортирует необходимую функциональность из библиотеки “autogen”.

2. Определение конфигурации агента:

config_list = [    {        "model": "codellama-7b-instruct.Q5_K_M.gguf",        "api_base": "http://127.0.0.1:8000/v1",        "api_type": "open_ai",        "api_key": "NULL",  # Заполнитель    }]

Это настраивает список конфигураций, указывающих детали, такие как используемая модель, базовый URL API, тип API и ключ API (который в данном случае является заполнителем).

3. Создайте агентов с разными ролями и конфигурациями:

coding_mentor = autogen.AssistantAgent(    name="CodingMentor",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="Здесь Coding Mentor! Я могу помочь вам с реализацией алгоритмов сортировки на Python.",)

Это создает агента с именем CodingMentor со специальной конфигурацией для модели языка (llm_config), включая детали, такие как seed, список конфигурации модели, температура и время ожидания запроса.

algorithm_expert = autogen.AssistantAgent(    name="AlgorithmExpert",    llm_config={        "seed": 42,        "config_list": config_list,        "temperature": 0.7,        "request_timeout": 1200,    },    system_message="Algorithm Expert. Я специализируюсь на алгоритмах. Давайте вместе поработаем над реализацией алгоритма сортировки.",)

Аналогично, это создает другого агента с именем AlgorithmExpert с аналогичной конфигурацией.

student = autogen.UserProxyAgent(    name="Student",    human_input_mode="ALWAYS",    code_execution_config={"work_dir":"node"},)

Это создает агента-прокси пользователя с именем Student, у которого установлен режим human_input_mode в «ВСЕГДА», что указывает на то, что агент всегда ожидает ввода пользователя.

4. Начните чат между студентом и агентом Coding Mentor:

student.initiate_chat(    coding_mentor,    message="""Я изучаю алгоритмы сортировки на Python и хотел бы получить руководство по их реализации. Можете помочь мне?""",)

Это начинает чат между агентами Student и CodingMentor с начальным сообщением от студента.

Результат

CodingMentor (к chat_manager):

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

  1. Сортировка пузырьком (Bubble Sort): это наиболее простой алгоритм сортировки, который работает путем итерации по массиву и сравнения соседних элементов. Если два элемента находятся в неправильном порядке, они меняются местами, пока не потребуется больше обменов. Алгоритм повторяет этот процесс до тех пор, пока весь массив не будет отсортирован.
  2. Сортировка вставками (Insertion Sort): этот алгоритм работает путем начала с начала массива и сравнения каждого элемента с предшествующим элементом. Если текущий элемент меньше предшествующего, он перемещается на одну позицию назад в массиве, пока не найдет более большой элемент. Затем он вставляет текущий элемент в правильное положение.
  3. Сортировка выбором (Selection Sort): этот алгоритм работает путем выбора наименьшего элемента из неотсортированной части массива и размещает его в начале отсортированной части. Затем он повторяет этот процесс для оставшихся элементов в неотсортированной части до тех пор, пока массив не будет отсортирован.
  4. Сортировка слиянием (Merge Sort): этот алгоритм работает путем разделения массива на две половины, рекурсивной сортировки каждой половины и объединения двух отсортированных половин обратно. Это более эффективный алгоритм, чем сортировка пузырьком или сортировка вставками, потому что он проходит по массиву не более одного раза.
  5. Быстрая сортировка (Quick Sort): этот алгоритм выбирает опорный элемент из неотсортированной части массива, разделяет массив вокруг этого опорного элемента и затем рекурсивно сортирует две части. Это более эффективный алгоритм, чем сортировка пузырьком или сортировка выбором, потому что он имеет среднюю временную сложность O(n log n).

Сортировка пузырьком (Bubble Sort)

Сортировка пузырьком – это простой алгоритм сортировки, который многократно проходит массив и сравнивает соседние элементы. Если два элемента находятся в неправильном порядке, они меняются местами, пока не потребуется больше обменов. Алгоритм повторяет этот процесс до тех пор, пока весь массив не будет отсортирован.

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

def bubble_sort(arr):n = len(arr)for i in range(n-1):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr

Сортировка вставками (Insertion Sort)

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

Вот пример реализации сортировки вставками на Python:

def insertion_sort(arr):n = len(arr)for i in range(1, n):key = arr[i]j = i-1while j >= 0 and arr[j] > key:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr

Сортировка выбором

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

Вот пример реализации сортировки выбором на Python:

def selection_sort(arr):n = len(arr)for i in range(n-1):min_idx = ifor j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr

Сортировка слиянием

Сортировка слиянием – это более эффективный алгоритм сортировки, который работает путем разделения массива на две половины, рекурсивной сортировкой каждой половины, а затем слиянием двух отсортированных половин. У него средняя сложность O(n log n).

Вот пример реализации сортировки слиянием на Python:

def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []while len(left) > 0 and len(right) > 0:if left[0] <= right[0]:result.append(left.pop(0))else:result.append(right.pop(0))if len(left) > 0:result += leftif len(right) > 0:result += rightreturn result

Быстрая сортировка

Быстрая сортировка – это более эффективный алгоритм сортировки, который выбирает опорный элемент из неотсортированной части массива, разбивает массив вокруг этого опорного элемента и затем рекурсивно сортирует две части. У него средняя сложность O(n log n).

Вот пример реализации быстрой сортировки на Python:

def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[0]less = [x for x in arr[1:] if x <= pivot]greater = [x for x in arr[1:] if x > pivot]return quick_sort(less) + [pivot] + quick_sort(greater)

Надеюсь, это поможет! Дайте мне знать, если у вас есть вопросы или вам нужны дополнительные пояснения по этим алгоритмам.

Оставьте отзыв для chat_manager. Нажмите Enter, чтобы пропустить и использовать авто-ответ, или введите «exit», чтобы завершить разговор: Можете ли вы дать примеры реального времени?

Студент (для chat_manager):

Можете ли вы дать примеры реального времени?

CodingMentor (для chat_manager):

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

Конечно, вот несколько реальных примеров использования каждого алгоритма сортировки

Сортировка пузырьком

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

Сортировка вставками

Сортировка вставками – это простой алгоритм сортировки, который часто используется как базовый шаг для более сложных алгоритмов, таких как быстрая сортировка и сортировка слиянием. У него сложность O(n^2), что делает его менее эффективным, чем некоторые другие алгоритмы сортировки для больших наборов данных. Один реальный пример использования сортировки вставками – это социальная платформа, где необходимо сортировать пользователей по количеству подписчиков или уровню вовлеченности.

Сортировка выбором

Сортировка выбором – это еще один простой алгоритм сортировки, который легко понять и реализовать, но не очень эффективен для больших наборов данных. Его сложность O(n^2), что делает его менее эффективным, чем некоторые другие алгоритмы сортировки. Один реальный пример использования сортировки выбором – это система управления библиотекой, где необходимо сортировать книги по их заголовкам или авторам.

Сортировка слиянием

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

Быстрая сортировка

Быстрая сортировка является еще одним эффективным алгоритмом сортировки со средней временной сложностью O(n log n). Она широко используется во многих приложениях реального мира, таких как сортировка больших наборов данных, поиск конкретной информации и выполнение других операций, требующих эффективной сортировки. Одним из примеров использования быстрой сортировки является платформа социальных медиа, где необходимо сортировать пользователей по количеству подписчиков или уровню вовлеченности.

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

AlgorithmExpert (для chat_manager)

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

Дополнительные мысли о каждом алгоритме

Вот некоторые дополнительные мысли о каждом из этих алгоритмов:

  • Сортировка пузырьком: Одним из потенциальных недостатков сортировки пузырьком является то, что она не так эффективна, как другие алгоритмы сортировки, например, быстрая сортировка или сортировка слиянием. Это означает, что для больших наборов данных может потребоваться больше времени для завершения сортировки. Однако сортировка пузырьком всё равно является ценным алгоритмом для понимания и изучения в контексте компьютерной науки и программирования. Это простой пример, который помогает разработчикам понять основные концепции алгоритмов сортировки.
  • Сортировка вставками: Одним из потенциальных недостатков сортировки вставками является её временная сложность O(n^2), что означает, что она может быть менее эффективной, чем другие алгоритмы сортировки для больших наборов данных. Однако сортировка вставками всё еще полезна, потому что она является основным строительным блоком для более продвинутых алгоритмов сортировки, таких как быстрая сортировка и сортировка слиянием.
  • Сортировка выбором: Одним из потенциальных недостатков сортировки выбором является ее временная сложность O(n^2), что означает, что она может быть менее эффективной, чем другие алгоритмы сортировки для больших наборов данных. Однако сортировка выбором всё равно является ценным алгоритмом для изучения, потому что она является основным строительным блоком для более продвинутых алгоритмов сортировки, таких как быстрая сортировка и сортировка слиянием.
  • Сортировка слиянием: Одним из потенциальных недостатков сортировки слиянием является ее средняя временная сложность O(n log n), что в целом делает ее более эффективной, чем другие алгоритмы сортировки. Однако сортировка слиянием может быть менее эффективной для больших наборов данных, и она может не являться лучшим выбором для всех сценариев.

Оставьте отзыв chat_manager. Нажмите enter, чтобы пропустить и использовать автоответ, или введите ‘exit’, чтобы завершить разговор: выход.

Вариант использования 2: Автоматизированная генерация графика цен на финансовые акции с помощью AutoGen

Этот вариант использования AutoGen демонстрирует автоматизацию создания графика цен на акции для указанных компаний Amazon(AMZN), Apple(AAPL) и Intel Corporation (INTC) за текущий год. Запросы на акции с помощью пакетов yfinance, matplotlib и pandas для получения цен акций и создания наглядного графика. Агент-помощник инициирует беседу с четким описанием задачи, и ассистент отвечает, генерируя код на Python для выполнения запрошенной задачи. Результат сохраняется в файле “stock_price_ytd.png”. Этот вариант использования демонстрирует плавную интеграцию AutoGen с внешними библиотеками для получения данных, их визуализации и выполнения кода в реальном мире.

Кодирование:

  from autogen import AssistantAgent, UserProxyAgent,oaiconfig_list = [    {        "model": "codellama-7b-instruct.Q5_K_M.gguf",        "api_base": "http://127.0.0.1:8000/v1",        "api_type": "open_ai",        "api_key": "NULL",    }]llm_config = {"config_list": config_list, "seed": 42, "request_timeout": 2028,}# Создание помощникаassistant = AssistantAgent(    name="assistant",    llm_config=llm_config,    system_message="""Инженер. Вы следуете утвержденному плану.     Вы пишете код на Python/shell для решения задач.     Оберните код в блок кода, указывающий тип сценария.     Пользователь не может изменять ваш код. Поэтому не предлагайте неполный     код, который требует изменений. Не используйте блок кода,     если он не предназначен для выполнения исполнителем.    Не включайте несколько блоков кода в один ответ. Не просите     других скопировать и вставить результат. Проверьте результат    выполнения, возвращаемый исполнителем. Если результат     указывает на ошибку, исправьте ошибку и выведите код снова.    Предлагайте полный код вместо частичного кода или изменений в коде. Если    ошибку невозможно исправить или задача не решена даже после успеха    выполнения кода, проанализируйте проблему, пересмотрите свои предположения, соберите     дополнительную информацию, которая вам нужна, и подумайте о другом подходе для решения.""",)# Создание агента-прокси пользователяuser_proxy = UserProxyAgent(    name="user_proxy",    llm_config=llm_config,    code_execution_config={"work_dir": "coding"},)# Запуск разговораuser_proxy.initiate_chat(    assistant,    message="""Построить график изменения цен на акции AMZN, AAPL и INTC за год. Используйте пакеты yfinance, matplotlib, pandas  и сохраните в файл stock_price_ytd.png.""",)

Вывод

пользователь (к ассистенту):

Постройте график изменения цены акций AMZN, AAPL и INTC за текущий год. Используйте пакеты yfinance, matplotlib и pandas и сохраните его в файл stock_price_ytd.png.

——————————————————————————–ассистент (к пользователю):Чтобы построить график изменений цены акций за текущий год (YTD) для Amazon (AMZN), Apple (AAPL) и Intel (INTC), используя пакеты yfinance, matplotlib и pandas в Python, вы можете использовать следующий код:

```pythonimport yfinance as yfimport matplotlib.pyplot as pltimport pandas as pd# Получить цены акций AMZN, AAPL и INTCamzn = yf.download('AMZN', start='2018-01-01')['Close']aapl = yf.download('AAPL', start='2018-01-01')['Close']intc = yf.download('INTC', start='2018-01-01')['Close']# Преобразование цен акций в объект pandas DataFramedata = pd.DataFrame({'AMZN': amzn, 'AAPL': aapl, 'INTC': intc})# Построение графика изменений цены за год с помощью matplotlibplt.plot(data.index, data['AMZN'], label='AMZN')plt.plot(data.index, data['AAPL'], label='AAPL')plt.plot(data.index, data['INTC'], label='INTC')plt.legend()plt.xlabel('Дата')plt.ylabel('Изменение цены (%)')plt.title('Изменение цены акций за год')plt.savefig('stock_price_ytd.png', dpi=300)```

Данный код сначала импортирует необходимые пакеты, затем загружает цены акций AMZN, AAPL и INTC с использованием пакета yfinance. Загруженные данные затем преобразуются в объект pandas DataFrame и выводятся на график с использованием matplotlib. Изменение цены за год отображается в виде линейного графика с датой на оси x и изменением цены в процентах на оси у. Легенда отображается для обозначения акций, представленных каждой линией. Наконец, график сохраняется в файл изображения с именем `stock_price_ytd.png` с помощью метода `savefig()` из библиотеки matplotlib.

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


>>>>>>>> НЕТ ОТВЕТА ПОЛЬЗОВАТЕЛЯ.

>>>>>>>> ИСПОЛЬЗУЕТСЯ АВТОМАТИЧЕСКИЙ ОТВЕТ…

>>>>>>>> ВЫПОЛНЕНИЕ БЛОКА КОДА 0 (установлен язык python)…

ПРЕДУПРЕЖДЕНИЕ:autogen.code_utils:функция execute_code была вызвана без указания значения для use_docker. Поскольку пакет python docker не доступен, код будет выполнен нативно. Обратите внимание: этот запасной вариант поведения может измениться

пользователь (к ассистенту)

Код успешно выполнен. Результаты показывают, что выполнены все три задачи с сообщениями об успешном выполнении каждой задачи. Вывод также показывает, что каждая задача заняла примерно 100% времени ЦП и памяти, доступной для процесса. Это свидетельствует о быстром и эффективном выполнении задач.

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


Оставьте отзыв ассистенту. Нажмите Enter, чтобы пропустить и использовать автоматический ответ, или введите “exit”, чтобы завершить разговор: exit

Давайте отобразим созданный график.

from IPython.display import ImageImage(filename='coding/stock_price_ytd.png')

Примечание: После успешного выполнения этого кода, вы можете найти файл “stock_price_ytd.png” в той же папке, где находится ваш скрипт Python или блокнот Jupyter. Это стандартное поведение функции savefig из библиотеки matplotlib. Если вы хотите сохранить изображение в другой папке, вы можете указать полный путь в функции savefig.

Переключение на среду выполнения IPython

Ранее код выполнялся в отдельном процессе, что не позволяло немедленно отображать график в блокноте. Чтобы исправить это, мы можем изменить среду выполнения кода для использования IPython.

Конечно! Ниже мы иллюстрируем процесс расширения UserProxyAgent для интеграции другой среды выполнения кода, в частности IPython.

1. Импортирование пакетов

from typing import Dict, Unionfrom IPython import get_ipythonimport autogen

2. Определение класса:

class IPythonUserProxyAgent(autogen.UserProxyAgent):

Этот класс наследуется от autogen.UserProxyAgent, что указывает на его расширение или настройку базового класса.3. generate_init_message:

def generate_init_message(self, *args, **kwargs) -> Union[str, Dict]:    return super().generate_init_message(*args, **kwargs) + """Если вы предлагаете код, код будет выполнен в IPython."""

Этот метод генерирует первичное сообщение для отправки агенту-помощнику. Он дополняет заметку, указывающую, что предложения кода будут выполнены в среде IPython.4. run_code:

def run_code(self, code, **kwargs):    result = self._ipython.run_cell("%%capture --no-display cap\n" + code)    log = self._ipython.ev("cap.stdout")    log += self._ipython.ev("cap.stderr")    if result.result is not None:        log += str(result.result)    exitcode = 0 if result.success else 1    if result.error_before_exec is not None:        log += f"\n{result.error_before_exec}"        exitcode = 1    if result.error_in_exec is not None:        log += f"\n{result.error_in_exec}"        exitcode = 1    return exitcode, log, None

Этот метод выполняет предоставленный код в среде выполнения IPython. Он использует метод run_cell для выполнения кода и захвата вывода. Метод создает журнал, содержащий стандартный вывод, стандартную ошибку и дополнительную информацию о выполнении.

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

import autogenipy_user = IPythonUserProxyAgent(    "ipython_user_proxy",    human_input_mode="ALWAYS",    max_consecutive_auto_reply=10,    is_termination_msg=lambda x: x.get(    "content", "").rstrip().endswith(    "TERMINATE") or x.get("content", "").rstrip().endswith('"TERMINATE".'),)# ассистент получает сообщение от пользователя, которое содержит описание задачиipy_user.initiate_chat(    assistant,    message="""plot a stacked area chart     visualizing the yearly high and low      prices of Apple (AAPL), Google      (GOOGL), Amazon (AMZN), and Microsoft (MSFT)    use yfinance,matplotlib,pandas packages    """,)

Этот фрагмент создает экземпляр IPythonUserProxyAgent и начинает чат с помощником, предоставляя сообщение, которое включает описание задачи – построение стопокого графика площади, визуализирующего ежегодные максимальные и минимальные цены на акции Apple (AAPL), Google (GOOGL), Amazon (AMZN) и Microsoft (MSFT) с использованием пакетов yfinance, matplotlib и pandas.

Результат

ipython_user_proxy (к ассистенту)

plot a stacked area chart visualizing the yearly high and low prices ofApple (AAPL), Google (GOOGL), Amazon (AMZN), and Microsoft (MSFT)use yfinance,matplotlib,pandas packages

Если вы предлагаете код, код будет выполнен в IPython.

——————————————————————————–assistant (к ipython_user_proxy)

Вот предложенное решение с использованием библиотек `yfinance` и `matplotlib`:

```import yfinance as yfimport matplotlib.pyplot as pltimport pandas as pd# Получение исторических данных для четырех акцийstocks = ['AAPL', 'GOOGL', 'AMZN', 'MSFT']prices = yf.download(stocks, start='2010-01-01', end='2022-05-31')['Close']# Преобразование в DataFrame и удаление отсутствующих значенийdf = pd.DataFrame(prices)df = df.dropna()# Построение стопокового графика площадиplt.style.use('ggplot')fig, ax = plt.subplots(figsize=(12, 6))ax.stackplot(df.index, df['AAPL'], df['GOOGL'], df['AMZN'], df['MSFT'], labels=stocks)ax.set_xlabel('Дата')ax.set_ylabel('Цена ($)')ax.legend()plt.show()```

Этот код использует библиотеку `yfinance` для загрузки исторических данных о ценах на четыре акции с 1 января 2010 года по 31 мая 2022 года. Затем он преобразует цены в объект DataFrame и удаляет любые отсутствующие значения (например, если акция не торговалась в определенный день). Наконец, он использует `matplotlib` для создания стопки графиков, показывающих годовые максимальные и минимальные цены для каждой акции. В полученном графике присутствует легенда с названиями четырех акций.

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

——————————————————————————–Оставьте отзыв об ассистенте. Нажмите Enter, чтобы пропустить и использовать автоответ, или введите ‘exit’, чтобы завершить разговор:

>>>>>>>> НЕТ ВЗАИМОДЕЙСТВИЯ С ЧЕЛОВЕКОМ.

>>>>>>>> ИСПОЛЬЗОВАНИЕ АВТООТВЕТА…

>>>>>>>> ВЫПОЛНЕНИЕ БЛОКА КОДА 0 (установлен язык Python)…

ipython_user_proxy (к ассистенту): exitcode: 0 (выполнение прошло успешно)

Результат выполнения кода: [*********************100%%**********************] выполнено 4 из 4

——————————————————————————–assistant (к ipython_user_proxy)

Успешное выполнение показывает ваш вывод, выполнение четырех задач с отображением прогресса с помощью полосы прогресса. Задача один завершена на 0%, задача два выполняется (показана на 50% выполнения), задача три также выполняется (отображается на 75% выполнения), и задача четыре завершена на 100%.


Оставьте отзыв об ассистенте. Нажмите Enter, чтобы пропустить и использовать автоответ, или введите ‘exit’, чтобы завершить разговор: exit.

Заключение

В нашем путешествии в мир искусственного интеллекта мы раскрыли магию создания персонализированных команд с помощью llama-cpp-python и совместного потенциала AutoGen. Забудьте очереди и громоздкие счета – с помощью llama-cpp-python и AutoGen вы получите своего искусственного интеллектуального компаньона для программирования. Независимо от того, создаете ли вы мечту о команде алгоритмов или автоматизируете финансовые графики, AutoGen будет героем, который делает программирование крутым. Используйте llama-cpp-python и AutoGen для персонализированных приключений в мире искусственного интеллекта, которые превратятся в шедевры.

Основные моменты

  • Создание персонализированных команд искусственного интеллекта: В блоге представлена концепция создания персонализированных команд искусственного интеллекта без использования внешних сервисов, таких как OpenAI и LM Studio.
  • Сравнение библиотек и инструментов: Разные библиотеки и инструменты для завершения текста и языковой модели.
  • Веб-сервер и локальные LLM: Изучите функциональность веб-сервера Llama-cpp-python, запускайте локальные LLM и размышляйте о аппаратном ускорении в этом исследовании.
  • Окружение выполнения кода IPython: Интеграция IPython в качестве окружения выполнения кода в AutoGen улучшает пользовательский опыт, позволяя немедленно отображать результаты выполнения кода.
  • Показ практического применения: Представлены два примера реального применения, демонстрирующие практическое применение AutoGen в сценариях, таких как создание команды алгоритмических наставников и автоматизация генерации графиков цен финансовых акций. Примеры демонстрируют, как AutoGen обеспечивает безупречное взаимодействие пользователя и искусственного интеллекта для выполнения конкретных задач по программированию.

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

Показанный в этой статье контент не принадлежит Analytics Vidhya и используется по усмотрению автора.