| | 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) Структура и читабельность |
| | |
| | Также: |
| | - укажи конкретные проблемы |
| | - предложи правки |
| | - дай вердикт: можно ли отдавать в разработку сейчас |
| | |
| | Формат ответа: |
| | - Оценки |
| | - Замечания |
| | - Рекомендованные правки |
| | - Вердикт |
| | """ |
| |
|