Files
vkus-ai-v4/backend/app/data/knowledge_base.py
T

397 lines
21 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
QUICK_PROMPTS = [
"Проект в ЛИМС не виден",
"VPN не работает",
"Восстановить файл",
"Ошибка в Meridium",
]
IT_SYSTEMS = [
"Meridium 4",
"ЕСУИД",
"1С",
"StarLims",
"ЛИМС",
"ВКУС",
]
GLOSSARY_ANSWERS = {
"есуид": (
"**ЕСУИД** (Единая система управления идентификационными данными) — "
"корпоративная система аутентификации. Через неё вы входите в Meridium, 1С "
"и другие корпоративные приложения. Портал: https://idmoam.sibur.local/identity"
),
"meridium": (
"**Meridium 4** — система управления активами и надёжностью оборудования (APM). "
"Основной URL: https://s001as-apmapp.sibur.local/Meridium/. "
"Отчёты: https://s001as-apmrep.sibur.local/ReportServer"
),
"вкус": (
"**ВКУС** (Витрина корпоративных услуг СИБУРа) — единый сервисный вход "
"для сотрудников: помощь по ИТ-вопросам, создание обращений и отслеживание их статуса."
),
"лимс": (
"**ЛИМС** (Laboratory Information Management System) — лабораторная "
"информационная система для управления образцами и результатами анализов."
),
"starlims": (
"**StarLims** — лабораторная информационная система, используемая на "
"предприятиях СИБУРа для учёта лабораторных исследований."
),
}
KNOWLEDGE_ENTRIES = [
{
"patterns": [
r"meridium.*(вход|войти|логин|парол|авториз)",
r"не могу.*meridium",
r"meridium.*не открыв",
],
"system": "Meridium 4",
"confidence": 85,
"package": {
"recommendation": (
"Для входа в Meridium 4 используется единая учётная запись ЕСУИД. "
"Если основная система не открывается, сначала проверьте доступ к порталу ЕСУИД."
),
"steps": [
"Откройте портал ЕСУИД: https://idmoam.sibur.local/identity",
"Войдите с корпоративными учётными данными",
"Перейдите в Meridium 4: https://s001as-apmapp.sibur.local/Meridium/",
"При ошибке доступа — очистите кэш браузера (Ctrl+Shift+Delete) и повторите вход",
"Если пароль не подходит — запросите сброс через ЕСУИД или создайте обращение",
],
"sources": [
{"title": "Инструкция по входу в Meridium 4", "url": "https://vkus.sibur.local/"},
{"title": "URL систем Meridium", "url": "https://s001as-apmapp.sibur.local/Meridium/"},
],
"colleague_cases": [
{
"summary": "Ошибка «доступ запрещён» после смены пароля",
"outcome": "Помог выход из всех сессий ЕСУИД и повторный вход через режим инкогнито",
},
{
"summary": "Meridium не загружается в Chrome",
"outcome": "Решилось добавлением сайта в доверенные зоны и обновлением браузера",
},
],
"ticket_draft": {
"title": "Проблема с входом в Meridium 4",
"description": "Не удаётся войти в систему Meridium 4. Проверка ЕСУИД и очистка кэша не помогли.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"есуид.*(парол|сброс|разблок)",
r"сброс.*парол",
r"забыл.*парол",
r"разблокир.*учётн",
],
"system": "ЕСУИД",
"confidence": 90,
"package": {
"recommendation": (
"Пароль ЕСУИД можно сбросить самостоятельно через портал самообслуживания "
"или обратившись в ИТ-поддержку."
),
"steps": [
"Откройте портал ЕСУИД: https://idmoam.sibur.local/identity",
"Нажмите «Забыли пароль?» на странице входа",
"Введите корпоративный логин (формат: ivanov.as)",
"Следуйте инструкциям на экране — ссылка придёт на корпоративную почту",
"При блокировке учётной записи — создайте обращение на разблокировку",
],
"sources": [
{"title": "ЕСУИД — единая система идентификации", "url": "https://idmoam.sibur.local/identity"},
{"title": "Инструкция по сбросу пароля", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Ссылка для сброса не приходит",
"outcome": "Проверили папку «Спам» и убедились, что почтовый ящик не переполнен",
},
],
"ticket_draft": {
"title": "Сброс / разблокировка пароля ЕСУИД",
"description": "Требуется сброс или разблокировка учётной записи ЕСУИД. Самостоятельный сброс не удался.",
"system": "ЕСУИД",
"priority": "Средний",
},
},
},
{
"patterns": [
r"meridium.*(отчёт|отчет|report)",
r"отчёт.*meridium",
r"apmrep",
r"reportserver",
],
"system": "Meridium 4",
"confidence": 82,
"package": {
"recommendation": (
"Отчёты Meridium 4 формируются на отдельном сервере отчётов. "
"Ошибки часто связаны с правами доступа или недоступностью сервера."
),
"steps": [
"Проверьте доступность сервера отчётов: https://s001as-apmrep.sibur.local/ReportServer",
"Убедитесь, что основной Meridium 4 работает: https://s001as-apmapp.sibur.local/Meridium/",
"Откройте отчёт повторно — дождитесь полной загрузки",
"При ошибке — откройте консоль браузера (F12) и сохраните текст ошибки",
"Если проблема сохраняется — приложите скриншот к обращению",
],
"sources": [
{"title": "Сервер отчётов Meridium 4", "url": "https://s001as-apmrep.sibur.local/ReportServer"},
{"title": "Руководство по отчётам Meridium", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Ошибка 403 при открытии отчёта",
"outcome": "Потребовалось обновление роли в группе доступа (ГД) — оформили заявку на доступ",
},
],
"warning": (
"В одном из похожих случаев коллеги решили проблему переустановкой браузера, "
"хотя официальная инструкция рекомендует сначала проверить права доступа. "
"Рекомендуем следовать регламенту."
),
"ticket_draft": {
"title": "Ошибка при формировании отчёта Meridium 4",
"description": "При открытии отчёта на сервере s001as-apmrep возникает ошибка. Основной модуль Meridium работает.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"1[сc].*(медлен|тормоз|долго|загруз)",
r"медленн.*1[сc]",
r"1[сc].*не открыв",
],
"system": "1С",
"confidence": 78,
"package": {
"recommendation": (
"Медленная работа 1С может быть связана с нагрузкой на сервер, "
"сетевым подключением или локальным кэшем клиента."
),
"steps": [
"Перезапустите клиент 1С полностью (закройте все окна)",
"Проверьте подключение к корпоративной сети (VPN, если работаете удалённо)",
"Очистите кэш 1С: удалите папку %APPDATA%\\1C\\1Cv8\\",
"Попробуйте запустить 1С в другое время — утром нагрузка выше",
"Зафиксируйте время возникновения проблемы для обращения в поддержку",
],
"sources": [
{"title": "Рекомендации по работе с 1С", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "1С зависает при открытии базы утром",
"outcome": "Проблема была на стороне сервера — решилась после перезапуска сеансов администратором",
},
],
"ticket_draft": {
"title": "Медленная работа 1С",
"description": "Клиент 1С загружается более 5 минут. Перезапуск и очистка кэша не помогли.",
"system": "1С",
"priority": "Средний",
},
},
},
{
"patterns": [
r"лимс.*(проект|не виден|не отображ)",
r"проект.*лимс",
r"starlims.*(проект|не виден)",
],
"system": "ЛИМС",
"confidence": 80,
"package": {
"recommendation": (
"Если проект не отображается в ЛИМС, чаще всего причина в правах доступа "
"или привязке проекта к вашему подразделению."
),
"steps": [
"Обновите страницу и проверьте фильтры в списке проектов",
"Убедитесь, что выбрано правильное предприятие / площадка",
"Проверьте, что у вас есть роль для просмотра проектов в ЛИМС",
"Уточните у коллег, виден ли проект у других пользователей",
"Если проект новый — возможно, он ещё не синхронизирован, подождите до 24 часов",
],
"sources": [
{"title": "Инструкция по работе с проектами ЛИМС", "url": "https://vkus.sibur.local/"},
],
"colleague_cases": [
{
"summary": "Проект не появился после создания",
"outcome": "Потребовалось обновление роли доступа через заявку в ИТ-поддержку",
},
],
"ticket_draft": {
"title": "Проект в ЛИМС не виден",
"description": "Проект не отображается в списке ЛИМС. Фильтры и обновление страницы не помогли.",
"system": "ЛИМС",
"priority": "Средний",
},
},
},
{
"patterns": [
r"vpn.*(не работ|не подключ|ошибк|обрыв)",
r"не работает.*vpn",
r"впн",
],
"system": "Общее",
"confidence": 75,
"package": {
"recommendation": (
"Проблемы с VPN обычно связаны с сетевым подключением, устаревшим клиентом "
"или истёкшим сертификатом."
),
"steps": [
"Проверьте подключение к интернету",
"Перезапустите VPN-клиент и повторите подключение",
"Перезагрузите компьютер",
"Убедитесь, что используете корпоративный VPN-клиент последней версии",
"Если ошибка сохраняется — сделайте скриншот сообщения об ошибке",
],
"sources": [
{"title": "Инструкция по VPN", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "VPN не работает",
"description": "Не удаётся подключиться к корпоративному VPN. Перезапуск клиента не помог.",
"system": "Общее",
"priority": "Высокий",
},
},
},
{
"patterns": [
r"восстанов.*файл",
r"удалил.*файл",
r"потерял.*файл",
r"вернуть.*файл",
],
"system": "Общее",
"confidence": 72,
"package": {
"recommendation": (
"Восстановление файлов возможно из корзины, резервных копий на сетевом диске "
"или через обращение в ИТ-поддержку."
),
"steps": [
"Проверьте корзину на рабочем столе",
"Если файл был на сетевом диске — проверьте папку «Предыдущие версии» (ПКМ → Свойства)",
"Вспомните точное имя файла и расположение",
"Не сохраняйте новые файлы на диск, где был удалён файл",
"Оформите обращение с указанием пути и времени удаления",
],
"sources": [
{"title": "Политика резервного копирования", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "Восстановление удалённого файла",
"description": "Требуется восстановление удалённого файла. Корзина и предыдущие версии не помогли.",
"system": "Общее",
"priority": "Средний",
},
},
},
{
"patterns": [
r"ошибк.*meridium",
r"ошибк.*меридиум",
r"meridium.*ошибк",
],
"system": "Meridium 4",
"confidence": 80,
"package": {
"recommendation": (
"Ошибки в Meridium 4 могут быть связаны с доступом, сессией ЕСУИД "
"или недоступностью сервера приложения."
),
"steps": [
"Зафиксируйте точный текст ошибки (скриншот)",
"Выйдите из Meridium и войдите заново через ЕСУИД",
"Проверьте доступность: https://s001as-apmapp.sibur.local/Meridium/",
"Очистите кэш браузера и повторите попытку",
"Если ошибка в отчётах — проверьте сервер отчётов отдельно",
],
"sources": [
{"title": "Meridium 4 — основная система", "url": "https://s001as-apmapp.sibur.local/Meridium/"},
{"title": "Руководство пользователя Meridium", "url": "https://vkus.sibur.local/"},
],
"ticket_draft": {
"title": "Ошибка в Meridium 4",
"description": "При работе в Meridium 4 возникает ошибка. Повторный вход не помог.",
"system": "Meridium 4",
"priority": "Высокий",
},
},
},
]
DEFAULT_PROFILE = {
"first_name": "Алексей",
"patronymic": "Петрович",
"last_name": "Смирнов",
"position": "Инженер по надёжности",
"department": "АО «Сибур-Нефтехим»",
}
def get_colleague_cases_for_system(system: str | None, limit: int = 3) -> list[dict[str, str]]:
"""Опыт коллег по системе — для блока self-service при ответах из RAG."""
if not system:
return []
seen: set[str] = set()
cases: list[dict[str, str]] = []
for entry in KNOWLEDGE_ENTRIES:
if entry.get("system") != system:
continue
for case in entry.get("package", {}).get("colleague_cases") or []:
key = case.get("summary", "")
if not key or key in seen:
continue
seen.add(key)
cases.append(case)
if len(cases) >= limit:
return cases
# Дополнительные кейсы для лабораторных систем
extra_by_system: dict[str, list[dict[str, str]]] = {
"ЛИМС": [
{
"summary": "Не удаётся провести переиспытание образца",
"outcome": "Потребовалось проверить статус образца и роль «Проведение переиспытаний»",
},
],
"StarLims": [
{
"summary": "Переиспытание недоступно в карточке образца",
"outcome": "Образец был в статусе «Завершён» — сначала выполнили отмену завершения",
},
{
"summary": "Ошибка при создании переиспытания",
"outcome": "Помогла очистка кэша браузера и повторный вход (не по регламенту)",
},
],
}
for case in extra_by_system.get(system, []):
key = case.get("summary", "")
if key and key not in seen:
seen.add(key)
cases.append(case)
if len(cases) >= limit:
break
return cases[:limit]