import os os.environ["NO_CUDA_EXT"] = "1" # Полностью отключаем C++ расширения from typing import Optional from sentence_transformers import CrossEncoder from transformers import AutoTokenizer def get_reranker(name: Optional[str] = None) -> CrossEncoder: """ Инициализация ранкера с использованием CrossEncoder """ # Используем более легкую модель по умолчанию model_name = name or 'cross-encoder/ms-marco-MiniLM-L-6-v2' return CrossEncoder(model_name) def get_rag_prompt_template(): prompt_in_chat_format = [ { "role": "system", "content": """Используй информацию из контекста, чтобы дать полный ответ на вопрос. Отвечай только на заданный вопрос, ответ должен быть чётким и соответствующим вопросу. Указывай номер исходного документа, когда это уместно. Если ответ нельзя вывести из контекста, дай ответ,который знаешь, но обязательно напиши,что ответ дан не из контекста. Отвечай строго на русском языке, даже если контекст содержит текст на других языках.""", # Добавлено требование русского языка }, { "role": "user", "content": """Контекст: {context} --- Вот вопрос, на который нужно ответить. Вопрос: {question}""", } ] READER_MODEL_NAME="Qwen/Qwen2.5-3B-Instruct" tokenizer = AutoTokenizer.from_pretrained(READER_MODEL_NAME) return tokenizer.apply_chat_template( prompt_in_chat_format, tokenize=False, add_generation_prompt=True )