В инструкции описывается, как отправлять запросы к LLM-модели в асинхронном режиме на примере классификации текстовых отзывов по эмоциональной окраске.
Для отправки запроса в асинхронном режиме:
Скачайте тестовый набор отзывов или используйте свой датасет.
Тестовый набор отзывов представлен в виде CSV-файла и состоит из одной колонки с заголовком text.
Сохраните сгенерированный API-ключ в переменную окружения API_KEY.
Установите библиотеку OpenAI:
pip install openaiИнициализируйте асинхронного клиента OpenAI и загрузите данные из CSV-файла:
import asyncioimport csvimport osfrom openai import AsyncOpenAIapi_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]Задайте промпт:
def create_prompt(review_text):return (f"Проанализируй отзыв: '{review_text}'. ""Выдели основные темы и определи тональность. ""Тональность выведи одним словом: 'Положительная', 'Нейтральная', 'Отрицательная'. ""При выделении тем возвращай только темы без описания почему ты ее выбрал.""Нумеруй темы по порядку и выводи с новой строки.")prompts = [create_prompt(review_text) for review_text in reviews_to_process]Выполните асинхронную обработку отзывов:
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.contentexcept 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))Выведите результаты:
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-моделей.