Генерация тестовых кейсов¶
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 см. в разделе Установка.