| import os |
|
|
| |
| EMBEDDING_MODEL = "intfloat/multilingual-e5-small" |
|
|
| |
| |
| RERANKING_MODEL = "DiTy/cross-encoder-russian-msmarco" |
| |
|
|
| 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, |
| 'rerank_top_k': 20, |
| '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} |
| |
| Ответ: |
| """ |