PatrickRedStar commited on
Commit
946b940
·
1 Parent(s): 44067ef
__pycache__/app.cpython-314.pyc CHANGED
Binary files a/__pycache__/app.cpython-314.pyc and b/__pycache__/app.cpython-314.pyc differ
 
agents.py DELETED
@@ -1,178 +0,0 @@
1
- """
2
- Агенты для анализа логов на основе smolagents.
3
- Используют трансформеры для интеллектуального анализа.
4
- """
5
-
6
- import os
7
- import json
8
- from smolagents import ToolCallingAgent, InferenceClientModel, FinalAnswerTool
9
- from schemas.schemas import parser_schema, anomaly_schema, rca_schema
10
- from utils.validation import validate_schema
11
- from utils.agent_runner import run_agent_safely
12
-
13
- # Загружаем модель
14
- model = InferenceClientModel(
15
- model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
16
- token=os.getenv("HF_TOKEN"),
17
- max_tokens=2048
18
- )
19
-
20
- final_tool = FinalAnswerTool()
21
-
22
- # Агент 1: Парсинг логов
23
- parser_agent = ToolCallingAgent(
24
- model=model,
25
- tools=[final_tool],
26
- instructions="""
27
- Ты эксперт по анализу системных логов. Твоя задача - парсить сырые логи и преобразовывать их в структурированный JSON формат.
28
-
29
- Для каждой строки лога определи:
30
- - timestamp: временная метка (если есть)
31
- - level: уровень логирования (INFO, WARNING, ERROR, CRITICAL, DEBUG, TRACE)
32
- - message: основное сообщение
33
- - type: тип события (SYSTEM, HTTP_REQUEST, DATABASE, AUTHENTICATION, CONNECTION, EXCEPTION, GENERAL)
34
-
35
- Также определи:
36
- - errors: список всех ошибок (ERROR, CRITICAL)
37
- - warnings: список всех предупреждений (WARNING)
38
- - statistics: статистика с total_lines, parsed_events, errors, warnings, info_messages, event_types, time_range
39
-
40
- Временной диапазон (time_range) должен содержать start и end - первую и последнюю временную метку.
41
-
42
- Ответ строго верни в JSON через final_answer в следующем формате:
43
- {
44
- "events": [{"line_number": int, "timestamp": "str|null", "level": "str", "message": "str", "type": "str"}, ...],
45
- "errors": [...],
46
- "warnings": [...],
47
- "statistics": {
48
- "total_lines": int,
49
- "parsed_events": int,
50
- "errors": int,
51
- "warnings": int,
52
- "info_messages": int,
53
- "event_types": {"TYPE": count, ...},
54
- "time_range": {"start": "str|null", "end": "str|null"} | null
55
- }
56
- }
57
- """,
58
- name="LogParserAgent",
59
- max_steps=10,
60
- )
61
-
62
- # Агент 2: Обнаружение аномалий
63
- anomaly_agent = ToolCallingAgent(
64
- model=model,
65
- tools=[final_tool],
66
- instructions="""
67
- Ты эксперт по обнаружению аномалий в системных логах. Твоя задача - анализировать структурированные логи и находить проблемные паттерны.
68
-
69
- Ищи следующие типы аномалий:
70
- 1. BURST_ERRORS - всплески ошибок (5+ ошибок за короткий промежуток времени)
71
- 2. REPEATED_ERRORS - повторяющиеся ошибки (одна и та же ошибка 3+ раза)
72
- 3. ERROR_BEFORE_CRASH - ошибки перед крашем системы (критические ошибки в конце логов)
73
- 4. TEMPORAL_SPIKE - временные всплески событий (превышение среднего в 2 раза)
74
- 5. REPEATED_STACK_TRACES - повторяющиеся stack traces
75
-
76
- Для каждой аномалии укажи:
77
- - type: тип аномалии
78
- - severity: CRITICAL, HIGH, MEDIUM, LOW
79
- - description: описание проблемы
80
- - count: количество вхождений (если применимо)
81
- - error_message: пример сообщения об ошибке (если есть)
82
- - metadata: дополнительная информация (affected_lines и т.д.)
83
-
84
- Также вычисли статистику:
85
- - total: общее количество аномалий
86
- - by_type: распределение по типам
87
- - by_severity: распределение по серьёзности
88
-
89
- Ответ строго верни в JSON через final_answer в следующем формате:
90
- {
91
- "anomalies": [{"type": "str", "severity": "str", "description": "str", "count": int|null, "error_message": "str|null", "metadata": object|null}, ...],
92
- "statistics": {
93
- "total": int,
94
- "by_type": {"TYPE": count, ...},
95
- "by_severity": {"SEVERITY": count, ...}
96
- },
97
- "severity_summary": {"CRITICAL": int, "HIGH": int, "MEDIUM": int, "LOW": int}
98
- }
99
- """,
100
- name="AnomalyDetectionAgent",
101
- max_steps=10,
102
- )
103
-
104
- # Агент 3: Анализ первопричин и рекомендации
105
- rca_agent = ToolCallingAgent(
106
- model=model,
107
- tools=[final_tool],
108
- instructions="""
109
- Ты эксперт по анализу первопричин и формированию ре��омендаций. Твоя задача - интерпретировать обнаруженные аномалии и предлагать конкретные решения.
110
-
111
- Для каждой группы аномалий определи:
112
- - possible_causes: возможные первопричины проблемы
113
- - recommendations: рекомендации по устранению с приоритетами (CRITICAL, HIGH, MEDIUM, LOW)
114
- - actions: конкретные действия для решения проблемы
115
-
116
- Также сформулируй общие рекомендации для улучшения системы мониторинга и предотвращения подобных проблем.
117
-
118
- Ответ строго верни в JSON через final_answer в следующем формате:
119
- {
120
- "analysis": {
121
- "root_causes": ["причина1", "причина2", ...],
122
- "details": [{
123
- "anomaly_type": "str",
124
- "severity": "str",
125
- "description": "str",
126
- "possible_causes": ["причина1", ...]
127
- }, ...]
128
- },
129
- "recommendations": [{
130
- "priority": "str",
131
- "text": "str",
132
- "actions": ["действие1", "действие2", ...]
133
- }, ...],
134
- "general_recommendations": ["рекомендация1", "рекомендация2", ...]
135
- }
136
- """,
137
- name="RootCauseAgent",
138
- max_steps=10,
139
- )
140
-
141
- # Pipeline шаг 1 — парсинг логов
142
- def run_parser_agent(raw_logs: str):
143
- """Парсит сырые логи в структурированный формат."""
144
- if not raw_logs or not raw_logs.strip():
145
- return {
146
- "events": [],
147
- "errors": [],
148
- "warnings": [],
149
- "statistics": {
150
- "total_lines": 0,
151
- "parsed_events": 0,
152
- "errors": 0,
153
- "warnings": 0,
154
- "info_messages": 0,
155
- "event_types": {},
156
- "time_range": None
157
- }
158
- }
159
-
160
- result = run_agent_safely(parser_agent, task=raw_logs)
161
- validate_schema(result, parser_schema)
162
- return result
163
-
164
- # Pipeline шаг 2 — обнаружение аномалий
165
- def run_anomaly_agent(structured_data: dict):
166
- """Обнаруживает аномалии в структурированных логах."""
167
- input_data = json.dumps(structured_data, ensure_ascii=False, indent=2)
168
- result = run_agent_safely(anomaly_agent, task=input_data)
169
- validate_schema(result, anomaly_schema)
170
- return result
171
-
172
- # Pipeline шаг 3 — анализ первопричин и рекомендации
173
- def run_rca_agent(anomaly_report: dict):
174
- """Анализирует первопричины и генерирует рекомендации."""
175
- input_data = json.dumps(anomaly_report, ensure_ascii=False, indent=2)
176
- result = run_agent_safely(rca_agent, task=input_data)
177
- validate_schema(result, rca_schema)
178
- return result
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
agents/__pycache__/__init__.cpython-314.pyc CHANGED
Binary files a/agents/__pycache__/__init__.cpython-314.pyc and b/agents/__pycache__/__init__.cpython-314.pyc differ
 
schemas/__pycache__/schemas.cpython-314.pyc CHANGED
Binary files a/schemas/__pycache__/schemas.cpython-314.pyc and b/schemas/__pycache__/schemas.cpython-314.pyc differ
 
schemas/schemas.py CHANGED
@@ -20,11 +20,11 @@ parser_schema = {
20
  },
21
  "errors": {
22
  "type": "array",
23
- "items": {"type": "object"}
24
  },
25
  "warnings": {
26
  "type": "array",
27
- "items": {"type": "object"}
28
  },
29
  "statistics": {
30
  "type": "object",
 
20
  },
21
  "errors": {
22
  "type": "array",
23
+ "items": {"type": ["object", "string"]}
24
  },
25
  "warnings": {
26
  "type": "array",
27
+ "items": {"type": ["object", "string"]}
28
  },
29
  "statistics": {
30
  "type": "object",