Files
fckbot/rag/functions/summarize_document.py
Markov Andrey 63900feece Update 86 files
- /rag/commands/expert.py
- /core/services/__init__.py
- /core/services/embedding_service.py
- /core/services/file_service.py
- /core/services/giga_client.py
- /core/services/kb_service.py
- /core/services/postgres_service.py
- /core/services/qdrant_service.py
- /core/services/reranker_service.py
- /core/functions/__init__.py
- /core/functions/check_consistency.py
- /core/functions/check_spelling.py
- /core/functions/critique_answer.py
- /core/functions/expand_query.py
- /core/functions/extract_metrics.py
- /core/functions/file_processor.py
- /core/functions/generate_document.py
- /core/functions/intent_classify.py
- /core/functions/rerank_context.py
- /core/functions/summarize_document.py
- /core/utils/__init__.py
- /core/utils/arg_parser.py
- /core/utils/config_loader.py
- /core/utils/layout_converter.py
- /core/utils/logger.py
- /core/utils/text_utils.py
- /core/utils/web_utils.py
- /bots/commands/__init__.py
- /bots/commands/base.py
- /bots/commands/create.py
- /core/commands/global_remove.py
- /core/commands/help.py
- /core/commands/info.py
- /core/commands/kb.py
- /core/commands/learn.py
- /core/commands/other.py
- /core/commands/registry.py
- /core/commands/stats.py
- /core/commands/template.py
- /core/handlers/__init__.py
- /core/handlers/message_handler.py
- /core/workers/__init__.py
- /core/workers/indexing_worker.py
- /core/xmpp/__init__.py
- /core/xmpp/client.py
- /bots/commands/global_remove.py
- /bots/commands/help.py
- /bots/commands/info.py
- /bots/commands/kb.py
- /bots/commands/registry.py
- /bots/commands/other.py
- /bots/commands/template.py
- /bots/commands/learn.py
- /bots/commands/stats.py
- /bots/handlers/message_handler.py
- /bots/handlers/__init__.py
- /bots/workers/__init__.py
- /bots/workers/indexing_worker.py
- /bots/xmpp/__init__.py
- /bots/xmpp/client.py
- /rag/services/qdrant_service.py
- /rag/services/giga_client.py
- /rag/services/embedding_service.py
- /rag/services/reranker_service.py
- /rag/services/__init__.py
- /rag/services/file_service.py
- /rag/services/postgres_service.py
- /rag/services/kb_service.py
- /rag/functions/check_spelling.py
- /rag/functions/__init__.py
- /rag/functions/extract_metrics.py
- /rag/functions/generate_document.py
- /rag/functions/expand_query.py
- /rag/functions/critique_answer.py
- /rag/functions/file_processor.py
- /rag/functions/check_consistency.py
- /rag/functions/summarize_document.py
- /rag/functions/rerank_context.py
- /rag/functions/intent_classify.py
- /rag/utils/__init__.py
- /rag/utils/layout_converter.py
- /rag/utils/text_utils.py
- /rag/utils/arg_parser.py
- /rag/utils/config_loader.py
- /rag/utils/logger.py
- /rag/utils/web_utils.py
2026-06-30 10:33:28 +00:00

77 lines
2.8 KiB
Python
Raw Permalink 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.
# -*- coding: utf-8 -*-
"""
Модуль суммаризации документа.
Создаёт краткий пересказ, сохраняя ключевые факты и цифры.
АДАПТАЦИЯ: теперь функция принимает промпт как аргумент.
"""
import logging
from core.services.giga_client import GigaClient
logger = logging.getLogger(__name__)
async def summarize_document(
giga: GigaClient,
text: str,
title: str,
prompt_text: str,
bot_config,
) -> str:
"""
Суммаризирует документ.
Аргументы:
giga (GigaClient): клиент GigaChat
text (str): полный текст документа
title (str): название документа
prompt_text (str): содержимое промпта суммаризации
bot_config (BotConfig): объект конфигурации
Возвращает:
str: краткое изложение документа или сообщение об ошибке
"""
if not prompt_text:
logger.error("Промпт суммаризации не загружен")
return "Не удалось загрузить промпт для суммаризации."
summary_cfg = getattr(bot_config, 'summary', {})
temperature = summary_cfg.get('temperature', 0.1)
max_chars = summary_cfg.get('max_chars', 8000)
# Обрезаем текст, если он слишком длинный
if len(text) > max_chars:
# Обрезаем по границам предложений (используем razdel)
try:
from razdel import sentenize
sentences = [sent.text for sent in sentenize(text)]
except ImportError:
import re
sentences = re.split(r'(?<=[.!?])\s+', text)
truncated = []
current_len = 0
for sent in sentences:
if current_len + len(sent) <= max_chars:
truncated.append(sent)
current_len += len(sent)
else:
break
text = ' '.join(truncated)
logger.warning(f"Текст обрезан до {max_chars} символов по границам предложений")
full_prompt = f"{prompt_text}\n\nНазвание документа: {title}\nТекст:\n{text}"
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 "Не удалось создать суммаризацию."