Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -8,60 +8,54 @@ model_name = "ai-forever/rugpt3small_based_on_gpt2"
|
|
8 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
9 |
model = AutoModelForCausalLM.from_pretrained(model_name)
|
10 |
|
11 |
-
#
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
-
#
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
question_field = 'input'
|
26 |
-
answer_field = 'output'
|
27 |
-
|
28 |
-
# Функция для создания контекста из датасета
|
29 |
-
def create_context(dataset, num_examples=3):
|
30 |
-
if dataset is None:
|
31 |
-
return ""
|
32 |
|
33 |
-
|
34 |
-
examples = []
|
35 |
-
for example in dataset['train'].select(range(num_examples)):
|
36 |
-
# Используем определенные поля или альтернативные варианты
|
37 |
-
question = example.get(question_field) or example.get('text') or example.get('message')
|
38 |
-
answer = example.get(answer_field) or example.get('response') or example.get('content')
|
39 |
-
|
40 |
-
if question and answer:
|
41 |
-
examples.append(f"Вопрос: {question}\nОтвет: {answer}")
|
42 |
-
|
43 |
-
return "\n\n".join(examples) if examples else ""
|
44 |
-
except Exception as e:
|
45 |
-
print(f"Ошибка при создании контекста: {e}")
|
46 |
-
return ""
|
47 |
-
|
48 |
-
# Создаем контекст
|
49 |
-
context_examples = create_context(bank_dataset)
|
50 |
-
print("Созданный контекст:\n", context_examples)
|
51 |
|
52 |
-
# Функция генерации ответа
|
53 |
def generate_response(prompt):
|
54 |
-
#
|
55 |
-
|
56 |
-
full_prompt = f"""Контекст банковских вопросов:
|
57 |
-
{context_examples}
|
58 |
-
|
59 |
-
Вопрос клиента: {prompt}
|
60 |
-
Ответ:"""
|
61 |
-
else:
|
62 |
-
full_prompt = f"Вопрос клиента: {prompt}\nОтвет:"
|
63 |
-
|
64 |
-
inputs = tokenizer(full_prompt, return_tensors="pt", truncation=True, max_length=512)
|
65 |
|
66 |
with torch.no_grad():
|
67 |
outputs = model.generate(
|
@@ -79,33 +73,27 @@ def generate_response(prompt):
|
|
79 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
80 |
|
81 |
# Удаляем промпт из ответа
|
82 |
-
if response.startswith(
|
83 |
-
response = response[len(
|
84 |
|
85 |
-
#
|
86 |
-
|
87 |
-
if not response.endswith((".", "!", "?")):
|
88 |
-
response += "."
|
89 |
|
90 |
-
return
|
91 |
-
|
92 |
-
# Примеры вопросов
|
93 |
-
examples = [
|
94 |
-
"Как восстановить утерянную карту?",
|
95 |
-
"Какие документы нужны для открытия счета?",
|
96 |
-
"Как проверить баланс карты?",
|
97 |
-
"Как оформить кредитную карту?",
|
98 |
-
"Какие комиссии за перевод между счетами?"
|
99 |
-
]
|
100 |
|
101 |
# Интерфейс Gradio
|
102 |
demo = gr.Interface(
|
103 |
fn=generate_response,
|
104 |
inputs=gr.Textbox(lines=4, label="Введите вопрос по клиентским обращениям в банк"),
|
105 |
outputs=gr.Textbox(label="Ответ модели"),
|
106 |
-
title="Анализ клиентских обращений —
|
107 |
-
description="
|
108 |
-
examples=
|
|
|
|
|
|
|
|
|
|
|
109 |
)
|
110 |
|
111 |
if __name__ == "__main__":
|
|
|
8 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
9 |
model = AutoModelForCausalLM.from_pretrained(model_name)
|
10 |
|
11 |
+
# Дополнительные знания о банковских услугах
|
12 |
+
BANK_KNOWLEDGE = {
|
13 |
+
"Как проверить баланс карты?": [
|
14 |
+
"1. Через мобильное приложение банка (раздел 'Карты' → 'Баланс')",
|
15 |
+
"2. В интернет-банке (в личном кабинете выберите карту)",
|
16 |
+
"3. По SMS (отправьте BALANCE на номер 900)",
|
17 |
+
"4. В банкомате (вставьте карту и выберите 'Запрос баланса')",
|
18 |
+
"5. По телефону горячей линии (8-800-100-00-00)"
|
19 |
+
],
|
20 |
+
"Как восстановить утерянную карту?": [
|
21 |
+
"1. Немедленно позвоните в банк по телефону 8-800-100-00-00 для блокировки карты",
|
22 |
+
"2. Обратитесь в отделение банка с паспортом",
|
23 |
+
"3. Заполните заявление на перевыпуск карты",
|
24 |
+
"4. Новая карта будет готова через 3-5 рабочих дней"
|
25 |
+
]
|
26 |
+
}
|
27 |
+
|
28 |
+
def enhance_response(question, generated_response):
|
29 |
+
# Если вопрос есть в наших знаниях, возвращаем структурированный ответ
|
30 |
+
if question in BANK_KNOWLEDGE:
|
31 |
+
return "\n".join(BANK_KNOWLEDGE[question])
|
32 |
|
33 |
+
# Улучшаем стандартные ответы модели
|
34 |
+
improvements = {
|
35 |
+
"баланс": "Вы можете проверить баланс карты:\n"
|
36 |
+
"1. В мобильном приложении\n"
|
37 |
+
"2. Через интернет-банк\n"
|
38 |
+
"3. В банкомате\n"
|
39 |
+
"4. По телефону горячей линии 8-800-100-00-00",
|
40 |
+
"кредит": "По вопросам кредитования вы можете:\n"
|
41 |
+
"1. Оставить заявку на сайте\n"
|
42 |
+
"2. Обратиться в отделение банка\n"
|
43 |
+
"3. Позвонить по телефону 8-800-100-00-00",
|
44 |
+
"карт": "По вопросам банковских карт:\n"
|
45 |
+
"1. Обратитесь в отделение банка\n"
|
46 |
+
"2. Позвоните на горячую линию\n"
|
47 |
+
"3. Используйте чат в мобильном приложении"
|
48 |
+
}
|
49 |
|
50 |
+
for keyword, improved_answer in improvements.items():
|
51 |
+
if keyword in question.lower():
|
52 |
+
return improved_answer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
|
54 |
+
return generated_response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
|
|
56 |
def generate_response(prompt):
|
57 |
+
# Генерируем ответ с помощью модели
|
58 |
+
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
with torch.no_grad():
|
61 |
outputs = model.generate(
|
|
|
73 |
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
|
74 |
|
75 |
# Удаляем промпт из ответа
|
76 |
+
if response.startswith(prompt):
|
77 |
+
response = response[len(prompt):].strip()
|
78 |
|
79 |
+
# Улучшаем ответ
|
80 |
+
enhanced_response = enhance_response(prompt, response)
|
|
|
|
|
81 |
|
82 |
+
return enhanced_response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
# Интерфейс Gradio
|
85 |
demo = gr.Interface(
|
86 |
fn=generate_response,
|
87 |
inputs=gr.Textbox(lines=4, label="Введите вопрос по клиентским обращениям в банк"),
|
88 |
outputs=gr.Textbox(label="Ответ модели"),
|
89 |
+
title="Анализ клиентских обращений — Alpha Bank Assistant",
|
90 |
+
description="Получите точные ответы на вопросы о банковских услугах",
|
91 |
+
examples=[
|
92 |
+
"Как проверить баланс карты?",
|
93 |
+
"Как восстановить утерянную карту?",
|
94 |
+
"Как оформить кредитную карту?",
|
95 |
+
"Какие документы нужны для открытия счета?"
|
96 |
+
]
|
97 |
)
|
98 |
|
99 |
if __name__ == "__main__":
|