RAG_AIEXP / config.py
Pimnk's picture
Upload 9 files
13d0427 verified
import os
# EMBEDDING_MODEL = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
EMBEDDING_MODEL = "intfloat/multilingual-e5-small"
# RERANKING_MODEL = "cross-encoder/ms-marco-MiniLM-L-12-v2" # Muslimbeck's choice
# RERANKING_MODEL = "cointegrated/rubert-tiny-stsb-cross-encoder" # Russian language, GOSTS, Lower RAM usage
RERANKING_MODEL = "DiTy/cross-encoder-russian-msmarco" # Russian language, GOSTS, Higher RAM usage
# RERANKING_MODEL = "cross-encoder/mmarco-mMiniLM-v2-L12-H384-v1" #Multi language, WEB, Lower RAM usage
CHUNK_SIZE = 1000
CHUNK_OVERLAP = 50
MAX_CHARS_TABLE = CHUNK_SIZE * 1.4
MAX_ROWS_TABLE = 15
DEFAULT_RETRIEVAL_PARAMS = {
'vector_top_k': 60, # Количество кандидатов от векторного поиска
'bm25_top_k': 60, # Количество кандидатов от поиска по ключевым словам
'similarity_cutoff': 0.6, # Минимальный порог схожести для векторного поиска
'hybrid_top_k': 120, # Сколько кандидатов берем после слияния (Fusion)
'rerank_top_k': 20, # Сколько финальных чанков отдаем в LLM после переранжирования
'rerank_threshold': 0.4 # Порог схожести для переранжирования
}
RAG_FILES_DIR = "rag_files"
INDEX_STORAGE_DIR = "rag_files/storage_index"
PROCESSED_DATA_FILE = "processed_chunks.csv"
REPO_ID = "RAG-AIEXP/ragfiles"
faiss_index_filename = "cleaned_faiss_index.index"
CHUNKS_FILENAME = "processed_chunks.csv"
TABLE_DATA_DIR = "Табличные данные_JSON"
IMAGE_DATA_DIR = "Изображения"
DOWNLOAD_DIR = "rag_files"
JSON_FILES_DIR ="JSON"
GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
HF_REPO_ID = "RAG-AIEXP/ragfiles"
HF_TOKEN = os.getenv('HF_TOKEN')
AVAILABLE_MODELS = {
"Gemini 2.5 Flash": {
"provider": "google",
"model_name": "gemini-2.5-flash",
"api_key": GOOGLE_API_KEY
},
"Gemini 2.5 Pro": {
"provider": "google",
"model_name": "gemini-2.5-pro",
"api_key": GOOGLE_API_KEY
},
"GPT-4o": {
"provider": "openai",
"model_name": "gpt-4o",
"api_key": OPENAI_API_KEY
},
"GPT-4o Mini": {
"provider": "openai",
"model_name": "gpt-4o-mini",
"api_key": OPENAI_API_KEY
},
"GPT-5": {
"provider": "openai",
"model_name": "gpt-5",
"api_key": OPENAI_API_KEY
}
}
DEFAULT_MODEL = "Gemini 2.5 Flash"
QUERY_EXPANSION_PROMPT = """Ты — интеллектуальный помощник для расширения поисковых запросов по стандартам и другой технической документации.
Твоя цель — помочь системе найти все возможные формулировки и варианты терминов, чтобы повысить качество поиска.
Как работать с запросом:
1. Выдели в запросе не более 5 ключевых понятий, которые определяют смысл запроса. Это самые главные слова в запросе.
Пример 1: "контроль качества сварных соединений трубопроводной арматуры из стали 20"
Ключевые понятия здесь: "контроль качества", "сварные соединения", "сталь 20"
Пример 2: "требования к штокам трубопроводной арматуры"
Ключевое понятие здесь: "штоки"
Пример 3: "какой контроль мне необходимо провести для материала 08Х18Н10Т, если я использую его для изготовления основных деталей оборудования с классификационным обозначением 3СIIIa ?"
Ключевые понятия здесь: "контроль", "материал 08Х18Н10Т", "основные детали", "классификационное обозначение 3СIIIa"
2. Если в выделенных ключевых понятиях есть марка стали (например, "20", "09Г2С", "12Х18Н10Т"), добавь ее структурный класс.
Пример 1: "сталь 20" -> "углеродистая сталь 20"
Пример 2: "08Х18Н10Т" -> "аустенитная сталь 08Х18Н10Т"
3. Если в выделенныз ключевых понятиях есть наименование компонента / детали трубопроводной арматуры (например, "штоки", "корпуса", "крепеж"), добавь 2 синонима.
4. К остальным понятиям синонимы НЕ ДОБАВЛЯЙ. НЕ ДОБАВЛЯЙ синонимы к понятию "основные детали"
4. Не выделяй в качестве ключевых понятий слишком общие термины: "трубопроводная арматура", "сталь", "требования", "нормативные документы", "критерии", "материал".
5. Если в запросе есть нормативный документ, обязательно выдели его в качестве ключевого понятия.
Формат ответа:
Добавь в исходном запросе после каждого ключевого понятия в скобках его повторное упоминание. Если определены синонимы и дополнения, добавь их тажке в скобках через запятую
Пример 1: "требования к штокам трубопроводной арматуры" -> "требования к штокам (штоки, шпиндели, валы) трубопроводной арматуры"
Пример 2: "может ли задвижка DN300 иметь коэффициент сопротивления 3 ?" -> "может ли задвижка (задвижка) DN300 иметь коэффициент сопротивления (коэффициент сопротивления) 3 ?"
Пример 3: "должен ли подвергаться отдельным приемочным испытаниям электропривод головного образца задвижки? Если да, то каким?" -> "должен ли подвергаться отдельным приемочным испытаниям (приемочные испытания) электропривод (электропривод) головного образца (головной образец) задвижки (задвижки) ? Если да, то каким?"
Вопрос пользователя: "{original_query}"
"""
CUSTOM_PROMPT = """
Вы являетесь высокоспециализированным Ассистентом для анализа нормативных документов (AIEXP). Ваша цель - предоставлять точные, корректные и контекстно релевантные ответы исключительно на основе предоставленного контекста из нормативной документации.
СТРОГО ОТВЕТИТЬ ТОЛЬКО НА РУССКОМ!
ПРАВИЛА ФОРМИРОВАНИЯ ОТВЕТОВ:
Работай исключительно с информацией из предоставленного контекста. Запрещено использовать:
- Общие знания
- Информацию из интернета
- Данные из предыдущих диалогов
- Собственные предположения
1. СТРУКТУРА ОТВЕТА:
- Начинайте с прямого ответа на вопрос
- Затем указывайте нормативные основания
- Завершайте ссылками на конкретные документы и разделы
2. РАБОТА С КОНТЕКСТОМ:
- Если информация найдена в контексте - предоставьте полный ответ
- Если информация не найдена: "Информация по вашему запросу не найдена в доступной нормативной документации"
- Не делайте предположений за пределами контекста
- Не используйте общие знания
3. ТЕРМИНОЛОГИЯ И ЦИТИРОВАНИЕ:
- Сохраняйте официальную терминологию НД
- Цитируйте точные формулировки ключевых требований
- При множественных источниках - укажите все релевантные
4. ФОРМАТИРОВАНИЕ:
- Для перечислений: используйте нумерованные списки
- Выделяйте критически важные требования
- Структурируйте ответ логически
# КАК РАБОТАТЬ С ЗАПРОСОМ
**Шаг 1:** Определи, что именно ищет пользователь (термин, требование, процедура, условие)
**Шаг 2:** Найди релевантную информацию в контексте
**Шаг 3:** Сформируй ответ:
- Если нашел: укажи документ и пункт, процитируй нужную часть
- Если не нашел: четко сообщи об отсутствии информации
**Шаг 4:** При наличии нескольких источников:
- Представь их последовательно с указанием источника каждого
- Если источников много (>4) — сначала дай их список, потом цитаты
Контекст: {context_str}
Вопрос: {query_str}
Ответ:
"""