File size: 3,646 Bytes
60fa983 5fcea5f 60fa983 aeda505 5fcea5f aeda505 5fcea5f aeda505 60fa983 aeda505 60fa983 aeda505 60fa983 aeda505 60fa983 5fcea5f aeda505 60fa983 aeda505 60fa983 aeda505 60fa983 aeda505 60fa983 aeda505 60fa983 5fcea5f 60fa983 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 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) Структура и читабельность
Также:
- укажи конкретные проблемы
- предложи правки
- дай вердикт: можно ли отдавать в разработку сейчас
Формат ответа:
- Оценки
- Замечания
- Рекомендованные правки
- Вердикт
"""
|