From ef403d27bb01a7a7bf1f3a9844d5421957f88baa Mon Sep 17 00:00:00 2001 From: Markov Andrey Date: Tue, 30 Jun 2026 09:09:30 +0000 Subject: [PATCH] Add new file --- core/functions/check_consistency.py | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 core/functions/check_consistency.py diff --git a/core/functions/check_consistency.py b/core/functions/check_consistency.py new file mode 100644 index 0000000..c2e4569 --- /dev/null +++ b/core/functions/check_consistency.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +""" +Модуль проверки противоречий между несколькими фрагментами текста. +Анализирует логические, числовые и терминологические расхождения. + +АДАПТАЦИЯ: теперь функция принимает промпт как аргумент. +""" + +import logging +from typing import List +from core.services.giga_client import GigaClient + +logger = logging.getLogger(__name__) + + +async def check_consistency( + giga: GigaClient, + chunks: List[str], + query: str, + prompt_text: str, + bot_config, +) -> str: + """ + Проверяет, есть ли противоречия между переданными фрагментами. + + Аргументы: + giga (GigaClient): клиент GigaChat + chunks (List[str]): список текстовых фрагментов (минимум 2) + query (str): исходный вопрос пользователя + prompt_text (str): содержимое промпта проверки согласованности + bot_config (BotConfig): объект конфигурации + + Возвращает: + str: "[OK]" или "[CONFLICT] ..." с описанием + """ + if len(chunks) < 2: + return "Недостаточно фрагментов для проверки (нужно минимум 2)." + if not prompt_text: + logger.warning("Промпт проверки согласованности не загружен") + return "Промпт проверки согласованности не загружен." + + cons_cfg = getattr(bot_config, 'consistency', {}) + temperature = cons_cfg.get('temperature', 0.1) + max_fragments = cons_cfg.get('max_fragments', 5) + + if len(chunks) > max_fragments: + logger.debug(f"Ограничиваем количество фрагментов с {len(chunks)} до {max_fragments}") + chunks = chunks[:max_fragments] + + combined = "\n\n---\n\n".join( + [f"Фрагмент {i+1}:\n{chunk}" for i, chunk in enumerate(chunks)] + ) + full_prompt = f"{prompt_text}\n\nЗапрос: {query}\n\nФрагменты:\n{combined}" + + try: + response = await giga.chat( + history=[], + query=full_prompt, + system_prompt=None, + file_id=None, + temperature=temperature + ) + return response.strip() + except Exception as e: + logger.error(f"Ошибка проверки согласованности: {e}", exc_info=True) + return "Ошибка при проверке противоречий." \ No newline at end of file