Spaces:
Sleeping
Sleeping
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()
|