AlsuGibadullina commited on
Commit
5fcea5f
·
verified ·
1 Parent(s): 4f920cc

Update src/tasks.py

Browse files
Files changed (1) hide show
  1. src/tasks.py +20 -13
src/tasks.py CHANGED
@@ -4,20 +4,25 @@ from typing import Dict, Any, Optional
4
 
5
  @dataclass
6
  class TaskContext:
7
- """
8
- Контекст задачи: сюда позже можно добавить:
9
- - домен/компанию/стандарты (BABOK, IEEE 29148 и т.п.)
10
- - формат вывода (JSON schema)
11
- - чеклисты качества
12
- """
13
- name: str = "base_requirements_analysis"
14
  language: str = "ru"
15
  extra: Dict[str, Any] = None
16
 
17
 
18
- def build_analyzer_prompt(requirements_text: str, ctx: Optional[TaskContext] = None) -> str:
 
 
 
 
 
 
 
 
 
 
19
  ctx = ctx or TaskContext()
20
  return f"""Ты — аналитик требований к ПО. Проанализируй текст требований и выдай структурированный результат.
 
21
 
22
  Требования (сырой текст):
23
  {requirements_text}
@@ -37,13 +42,14 @@ def build_analyzer_prompt(requirements_text: str, ctx: Optional[TaskContext] = N
37
  """
38
 
39
 
40
- def build_refactor_prompt(requirements_text: str, analysis_result: str, ctx: Optional[TaskContext] = None) -> str:
41
  ctx = ctx or TaskContext()
42
  return f"""Ты — специалист по рефакторингу требований. Перепиши требования так, чтобы они стали:
43
  - однозначными,
44
  - тестируемыми,
45
  - структурированными,
46
  - без лишних предположений.
 
47
 
48
  Исходные требования:
49
  {requirements_text}
@@ -52,8 +58,8 @@ def build_refactor_prompt(requirements_text: str, analysis_result: str, ctx: Opt
52
  {analysis_result}
53
 
54
  Нужно:
55
- 1) Сгенерировать улучшенную версию требований (желательно: разделы, нумерация, критерии приемки)
56
- 2) Явно отметить места, где без уточнений нельзя сделать требования однозначными (вставь TODO/Questions)
57
  3) Добавить минимальный набор acceptance criteria (Given/When/Then или bullet list)
58
 
59
  Формат ответа:
@@ -63,9 +69,10 @@ def build_refactor_prompt(requirements_text: str, analysis_result: str, ctx: Opt
63
  """
64
 
65
 
66
- def build_critic_prompt(requirements_text: str, refactored: str, ctx: Optional[TaskContext] = None) -> str:
67
  ctx = ctx or TaskContext()
68
  return f"""Ты — строгий ревьюер требований. Проверь качество рефакторинга.
 
69
 
70
  Исходные требования:
71
  {requirements_text}
@@ -85,7 +92,7 @@ def build_critic_prompt(requirements_text: str, refactored: str, ctx: Optional[T
85
  - дай финальный вердикт: можно ли отдавать в разработку сейчас
86
 
87
  Формат ответа:
88
- - Оценки (таблично или списком)
89
  - Замечания
90
  - Рекомендованные правки
91
  - Вердикт
 
4
 
5
  @dataclass
6
  class TaskContext:
7
+ name: str = "requirements_analysis_and_refactor"
 
 
 
 
 
 
8
  language: str = "ru"
9
  extra: Dict[str, Any] = None
10
 
11
 
12
+ def _diagram_hint(has_image: bool) -> str:
13
+ if not has_image:
14
+ return ""
15
+ return (
16
+ "\nДополнительно: пользователь приложил изображение/фото диаграммы. "
17
+ "Если на ней есть элементы (сущности, связи, состояния, экраны, потоки), "
18
+ "вытащи их в текст: список объектов, связей, бизнес-правил и неясностей.\n"
19
+ )
20
+
21
+
22
+ def build_analyzer_prompt(requirements_text: str, has_image: bool, ctx: Optional[TaskContext] = None) -> str:
23
  ctx = ctx or TaskContext()
24
  return f"""Ты — аналитик требований к ПО. Проанализируй текст требований и выдай структурированный результат.
25
+ {_diagram_hint(has_image)}
26
 
27
  Требования (сырой текст):
28
  {requirements_text}
 
42
  """
43
 
44
 
45
+ def build_refactor_prompt(requirements_text: str, analysis_result: str, has_image: bool, ctx: Optional[TaskContext] = None) -> str:
46
  ctx = ctx or TaskContext()
47
  return f"""Ты — специалист по рефакторингу требований. Перепиши требования так, чтобы они стали:
48
  - однозначными,
49
  - тестируемыми,
50
  - структурированными,
51
  - без лишних предположений.
52
+ {_diagram_hint(has_image)}
53
 
54
  Исходные требования:
55
  {requirements_text}
 
58
  {analysis_result}
59
 
60
  Нужно:
61
+ 1) Сгенерировать улучшенную версию требований (разделы, нумерация, критерии приемки)
62
+ 2) Явно отметить места, где без уточнений нельзя сделать требования однозначными (TODO/Questions)
63
  3) Добавить минимальный набор acceptance criteria (Given/When/Then или bullet list)
64
 
65
  Формат ответа:
 
69
  """
70
 
71
 
72
+ def build_critic_prompt(requirements_text: str, refactored: str, has_image: bool, ctx: Optional[TaskContext] = None) -> str:
73
  ctx = ctx or TaskContext()
74
  return f"""Ты — строгий ревьюер требований. Проверь качество рефакторинга.
75
+ {_diagram_hint(has_image)}
76
 
77
  Исходные требования:
78
  {requirements_text}
 
92
  - дай финальный вердикт: можно ли отдавать в разработку сейчас
93
 
94
  Формат ответа:
95
+ - Оценки
96
  - Замечания
97
  - Рекомендованные правки
98
  - Вердикт