File size: 4,777 Bytes
57645e8
7882653
57878bd
af5aa20
bd826f0
7882653
90cd180
 
 
884ac0c
d0ca3ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7882653
d0ca3ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7882653
d0ca3ae
 
 
7882653
d0ca3ae
af5aa20
90cd180
d0ca3ae
 
af5aa20
90cd180
 
 
 
b87b483
90cd180
 
 
af5aa20
 
 
fdefd2f
af5aa20
90cd180
af5aa20
 
d0ca3ae
 
af5aa20
d0ca3ae
 
af5aa20
d0ca3ae
5dee7eb
7882653
90cd180
 
af5aa20
90cd180
d0ca3ae
 
 
 
 
 
 
 
90cd180
5dee7eb
1e10719
90cd180
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
from datasets import load_dataset

# Загружаем модель и токенизатор
model_name = "ai-forever/rugpt3small_based_on_gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Дополнительные знания о банковских услугах
BANK_KNOWLEDGE = {
    "Как проверить баланс карты?": [
        "1. Через мобильное приложение банка (раздел 'Карты' → 'Баланс')",
        "2. В интернет-банке (в личном кабинете выберите карту)",
        "3. По SMS (отправьте BALANCE на номер 900)",
        "4. В банкомате (вставьте карту и выберите 'Запрос баланса')",
        "5. По телефону горячей линии (8-800-100-00-00)"
    ],
    "Как восстановить утерянную карту?": [
        "1. Немедленно позвоните в банк по телефону 8-800-100-00-00 для блокировки карты",
        "2. Обратитесь в отделение банка с паспортом",
        "3. Заполните заявление на перевыпуск карты",
        "4. Новая карта будет готова через 3-5 рабочих дней"
    ]
}

def enhance_response(question, generated_response):
    # Если вопрос есть в наших знаниях, возвращаем структурированный ответ
    if question in BANK_KNOWLEDGE:
        return "\n".join(BANK_KNOWLEDGE[question])
    
    # Улучшаем стандартные ответы модели
    improvements = {
        "баланс": "Вы можете проверить баланс карты:\n"
                 "1. В мобильном приложении\n"
                 "2. Через интернет-банк\n"
                 "3. В банкомате\n"
                 "4. По телефону горячей линии 8-800-100-00-00",
        "кредит": "По вопросам кредитования вы можете:\n"
                 "1. Оставить заявку на сайте\n"
                 "2. Обратиться в отделение банка\n"
                 "3. Позвонить по телефону 8-800-100-00-00",
        "карт": "По вопросам банковских карт:\n"
               "1. Обратитесь в отделение банка\n"
               "2. Позвоните на горячую линию\n"
               "3. Используйте чат в мобильном приложении"
    }
    
    for keyword, improved_answer in improvements.items():
        if keyword in question.lower():
            return improved_answer
    
    return generated_response

def generate_response(prompt):
    # Генерируем ответ с помощью модели
    inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=512)
    
    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=150,
            do_sample=True,
            temperature=0.7,
            top_k=50,
            top_p=0.95,
            eos_token_id=tokenizer.eos_token_id,
            no_repeat_ngram_size=3,
            early_stopping=True
        )
    
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    
    # Удаляем промпт из ответа
    if response.startswith(prompt):
        response = response[len(prompt):].strip()
    
    # Улучшаем ответ
    enhanced_response = enhance_response(prompt, response)
    
    return enhanced_response

# Интерфейс Gradio
demo = gr.Interface(
    fn=generate_response,
    inputs=gr.Textbox(lines=4, label="Введите вопрос по клиентским обращениям в банк"),
    outputs=gr.Textbox(label="Ответ модели"),
    title="Анализ клиентских обращений — Alpha Bank Assistant",
    description="Получите точные ответы на вопросы о банковских услугах",
    examples=[
        "Как проверить баланс карты?",
        "Как восстановить утерянную карту?",
        "Как оформить кредитную карту?",
        "Какие документы нужны для открытия счета?"
    ]
)

if __name__ == "__main__":
    demo.launch()