AnatoliiG commited on
Commit
8db6a28
·
1 Parent(s): c23e8fc

Update callbacks.py

Browse files
Files changed (1) hide show
  1. src/ui/callbacks.py +20 -24
src/ui/callbacks.py CHANGED
@@ -103,47 +103,45 @@ def bot_response(
103
  yield history
104
 
105
  # --- 4. АГЕНТ ПОИСКА (РОУТЕР) ---
106
- search_info = ""
107
  if use_search:
 
108
  history[-1]["content"] = (
109
  file_info + "\n" if file_info else ""
110
  ) + "🤔 Агент анализирует необходимость поиска..."
111
  yield history
112
 
 
 
 
 
 
 
 
 
 
113
  agent_messages = [
114
  {
115
- "role": "system",
116
  "content": (
117
- "Ты строгий системный классификатор. Твоя единственная цель - определить, нужен ли интернет-поиск.\n"
118
- "ПРАВИЛО 1: Если вопрос касается недавних событий, атак, инцидентов, новостей, дат или меняющихся фактов — поиск НУЖЕН ОБЯЗАТЕЛЬНО, даже если ты думаешь, что знаешь ответ.\n"
119
- "ПРАВИЛО 2: Отвечай СТРОГО и ТОЛЬКО в формате JSON. Запрещено использовать теги <think> и писать текст.\n\n"
120
- "Форматсли нужен поиск):\n"
121
- '{"search": true, "query": "оптимальный и короткий поисковый запрос"}\n\n'
122
- "Формат (если это просто болтовня или математика):\n"
123
- '{"search": false, "query": null}'
124
  ),
125
  }
126
  ]
127
 
128
- for msg in history[-3:]:
129
- if msg["role"] == "user":
130
- agent_messages.append({"role": "user", "content": msg["content"]})
131
-
132
  try:
133
  eval_response = engine.generate(
134
  messages=agent_messages,
135
- max_tokens=150,
136
- temperature=0.0, # 0.0 для максимальной предсказуемости
137
  stream=False,
138
  )
139
 
140
  raw_response = eval_response["choices"][0]["message"]["content"]
141
-
142
- # ВАЖНО: Выводим в терминал (консоль), что ответил роутер, чтобы отлаживать
143
- print(
144
- f"\n--- [DEBUG] ОТВЕТ РОУТЕРА ---\n{raw_response}\n---------------------------\n"
145
- )
146
-
147
  clean_query = extract_search_query(raw_response)
148
 
149
  if clean_query:
@@ -165,9 +163,7 @@ def bot_response(
165
  f"\n\n{search_context}\n\n[УВЕДОМЛЕНИЕ]: Поиск выполнен. Сформулируй ответ на основе контекста выше."
166
  )
167
  else:
168
- search_info = (
169
- f'🌐 Поиск по запросу *"{clean_query}"* не дал результатов.'
170
- )
171
  else:
172
  search_info = "⚡ Агент ответит из своих знаний (поиск не нужен)."
173
 
 
103
  yield history
104
 
105
  # --- 4. АГЕНТ ПОИСКА (РОУТЕР) ---
 
106
  if use_search:
107
+ search_info = ""
108
  history[-1]["content"] = (
109
  file_info + "\n" if file_info else ""
110
  ) + "🤔 Агент анализирует необходимость поиска..."
111
  yield history
112
 
113
+ # Находим последний вопрос пользователя
114
+ last_user_msg = ""
115
+ for msg in reversed(history):
116
+ if msg["role"] == "user":
117
+ last_user_msg = msg["content"]
118
+ break
119
+
120
+ # Промпт Роутера: кладем инструкцию прямо в USER, чтобы модель не могла её проигнорировать.
121
+ # Используем XML теги, LLM справляются с ними лучше, чем с JSON.
122
  agent_messages = [
123
  {
124
+ "role": "user",
125
  "content": (
126
+ f"Пользователь спросил: «{last_user_msg}»\n\n"
127
+ "Определи, нужен ли поиск в интернете для ответа на этот запрос.\n"
128
+ юбые вопросы про недавние события, атаки апример, на НПЗ), новости и точные факты ТРЕБУЮТ поиска.\n\n"
129
+ "ОТВЕТЬ СТРОГО ОДНИМ ИЗ ВАРИАНТОВ (без лишних слов):\n"
130
+ "Вариант 1 (поиск нужен): <search>твой поисковый запрос</search>\n"
131
+ "Вариант 2 (поиск не нужен): <no_search>"
 
132
  ),
133
  }
134
  ]
135
 
 
 
 
 
136
  try:
137
  eval_response = engine.generate(
138
  messages=agent_messages,
139
+ max_tokens=400, # <--- Увеличили, чтобы модель успела дописать тег поиска, если задумается
140
+ temperature=0.0,
141
  stream=False,
142
  )
143
 
144
  raw_response = eval_response["choices"][0]["message"]["content"]
 
 
 
 
 
 
145
  clean_query = extract_search_query(raw_response)
146
 
147
  if clean_query:
 
163
  f"\n\n{search_context}\n\n[УВЕДОМЛЕНИЕ]: Поиск выполнен. Сформулируй ответ на основе контекста выше."
164
  )
165
  else:
166
+ search_info = f'🌐 Поиск по запросу *"{clean_query}"* не дал результатов (возможно сработал лимит DuckDuckGo).'
 
 
167
  else:
168
  search_info = "⚡ Агент ответит из своих знаний (поиск не нужен)."
169