nav-img
Evolution

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

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

Перед началом работы

  1. Аутентифицируйтесь в API.

  2. Скопируйте ID проекта, в котором регистрировались.

  3. (Опционально) Скачайте тестовый набор отзывов или используйте свой датасет.

Шаг 1. Инициализируйте клиент и загрузите данные

import requests
from concurrent.futures import ThreadPoolExecutor
import os
import csv
project_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 CSV
reviews = []
with open('test_reviews.csv', 'r', encoding='utf-8') as f: # Check the path to test_reviews.csv
reader = 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. Соотношение цены и качества (деньги на ветер).
**Тональность:**
Негативная.