SimrusDenuvo commited on
Commit
cafcd4f
·
verified ·
1 Parent(s): d0fb32c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -34
app.py CHANGED
@@ -3,25 +3,21 @@ import time
3
  from transformers import pipeline
4
  from datasets import load_dataset
5
 
6
- # Загружаем датасет
7
- dataset = load_dataset("Romjiik/Russian_bank_reviews", split="train")
 
 
 
8
 
9
- # Примеры для few-shot (без 'rating')
10
- few_shot_examples = []
11
- for row in dataset.select(range(2)):
12
- review = row["review"]
13
- ex = f"Клиент: {review}\nОтвет: Спасибо за обращение! Уточните, пожалуйста, детали ситуации, чтобы мы могли помочь."
14
- few_shot_examples.append(ex)
15
-
16
- # Системные инструкции
17
  cot_instruction = (
18
- "Ты — вежливый банковский помощник. Клиент описывает проблему. "
19
- "Сначала проанализируй её шаг за шагом, потом сформулируй итоговый ответ."
 
20
  )
21
 
22
  simple_instruction = (
23
- "Ты — вежливый банковский помощник. Отвечай кратко и официально, без лишних деталей. "
24
- "Не используй рассуждение, просто дай понятный клиенту ответ."
25
  )
26
 
27
  # Модели
@@ -31,41 +27,40 @@ models = {
31
  "ruGPT3-small": pipeline("text-generation", model="ai-forever/rugpt3small_based_on_gpt2", tokenizer="ai-forever/rugpt3small_based_on_gpt2", device=-1),
32
  }
33
 
34
- # Промпт CoT
35
  def build_cot_prompt(user_input):
36
  examples = "\n\n".join(few_shot_examples)
37
- return (
38
- f"{cot_instruction}\n\n{examples}\n\nКлиент: {user_input}\n"
39
- "Рассуждение и ответ:"
40
- )
41
 
42
- # Промпт простой
43
  def build_simple_prompt(user_input):
44
  examples = "\n\n".join(few_shot_examples)
45
- return (
46
- f"{simple_instruction}\n\n{examples}\n\nКлиент: {user_input}\n"
47
- "Ответ:"
48
- )
49
 
50
- # Генерация ответов по двум промптам
 
 
 
 
 
51
 
 
52
  def generate_dual_answers(user_input):
53
  results = {}
54
  prompt_cot = build_cot_prompt(user_input)
55
  prompt_simple = build_simple_prompt(user_input)
56
 
57
  for name, pipe in models.items():
58
- # CoT
59
  start_cot = time.time()
60
- out_cot = pipe(prompt_cot, max_new_tokens=100, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
61
  end_cot = round(time.time() - start_cot, 2)
62
- answer_cot = out_cot.strip().split('\n')[-1]
63
 
64
- # Simple
65
  start_simple = time.time()
66
- out_simple = pipe(prompt_simple, max_new_tokens=100, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
67
  end_simple = round(time.time() - start_simple, 2)
68
- answer_simple = out_simple.strip().split('\n')[-1]
69
 
70
  results[name] = {
71
  "cot_answer": answer_cot,
@@ -85,9 +80,9 @@ def generate_dual_answers(user_input):
85
 
86
  # Интерфейс Gradio
87
  with gr.Blocks() as demo:
88
- gr.Markdown("## 🏦 Банковский помощник (2 промпта: рассуждение + краткий ответ)")
89
 
90
- inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Я не могу попасть в личный кабинет", lines=2)
91
  btn = gr.Button("Сгенерировать")
92
 
93
  gr.Markdown("### ruDialoGPT-small")
@@ -114,4 +109,4 @@ with gr.Blocks() as demo:
114
  cot3, cot3_time, simple3, simple3_time
115
  ])
116
 
117
- demo.launch()
 
3
  from transformers import pipeline
4
  from datasets import load_dataset
5
 
6
+ # Примеры вручную — заменяют шумные выборки из датасета
7
+ few_shot_examples = [
8
+ "Клиент: Я не могу войти в личный кабинет\nОтвет: Пожалуйста, проверьте правильность логина и пароля. Если проблема сохраняется — воспользуйтесь восстановлением доступа или обратитесь в поддержку.",
9
+ "Клиент: Мне пришло смс о входе, которого я не совершал\nОтвет: Это может быть попытка входа третьего лица. Рекомендуем срочно сменить пароль и обратиться в службу поддержки банка."
10
+ ]
11
 
12
+ # Инструкции
 
 
 
 
 
 
 
13
  cot_instruction = (
14
+ "Ты — вежливый банковский ассистент. Клиент описывает проблему. "
15
+ "Твоя задача сначала шаг за шагом проанализировать суть запроса, а затем дать полезный и точный ответ. "
16
+ "Если информации недостаточно — запроси уточнение. Не выдумывай факты."
17
  )
18
 
19
  simple_instruction = (
20
+ "Ты — банковский помощник. Отвечай кратко и понятно. Не используй лишние детали."
 
21
  )
22
 
23
  # Модели
 
27
  "ruGPT3-small": pipeline("text-generation", model="ai-forever/rugpt3small_based_on_gpt2", tokenizer="ai-forever/rugpt3small_based_on_gpt2", device=-1),
28
  }
29
 
30
+ # Формирование промптов
31
  def build_cot_prompt(user_input):
32
  examples = "\n\n".join(few_shot_examples)
33
+ return f"{cot_instruction}\n\n{examples}\n\nКлиент: {user_input}\nРассуждение и ответ:"
 
 
 
34
 
 
35
  def build_simple_prompt(user_input):
36
  examples = "\n\n".join(few_shot_examples)
37
+ return f"{simple_instruction}\n\n{examples}\n\nКлиент: {user_input}\nОтвет:"
 
 
 
38
 
39
+ # Функция извлечения финального ответа
40
+ def extract_final_answer(generated_text):
41
+ for line in generated_text.split('\n'):
42
+ if "Ответ:" in line:
43
+ return line.split("Ответ:")[-1].strip()
44
+ return generated_text.strip().split('\n')[-1]
45
 
46
+ # Генерация по обоим промптам
47
  def generate_dual_answers(user_input):
48
  results = {}
49
  prompt_cot = build_cot_prompt(user_input)
50
  prompt_simple = build_simple_prompt(user_input)
51
 
52
  for name, pipe in models.items():
53
+ # CoT ответ
54
  start_cot = time.time()
55
+ out_cot = pipe(prompt_cot, max_new_tokens=80, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
56
  end_cot = round(time.time() - start_cot, 2)
57
+ answer_cot = extract_final_answer(out_cot)
58
 
59
+ # Обычный ответ
60
  start_simple = time.time()
61
+ out_simple = pipe(prompt_simple, max_new_tokens=80, do_sample=True, top_p=0.9, temperature=0.7)[0]["generated_text"]
62
  end_simple = round(time.time() - start_simple, 2)
63
+ answer_simple = extract_final_answer(out_simple)
64
 
65
  results[name] = {
66
  "cot_answer": answer_cot,
 
80
 
81
  # Интерфейс Gradio
82
  with gr.Blocks() as demo:
83
+ gr.Markdown("## 🏦 Банковский помощник: сравнение CoT и обычного ответа")
84
 
85
+ inp = gr.Textbox(label="Вопрос клиента", placeholder="Например: Как перевести деньги на другую карту?", lines=2)
86
  btn = gr.Button("Сгенерировать")
87
 
88
  gr.Markdown("### ruDialoGPT-small")
 
109
  cot3, cot3_time, simple3, simple3_time
110
  ])
111
 
112
+ demo.launch()