Система валидации
Система валидации
Заголовок раздела «Система валидации»Moira выполняет всестороннюю валидацию на нескольких уровнях для обеспечения целостности workflow и корректности ответов агентов.
Уровни валидации
Заголовок раздела «Уровни валидации»1. Валидация JSON Schema
Заголовок раздела «1. Валидация JSON Schema»Workflow валидируются против определения JSON Schema:
- Валидация структуры против схемы workflow
- Проверка обязательных полей (id, metadata, nodes)
- Валидация типов для всех свойств
- Валидация enum для типов нод
2. Структурная валидация
Заголовок раздела «2. Структурная валидация»Структура графа анализируется на корректность:
- Связность нод - Все connections указывают на валидные ноды
- Обязательные ноды - Нода start должна существовать
- Циклические зависимости - Циклы обнаруживаются и помечаются
- Недостижимые ноды - Ноды не связанные от start
3. Валидация ввода
Заголовок раздела «3. Валидация ввода»Ответы агентов валидируются против inputSchema:
- Валидация JSON Schema на основе AJV
- Проверка типов для полей ответа
- Валидация обязательных полей
- Валидация pattern и format
Результаты валидации
Заголовок раздела «Результаты валидации»Валидация возвращает структурированные результаты:
{ valid: boolean; errors: ValidationError[]; warnings: ValidationWarning[];}Типы ошибок
Заголовок раздела «Типы ошибок»| Тип | Описание | Пример |
|---|---|---|
schema | Невалидная JSON структура | Отсутствует обязательное поле |
structure | Невалидная структура графа | Orphan нода |
connection | Невалидное соединение | Указывает на несуществующую ноду |
reference | Невалидная ссылка | Невалидный subgraph ID |
Типы предупреждений
Заголовок раздела «Типы предупреждений»| Тип | Описание | Порог |
|---|---|---|
performance | Большой workflow | >20 agent-directive нод |
complexity | Сложные условия | Глубоко вложенные условия |
context | Большой контекст | >100KB размер контекста |
Примеры валидации
Заголовок раздела «Примеры валидации»Валидный Workflow
Заголовок раздела «Валидный Workflow»{ "id": "valid-workflow", "metadata": { "name": "Valid Workflow", "version": "1.0.0", "description": "A valid workflow" }, "nodes": [ { "id": "start", "type": "start", "connections": { "default": "task" } }, { "id": "task", "type": "agent-directive", "directive": "...", "completionCondition": "...", "connections": { "success": "end" } }, { "id": "end", "type": "end" } ]}Результат:
{ "valid": true, "errors": [], "warnings": [] }Невалидный Workflow - Отсутствует соединение
Заголовок раздела «Невалидный Workflow - Отсутствует соединение»{ "nodes": [ { "id": "start", "type": "start", "connections": { "default": "missing" } }, { "id": "end", "type": "end" } ]}Результат:
{ "valid": false, "errors": [ { "type": "connection", "message": "Node 'start' references non-existent node 'missing'", "nodeId": "start" } ]}Workflow с предупреждением
Заголовок раздела «Workflow с предупреждением»Большой workflow вызывает предупреждение о производительности:
{ "valid": true, "errors": [], "warnings": [ { "type": "performance", "message": "Workflow has 25 agent-directive nodes. Consider breaking into subgraphs.", "count": 25 } ]}Валидация Input Schema
Заголовок раздела «Валидация Input Schema»Ответы агентов валидируются против inputSchema определенной на agent-directive нодах.
Ноды без inputSchema
Заголовок раздела «Ноды без inputSchema»Ноды без inputSchema требуют пустой ввод от агента. Непустые ответы отклоняются:
// Нода без inputSchema{ "id": "task", "type": "agent-directive", "directive": "..." }
// Валидно: пустой ответ{}
// Невалидно: непустой ответ{ "result": "done" } // Отклоняется с ошибкой валидацииОпределение схемы
Заголовок раздела «Определение схемы»{ "type": "agent-directive", "inputSchema": { "type": "object", "properties": { "result": { "type": "string" }, "confidence": { "type": "number", "minimum": 0, "maximum": 10 } }, "required": ["result"] }}Валидный ответ
Заголовок раздела «Валидный ответ»{ "result": "completed", "confidence": 8 }Невалидный ответ
Заголовок раздела «Невалидный ответ»{ "confidence": "high" }Ошибка:
{ "valid": false, "errors": [ { "field": "result", "message": "Required field missing" }, { "field": "confidence", "message": "Expected number, got string" } ]}Лучшие практики
Заголовок раздела «Лучшие практики»- Всегда включайте inputSchema - Валидируйте ответы агентов для консистентных данных
- Держите workflow сфокусированными - Разбивайте большие workflow на subgraphs
- Тестируйте валидацию - Используйте
manage_workflowсincludeValidation: true - Обрабатывайте ошибки gracefully - Определяйте error connections для ошибок валидации