Spaces:
Sleeping
Sleeping
File size: 11,353 Bytes
d05f205 f154467 2ca7cf0 c250f7e edcf6fe b26d94a c250f7e 235357d edcf6fe 2ca7cf0 e15b2e4 2ca7cf0 e15b2e4 2ca7cf0 e15b2e4 2ca7cf0 edcf6fe 2ca7cf0 edcf6fe e15b2e4 edcf6fe 2ca7cf0 edcf6fe 2ca7cf0 edcf6fe 2ca7cf0 edcf6fe 2ca7cf0 7ce2a54 11d46da 5c41f19 593d3df 2ca7cf0 593d3df 2ca7cf0 c9f92f4 2ca7cf0 edcf6fe 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df edcf6fe 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 593d3df 2ca7cf0 1eaf6bf 2ca7cf0 ae090c3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
import os
import gradio as gr
import random
import pandas as pd
from langchain.schema import SystemMessage
from langchain_community.chat_models.gigachat import GigaChat
# Авторизация в GigaChat Pro
gc_key = os.getenv('GPT_KEY')
chat_pro = GigaChat(credentials=gc_key, model='GigaChat-Pro', max_tokens=68, temperature=1, verify_ssl_certs=False)
# Загрузка данных из Excel-файла
try:
data = pd.read_excel('Признаки.xlsx', sheet_name=None)
except Exception as e:
print(f"Ошибка при загрузке Excel-файла: {e}")
data = {}
# Создание списка признаков и их значений
features = {}
for sheet_name, df in data.items():
try:
if sheet_name == "Пол Поколение Психотип":
features[sheet_name] = df.set_index(['Пол', 'Поколение', 'Психотип'])['Инструкция'].to_dict()
else:
features[sheet_name] = df.set_index(df.columns[0]).to_dict()[df.columns[1]]
except Exception as e:
print(f"Ошибка при обработке данных листа {sheet_name}: {e}")
features[sheet_name] = {}
# Вспомогательная функция для добавления префиксов и суффиксов
def add_prefix_suffix(prompt, prefix, suffix):
return f"{prefix}\n{prompt}\n{suffix}"
# Функция генерации стандартного промпта
def generate_standard_prompt(description, advantages, key_message):
prompt = (
f"Сгенерируй смс-сообщение для клиента.\n"
f"Описание предложения: {description}\n"
f"Преимущества: {advantages}\n"
"В тексте смс запрещено использование запрещенных слов, обещаний, приветствий и пр. Убедись, что текст до 250 символов.\n"
)
if key_message.strip():
prompt += f"Ключевое сообщение: {key_message.strip()}"
return prompt.strip()
# Функция генерации персонализированного промпта
def generate_personalization_prompt(standard_message, gender, generation, psychotype, business_stage, industry, opf):
personalization_prompt = (
f"Адаптируй текст с учётом особенностей клиента:\n"
f"Пол: {gender}\nПоколение: {generation}\nПсихотип: {psychotype}\nСтадия бизнеса: {business_stage}\nОтрасль: {industry}\nОПФ: {opf}\n"
f"Текст для адаптации: {standard_message}"
)
return personalization_prompt.strip()
# Функция генерации сообщений с GigaChat Pro
def generate_message_gigachat_pro(prompt):
try:
messages = [SystemMessage(content=prompt)]
res = chat_pro(messages)
return res.content.strip()
except Exception as e:
return f"Ошибка при обращении к GigaChat-Pro: {e}"
# Функция генерации всех сообщений
def generate_all_messages(non_personalized_prompt, personalized_prompt):
prefixes = [
"Начни сообщение с призыва к действию с продуктом.",
"Начни сообщение с указания на пользу продукта. Используй глагол в побудительном наклонении.",
"Начни сообщение с вопроса, который указывает на пользу продукта для клиента."
]
suffixes = [
"Убедись, что готовый текст начинается с призыва к действию с продуктом.",
"Убедись, что готовый текст начинается с указания на пользу продукта и использования глагола в побудительном наклонении.",
"Убедись, что готовый текст начинается с вопроса, который указывает на пользу продукта для клиента."
]
non_personalized_messages = []
personalized_messages = []
# Генерация трех неперсонализированных сообщений
for i in range(3):
prompt = add_prefix_suffix(non_personalized_prompt, prefixes[i], suffixes[i])
message = generate_message_gigachat_pro(prompt)
non_personalized_messages.append(message)
# Генерация трех персонализированных сообщений
for i in range(3):
full_personalized_prompt = f"{personalized_prompt}\n\nТекст для адаптации: {non_personalized_messages[i]}"
prompt = add_prefix_suffix(full_personalized_prompt, prefixes[i], suffixes[i])
message = generate_message_gigachat_pro(prompt)
personalized_messages.append(message)
return non_personalized_messages, personalized_messages
# Функция генерации стандартного и персонализированного промптов
def handle_generation(desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf):
non_personalized_prompt = generate_standard_prompt(desc, benefits, key_message)
personalized_prompt = generate_personalization_prompt(non_personalized_prompt, gender, generation, psychotype, business_stage, industry, opf)
# Генерация сообщений
non_personalized_messages, personalized_messages = generate_all_messages(non_personalized_prompt, personalized_prompt)
# Вернем промпты и сообщения
return non_personalized_prompt, personalized_prompt, non_personalized_messages, personalized_messages
# Функция для смены вкладки
def change_tab(id):
return gr.Tabs(selected=id)
with gr.Blocks() as demo:
with gr.Tabs() as tabs:
# Вкладка 1: Исходные данные
with gr.TabItem("Исходные данные", id=0):
with gr.Row():
with gr.Column():
desc = gr.Textbox(label="Описание предложения", lines=6)
benefits = gr.Textbox(label="Преимущества", lines=5)
key_message = gr.Textbox(label="Ключевое сообщение", lines=5)
with gr.Column():
gender = gr.Dropdown(label="Пол", choices=["Мужчина", "Женщина", "Не указан"])
generation = gr.Dropdown(label="Поколение", choices=["Поколение Z", "Миллениалы", "Поколение X", "Бэби-бумеры"])
psychotype = gr.Textbox(label="Психотип")
business_stage = gr.Textbox(label="Стадия бизнеса")
industry = gr.Textbox(label="Отрасль")
opf = gr.Textbox(label="ОПФ")
# Кнопка "Создать" для генерации промптов и сообщений
btn_to_prompts = gr.Button("Создать")
non_personalized_prompt = gr.Textbox(label="Задание для копирайтера", lines=25, interactive=False)
personalized_prompt = gr.Textbox(label="Задание для редактора", lines=25)
non_personalized_1 = gr.Textbox(label="Стандартное сообщение 1", lines=4, interactive=False)
personalized_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=4, interactive=False)
non_personalized_2 = gr.Textbox(label="Стандартное сообщение 2", lines=4, interactive=False)
personalized_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=4, interactive=False)
non_personalized_3 = gr.Textbox(label="Стандартное сообщение 3", lines=4, interactive=False)
personalized_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=4, interactive=False)
# Привязка кнопки к функции генерации и смены вкладки
btn_to_prompts.click(fn=handle_generation,
inputs=[desc, benefits, key_message, gender, generation, psychotype, business_stage, industry, opf],
outputs=[non_personalized_prompt, personalized_prompt,
non_personalized_1, personalized_1,
non_personalized_2, personalized_2,
non_personalized_3, personalized_3])
btn_to_prompts.click(fn=change_tab, inputs=[gr.Number(value=1)], outputs=tabs)
# Вкладка 2: Промпты
with gr.TabItem("Ассистент", id=1):
with gr.Row():
with gr.Column():
non_personalized_prompt.render()
with gr.Column():
personalized_prompt.render()
# Вкладка 3: Сообщения
with gr.TabItem("Сообщения", id=2):
# Заголовки столбцов
with gr.Row():
gr.Markdown("### Копирайтер")
gr.Markdown("### Редактор")
# Первый ряд
with gr.Row():
non_personalized_1.render()
personalized_1.render()
# Второй ряд
with gr.Row():
non_personalized_2.render()
personalized_2.render()
# Третий ряд
with gr.Row():
non_personalized_3.render()
personalized_3.render()
# Вкладка 4: Проверка
with gr.TabItem("Проверка", id=3):
with gr.Row():
gr.Markdown("### Редактор")
gr.Markdown("### Корректор")
gr.Markdown("### Аналитик")
with gr.Row():
personalized_message_1 = gr.Textbox(label="Персонализированное сообщение 1", lines=5)
check_message_1 = gr.Textbox(label="Проверка сообщения 1", lines=5)
with gr.Row():
personalized_message_2 = gr.Textbox(label="Персонализированное сообщение 2", lines=5)
check_message_2 = gr.Textbox(label="Проверка сообщения 2", lines=5)
with gr.Row():
personalized_message_3 = gr.Textbox(label="Персонализированное сообщение 3", lines=5)
check_message_3 = gr.Textbox(label="Проверка сообщения 3", lines=5)
demo.launch() |