Evolution
Тема интерфейса

Отправить асинхронный запрос

Эта статья полезна?

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

Для отправки запроса в асинхронном режиме:

  1. Скачайте тестовый набор отзывов или используйте свой датасет.

    Тестовый набор отзывов представлен в виде CSV-файла и состоит из одной колонки с заголовком text.

  2. Сохраните сгенерированный API-ключ в переменную окружения API_KEY.

  3. Установите библиотеку OpenAI:

    pip install openai
  4. Инициализируйте асинхронного клиента OpenAI и загрузите данные из CSV-файла:

    import asyncio
    import csv
    import os
    from openai import AsyncOpenAI
    api_key = os.environ["API_KEY"]
    async_client = AsyncOpenAI(
    base_url="https://foundation-models.api.cloud.ru/v1",
    api_key=api_key
    )
    reviews_to_process = []
    file_path = "test_reviews.csv"
    with open(file_path, 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
    reviews_to_process.append(row['text'])
    reviews_to_process = reviews_to_process[:10]
  5. Задайте промпт:

    def create_prompt(review_text):
    return (f"Проанализируй отзыв: '{review_text}'. "
    "Выдели основные темы и определи тональность. "
    "Тональность выведи одним словом: 'Положительная', 'Нейтральная', 'Отрицательная'. "
    "При выделении тем возвращай только темы без описания почему ты ее выбрал."
    "Нумеруй темы по порядку и выводи с новой строки.")
    prompts = [create_prompt(review_text) for review_text in reviews_to_process]
  6. Выполните асинхронную обработку отзывов:

    async def analyze_review(prompt, semaphore):
    async with semaphore:
    try:
    response = await async_client.chat.completions.create(
    model="meta-llama/Llama-3.3-70B-Instruct",
    messages=[{
    "role": "user",
    "content": prompt
    }],
    temperature=0.3
    )
    return response.choices[0].message.content
    except Exception as e:
    print(f"Ошибка при обработке запроса к LLM: {str(e)}")
    return f"Не удалось обработать отзыв из-за ошибки: {e}"
    semaphore = asyncio.Semaphore(3)
    tasks = [analyze_review(prompt, semaphore) for prompt in prompts]
    loop = asyncio.get_event_loop()
    results = loop.run_until_complete(asyncio.gather(*tasks))
  7. Выведите результаты:

    for i, (review_text, result) in enumerate(zip(reviews_to_process, results)):
    print(f"--- Отзыв {i+1} ---")
    print(f"Текст: {review_text}")
    print(f"Анализ: \n{result}\n")

    Пример вывода:

    --- Отзыв 1 ---
    Текст: Все понравилось: упаковка на высоте. Рекомендую к покупке! Размер не соответствует.
    Анализ:
    1. Упаковка
    2. Рекомендация
    3. Размер
    Тональность: Нейтральная
    --- Отзыв 2 ---
    Текст: Никогда больше не буду покупать здесь! Ужасное качество. Деньги на ветер.
    Анализ:
    4. Качество
    5. Ценность за деньги
    Тональность: Отрицательная
    --- Отзыв 3 ---
    Текст: Прекрасный товар! Отличное качество. Очень доволен покупкой. Обязательно буду заказывать еще.
    Анализ:
    6. Качество товара
    7. Удовлетворенность покупкой
    8. Намерение сделать повторный заказ
    Тональность: Положительная

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