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()