from dataclasses import dataclass from typing import Dict, Any, Optional @dataclass class TaskContext: name: str = "requirements_analysis_and_refactor" language: str = "ru" extra: Dict[str, Any] = None def _diagram_block(diagram_context: Optional[str]) -> str: if not diagram_context or not diagram_context.strip(): return "" return f"\n\nКонтекст из диаграммы (OCR/описание):\n{diagram_context}\n" def build_analyzer_prompt(requirements_text: str, diagram_context: Optional[str] = None, ctx: Optional[TaskContext] = None) -> str: ctx = ctx or TaskContext() return f"""Ты — аналитик требований к ПО. Проанализируй текст требований и выдай структурированный результат. Требования (сырой текст): {requirements_text}{_diagram_block(diagram_context)} Нужно: 1) Выявить неясности/двусмысленности 2) Найти противоречия 3) Найти пропуски (что не сказано, но нужно уточнить) 4) Сформировать список уточняющих вопросов к заказчику 5) Сформировать список рисков и допущений Формат ответа: - Краткое резюме (3-6 пунктов) - Проблемы (с цитатами/фрагментами) - Вопросы - Риски и допущения """ def build_refactor_prompt(requirements_text: str, analysis_result: str, diagram_context: Optional[str] = None, ctx: Optional[TaskContext] = None) -> str: ctx = ctx or TaskContext() return f"""Ты — специалист по рефакторингу требований. Перепиши требования так, чтобы они стали: - однозначными, - тестируемыми, - структурированными, - без лишних предположений. Исходные требования: {requirements_text}{_diagram_block(diagram_context)} Результат анализа: {analysis_result} Нужно: 1) Сгенерировать улучшенную версию требований (разделы, нумерация, критерии приемки) 2) Явно отметить места, где без уточнений нельзя сделать требования однозначными (TODO/Questions) 3) Добавить минимальный набор acceptance criteria Формат ответа: - Рефакторинг требований - TODO/Questions - Acceptance criteria """ def build_critic_prompt(requirements_text: str, refactored: str, diagram_context: Optional[str] = None, ctx: Optional[TaskContext] = None) -> str: ctx = ctx or TaskContext() return f"""Ты — строгий ревьюер требований. Проверь качество рефакторинга. Исходные требования: {requirements_text}{_diagram_block(diagram_context)} Рефакторинг: {refactored} Оцени по шкале 1..5: 1) Однозначность 2) Тестируемость 3) Полнота (без фантазий) 4) Структура и читабельность Также: - укажи конкретные проблемы - предложи правки - дай вердикт: можно ли отдавать в разработку сейчас Формат ответа: - Оценки - Замечания - Рекомендованные правки - Вердикт """