Отправить асинхронный запрос
Статья демонстрирует, как отправлять запросы к LLM-модели в синхронном режиме на примере классификации эмоциональной окраски текстовых отзывов.
Перед началом работы
Скопируйте ID проекта, в котором регистрировались.
(Опционально) Скачайте тестовый набор отзывов или используйте свой датасет.
Шаг 1. Инициализируйте клиент и загрузите данные
import requestsfrom concurrent.futures import ThreadPoolExecutorimport osimport csvproject_id = '<your_project_id>'token = "<your_token>"url = "https://foundation-models.api.cloud.ru/api/gigacube/openai/v1/chat/completions"headers = {'Authorization': f'Bearer {token}','x-project-id': project_id,'Content-Type': 'application/json'}# Loading raw data from CSVreviews = []with open('test_reviews.csv', 'r', encoding='utf-8') as f: # Check the path to test_reviews.csvreader = csv.DictReader(f)for row in reader:reviews.append(row['text'])
Где:
your_token — Bearer-токен доступа, полученный при отправке запроса на авторизацию.
your_project_id — скопированный в интерфейсе ID проекта.
Предполагается, что CSV-файл состоит из одной колонки с заголовком text.
Шаг 2. Задайте промпт
Промпт задается для каждого отзыва.
prompts = [{"model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B","messages": [{"role": "user","content": f"Проанализируй отзыв: '{review}'. Выдели основные темы и определи тональность."}],"temperature": 0.3} for review in reviews[:10]]
Шаг 3. Выполните асинхронную обработку отзывов
Линейное выполнение с явным управлением потоками. Параметр max_workers=3 контролирует максимальное количество одновременных запросов
def process_review(payload):try:response = requests.post(url, json=payload, headers=headers)response.raise_for_status()return response.json()['choices'][0]['message']['content']except Exception as e:print(f"Ошибка: {str(e)}")return None# Параллельное выполнение с ограничением потоковwith ThreadPoolExecutor(max_workers=3) as executor: # Ограничение параллелизмаresults = list(executor.map(process_review, prompts))
Шаг 4. Выведите результаты
for i, (review, result) in enumerate(zip(reviews, results)):print(f"Отзыв {i+1}: {review}")print(f"Анализ: {result}\n")
Получится примерно следующий вывод:
Отзыв 2: Никогда больше не буду покупать здесь! Ужасное качество. Деньги на ветер.Анализ:**Основные темы:**1. Качество товара или услуги.2. Соотношение цены и качества (деньги на ветер).**Тональность:**Негативная.
Полный код асинхронного запроса
- Перед началом работы
- Шаг 1. Инициализируйте клиент и загрузите данные
- Шаг 2. Задайте промпт
- Шаг 3. Выполните асинхронную обработку отзывов
- Шаг 4. Выведите результаты