nav-img
Evolution

Отправить серию запросов в режиме чата

В статье рассмотрена задача создания уникальных заголовков для разных целевых аудиторий с оптимизацией:

  • Инициализирован чат, начиная с системного промпта;

  • последовательно добавлены сообщения пользователя и ответы модели;

  • каждый новый запрос отправляется с обновленной историей сообщений.

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

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

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

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

import requests
import os
import json
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'
}

Где:

  • 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 = audience
def 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 None
def generate_initial(self):
"""Initial generation of headlines"""
result = self.send_request()
if not result:
return False
print(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 False
reply = 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 chat
chat = MarketingChat(audience)
# Stage 1: Primary generation
initial_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: Optimization
optimized = 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))