Отправить серию запросов в режиме чата
В статье рассмотрена задача создания уникальных заголовков для разных целевых аудиторий с оптимизацией:
Инициализирован чат, начиная с системного промпта;
последовательно добавлены сообщения пользователя и ответы модели;
каждый новый запрос отправляется с обновленной историей сообщений.
Перед началом работы
Скопируйте ID проекта, в котором регистрировались.
Шаг 1. Инициализируйте клиент
import requestsimport osimport jsonproject_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'}
Где:
your_token — Bearer-токен доступа, полученный при отправке запроса на авторизацию.
your_project_id — скопированный в интерфейсе ID проекта.
Шаг 2. Напишите класс-обертку для генерации и доспрашивания
На этом шаге логика работы представляется в виде класса MarketingChat, который управляет историей диалога, отправкой запросов, парсингом ответов и последовательностью вызовов.
class MarketingChat:def __init__(self, audience):self.history = [{"role": "system","content": """Вы профессиональный копирайтер. Генерируйте и улучшайте рекламные заголовки,сохраняя структуру ответа в JSON: {"headlines": [], "rationale": "..."}"""},{"role": "user","content": f"Целевая аудитория: {audience['name']}\nХарактеристики: {audience['details']}"}]self.audience = audiencedef send_request(self, temperature=0.7):"""Sending a request with the current dialog history"""payload = {"model": "meta-llama/Llama-3.3-70B-Instruct","messages": self.history,"temperature": temperature,"response_format": {"type": "json_object"}}try:response = requests.post(url, headers=headers, json=payload)response.raise_for_status()return response.json()except requests.exceptions.RequestException as e:print(f"Ошибка запроса: {str(e)}")return Nonedef generate_initial(self):"""Initial generation of headlines"""result = self.send_request()if not result:return Falseprint(result)reply = result['choices'][0]['message'] #['content']['headlines']print (reply)self.history.append(reply)return json.loads(reply['content'])def optimize_headline(self, index=0):"""Optimizing a specific header"""self.history.append({"role": "user","content": f"Улучши вариант {index+1}, добавив эмоциональную составляющую"})result = self.send_request(temperature=0.5)if not result:return Falsereply = result['choices'][0]['message']self.history.append(reply)return json.loads(reply['content'])
Шаг 3. Решите задачу генерации заголовка с помощью написанного класса
audiences = [{"name": "Молодые родители","details": "Возраст 25-35 лет, интересы: детские товары, образование"}]for audience in audiences:print(f"\n--- Генерация для {audience['name']} ---")# Initializing the chatchat = MarketingChat(audience)# Stage 1: Primary generationinitial_result = chat.generate_initial()if initial_result:print("\nПервоначальные варианты:")for i, h in enumerate(initial_result['headlines'], 1):print(f"{i}. {h}")print(f"Обоснование: {initial_result['rationale']}")# Stage 2: Optimizationoptimized = chat.optimize_headline(0)if optimized:print("\nОптимизированный вариант:")print(f"1. {optimized['headlines']}")print(f"Новое обоснование: {optimized['rationale']}")
Полный код для серии запросов в режиме чата
Что дальше
Экспортируйте всю историю диалога.
print("\nПолная история диалога:")print(json.dumps(chat.history, indent=2, ensure_ascii=False))
Пример вывода
- Перед началом работы
- Шаг 1. Инициализируйте клиент
- Шаг 2. Напишите класс-обертку для генерации и доспрашивания
- Шаг 3. Решите задачу генерации заголовка с помощью написанного класса
- Что дальше