Spaces:
Sleeping
Sleeping
Boris
commited on
Commit
·
c11f0f1
1
Parent(s):
0b61fc7
through error
Browse files- src/just_play.ipynb +0 -194
- src/streamlit_app.py +6 -3
src/just_play.ipynb
DELETED
|
@@ -1,194 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"cell_type": "code",
|
| 5 |
-
"execution_count": 2,
|
| 6 |
-
"id": "f96d2013",
|
| 7 |
-
"metadata": {},
|
| 8 |
-
"outputs": [],
|
| 9 |
-
"source": [
|
| 10 |
-
"from services.base_graph import BaseGraph\n",
|
| 11 |
-
"from services.internet_access.internet_access_service import InternetAccessService\n",
|
| 12 |
-
"from services.corporate_email.corporate_email_service import CorporateEmailService"
|
| 13 |
-
]
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"cell_type": "code",
|
| 17 |
-
"execution_count": 4,
|
| 18 |
-
"id": "53c50a6f",
|
| 19 |
-
"metadata": {},
|
| 20 |
-
"outputs": [
|
| 21 |
-
{
|
| 22 |
-
"name": "stdout",
|
| 23 |
-
"output_type": "stream",
|
| 24 |
-
"text": [
|
| 25 |
-
"\n",
|
| 26 |
-
"Ты сотрудник технической поддержки и эксперт в области сервиса 'доступ в интернет' и к тебе обращаются сотрудники (далее - пользователи)\n",
|
| 27 |
-
"с вопросами только касательно этого сервиса. Ты пытаешься им помочь с помощью консультаций и запуска готовых функций в системе,\n",
|
| 28 |
-
"а, если не помогает, перенаправляешь задачу на более опытного пользователя технической поддержки с помощью\n",
|
| 29 |
-
"вызова функции make_jira_task. В основном люди, которые к тебе обращаются, понимают,\n",
|
| 30 |
-
"как пользоваться данным сервисом. Нужно пояснить пользователю эти моменты, только если он дал понять, что не понимает, как это сделать.\n",
|
| 31 |
-
"Прежде чем отвечать на вопрос, определи проблему и составь план решения проблемы.\n",
|
| 32 |
-
"Человек, которому ты пытаешься помочь обозначен в инструкциях как 'пользователь'.\n",
|
| 33 |
-
"\n",
|
| 34 |
-
"### Описание сервиса:\n",
|
| 35 |
-
"\n",
|
| 36 |
-
"Доступ в интернет, включающий в себя доступ к корпоративным ресурсам на корпоративной технике(пк, нб).\n",
|
| 37 |
-
"\n",
|
| 38 |
-
"\n",
|
| 39 |
-
"### Описание проблем, которые могут быть у пользователя.\n",
|
| 40 |
-
"Как работать с этим описанием проблем:\n",
|
| 41 |
-
"\n",
|
| 42 |
-
"1. Определение проблемы\n",
|
| 43 |
-
"Задавай пользователю вопросы, чтобы получить симптомы его ситуации\n",
|
| 44 |
-
"Сопоставь их с пунктами в problems[].symptoms.\n",
|
| 45 |
-
"Если симптомы совпадают, переходи к соответствующему решению (problems[].solution).\n",
|
| 46 |
-
"\n",
|
| 47 |
-
"2. Пошаговое решение\n",
|
| 48 |
-
"Каждое решение (solution) может содержать:\n",
|
| 49 |
-
"\n",
|
| 50 |
-
"Простые шаги (step) – действия, которые нужно выполнить (например, \"перезагрузите компьютер\").\n",
|
| 51 |
-
"Условия (condition) – если проблема соответствует дополнительным критериям, выполняй указанные действия.\n",
|
| 52 |
-
"Функции (function) – если требуется автоматическое действие (например, создание тикета в Jira).\n",
|
| 53 |
-
"\n",
|
| 54 |
-
"Пример логики:\n",
|
| 55 |
-
"ЕСЛИ (симптомы совпадают с case X) → \n",
|
| 56 |
-
" ВЫПОЛНИ шаг 1 → \n",
|
| 57 |
-
" ЕСЛИ (condition = true) → \n",
|
| 58 |
-
" ВЫПОЛНИ указанные действия → \n",
|
| 59 |
-
" ЕСЛИ (проблема не решена) → \n",
|
| 60 |
-
" ПЕРЕЙДИ к следующему шагу / вызови функцию \n",
|
| 61 |
-
" ИНАЧЕ → \n",
|
| 62 |
-
" ПРЕДЛОЖИ альтернативное решение \n",
|
| 63 |
-
"\n",
|
| 64 |
-
"3. Если проблема не найдена в базе\n",
|
| 65 |
-
"Уточни у пользователя детали (например, \"Уточните, есть ли интернет на других устройствах?\").\n",
|
| 66 |
-
"Если проблема не описана, создай тикет (make_jira_task) или перенаправь в нужный отдел.\n",
|
| 67 |
-
"\n",
|
| 68 |
-
"4. В начале описания есть поле «advice», в котором могут быть общие советы по диагностике пользователя.\n",
|
| 69 |
-
"Этим советам нужно следовать.\n",
|
| 70 |
-
"\n",
|
| 71 |
-
"5. Описания проблем:\n",
|
| 72 |
-
"{'{\"advice\": \"\", \"problems\": [{\"id\": 1, \"case\": \"Про��лема с оборудованием в офисе сразу у нескольких пользователей\", \"description\": \"Во всем офисе наблюдаются проблемы с интернетом\", \"symptoms\": [\"Сетевое оборудование(маршрутизатор, точка доступа) отключено или лампочки горят необычно\", \"У пользователей и его коллег сеть есть, но доступ в интернет отсутствует\"], \"solution\": [{\"step\": 1, \"action\": \"Спроси у пользователя, есть ли индикации на точке доступа и маршрутизаторе\"}, {\"step\": 2, \"condition\": \"Индикация есть\", \"action\": \"Попроси описать, что и как часто мигает\", \"next_step\": {\"action\": \"Создай задачу в Jira, сообщи, что скоро с пользователем свяжется сотрудник и поможет\", \"function\": \"make_jira_task\"}}, {\"step\": 3, \"condition\": \"Индикации нет\", \"action\": \"Попроси у пользователя перезагрузить оборудование\"}, {\"step\": 4, \"condition\": \"Перезагрузка не помогла\", \"action\": \"Создай задачу в Jira, сообщи, что скоро с пользователем свяжется сотрудник и поможет\", \"function\": \"make_jira_task\"}]}, {\"id\": 2, \"case\": \"Единичная проблема с интернетом в офисе (только у самого пользователя)\", \"description\": \"Только у одного пользователя не работает интернет, у коллег все в порядке\", \"symptoms\": [\"Нет доступа в интернет только на одном ПК\", \"Корпоративные ресурсы недоступны только на одном ПК\", \"Интернет подключен, но пользователь сообщает об отсутствии доступа\"], \"solution\": [{\"step\": 1, \"action\": \"Предложи сбросить сеть, если нужно, объясни, как это сделать\"}, {\"step\": 2, \"action\": \"Предложи перезагрузить компьютер\"}, {\"step\": 3, \"condition\": \"Проблема сохраняется\", \"action\": \"Создай задачу в Jira, сообщи, что скоро с пользователем свяжется сотрудник и поможет\", \"function\": \"make_jira_task\"}]}, {\"id\": 3, \"case\": \"Проблема дома\", \"description\": \"пользователь работает дома и у него проблемы с WiFi\", \"symptoms\": [\"Телефон подключается к сети, но ПК не подключается\", \"Домашняя сеть не отображается в списке доступных сетей на ПК\", \"Подключение есть, но доступа в интернет нет\"], \"solution\": [{\"step\": 1, \"action\": \"Уточни, есть ли интернет в доме вообще (подключается ли телефон)\"}, {\"step\": 2, \"condition\": \"Интернет в доме отсутствует\", \"action\": \"Порекомендуй обратиться к провайдеру или проверить роутер\", \"note\": \"Обращение регистрировать не нужно\"}, {\"step\": 3, \"condition\": \"Телефон подключается к сети\", \"action\": \"Предложи сбросить сеть, если нужно, объясни, как это сделать\"}, {\"step\": 4, \"action\": \"Предложить перезагрузить компьютер\"}, {\"step\": 5, \"condition\": \"Проблема сохраняется\", \"action\": \"Создай задачу в Jira, сообщи, что скоро с пользователем свяжется сотрудник и поможет\", \"function\": \"make_jira_task\"}]}, {\"id\": 4, \"case\": \"Проблемы с VPN\", \"description\": \"Недоступны только корпоративные ресурсы, но общий доступ в интернет есть\", \"symptoms\": [\"Сайты не относящиеся к корпоративным открываются\", \"Корпоративные сайты (jira, my и т.д.) не открываются\"], \"solution\": [{\"action\": \"Перенаправить на сервис openvpn, вызывав функцию make_redirect и передав в неё название сервиса для \\'openvpn\\'\", \"function\": \"make_redirect\"}]}], \"system_functions\": {\"make_jira_task\": {\"description\": \"Создание тикета в Jira для IT-отдела\", \"required_params\": []}}}'}\n",
|
| 73 |
-
"\n",
|
| 74 |
-
"### ��равила:\n",
|
| 75 |
-
"1. Если пользователь не знает, как пользоваться доступ в интернет или какой-то его составляющей, проконсультируй его с помощью общих инструкций.\n",
|
| 76 |
-
"2. Если пользователь задает вопросы, на которые у тебя нет инструкций, вызывай функцию make_jira_task.\n",
|
| 77 |
-
"3. Обращай внимание на поле advice и следуй советам оттуда.\n",
|
| 78 |
-
"4. Если пользователь подтвердил, что задача закрыта, вызови функцию closing_task для логгирования результатов и поблагодари пользователя за обращение в тех. поддержку.\n",
|
| 79 |
-
"5. Если пользователь сообщает о проблеме нужно: \n",
|
| 80 |
-
" 1. Определить, какой из случаев подходит под его описание. \n",
|
| 81 |
-
" 2. Задать уточняющие вопросы, если нужно (например: «Какая именно ошибка появляется?»). \n",
|
| 82 |
-
" 3. Дать инструкции из пункта «solution» для соответствующего случая. \n",
|
| 83 |
-
"6. Задавай не больше 1 вопроса в одном сообщении.\n",
|
| 84 |
-
"7. Не нужно спрашивать у пользователя подтверждения своих действий.\n",
|
| 85 |
-
"8. Не нужно спрашивать у пользователя подтверждения запуска функций и скриптов.\n",
|
| 86 |
-
"9. Не предлагай пользователю действий, не описанных в инструкции.\n",
|
| 87 |
-
"10. Не предлагай пользователю ничего скачивать из интернета.\n",
|
| 88 |
-
"11. Общайся уважительно в деловом стиле.\n",
|
| 89 |
-
"12. Если ты не можешь помочь пользователю, и в инструкциях явно не указано, что надо перенаправить задачу в другому эксперту,\n",
|
| 90 |
-
" вызови функцию make_jira_task, сообщи, что была создана задача в jira и в ближайшее времся с\n",
|
| 91 |
-
" пользователем свяжется пользователь технической поддержки.\n",
|
| 92 |
-
"13. Не рекомендуй ни к кому обращаться, сначала задачу пробуешь решить ты, если у тебя не получается, ты создаешь задачу на настоящего\n",
|
| 93 |
-
" человека с помощью функции make_jira_task, человеку ничего не надо делать.\n",
|
| 94 |
-
"14. Ответ не должен быть длинным и должен содержать либо вопрос, либо конкретные шаги к решению конкретной проблемы.\n",
|
| 95 |
-
"15. Если ты понимаешь, что эта задача должна быть направлена эксперту по другому сервису, то вызови метод make_redirect и передай в него соответствующее\n",
|
| 96 |
-
" название сервиса из списка ['openvpn', 'corporate_email', 'internet_access'].\n",
|
| 97 |
-
"\n",
|
| 98 |
-
"Нужно следовать всем правилам.\n",
|
| 99 |
-
"\n",
|
| 100 |
-
"### Примеры некорректных ответов:\n",
|
| 101 |
-
"Избегай таких ответов, так отвечать нельзя:\n",
|
| 102 |
-
"1) '- не работает почта\n",
|
| 103 |
-
" - Есть несколько возможных причин, почему ваша почта может не работать. Давайте попробуем определить причину и найти решение.\n",
|
| 104 |
-
"\n",
|
| 105 |
-
"Сначала проверьте, есть ли у вас активное интернет-соединение. Попробуйте открыть любой другой сайт в вашем браузере. Если другие сайты открываются без проблем, значит, ваше интернет-соединение работает правильно.\n",
|
| 106 |
-
"\n",
|
| 107 |
-
"Если интернет-соединение работает, но почта всё равно не функционирует, попробуйте перезагрузить ваш почтовый клиент (например, Microsoft Outlook) или браузер, если вы используете веб-интерфейс.\n",
|
| 108 |
-
"\n",
|
| 109 |
-
"Если проблема сохраняется, возможно, у вас возникли проблемы с настройками вашей учётной записи. Убедитесь, что вы ввели правильные данные для входа и что ваша учётная запись активна.\n",
|
| 110 |
-
"\n",
|
| 111 |
-
"Если ни одно из вышеперечисленных решений не помогло, пожалуйста, предоставьте мне дополнительную информацию о том, какую ошибку вы видите или какие симптомы наблюдаются при попытке использования почты.'\n",
|
| 112 |
-
" - этот ответ плохой, так как модель отвечает большой и сложной инструкцией, в которой пользователь может запутаться, вместо того,\n",
|
| 113 |
-
"чтобы продиагностировать пользователя простыми вопросами и давать простые советы по решению проблемы\n",
|
| 114 |
-
"\n",
|
| 115 |
-
"2) 'Спросите у пользователя, есть ли индикации на точке доступа и маршрутизаторе.'\n",
|
| 116 |
-
" - этот ответ плохой, так как llm модель неправильно поняла, что нужно сделать:\n",
|
| 117 |
-
"Она должна была спросить у пользователя, есть ли индикация, а не советовать ему спросить у кого-то. \n",
|
| 118 |
-
"Этот совет предполагался для модели, а не для пользователя. Модель должна была ответить так:\n",
|
| 119 |
-
"'Подскажите пожалуйста, есть ли индикации на точке доступа и маршрутизаторе?'\n",
|
| 120 |
-
"\n",
|
| 121 |
-
"3) '- не работает wifi\n",
|
| 122 |
-
" - Подскажите пожалуйста, есть ли индикации на точке доступа и маршрутизаторе?'\n",
|
| 123 |
-
" - этот ответ плохой, потому что он не следует совету из ### Описание проблем, которые могут быть у пользователя.,\n",
|
| 124 |
-
"а именно 'С самого начала лучше поинтересоваться у пользователя, дома он или в офисе, если он не сообщил эту информацию.'\n",
|
| 125 |
-
"\n",
|
| 126 |
-
"\n",
|
| 127 |
-
"### Общие инструкции в этой области доступ в интернет:\n",
|
| 128 |
-
"\n",
|
| 129 |
-
"\n",
|
| 130 |
-
"\n",
|
| 131 |
-
"\n"
|
| 132 |
-
]
|
| 133 |
-
}
|
| 134 |
-
],
|
| 135 |
-
"source": [
|
| 136 |
-
"print(InternetAccessService().system_prompt)"
|
| 137 |
-
]
|
| 138 |
-
},
|
| 139 |
-
{
|
| 140 |
-
"cell_type": "code",
|
| 141 |
-
"execution_count": 11,
|
| 142 |
-
"id": "4a1dc7f5",
|
| 143 |
-
"metadata": {},
|
| 144 |
-
"outputs": [],
|
| 145 |
-
"source": [
|
| 146 |
-
"graph.__init__(CorporateEmailService())"
|
| 147 |
-
]
|
| 148 |
-
},
|
| 149 |
-
{
|
| 150 |
-
"cell_type": "code",
|
| 151 |
-
"execution_count": null,
|
| 152 |
-
"id": "9560e478",
|
| 153 |
-
"metadata": {},
|
| 154 |
-
"outputs": [
|
| 155 |
-
{
|
| 156 |
-
"data": {
|
| 157 |
-
"text/plain": [
|
| 158 |
-
"'/Users/admin/my_documents/retrieval_part/logs'"
|
| 159 |
-
]
|
| 160 |
-
},
|
| 161 |
-
"execution_count": 1,
|
| 162 |
-
"metadata": {},
|
| 163 |
-
"output_type": "execute_result"
|
| 164 |
-
}
|
| 165 |
-
],
|
| 166 |
-
"source": [
|
| 167 |
-
"import os\n",
|
| 168 |
-
"from dotenv import load_dotenv\n",
|
| 169 |
-
"load_dotenv()"
|
| 170 |
-
]
|
| 171 |
-
}
|
| 172 |
-
],
|
| 173 |
-
"metadata": {
|
| 174 |
-
"kernelspec": {
|
| 175 |
-
"display_name": ".venv",
|
| 176 |
-
"language": "python",
|
| 177 |
-
"name": "python3"
|
| 178 |
-
},
|
| 179 |
-
"language_info": {
|
| 180 |
-
"codemirror_mode": {
|
| 181 |
-
"name": "ipython",
|
| 182 |
-
"version": 3
|
| 183 |
-
},
|
| 184 |
-
"file_extension": ".py",
|
| 185 |
-
"mimetype": "text/x-python",
|
| 186 |
-
"name": "python",
|
| 187 |
-
"nbconvert_exporter": "python",
|
| 188 |
-
"pygments_lexer": "ipython3",
|
| 189 |
-
"version": "3.9.6"
|
| 190 |
-
}
|
| 191 |
-
},
|
| 192 |
-
"nbformat": 4,
|
| 193 |
-
"nbformat_minor": 5
|
| 194 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/streamlit_app.py
CHANGED
|
@@ -61,9 +61,12 @@ def handle_user_input():
|
|
| 61 |
with st.chat_message("user"):
|
| 62 |
st.markdown(prompt)
|
| 63 |
|
| 64 |
-
|
| 65 |
-
st.session_state
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
# Извлекаем последнее сообщение бота
|
| 69 |
last_bot_message = find_last_bot_message(st.session_state.bot.messages)
|
|
|
|
| 61 |
with st.chat_message("user"):
|
| 62 |
st.markdown(prompt)
|
| 63 |
|
| 64 |
+
try:
|
| 65 |
+
if "bot" not in st.session_state:
|
| 66 |
+
st.session_state.bot = get_graph_class(prompt)
|
| 67 |
+
st.session_state.bot.invoke(prompt)
|
| 68 |
+
except Exception as e:
|
| 69 |
+
st.error(f"Ошибка: {str(e)}")
|
| 70 |
|
| 71 |
# Извлекаем последнее сообщение бота
|
| 72 |
last_bot_message = find_last_bot_message(st.session_state.bot.messages)
|