Перейти к содержанию

Генерация тестовых кейсов

Eval AI Library включает мощный генератор тестовых кейсов, который создаёт оценочные датасеты из ваших документов. Поддерживается более 15 форматов документов, включая PDF, DOCX, CSV, JSON, HTML и изображения с OCR. Это позволяет быстро создать набор тестов для оценки RAG-системы на основе вашей базы знаний.

Поддерживаемые форматы

Категория Форматы
Текст .txt, .md, .rtf, .xml, .json, .yaml, .html
Офисные .pdf, .docx, .docm, .xlsx, .pptx
Данные .csv, .tsv
Изображения .png, .jpg, .jpeg (с OCR через Tesseract)

Быстрый старт

Простейший пример генерации тестовых кейсов из PDF-документа:

from eval_lib import DatasetGenerator

generator = DatasetGenerator(
    model="gpt-4o",
    input_format="question",
    expected_output_format="answer",
    agent_description="You are a helpful assistant that answers questions about machine learning.",
    max_rows=20,
    language="en"
)

test_cases = generator.generate(file_path="./knowledge_base.pdf")

# Returns a list of EvalTestCase objects
for tc in test_cases:
    print(f"Q: {tc.input}")
    print(f"A: {tc.expected_output}")
    print(f"Context: {tc.retrieval_context[:1]}")
    print("---")

Генератор автоматически разбивает документ на чанки, генерирует вопросы на основе содержимого и формирует ожидаемые ответы.

Параметры

Параметр Тип По умолчанию Описание
model str обязательный LLM для генерации
input_format str обязательный Формат входных данных (например, "question")
expected_output_format str обязательный Формат ожидаемого ответа (например, "answer")
agent_description str None Системная роль/контекст для генерации
test_types list[str] None Типы генерируемых тестовых кейсов
question_length str "mixed" "short", "medium", "long", "mixed"
question_openness str "mixed" "open", "closed", "mixed"
chunk_size int 1024 Размер чанков документа (в символах)
chunk_overlap int 100 Перекрытие между чанками
max_rows int 10 Количество генерируемых тестовых кейсов
temperature float 0.3 Температура генерации
trap_density float 0.1 Доля ловушечных/состязательных вопросов
language str "en" Язык генерируемых тестовых кейсов
embedding_model str "openai:text-embedding-3-small" Модель для семантической схожести
relevance_margin float 1.5 Порог релевантности контекста

Загрузка документов

Вы также можете использовать загрузчик документов напрямую для пользовательских пайплайнов:

from eval_lib import DocumentLoader

# Load documents
docs = DocumentLoader.load_documents("./data/report.pdf")

# Chunk for RAG evaluation
chunks = DocumentLoader.chunk_documents(docs, chunk_size=1024, overlap=100)

Продвинутые примеры

Генерация из нескольких источников

Вы можете генерировать тестовые кейсы из документов разных форматов и объединять их:

generator = DatasetGenerator(
    model="gpt-4o",
    input_format="technical question",
    expected_output_format="detailed technical answer",
    max_rows=50,
    language="en"
)

# Generate from different document types
test_cases_pdf = generator.generate(file_path="./docs/api_reference.pdf")
test_cases_md = generator.generate(file_path="./docs/user_guide.md")
test_cases_csv = generator.generate(file_path="./data/faq.csv")

all_test_cases = test_cases_pdf + test_cases_md + test_cases_csv

Настройка типов вопросов

Параметры question_length и question_openness позволяют контролировать характер генерируемых вопросов:

# Short, factual questions
generator = DatasetGenerator(
    model="gpt-4o",
    input_format="question",
    expected_output_format="brief factual answer",
    question_length="short",
    question_openness="closed",
    max_rows=30
)

# Open-ended, detailed questions
generator = DatasetGenerator(
    model="gpt-4o",
    input_format="question",
    expected_output_format="comprehensive answer with examples",
    question_length="long",
    question_openness="open",
    max_rows=15
)

С ловушечными вопросами (Trap Questions)

Ловушечные вопросы проверяют способность AI ответить "Я не знаю", когда ответа нет в контексте. Это важно для оценки того, не галлюцинирует ли модель:

generator = DatasetGenerator(
    model="gpt-4o",
    input_format="question",
    expected_output_format="answer",
    trap_density=0.2,  # 20% of questions will be traps
    max_rows=50
)

Мультиязычная генерация

Генератор поддерживает создание тестовых кейсов на разных языках:

# Russian
generator = DatasetGenerator(
    model="gpt-4o",
    input_format="вопрос",
    expected_output_format="подробный ответ",
    language="ru",
    max_rows=20
)

# Spanish
generator = DatasetGenerator(
    model="gpt-4o",
    input_format="pregunta",
    expected_output_format="respuesta detallada",
    language="es",
    max_rows=20
)

Использование сгенерированных тестовых кейсов

Сгенерированные тестовые кейсы можно сразу передать в функцию оценки:

from eval_lib import evaluate, AnswerRelevancyMetric, FaithfulnessMetric

# Generate test cases
test_cases = generator.generate(file_path="./knowledge_base.pdf")

# Evaluate your RAG system
metrics = [
    AnswerRelevancyMetric(model="gpt-4o", threshold=0.7),
    FaithfulnessMetric(model="gpt-4o", threshold=0.7),
]

results = asyncio.run(evaluate(test_cases, metrics))

OCR для изображений

Для документов на основе изображений убедитесь, что установлен Tesseract:

# Extracts text from images using OCR
test_cases = generator.generate(file_path="./scanned_document.png")

Инструкции по установке Tesseract см. в разделе Установка.