AnatoliiG commited on
Commit ·
8db6a28
1
Parent(s): c23e8fc
Update callbacks.py
Browse files- 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": "
|
| 116 |
"content": (
|
| 117 |
-
"
|
| 118 |
-
"
|
| 119 |
-
"
|
| 120 |
-
"
|
| 121 |
-
|
| 122 |
-
"
|
| 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=
|
| 136 |
-
temperature=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 |
|