MrSimple07 commited on
Commit
be82b2e
·
1 Parent(s): 65c4610

added new prompt + table showing improvement

Browse files
Files changed (1) hide show
  1. app.py +41 -32
app.py CHANGED
@@ -31,7 +31,16 @@ CUSTOM_PROMPT_NEW = """
31
  История чата:
32
  {chat_history}
33
 
34
- ОПРЕДЕЛЕНИЕ ТИПА ЗАДАЧИ:
 
 
 
 
 
 
 
 
 
35
  Проанализируйте запрос пользователя и определите тип задачи:
36
 
37
  1. КРАТКОЕ САММАРИ (ключевые слова: "кратко", "суммировать", "резюме", "основные моменты", "в двух словах"):
@@ -117,20 +126,23 @@ def table_to_document(table_json):
117
  description = table_json.get("table_description", "")
118
  headers = table_json.get("headers", [])
119
 
120
- table_text = f"Таблица {table_json.get('table_number', '')} - {table_json.get('table_title', '')}\n"
121
- table_text += f"Документ: {document_id}\n"
122
- table_text += f"Раздел: {table_json.get('section', '')}\n"
123
- table_text += f"Описание: {description}\n"
 
 
124
 
125
  if headers:
126
- table_text += f"Заголовки: {' | '.join(headers)}\n"
127
 
128
  data = table_json.get("data", [])
129
  if data:
130
- for row in data:
 
131
  if isinstance(row, dict):
132
  row_str = " | ".join([f"{k}: {v}" for k,v in row.items()])
133
- table_text += f"{row_str}\n"
134
 
135
  return Document(text=table_text, metadata=metadata)
136
 
@@ -195,7 +207,6 @@ def download_table_data():
195
 
196
 
197
  def improve_query_with_history(question, chat_history_list):
198
- """Улучшает запрос с учетом истории чата"""
199
  try:
200
  log_message("🔄 Улучшение запроса с учетом истории...")
201
 
@@ -205,22 +216,22 @@ def improve_query_with_history(question, chat_history_list):
205
 
206
  history_context = ""
207
  for i, (user_msg, bot_msg) in enumerate(chat_history_list[-3:], 1):
208
- history_context += f"Сообщение {i}:\nПользователь: {user_msg}\nАссистент: {bot_msg}\n\n"
209
 
210
- improvement_prompt = f"""
211
- Ты помощник для улучшения поисковых запросов. Проанализируй историю чата и текущий вопрос пользователя.
212
 
213
- История чата:
214
  {history_context}
215
 
216
- Текущий вопрос: {question}
217
-
218
- Если текущий вопрос неполный или ссылается на что-то из истории (например, "что это значит?", "а это что?", "объясните это"),
219
- то создай улучшенный запрос, который включает контекст из истории.
220
 
221
- Если вопрос самодостаточный, верни его без изменений.
 
 
 
 
222
 
223
- Улучшенный запрос:"""
224
 
225
  from llama_index.llms.google_genai import GoogleGenAI
226
  llm = GoogleGenAI(model="gemini-2.0-flash", api_key=GOOGLE_API_KEY)
@@ -315,15 +326,6 @@ def answer_question(question, history):
315
  bot_response = llm.complete(russian_prompt).text.strip()
316
  log_message(f"🔄 Исправленный ответ на русском: {bot_response[:100]}...")
317
 
318
- # Добавляем информацию о документе если есть метаданные
319
- if retrieved_nodes and hasattr(retrieved_nodes[0], 'metadata'):
320
- metadata = retrieved_nodes[0].metadata
321
- document_id = metadata.get('document_id', '')
322
- if document_id and document_id != 'unknown':
323
- if not bot_response.endswith('.'):
324
- bot_response += '.'
325
- bot_response += f"\n\nПодробнее об этом можно узнать в документе {document_id}."
326
-
327
  # Обновляем историю чата
328
  chat_history.append((question, bot_response))
329
 
@@ -451,6 +453,9 @@ def generate_sources_html(nodes):
451
  unique_docs[doc_id].append(node)
452
 
453
  for doc_id, doc_nodes in unique_docs.items():
 
 
 
454
  file_link = None
455
  if chunks_df is not None and 'file_link' in chunks_df.columns:
456
  doc_rows = chunks_df[chunks_df['document_id'] == doc_id]
@@ -463,10 +468,14 @@ def generate_sources_html(nodes):
463
  if file_link:
464
  html += f"<a href='{file_link}' target='_blank' style='color: #68d391; text-decoration: none; font-size: 14px; display: inline-block; margin-bottom: 10px;'>🔗 Ссылка на документ</a><br>"
465
 
466
- for node in doc_nodes[:3]:
467
- metadata = node.metadata if hasattr(node, 'metadata') else {}
468
- if 'table_number' in metadata:
469
- html += f"<p style='font-size: 12px; color: #a0aec0; margin: 5px 0;'>📊 Таблица {metadata['table_number']}: {metadata.get('table_title', 'Без названия')}</p>"
 
 
 
 
470
 
471
  html += "</div>"
472
 
 
31
  История чата:
32
  {chat_history}
33
 
34
+
35
+ ИНСТРУКЦИИ ПО ОБРАБОТКЕ КОНТЕКСТА:
36
+
37
+ 1. АНАЛИЗ ТАБЛИЧНЫХ ДАННЫХ:
38
+ - Если в контексте есть информация начинающаяся с "Таблица", внимательно изучите её содержимое
39
+ - Извлекайте данные из строк с заголовками и данными таблицы
40
+ - Указывайте номер и название таблицы при ответе
41
+ - Структурируйте ответ на основе табличных данных
42
+
43
+ 2. ОПРЕДЕЛЕНИЕ ТИПА ЗАДАЧИ:
44
  Проанализируйте запрос пользователя и определите тип задачи:
45
 
46
  1. КРАТКОЕ САММАРИ (ключевые слова: "кратко", "суммировать", "резюме", "основные моменты", "в двух словах"):
 
126
  description = table_json.get("table_description", "")
127
  headers = table_json.get("headers", [])
128
 
129
+ table_text = f"ТАБЛИЦА: {table_json.get('table_number', '')} - {table_json.get('table_title', '')}\n"
130
+ table_text += f"ДОКУМЕНТ: {document_id}\n"
131
+ table_text += f"РАЗДЕЛ: {table_json.get('section', '')}\n"
132
+
133
+ if description:
134
+ table_text += f"ОПИСАНИЕ: {description}\n"
135
 
136
  if headers:
137
+ table_text += f"ЗАГОЛОВКИ ТАБЛИЦЫ: {' | '.join(headers)}\n"
138
 
139
  data = table_json.get("data", [])
140
  if data:
141
+ table_text += "ДАННЫЕ ТАБЛИЦЫ:\n"
142
+ for i, row in enumerate(data):
143
  if isinstance(row, dict):
144
  row_str = " | ".join([f"{k}: {v}" for k,v in row.items()])
145
+ table_text += f"Строка {i+1}: {row_str}\n"
146
 
147
  return Document(text=table_text, metadata=metadata)
148
 
 
207
 
208
 
209
  def improve_query_with_history(question, chat_history_list):
 
210
  try:
211
  log_message("🔄 Улучшение запроса с учетом истории...")
212
 
 
216
 
217
  history_context = ""
218
  for i, (user_msg, bot_msg) in enumerate(chat_history_list[-3:], 1):
219
+ history_context += f"Вопрос {i}: {user_msg}\nОтвет {i}: {bot_msg[:200]}...\n\n"
220
 
221
+ improvement_prompt = f"""Проанализируй историю диалога и улучши текущий запрос пользователя.
 
222
 
223
+ ИСТОРИЯ ДИАЛОГА:
224
  {history_context}
225
 
226
+ ТЕКУЩИЙ ЗАПРОС: {question}
 
 
 
227
 
228
+ ПРАВИЛА:
229
+ 1. Если запрос неполный или ссылается на предыдущий контекст (например: "что это", "о чем это", "объясни это"), дополни его информацией из истории
230
+ 2. Если запрос самодостаточный, верни его без изменений
231
+ 3. Сохраняй ключевые термины и названия документов из истории
232
+ 4. Отвечай только улучшенным запросом без дополнительных пояснений
233
 
234
+ УЛУЧШЕННЫЙ ЗАПРОС:"""
235
 
236
  from llama_index.llms.google_genai import GoogleGenAI
237
  llm = GoogleGenAI(model="gemini-2.0-flash", api_key=GOOGLE_API_KEY)
 
326
  bot_response = llm.complete(russian_prompt).text.strip()
327
  log_message(f"🔄 Исправленный ответ на русском: {bot_response[:100]}...")
328
 
 
 
 
 
 
 
 
 
 
329
  # Обновляем историю чата
330
  chat_history.append((question, bot_response))
331
 
 
453
  unique_docs[doc_id].append(node)
454
 
455
  for doc_id, doc_nodes in unique_docs.items():
456
+ if doc_id == 'unknown' or doc_id == 'Раздел документа':
457
+ continue
458
+
459
  file_link = None
460
  if chunks_df is not None and 'file_link' in chunks_df.columns:
461
  doc_rows = chunks_df[chunks_df['document_id'] == doc_id]
 
468
  if file_link:
469
  html += f"<a href='{file_link}' target='_blank' style='color: #68d391; text-decoration: none; font-size: 14px; display: inline-block; margin-bottom: 10px;'>🔗 Ссылка на документ</a><br>"
470
 
471
+ table_nodes = [node for node in doc_nodes if 'table_number' in node.metadata]
472
+ if table_nodes:
473
+ for node in table_nodes[:3]:
474
+ metadata = node.metadata
475
+ table_num = metadata.get('table_number', '')
476
+ table_title = metadata.get('table_title', 'Без названия')
477
+ if table_num and table_title != 'Без названия':
478
+ html += f"<p style='font-size: 12px; color: #a0aec0; margin: 5px 0;'>📊 {table_num}: {table_title}</p>"
479
 
480
  html += "</div>"
481