JSON-схема¶
JsonSchemaMetric проверяет, что фактический вывод является валидным JSON и соответствует указанной JSON-схеме.
Как это работает¶
- Парсит фактический вывод как JSON
- Валидирует разобранный JSON по предоставленной схеме с помощью библиотеки
jsonschema - Возвращает
1.0, если валидация пройдена,0.0, если вывод не является валидным JSON или не соответствует схеме
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
threshold | float | 1.0 | Минимальный балл для прохождения |
schema | dict | обязательный | Определение JSON-схемы (соответствует спецификации JSON Schema) |
Обязательные поля¶
| Поле | Обязательно |
|---|---|
input | Нет |
actual_output | Да (должен быть валидным JSON) |
expected_output | Нет |
Зависимости¶
Эта метрика требует библиотеку jsonschema:
Использование¶
from eval_lib.metrics import JsonSchemaMetric
from eval_lib.test_case import EvalTestCase
import asyncio
test_case = EvalTestCase(
input="Верните информацию о пользователе в формате JSON",
actual_output='{"name": "Алиса", "age": 30, "email": "alice@example.com"}'
)
metric = JsonSchemaMetric(
threshold=1.0,
schema={
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"email": {"type": "string", "format": "email"}
},
"required": ["name", "age", "email"]
}
)
result = asyncio.run(metric.evaluate(test_case))
print(result.score) # 1.0
Примеры сценариев¶
Прошел (1.0)¶
metric = JsonSchemaMetric(schema={
"type": "array",
"items": {"type": "string"},
"minItems": 1
})
EvalTestCase(
input="Верните список цветов",
actual_output='["красный", "зеленый", "синий"]'
)
# Валидный JSON-массив строк с хотя бы одним элементом
Не прошел (0.0) — невалидный JSON¶
metric = JsonSchemaMetric(schema={"type": "object"})
EvalTestCase(
input="Верните JSON",
actual_output="Это не JSON"
)
# Вывод не может быть разобран как JSON