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) Структура и читабельность

Также:
- укажи конкретные проблемы
- предложи правки
- дай вердикт: можно ли отдавать в разработку сейчас

Формат ответа:
- Оценки
- Замечания
- Рекомендованные правки
- Вердикт
"""